rsshub
Version:
Make RSS Great Again!
101 lines (99 loc) • 3.28 kB
JavaScript
import "./esm-shims-CzJ_djXG.mjs";
import "./config-C37vj7VH.mjs";
import "./dist-BInvbO1W.mjs";
import "./logger-Czu8UMNd.mjs";
import "./ofetch-BIyrKU3Y.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import { t as cache_default } from "./cache-Bo__VnGm.mjs";
import "./helpers-DxBp0Pty.mjs";
import { t as got_default } from "./got-KxxWdaxq.mjs";
import { load } from "cheerio";
//#region lib/routes/hongkong/chp.ts
const titles = {
title: {
en: "Hong Kong Centre for Health Protection",
zh_cn: "香港卫生防护中心",
zh_tw: "香港衛生防護中心"
},
important_ft: {
en: "Important Topics",
zh_cn: "重要资讯",
zh_tw: "重要資訊"
},
press_data_index: {
en: "Press Releases",
zh_cn: "新闻稿",
zh_tw: "新聞稿"
},
ResponseLevel: {
en: "Response Level",
zh_cn: "应变级别",
zh_tw: "應變級別"
},
publication: {
en: "Periodicals & Publications",
zh_cn: "期刊及刊物",
zh_tw: "期刊及刊物"
},
HealthAlert: {
en: "Health Notice",
zh_cn: "健康通告",
zh_tw: "健康通告"
}
};
const route = {
path: "/chp/:category?/:language?",
radar: [{ source: ["dh.gov.hk/"] }],
name: "Unknown",
maintainers: ["nczitzk"],
handler,
url: "dh.gov.hk/"
};
async function handler(ctx) {
const languageCodes = {
en: "en",
zh_cn: "sc",
zh_tw: "tc"
};
const category = ctx.req.param("category") ?? "important_ft";
const language = ctx.req.param("language") ?? "zh_tw";
const rootUrl = "https://www.chp.gov.hk";
const apiUrl = `${rootUrl}/js/${category}.js`;
const currentUrl = `${rootUrl}/${languageCodes[language]}${category === "press_data_index" ? "/media/116" : ""}/index.html`;
const response = await got_default({
method: "get",
url: apiUrl
});
const list = JSON.parse(response.data.match(/"data":(\[{.*}])}/)[1]).map((item) => {
let link = "";
if (item.UrlPath_en) link = item[`UrlPath_${language}`].includes("http") ? item[`UrlPath_${language}`] : `${rootUrl}${item[`UrlPath_${language}`]}`;
else if (category === "ResponseLevel" && item.FilePath_en) link = item[`FilePath_${language}`].includes("http") ? item[`FilePath_${language}`] : `${rootUrl}${item[`FilePath_${language}`]}`;
else link = `${rootUrl}/${languageCodes[language]}/${category === "publication" ? "guideline" : "features"}/${item.InfoBlockID}.html`;
return {
link,
pubDate: parseDate(item.PublishDate),
description: item[`Content_${language}`] ?? "",
title: item[`Title_${language}`]?.replace(/<.*>/, "") ?? ""
};
});
const items = await Promise.all(list.map((item) => cache_default.tryGet(item.link, async () => {
if ((category === "important_ft" || category === "press_data_index") && (item.link.indexOf("htm") > 0 || item.link.indexOf("/features/") > 0)) {
const content = load((await got_default({
method: "get",
url: item.link
})).data);
content("#btmNav, script").remove();
content(".contHeader, .title_display_date").remove();
content(".printBtn, .bookmarkBtn, .qrBtn, .qr-content").remove();
item.description = content("#mainContent, #pressrelease").html();
}
return item;
})));
return {
title: `${titles[category][language]} - ${titles.title[language]}`,
link: currentUrl,
item: items
};
}
//#endregion
export { route };