UNPKG

rsshub

Version:
72 lines (70 loc) 2.21 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 timezone } from "./timezone-D8cuwzTY.mjs"; import { load } from "cheerio"; //#region lib/routes/hameln/chapter.ts const route = { path: "/chapter/:id", categories: ["reading"], example: "/hameln/chapter/264928", parameters: { id: "Novel id, can be found in URL" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["syosetu.org/novel/:id"] }], name: "chapter", maintainers: ["huangliangshusheng"], handler, description: `Eg: [https://syosetu.org/novel/264928](https://syosetu.org/novel/264928)` }; async function handler(ctx) { const id = ctx.req.param("id"); const limit = Number.parseInt(ctx.req.query("limit")) || 5; const link = `https://syosetu.org/novel/${id}`; const $ = load(await get(link)); const title = $("span[itemprop=\"name\"]").text(); const description = $("div.ss:nth-child(2)").text(); const chapter_list = $("tr[bgcolor]").toArray().map((chapter) => { const $_chapter = $(chapter); const chapter_link = $_chapter.find("a"); return { title: chapter_link.text(), link: chapter_link.attr("href"), pubDate: timezone(parseDate($_chapter.find("nobr").text(), "YYYYMMDD HH:mm"), 9) }; }).toSorted((a, b) => a.pubDate <= b.pubDate ? 1 : -1).slice(0, limit); return { title, description, link, language: "ja", item: await Promise.all(chapter_list.map((chapter) => { chapter.link = `${link}/${chapter.link}`; return cache_default.tryGet(chapter.link, async () => { chapter.description = load(await get(chapter.link))("#honbun").html(); return chapter; }); })) }; } const get = async (url) => { return (await got_default({ method: "get", url, headers: { cookie: "over18=off" } })).data; }; //#endregion export { route };