UNPKG

rsshub

Version:
47 lines (45 loc) 1.97 kB
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { t as invalid_parameter_default } from "./invalid-parameter-rr4AgGpp.mjs"; import path from "node:path"; //#region lib/routes/4gamers/utils.ts init_esm_shims(); const getCategories = (tryGet) => tryGet("4gamers:categories", async () => { const { data: response } = await got_default("https://www.4gamers.com.tw/site/api/news/category"); return response.data.map((category) => ({ id: category.id, name: category.name })); }); const parseList = (results) => results.map((item) => ({ title: item.title, author: item.author.nickname, intro: item.intro, pubDate: parseDate(item.createPublishedAt, "x"), link: item.canonicalUrl, category: [...new Set([item.category.name, ...item.tags])], articleId: item.id })); const parseItem = async (item) => { const { data: response } = await got_default("https://www.4gamers.com.tw/site/api/news/find-section", { searchParams: { sub: item.articleId } }); item.description = renderDescription(item.intro, response.data.contentSection.sections.map((section) => { switch (section["@type"]) { case "ContentAdsSection": case "ScrollerAdsSection": case "textScrollerAdsSection": return ""; case "RawHtmlSection": return section.html; case "ImageGroupSection": return renderImages(section.items); default: throw new invalid_parameter_default(`Unhandled section type: ${section["@type"]} on ${item.link}`); } }).join("")); return item; }; const renderDescription = (intro, content) => art(path.join(__dirname, "templates/description-f7ad79ff.art"), { intro, content }); const renderImages = (images) => art(path.join(__dirname, "templates/image-6e82a0bb.art"), { images }); //#endregion export { parseItem as n, parseList as r, getCategories as t };