diff --git a/docs/other.md b/docs/other.md index 34d847d51f..2e5a1611f3 100644 --- a/docs/other.md +++ b/docs/other.md @@ -404,7 +404,7 @@ type 为 all 时,category 参数不支持 cost 和 free ### 丁香园 - 全国新型肺炎疫情数据统计 - + ### South China Morning Post - China coronavirus outbreak diff --git a/lib/router.js b/lib/router.js index f262659036..18b6b47317 100644 --- a/lib/router.js +++ b/lib/router.js @@ -2155,7 +2155,7 @@ router.get('/weixin/miniprogram/release', require('./routes/weixinMiniprogram/re // 武汉肺炎疫情动态 router.get('/coronavirus/caixin', require('./routes/coronavirus/caixin')); -router.get('/coronavirus/dxy/data/:province?', require('./routes/coronavirus/dxy-data')); +router.get('/coronavirus/dxy/data/:province?/:city?', require('./routes/coronavirus/dxy-data')); router.get('/coronavirus/dxy', require('./routes/coronavirus/dxy')); router.get('/coronavirus/scmp', require('./routes/coronavirus/scmp')); router.get('/coronavirus/nhc', require('./routes/coronavirus/nhc')); diff --git a/lib/routes/coronavirus/dxy-data.js b/lib/routes/coronavirus/dxy-data.js index bae1c776ad..c22e889867 100644 --- a/lib/routes/coronavirus/dxy-data.js +++ b/lib/routes/coronavirus/dxy-data.js @@ -3,7 +3,8 @@ const jsdom = require('jsdom'); const { JSDOM } = jsdom; module.exports = async (ctx) => { - const province = ctx.params.province || '全国'; + const PROVINCE = ctx.params.province || '全国'; + let CITY = ctx.params.city || ''; const link = 'https://3g.dxy.cn/newh5/view/pneumonia'; @@ -18,39 +19,66 @@ module.exports = async (ctx) => { const item = {}; - let meta; + let AREA, DATA, META; - if (province !== '全国') { - meta = dom.window.getListByCountryTypeService1.find((item) => item.provinceShortName === province); + const getProvince = () => { + AREA = PROVINCE; + DATA = dom.window.getAreaStat.find((item) => item.provinceShortName === PROVINCE); - const data = dom.window.getAreaStat.find((item) => item.provinceShortName === province); - - if (data.cities) { - item.description = ''; - - if (meta.tags) { - item.description += `最新更新:${meta.tags}。

`; - } - - for (let i = 0; i < data.cities.length; i++) { - const city = data.cities[i]; - item.description += `${city.cityName}:确诊 ${city.confirmedCount} 例,死亡 ${city.deadCount} 例,治愈 ${city.curedCount} 例。

`; - } - - item.title = `${province}新型肺炎疫情数据:确诊 ${data.confirmedCount} 例,疑似 ${data.suspectedCount} 例,死亡 ${data.deadCount} 例,治愈 ${data.curedCount} 例`; + if (!DATA) { + // 省份名不存在 + return getCountry(); } - } else { - meta = dom.window.getStatisticsService; - item.title = `${province}确诊 ${meta.confirmedCount} 例,疑似 ${meta.suspectedCount} 例,死亡 ${meta.deadCount} 例,治愈 ${meta.curedCount} 例。`; + META = dom.window.getListByCountryTypeService1.find((item) => item.provinceShortName === PROVINCE); + + if (CITY) { + return getCity(); + } + + if (META.tags) { + item.description = `最近更新:${META.tags}。

`; + } + + DATA.cities.forEach((city) => { + item.description += `${city.cityName}:确诊 ${city.confirmedCount} 例,死亡 ${city.deadCount} 例,治愈 ${city.curedCount} 例。

`; + }); + + item.title = `${AREA}新型肺炎疫情数据:确诊 ${DATA.confirmedCount} 例,疑似 ${DATA.suspectedCount} 例,死亡 ${DATA.deadCount} 例,治愈 ${DATA.curedCount} 例`; + }; + + const getCity = () => { + AREA = CITY; + DATA = DATA.cities.find((c) => c.cityName.includes(CITY)); + + if (DATA) { + item.title = `${DATA.cityName}:确诊 ${DATA.confirmedCount} 例,死亡 ${DATA.deadCount} 例,治愈 ${DATA.curedCount} 例`; + } else { + // 城市不存在 + CITY = ''; + return getProvince(); + } + }; + + const getCountry = () => { + AREA = '全国'; + META = dom.window.getStatisticsService; + + item.title = `全国确诊 ${META.confirmedCount} 例,疑似 ${META.suspectedCount} 例,死亡 ${META.deadCount} 例,治愈 ${META.curedCount} 例。`; + }; + + if (PROVINCE !== '全国') { + getProvince(); + } else { + getCountry(); } - item.pubDate = new Date(meta.modifyTime).toUTCString(); + item.pubDate = new Date(META.modifyTime).toUTCString(); item.link = link; item.guid = item.title; ctx.state.data = { - title: `全国新型肺炎疫情数据统计(${province})-丁香园`, + title: `${AREA}新型肺炎疫情数据统计 - 丁香园`, link, item: [item], };