UNPKG

rsshub

Version:
76 lines (74 loc) 2.83 kB
import "./esm-shims-CzJ_djXG.mjs"; import { t as config } from "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./helpers-DxBp0Pty.mjs"; import "./render-BQo6B4tL.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { t as processItems } from "./utils-DO7TMrLf.mjs"; //#region lib/routes/dw/news.ts const route = { path: "/news/:lang?/:id?", categories: ["traditional-media"], example: "/dw/news", parameters: { lang: "Language, see below, default to en", id: "Category ID, see below, default to the id of the Top Stories Page of the language chosen" }, features: { requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, requireConfig: false }, name: "News", maintainers: ["quiniapiezoelectricity"], handler, description: ` ::: tip Parameters can be obtained from the official website, for instance: For the site https://www.dw.com/de/deutschland/s-12321 the language code would be \`de\` and the category ID would be \`s-1432\`. ::: `, radar: [{ source: ["www.dw.com/:lang/:name/:id"], target: "/news/:lang/:id" }] }; const defaultUrl = `https://www.dw.com/graph-api/en/content/navigation/9097`; const typenames = new Set([ "Article", "Liveblog", "Video" ]); async function handler(ctx) { const lang = ctx.req.param("lang") ?? "en"; let id = ctx.req.param("id"); if (/^s-\d+$/.test(id)) id = id.match(/^s-(\d+)$/i)[1]; else if (id === void 0) id = (await cache_default.tryGet("dw:navigation", async () => { return (await got_default(defaultUrl)).data.data.content.topStoriesNavigations; }, config.cache.routeExpire, false)).map((item) => item.namedUrl.split("/")).find((item) => item[1] === lang)[3].match(/^s-(\d+)$/i)[1]; const feed = (await got_default(`https://www.dw.com/graph-api/${lang}/content/navigation/${id}`)).data.data.content; cache_default.set("dw:navigation", feed.topStoriesNavigations, config.cache.routeExpire); const items = await processItems(feed.contentComposition.informationSpaces.flatMap((section) => Object.values(section).flatMap((component) => component[0]?.contents || [])).filter((item) => typenames.has(item.__typename) && item.id).map((item) => { item.link = new URL(item.namedUrl, "https://www.dw.com").href; item.pubDate = item.contentDate; item.description = item.teaser; item.language = lang; item.type = item.__typename.toLowerCase(); return item; })); return { title: `DW | ${feed.title}`, link: feed.canonicalUrl, description: feed.metaDescription, language: feed.topStoriesNavigations.find((item) => item.namedUrl.startsWith(`/${lang}/`))?.localeLang ?? lang, item: items }; } //#endregion export { route };