UNPKG

rsshub

Version:
106 lines (104 loc) 2.77 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import { t as ViewType } from "./types-D84BRIt4.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as invalid_parameter_default } from "./invalid-parameter-rr4AgGpp.mjs"; import { load } from "cheerio"; //#region lib/routes/m-78/news.ts const route = { name: "ニュース", categories: ["anime"], path: "/news/:category?", example: "/m-78/news", radar: [{ source: ["m-78.jp/news"], target: "/news" }, { source: ["m-78.jp/news/category/:category"], target: "/news/:category" }], parameters: { category: { description: "news category", default: "news", options: [ { value: "news", label: "ニュース" }, { value: "streaming", label: "動画配信" }, { value: "event", label: "イベント" }, { value: "onair", label: "放送" }, { value: "broadcast", label: "放送/配信" }, { value: "goods", label: "グッズ" }, { value: "ultraman-cardgame", label: "ウルトラマン カードゲーム" }, { value: "shop", label: "ショップ" }, { value: "blu-ray_dvd", label: "Blu-ray・DVD" }, { value: "digital", label: "デジタル" } ] } }, handler, maintainers: ["KarasuShin"], features: { supportRadar: true }, view: ViewType.Articles }; async function handler(ctx) { const rootUrl = "https://m-78.jp"; const cateAPIUrl = `${rootUrl}/wp-json/wp/v2/categories`; const postsAPIUrl = `${rootUrl}/wp-json/wp/v2/posts`; const category = ctx.req.param("category") ?? "news"; const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit"), 10) : 20; const categories = await ofetch_default(`${cateAPIUrl}?slug=${category}`); if (categories.length === 0) throw new invalid_parameter_default("Category not found"); const { id: categoryId, link: categoryLink, name: categoryName } = categories[0]; const posts = await ofetch_default(`${postsAPIUrl}?categories=${categoryId}&per_page=${limit}`); return { title: `${categoryName} | ニュース`, link: categoryLink, item: posts.map((post) => { const $ = load(post.content.rendered, null, false); $("#ez-toc-container").remove(); $("img").each((_, img) => { if (/wp-content\/uploads/.test(img.attribs.src)) img.attribs.src = img.attribs.src.replace(/(-\d+x\d+)/, ""); }); return { title: post.title.rendered, link: post.link, description: $.html(), pubDate: parseDate(post.date_gmt), updated: parseDate(post.modified_gmt) }; }) }; } //#endregion export { route };