rsshub
Version:
Make RSS Great Again!
98 lines (96 loc) • 4.39 kB
JavaScript
import { t as rofetch } from "./ofetch-C3ts-Hud.mjs";
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs";
import { t as cache_default } from "./cache-BkqOokyU.mjs";
import { t as timezone } from "./timezone-BBvDwS_3.mjs";
import { Fragment, jsx, jsxs } from "hono/jsx/jsx-runtime";
import { load } from "cheerio";
import { renderToString } from "hono/jsx/dom/server";
import { raw } from "hono/html";
import pMap from "p-map";
//#region lib/routes/kcna/utils.ts
const fixDesc = ($, elem) => {
const $elem = $(elem);
$elem.find("august_name").each((_, item) => {
item.name = "b";
});
return $elem.html();
};
const fetchPhoto = (url) => cache_default.tryGet(url, async () => {
const $ = load(await rofetch(url));
return $(".gallery img").removeAttr("class").toArray().map((item) => $.html(item)).join("<br>");
});
//#endregion
//#region lib/routes/kcna/news.tsx
const route = {
path: "/:lang/:category?",
categories: ["traditional-media"],
example: "/kcna/en",
parameters: {
lang: "Language, refer to the table below",
category: "Category, refer to the table below"
},
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: true,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
radar: [{
source: ["www.kcna.kp/:lang"],
target: "/:lang"
}, {
source: ["www.kcna.kp/:lang/article/list/:category"],
target: "/:lang/:category"
}],
name: "News",
maintainers: ["Rongronggg9"],
handler,
description: `| Language | 조선어 | English | 中国语 | Русский | Español | 日本語 |
| -------- | ------ | ------- | ------ | ------- | ------- | ------ |
| \`:lang\` | \`kp\` | \`en\` | \`cn\` | \`ru\` | \`es\` | \`jp\` |
| Category | \`:category\` |
| ---------------------------------------------------------------- | ---------------------------------- |
| WPK General Secretary **Kim Jong Un**'s Revolutionary Activities | \`b0721b9f23054ddc7fe56c2811a12715\` |
| Latest News (default) | \`a666dda1282180e0ee1b4427b0574ae7\` |
| Top News | \`6a47505ba5268fd7749c0fe11e4b24b4\` |
| Home News | \`2f7d854121ccbbfbe6feae9fdcc3556e\` |
| Documents | \`1afa96195f9b303902490a126ab7285f\` |
| World | \`ecc14533d88be93068af4178946b1b05\` |
| Social Life | \`680e40b40899891bbe75a7072e3285e7\` |
| External | \`e2f336db98b5e69c75e0da264e037e8d\` |
| Revolutionary Anecdote | \`503e9b606704f9b1c625fa5755928cd3\` |
| Always in Memory of People | \`7bc083f00425be6aadfb828fba1cb5a7\` |`
};
async function handler(ctx) {
const { lang, category = "a666dda1282180e0ee1b4427b0574ae7" } = ctx.req.param();
const rootUrl = "http://www.kcna.kp";
const pageUrl = `${rootUrl}/${lang}/article/list/${category}`;
const $ = load(await rofetch(pageUrl));
return {
title: $("head > title").text(),
link: pageUrl,
item: await pMap($(".article h5").toArray().map((item) => {
const $item = $(item);
const a = $item.find("a");
const dateString = $item.find("span").text().match(/\d+\.\d+\.\d+/)[0];
return {
title: a.text().trim(),
link: new URL(a.attr("href"), rootUrl).href,
pubDate: timezone(parseDate(dateString, "YYYY.M.D"), 9)
};
}), (item) => cache_default.tryGet(item.link, async () => {
const $ = load(await rofetch(item.link));
const container = $("article .container");
const gallery = container.find("a.gallery_button").attr("href");
container.find("h1, a.right_button").remove();
const description = fixDesc($, container);
const photo = gallery ? await fetchPhoto(new URL(gallery, rootUrl).href) : "";
item.description = renderToString(/* @__PURE__ */ jsxs(Fragment, { children: [description ? raw(description) : null, photo ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("br", {}), raw(photo)] }) : null] }));
return item;
}), { concurrency: 3 })
};
}
//#endregion
export { route };