UNPKG

rsshub

Version:
91 lines (89 loc) 3.08 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import { t as logger_default } from "./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 "./render-BQo6B4tL.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { t as rss_parser_default } from "./rss-parser-Dtop7M8f.mjs"; import { t as ProcessItem } from "./utils-Hh0xvMyh.mjs"; import { load } from "cheerio"; //#region lib/routes/cnki/journals.ts const rootUrl = "https://navi.cnki.net"; const route = { path: "/journals/:name", categories: ["journal"], example: "/cnki/journals/LKGP", parameters: { name: "期刊缩写,可以在网址中得到" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["navi.cnki.net/knavi/journals/:name/detail"] }], name: "期刊", maintainers: [ "Fatpandac", "Derekmini", "pseudoyu" ], handler }; async function handler(ctx) { const name = ctx.req.param("name"); const rssUrl = `https://rss.cnki.net/kns/rss.aspx?Journal=${name}&Virtual=knavi`; const rssResponse = await got_default.get(rssUrl); try { const feed = await rss_parser_default.parseString(rssResponse.data); if (feed.items && feed.items.length !== 0) { const items$1 = feed.items.map((item) => ({ title: item.title, description: item.content, pubDate: parseDate(item.pubDate), link: item.link, author: item.author })); return { title: feed.title, link: feed.link, description: feed.description, item: items$1 }; } } catch (error) { logger_default.error(error); } const journalUrl = `${rootUrl}/knavi/journals/${name}/detail`; const title = await got_default.get(journalUrl).then((res) => load(res.data)("head > title").text()); const yearListUrl = `${rootUrl}/knavi/journals/${name}/yearList?pIdx=0`; const { code, date } = await got_default.get(yearListUrl).then((res) => { const $$1 = load(res.data); return { code: $$1(".yearissuepage").find("dl").first().find("dd").find("a").first().attr("value"), date: parseDate($$1(".yearissuepage").find("dl").first().find("dd").find("a").first().attr("id").replace("yq", ""), "YYYYMM") }; }); const yearIssueUrl = `${rootUrl}/knavi/journals/${name}/papers?yearIssue=${code}&pageIdx=0&pcode=CJFD,CCJD`; const $ = load((await got_default.post(yearIssueUrl)).data); const list = $("dd").toArray().map((publication) => { return { title: $(publication).find("a").first().text(), link: `https://cnki.net/kcms/detail/detail.aspx?filename=${$(publication).find("b").attr("id")}&dbcode=CJFD`, pubDate: date }; }); const items = await Promise.all(list.map((item) => cache_default.tryGet(item.link, () => ProcessItem(item)))); return { title: String(title), link: journalUrl, item: items }; } //#endregion export { route };