feat(route): add 香港衛生防護中心 (#8569)
This commit is contained in:
parent
77c15326bc
commit
944f46f995
|
|
@ -35,6 +35,26 @@ Category
|
|||
|
||||
</RouteEn>
|
||||
|
||||
## Hong Kong Centre for Health Protection
|
||||
|
||||
### Category
|
||||
|
||||
<RouteEn author="nczitzk" example="/chp" path="/chp/:category?/:language?" :paramsDesc="['Category, see below, Important Topics by default', 'Language, see below, zh_tw by default']">
|
||||
|
||||
Category
|
||||
|
||||
| Important Topics | Press Releases | Response Level | Periodicals & Publications | Health Notice |
|
||||
| ---------------- | ---------------- | -------------- | -------------------------- | ------------- |
|
||||
| important_ft | press_data_index | ResponseLevel | publication | HealthAlert |
|
||||
|
||||
Language
|
||||
|
||||
| English | 中文简体 | 中文繁體 |
|
||||
| ------- | -------- | -------- |
|
||||
| en | zh_cn | zh_tw |
|
||||
|
||||
</RouteEn>
|
||||
|
||||
## Ministry of Foreign Affairs of Japan
|
||||
|
||||
### Press conference
|
||||
|
|
|
|||
|
|
@ -264,6 +264,26 @@ pageClass: routes
|
|||
|
||||
<Route author="linbuxiao" example="/icac/news/sc" path="/icac/news/:lang?" :paramsDesc="['语言,留空为`sc`,支持`sc`(简中),`tc`(繁中),`en`(英文)']"/>
|
||||
|
||||
## 香港卫生防护中心
|
||||
|
||||
### 分类
|
||||
|
||||
<Route author="nczitzk" example="/chp" path="/chp/:category?/:language?" :paramsDesc="['分类,见下表,默认为重要资讯', '语言,见下表,默认为 zh_tw']">
|
||||
|
||||
分类
|
||||
|
||||
| 重要资讯 | 新闻稿 | 应变级别 | 期刊及刊物 | 健康通告 |
|
||||
| ------------ | ---------------- | ------------- | ----------- | ----------- |
|
||||
| important_ft | press_data_index | ResponseLevel | publication | HealthAlert |
|
||||
|
||||
语言
|
||||
|
||||
| English | 中文简体 | 中文繁體 |
|
||||
| ------- | -------- | -------- |
|
||||
| en | zh_cn | zh_tw |
|
||||
|
||||
</Route>
|
||||
|
||||
## 中国工业和信息化部
|
||||
|
||||
### 政策解读
|
||||
|
|
|
|||
|
|
@ -0,0 +1,103 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
||||
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: '健康通告',
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const languageCodes = {
|
||||
en: 'en',
|
||||
zh_cn: 'sc',
|
||||
zh_tw: 'tc',
|
||||
};
|
||||
|
||||
const category = ctx.params.category ?? 'important_ft';
|
||||
const language = ctx.params.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({
|
||||
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}`].indexOf('http') < 0 ? `${rootUrl}${item[`UrlPath_${language}`]}` : item[`UrlPath_${language}`];
|
||||
} else if (category === 'ResponseLevel' && item.FilePath_en) {
|
||||
link = item[`FilePath_${language}`].indexOf('http') < 0 ? `${rootUrl}${item[`FilePath_${language}`]}` : 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) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
if ((category === 'important_ft' || category === 'press_data_index') && (item.link.indexOf('htm') > 0 || item.link.indexOf('/features/') > 0)) {
|
||||
const detailResponse = await got({
|
||||
method: 'get',
|
||||
url: item.link,
|
||||
});
|
||||
|
||||
const content = cheerio.load(detailResponse.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;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${titles[category][language]} - ${titles.title[language]}`,
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
module.exports = {
|
||||
'/chp/:category?/:language?': ['nczitzk'],
|
||||
};
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
module.exports = {
|
||||
'chp.gov.hk': {
|
||||
_name: '香港衛生防護中心',
|
||||
'.': [
|
||||
{
|
||||
title: '分类',
|
||||
docs: 'https://docs.rsshub.app/government.html#xiang-gang-wei-sheng-fang-hu-zhong-xin-fen-lei',
|
||||
source: ['/'],
|
||||
target: '/hongkong/chp/:category?/:language?',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
module.exports = function (router) {
|
||||
router.get('/chp/:category?/:language?', require('./chp'));
|
||||
};
|
||||
Loading…
Reference in New Issue