UNPKG

rsshub

Version:
91 lines (89 loc) 3.07 kB
import "./dist-Bog6z_OM.mjs"; import "./config-MQ-7ebJ_.mjs"; import { t as logger_default } from "./logger-C4avouvV.mjs"; import "./ofetch-DKl_Ma9g.mjs"; import { t as parseDate } from "./parse-date-r5WDWHno.mjs"; import "./is-worker-DESPicPc.mjs"; import { t as cache_default } from "./cache-SV6W5EPy.mjs"; import "./helpers-Bo4JQYdN.mjs"; import { t as got_default } from "./got-CO-ndVl2.mjs"; import { t as rss_parser_default } from "./rss-parser-Cnh4NKwh.mjs"; import "./desc-2ze3qIku.mjs"; import { t as ProcessItem } from "./utils-B1QU-H7p.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 = 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 }; } } 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 $ = load(res.data); return { code: $(".yearissuepage").find("dl").first().find("dd").find("a").first().attr("value"), date: parseDate($(".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 };