UNPKG

rsshub

Version:
86 lines (84 loc) 2.85 kB
import "./esm-shims-CzJ_djXG.mjs"; import { t as config } from "./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 { r as getSubPath } from "./common-utils-vrWQFAEk.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { t as timezone } from "./timezone-D8cuwzTY.mjs"; import { t as config_not_found_default } from "./config-not-found-Dyp3RlZZ.mjs"; import { load } from "cheerio"; import iconv from "iconv-lite"; //#region lib/routes/biquge/index.ts const allowHost = new Set([ "www.xbiquwx.la", "www.biqu5200.net", "www.xbiquge.so", "www.biqugeu.net", "www.b520.cc", "www.ahfgb.com", "www.ibiquge.la", "www.biquge.tv", "www.bswtan.com", "www.biquge.co", "www.bqzhh.com", "www.biqugse.com", "www.ibiquge.info", "www.ishuquge.com", "www.mayiwxw.com" ]); const route = { path: "*", name: "Unknown", maintainers: [], handler }; async function handler(ctx) { const rootUrl = getSubPath(ctx).split("/").slice(1, 4).join("/"); const currentUrl = getSubPath(ctx).slice(1); if (!config.feature.allow_user_supply_unsafe_domain && !allowHost.has(new URL(rootUrl).hostname)) throw new config_not_found_default(`This RSS is disabled unless 'ALLOW_USER_SUPPLY_UNSAFE_DOMAIN' is set to 'true'.`); const response = await got_default({ method: "get", url: currentUrl, responseType: "buffer", https: { rejectUnauthorized: false } }); const encoding = /charset="?'?gb/i.test(response.data.toString()) ? "gbk" : "utf-8"; const $ = load(iconv.decode(response.data, encoding)); const author = $("meta[property=\"og:novel:author\"]").attr("content"); const pubDate = timezone(parseDate($("meta[property=\"og:novel:update_time\"]").attr("content")), 8); let items = $("dl dd a").toArray().toReversed().slice(0, ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 1).map((item) => { item = $(item); let link = ""; const url = item.attr("href"); if (url.startsWith("http")) link = url; else if (/^\//.test(url)) link = `${rootUrl}${url}`; else link = `${currentUrl}/${url}`; return { title: item.text(), link, author, pubDate }; }); items = await Promise.all(items.map((item) => cache_default.tryGet(item.link, async () => { const detailResponse = await got_default({ method: "get", url: item.link, responseType: "buffer", https: { rejectUnauthorized: false } }); item.description = load(iconv.decode(detailResponse.data, encoding))("#content").html(); return item; }))); return { title: `${$("meta[property=\"og:title\"]").attr("content")} - 笔趣阁`, link: currentUrl, item: items }; } //#endregion export { route };