rsshub
Version:
Make RSS Great Again!
51 lines (50 loc) • 2.29 kB
JavaScript
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs";
import { t as cache_default } from "./cache-BkqOokyU.mjs";
import { t as got_default } from "./got-BTowW50G.mjs";
import { t as InvalidParameterError } from "./invalid-parameter-CGxhjomn.mjs";
import { Fragment, jsx, jsxs } from "hono/jsx/jsx-runtime";
import { renderToString } from "hono/jsx/dom/server";
import { raw } from "hono/html";
//#region lib/routes/4gamers/utils.tsx
const getCategories = () => cache_default.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: [.../* @__PURE__ */ 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 "InsertOneAdsSection":
case "ScrollerAdsSection":
case "textScrollerAdsSection": return "";
case "RawHtmlSection": return section.html;
case "ImageGroupSection": return renderImages(section.items);
default: throw new InvalidParameterError(`Unhandled section type: ${section["@type"]} on ${item.link}`);
}
}).join(""));
return item;
};
const renderDescription = (intro, content) => renderToString(/* @__PURE__ */ jsxs(Fragment, { children: [
/* @__PURE__ */ jsx("blockquote", { children: intro }),
/* @__PURE__ */ jsx("br", {}),
raw(content)
] }));
const renderImages = (images) => renderToString(/* @__PURE__ */ jsx(Fragment, { children: images.map((image) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("img", {
src: image.url,
alt: image.alt
}), /* @__PURE__ */ jsx("br", {})] })) }));
//#endregion
export { parseItem as n, parseList as r, getCategories as t };