rsshub
Version:
Make RSS Great Again!
101 lines (98 loc) • 3.5 kB
JavaScript
import "./dist-Bog6z_OM.mjs";
import { t as config } from "./config-MQ-7ebJ_.mjs";
import "./logger-C4avouvV.mjs";
import "./ofetch-DKl_Ma9g.mjs";
import "./is-worker-DESPicPc.mjs";
import { t as cache_default } from "./cache-SV6W5EPy.mjs";
import "./helpers-Bo4JQYdN.mjs";
import { t as got_default } from "./got-CO-ndVl2.mjs";
import { Fragment, jsx, jsxs } from "hono/jsx/jsx-runtime";
import { renderToString } from "hono/jsx/dom/server";
//#region lib/routes/bangumi.tv/calendar/_base.ts
const getData = (tryGet) => {
return Promise.all(["https://api.bgm.tv/calendar", "https://cdn.jsdelivr.net/npm/bangumi-data/dist/data.json"].map((item, i) => tryGet(item, async () => {
const { data } = await got_default(item);
if (i === 1) {
const items = [];
for (const item of data.items) {
const bgmSite = item.sites.find((s) => s.site === "bangumi");
if (bgmSite) {
item.bgmId = bgmSite.id;
items.push(item);
}
}
data.items = items;
}
return data;
}, config.cache.contentExpire, false)));
};
var _base_default = getData;
//#endregion
//#region lib/routes/bangumi.tv/calendar/today.tsx
const route = {
path: "/calendar/today",
categories: ["anime"],
example: "/bangumi.tv/calendar/today",
parameters: {},
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
radar: [{ source: ["bgm.tv/calendar"] }],
name: "放送列表",
maintainers: ["magic-akari"],
handler,
url: "bgm.tv/calendar"
};
const renderTodayDescription = (bgm, siteMeta) => renderToString(/* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("img", { src: bgm.image }), /* @__PURE__ */ jsx("ul", { children: bgm.sites.map((site) => {
const url = site.url ?? siteMeta[site.site].urlTemplate.replace("{{id}}", site.id);
const title = siteMeta[site.site].title;
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", {
href: url,
children: title
}) });
}) })] }));
async function handler() {
const [list, data] = await _base_default(cache_default.tryGet);
const siteMeta = data.siteMeta;
const today = new Date(Date.now());
today.setUTCHours(today.getUTCHours() + 9);
const day = today.getUTCDay();
const todayList = list.find((l) => l.weekday.id % 7 === day);
const todayBgmId = new Set(todayList.items.map((t) => t.id.toString()));
const images = {};
for (const item of todayList.items) images[item.id] = (item.images || {}).large;
const todayBgm = data.items.filter((d) => todayBgmId.has(d.bgmId));
for (const bgm of todayBgm) bgm.image = images[bgm.bgmId];
return {
title: "bangumi 每日放送",
link: "https://bgm.tv/calendar",
item: todayBgm.map((bgm) => {
const updated = new Date(Date.now());
updated.setSeconds(0);
const begin = new Date(bgm.begin || updated);
updated.setHours(begin.getHours());
updated.setMinutes(begin.getMinutes());
updated.setSeconds(begin.getSeconds());
const link = `https://bangumi.tv/subject/${bgm.bgmId}`;
const id = `${link}#${new Intl.DateTimeFormat("zh-CN").format(updated)}`;
const html = renderTodayDescription(bgm, siteMeta);
return {
id,
guid: id,
title: [bgm.title, Object.values(bgm.titleTranslate).map((t) => t.join("|")).join("|")].filter(Boolean).join("|"),
updated: updated.toISOString(),
pubDate: updated.toUTCString(),
link,
description: html,
content: { html }
};
})
};
}
//#endregion
export { route };