UNPKG

rsshub

Version:
90 lines (88 loc) 3.09 kB
import "./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 got_default } from "./got-KxxWdaxq.mjs"; import { t as invalid_parameter_default } from "./invalid-parameter-rr4AgGpp.mjs"; import { load } from "cheerio"; //#region lib/routes/zjol/paper.ts const route = { path: "/paper/:id?", categories: ["traditional-media"], example: "/zjol/paper/zjrb", parameters: { id: "报纸 id,见下表,默认为 `zjrb`,即浙江日报" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, name: "浙报集团系列报刊", maintainers: ["nczitzk"], handler, description: `| 浙江日报 | 钱江晚报 | 美术报 | 浙江老年报 | 浙江法制报 | 江南游报 | | -------- | -------- | ------ | ---------- | ---------- | -------- | | zjrb | qjwb | msb | zjlnb | zjfzb | jnyb |` }; async function handler(ctx) { const id = ctx.req.param("id") ?? "zjrb"; const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 100; if (![ "zjrb", "qjwb", "msb", "zjlnb", "zjfzb", "jnyb" ].includes(id)) throw new invalid_parameter_default("id not allowed"); const query = id === "jnyb" ? "map[name=\"PagePicMap\"] area" : "ul.main-ed-articlenav-list li a"; const rootUrl = id === "qjwb" ? "http://qjwb.thehour.cn" : `https://${id}.zjol.com.cn`; let currentUrl = `${rootUrl}/paperindex.htm`; let response = await got_default({ method: "get", url: currentUrl }); const url = response.data.match(/URL=(.*)"/)[1]; const pubDate = parseDate(url.match(/(\d{4}-\d{2}\/\d{2})/)[1], "YYYY-MM/DD"); currentUrl = `${rootUrl}/${url.replace(`/${url.split("/").pop()}`, "")}`; response = await got_default({ method: "get", url: `${rootUrl}/${url}` }); const $ = load(response.data); let items = $(query).toArray().map((a) => `${currentUrl}/${$(a).attr("href")}`); await Promise.all($("#pageLink").slice(1).toArray().map((p) => `${currentUrl}/${$(p).attr("href")}`).map(async (p) => { const page = load((await got_default({ method: "get", url: p })).data); items.push(...page(query).toArray().map((a) => `${currentUrl}/${page(a).attr("href")}`)); })); items = await Promise.all(items.filter((a) => id === "jnyb" ? /\?div=1$/.test(a) : true).slice(0, limit).map((link) => cache_default.tryGet(link, async () => { const content = load((await got_default({ method: "get", url: link })).data); const title = content(".main-article-title").text(); content(".main-article-alltitle").remove(); return { title, pubDate, link: link.split("?")[0], description: content(".main-article-content").html() }; }))); return { title: $("title").text(), link: rootUrl, item: items }; } //#endregion export { route };