rsshub
Version:
Make RSS Great Again!
82 lines (80 loc) • 2.52 kB
JavaScript
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 };