rsshub
Version:
Make RSS Great Again!
86 lines (84 loc) • 3.38 kB
JavaScript
import "./config-C37vj7VH.mjs";
import { t as logger_default } from "./logger-Czu8UMNd.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import { t as cache_default } from "./cache-Bo__VnGm.mjs";
import "./proxy-Db7uGcYb.mjs";
import { n as puppeteer_default } from "./puppeteer-DGmvuGvT.mjs";
import { n as setCookies, t as getCookies } from "./puppeteer-utils-BK3JC9qW.mjs";
import { load } from "cheerio";
//#region lib/routes/uchicago/current.ts
const route = {
path: "/journals/current/:journal",
categories: ["journal"],
example: "/uchicago/journals/current/jpe",
parameters: { journal: "Journal id, can be found in URL. [Browse journals by title](https://www.journals.uchicago.edu/action/showPublications)" },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: true,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
radar: [{ source: ["journals.uchicago.edu/toc/:journal/current", "journals.uchicago.edu/journal/:journal"] }],
name: "Current Issue",
maintainers: ["TonyRL"],
handler
};
async function handler(ctx) {
const journal = ctx.req.param("journal");
const baseUrl = "https://www.journals.uchicago.edu";
const link = `${baseUrl}/toc/${journal}/current`;
const browser = await puppeteer_default();
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on("request", (request) => {
request.resourceType() === "document" ? request.continue() : request.abort();
});
logger_default.http(`Requesting ${link}`);
await page.goto(link, { waitUntil: "domcontentloaded" });
const response = await page.evaluate(() => document.documentElement.innerHTML);
const cookies = await getCookies(page);
await page.close();
const $ = load(response);
const list = $(".issue-item__title").toArray().map((item) => ({ link: `${baseUrl}${$(item).find("a").attr("href")}` }));
const items = await Promise.all(list.map((item) => cache_default.tryGet(item.link, async () => {
const page$1 = await browser.newPage();
await setCookies(page$1, cookies, "journals.uchicago.edu");
await page$1.setRequestInterception(true);
page$1.on("request", (request) => {
request.resourceType() === "document" ? request.continue() : request.abort();
});
logger_default.http(`Requesting ${item.link}`);
await page$1.goto(item.link, {
waitUntil: "domcontentloaded",
referer: link
});
const response$1 = await page$1.evaluate(() => document.documentElement.innerHTML);
await page$1.close();
const $$1 = load(response$1);
item.title = $$1("head title").text();
item.pubDate = parseDate($$1("head meta[name=\"dc.Date\"]").attr("content"));
item.doi = $$1("head meta[scheme=\"doi\"]").attr("content");
item.author = $$1(".author-name span").toArray().map((author) => $$1(author).text()).join(", ");
$$1(".figure__image").each((_, elem) => {
if (elem.attribs["data-lg-src"]) {
$$1(elem).attr("src", `${baseUrl}${elem.attribs["data-lg-src"]}`);
delete elem.attribs["data-lg-src"];
}
});
item.description = $$1(".article__body").html();
return item;
})));
await browser.close();
return {
title: $("head title").text(),
description: $(".jumbotron-journal-info").text(),
link,
image: $("head meta[property=\"og:image\"]").attr("content"),
item: items,
language: $("html").attr("lang")
};
}
//#endregion
export { route };