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