UNPKG

rsshub

Version:
76 lines (74 loc) 2.71 kB
import "./dist-Bog6z_OM.mjs"; import { t as config } from "./config-MQ-7ebJ_.mjs"; import "./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 { r as getSubPath } from "./common-utils-Cz5bFBus.mjs"; import { t as got_default } from "./got-CO-ndVl2.mjs"; import { t as timezone } from "./timezone-CA9Huotp.mjs"; import { t as config_not_found_default } from "./config-not-found-zoFMPvbz.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(currentUrl, { responseType: "buffer" }); 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(item.link, { responseType: "buffer" }); 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 };