UNPKG

rsshub

Version:
82 lines (80 loc) 2.52 kB
import "./dist-Bog6z_OM.mjs"; import "./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"; //#region lib/routes/bangumi.moe/index.ts const route = { path: "/*", categories: ["anime"], radar: [{ source: ["bangumi.moe/"] }], name: "Latest", example: "/bangumi.moe", maintainers: ["nczitzk"], handler, url: "bangumi.moe/" }; async function handler(ctx) { const isLatest = getSubPath(ctx) === "/"; const rootUrl = "https://bangumi.moe"; let response; let tag_id = []; if (isLatest) response = await got_default({ method: "get", url: `${rootUrl}/api/torrent/latest` }); else { const tagUrl = `${rootUrl}/api/tag/search`; const torrentUrl = `${rootUrl}/api/torrent/search`; const params = getSubPath(ctx).split("/").slice(2); tag_id = await Promise.all(params.map((param) => cache_default.tryGet(param, async () => { const paramResponse = await got_default({ method: "post", url: tagUrl, json: { name: decodeURIComponent(param), keywords: true, multi: true } }); return paramResponse.data.found ? paramResponse.data.tag.map((tag) => tag._id)[0] : ""; }))); response = await got_default({ method: "post", url: torrentUrl, json: { tag_id } }); } let items = response.data.torrents?.slice(0, ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 30).map((item) => ({ title: item.title, link: `${rootUrl}/torrent/${item._id}`, description: item.introduction, pubDate: parseDate(item.publish_time), enclosure_url: item.magnet, enclosure_type: "application/x-bittorrent", category: item.tag_ids })) ?? []; items = await Promise.all(items.map((item) => cache_default.tryGet(item.link, async () => { const detailResponse = await got_default({ method: "post", url: `${rootUrl}/api/tag/fetch`, json: { _ids: item.category } }); item.category = []; for (const tag of detailResponse.data) for (const t of tag.synonyms) item.category.push(t); return item; }))); return { title: "萌番组 Bangumi Moe", link: isLatest || items.length === 0 ? rootUrl : `${rootUrl}/search/${tag_id.join("+")}`, item: items, allowEmpty: true }; } //#endregion export { route };