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