rsshub
Version:
Make RSS Great Again!
83 lines (82 loc) • 3.2 kB
JavaScript
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 };