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],
};