UNPKG

rsshub

Version:
118 lines (115 loc) 4.78 kB
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./helpers-DxBp0Pty.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { t as timezone } from "./timezone-D8cuwzTY.mjs"; import path from "node:path"; import { load } from "cheerio"; //#region lib/routes/rsc/journal.ts init_esm_shims(); const route = { path: "/journal/:id/:category?", categories: ["journal"], example: "/rsc/journal/ta", parameters: { id: "Journal id, can be found in URL", category: "Category, see below, All Recent Articles by default" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, name: "Journal", maintainers: ["nczitzk"], handler, description: `::: tip All journals at [Current journals](https://pubs.rsc.org/en/journals) ::: | All Recent Articles | Advance Articles | | ------------------- | ---------------- | | allrecentarticles | advancearticles |` }; async function handler(ctx) { const { id, category = "allrecentarticles" } = ctx.req.param(); const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit"), 10) : 50; const rootUrl = "https://pubs.rsc.org"; const currentUrl = new URL(`en/journals/journalissues/${id}#!recentarticles`, rootUrl).href; const apiUrl = new URL("en/journals/getrecentarticles", rootUrl).href; const { data: response } = await got_default.post(apiUrl, { form: { name: id, pageno: 1, iscontentavailable: true, category } }); let $ = load(response); $("div.capsule__article-image").each(function() { $(this).replaceWith(art(path.join(__dirname, "templates/image-8ef00cc6.art"), { image: $(this).find("img").prop("data-original") })); }); let items = $("div.capsule--article").slice(0, limit).toArray().map((item) => { item = $(item); const authors = item.find("div.article__authors").text().trim(); const doi = item.find("div.text--small span a").text().split(/org\//).pop(); const isOpenAccess = !!item.find("span.capsule__context img.ver-t").prop("alt"); const isManuscript = !!item.find("span.capsule__context span").text(); const enclosureUrl = new URL(item.find("div.capsule__action--buttons a").prop("href").split("?").pop(), rootUrl).href; return { title: item.find("h3.capsule__title").text(), link: new URL(item.find("a.capsule__action").prop("href"), rootUrl).href, description: item.find("div.capsule__column-wrapper").html(), author: authors, category: [ item.find("span.capsule__context").text().trim(), ...authors.split(/,\s|and\s/), isOpenAccess || isManuscript ], guid: `rsc-${doi}`, pubDate: timezone(parseDate(item.find("div.text--small span.block").text().split(/on\s/).pop(), "DD MMM YYYY"), 1), enclosure_url: enclosureUrl, enclosure_type: enclosureUrl ? "application/pdf" : void 0, doi }; }); items = await Promise.all(items.map((item) => cache_default.tryGet(item.guid, async () => { if (item.category.pop()) { const { data: detailResponse$1 } = await got_default(item.link.replace(/\/articlelanding\//, "/articlehtml/")); const content = load(detailResponse$1); content("#pnlArticleAccess, #pnlArticleContent").remove(); content("div.abstract, div.article-abstract__heading").prevAll().remove(); item.title = content("meta[name=\"DC.title\"]").prop("content"); item.description = content("#wrapper, article.article-control").html(); item.pubDate = timezone(parseDate(content("meta[name=\"citation_online_date\"]").prop("content"), "YYYY/MM/DD"), 1); item.enclosure_url = content("meta[name=\"citation_pdf_url\"]").prop("content"); item.enclosure_type = item.enclosure_url ? "application/pdf" : void 0; item.doi = content("meta[name=\"DC.Identifier\"]").prop("content"); } return item; }))); const { data: detailResponse } = await got_default(currentUrl); $ = load(detailResponse); const icon = new URL($("link[rel=\"apple-touch-icon\"]").prop("href"), rootUrl).href; return { item: items, title: $("meta[name=\"citation_title\"]").prop("content"), link: currentUrl, description: $("meta[property=\"og:description\"]").prop("content"), language: "en", image: new URL($("div.page-head__cell--image span img").prop("src"), rootUrl).href, icon, logo: icon, subtitle: $("title").text(), author: $("meta[name=\"citation_journal_abbrev\"]").prop("content"), allowEmpty: true }; } //#endregion export { route };