UNPKG

rsshub

Version:
83 lines (82 loc) 3.2 kB
import { t as logger } from "./logger-BKy98Y8B.mjs"; import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs"; import { t as cache_default } from "./cache-BkqOokyU.mjs"; import { n as outPlaywright } from "./playwright-o20DiLNh.mjs"; import { n as setCookies, t as getCookies } from "./playwright-utils-BWuSHbXD.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 context = await outPlaywright(); const page = await context.newPage(); await page.route("**/*", (route) => { route.request().resourceType() === "document" ? route.continue() : route.abort(); }); logger.http(`Requesting ${link}`); await page.goto(link, { waitUntil: "domcontentloaded" }); const response = await page.evaluate(() => document.documentElement.getHTML()); 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")}`, title: "" })); const items = await Promise.all(list.map((item) => cache_default.tryGet(item.link, async () => { const page = await context.newPage(); await setCookies(page, cookies, "journals.uchicago.edu"); await page.route("**/*", (route) => { route.request().resourceType() === "document" ? route.continue() : route.abort(); }); logger.http(`Requesting ${item.link}`); await page.goto(item.link, { waitUntil: "domcontentloaded", referer: link }); const response = await page.evaluate(() => document.documentElement.getHTML()); await page.close(); const $ = load(response); item.title = $("head title").text(); item.pubDate = parseDate($("head meta[name=\"dc.Date\"]").attr("content")); item.doi = $("head meta[scheme=\"doi\"]").attr("content"); item.author = $(".author-name span").toArray().map((author) => $(author).text()).join(", "); $(".figure__image").each((_, elem) => { if (!elem.attribs["data-lg-src"]) return; $(elem).attr("src", `${baseUrl}${elem.attribs["data-lg-src"]}`); delete elem.attribs["data-lg-src"]; }); item.description = $(".article__body").html(); return item; }))); await context.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 };