对于疫情数据很多平台都提供了接口,但是他们的数据都是一并返回的,需要用户自己去处理,并且信息不全,我这里对几个平台的数据进行了处理,然后保存到自己的数据库中。再使用node编写接口,给大家提供方便。

我这里使用的是天行API提供的接口

var tianxing = 'http://api.tianapi.com/txapi/ncov/index?key=****'   //自行去天行API注册获取key值
var city = 'http://api.tianapi.com/txapi/ncovcity/index?key=****'

没10分钟进行一次数据更新

这里主要是对返回的数据进行处理,对于省级数据、市级数据、全国总数据,在更新前都会清空原来的数据。这里当时没有考虑到将每个省市的历史数据进行保存。具体处理过程如下。

http.get(city, res => {let html = ''res.on('data', data => {html += data})res.on('end', () => {let data = JSON.parse(html).newslistlet proviceinsertData = ''let areainsertData = ''let totalCont = {confirmedCount: 0,curedCount: 0,deadCount: 0}for (let i = 0; i < data.length; i++) {let provice = data[i]totalCont.confirmedCount += provice.confirmedCounttotalCont.curedCount += provice.curedCounttotalCont.deadCount += provice.deadCountproviceinsertData += `('${provice.provinceShortName}',${provice.confirmedCount},${provice.curedCount},${provice.deadCount}),`let citys = provice.citiesfor (let j = 0; j < citys.length; j++) {let city = citys[j]areainsertData += `('${provice.provinceShortName}','${city.cityName}',${city.confirmedCount},${city.suspectedCount},${city.curedCount},${city.deadCount}),`}}proviceinsertData = proviceinsertData.substr(0, proviceinsertData.length - 1)areainsertData = areainsertData.substr(0, areainsertData.length - 1)if (data.length != 0) {//保存省级数据database.query('truncate table province')database.query(`insert into province (provinceName,confirmedNum,curesNum,deathsNum) values ${proviceinsertData}`, err => {if (err)console.log(err);elseconsole.log('省级数据保存完成');})//保存市级数据database.query('truncate table area')database.query(`insert into area (provinceName,cityName,confirmedCount,suspectedCount,curedCount,deadCount) values ${areainsertData}`, err => {if (err)console.log(err);elseconsole.log('地区数据保存完成');})//全国总数据database.query('truncate table china')database.query(`insert into china (diagnosed,suspect,death,cured) values (${totalCont.confirmedCount},${0},${totalCont.deadCount},${totalCont.curedCount})`, err => {if (err)console.log(err);elseconsole.log('全国数据保存完成');})}getTime()})})

获取新闻数据,这与上面不同,新闻数据每次都是返回最新的20条数据,我将所有的历史数据都需要保存,所以这里不能采用上面的方法。当每次获取到新的20条数据时,会存在与老数据相同的内容,这种情况是不需要重复保存的,所以需要一个判断的过程,只保存新的数据。

//获取新闻数据http.get(tianxing, res => {let html = ''res.on('data', data => {html += data})res.on('end', () => {let data = JSON.parse(html).newslistlet news = data[0].newslet now = new Date().getTime()if(news != null)for (let index = 0; index < news.length; index++) {let data = news[index];// newsinsertData += `(${data.id},'${formatTime(parseInt((data.pubDate +'').substr(0,10)))}','${data.pubDateStr}','${data.title}','${data.summary}',// '${data.infoSource}','${data.sourceUrl}','${data.provinceName}','${formatTime(parseInt((data.createTime +'').substr(0,10)))}','${formatTime(parseInt((data.modifyTime +'').substr(0,10)))}'),`(function (data) {database.query(`select id from news where id = ${data.id}`, (err, result) => {if (!result.length) {database.query(`insert into news values (${data.id},'${formatTime(parseInt((data.pubDate +'').substr(0,10)))}','${data.pubDateStr}','${data.title}','${data.summary}','${data.infoSource}','${data.sourceUrl}','${data.provinceName}','${formatTime(parseInt((data.createTime +'').substr(0,10)))}','${formatTime(parseInt((data.modifyTime +'').substr(0,10)))}')`, err => {if (err)console.log(err);elseconsole.log('新增新闻数据');})} else {let time = (now - parseInt((data.pubDate + '')))database.query(`update news set pubDateStr='${data.pubDateStr}' where id = ${data.id}`, err => {if (err)console.log(err);})}})})(data)}})})

源码已上传到github:https://github.com/DengZhanyong/2019-nCoV-real-time-data

最后我使用node编写了更加灵活方便的数据接口,具体如下:

注:所有接口全部为GET请求

获取全国总数据

http://www.dzyong.top:3005/yiqing/total

获取历史数据(最早到1月23日数据)

http://www.dzyong.top:3005/yiqing/history

获取各省/市最新总数据

http://www.dzyong.top:3005/yiqing/province

请求参数:

参数名 是否必填 说明

province

当为空或不填时,返回所有省/市最新总数据,当传参时要注意,不要带‘省’或‘市’字,如:‘重庆市’应填‘重庆’

获取各省/市/地区数据

http://www.dzyong.top:3005/yiqing/area

请求参数:

参数名 是否必填 说明
area 当为空或不填时,返回所有省市地区数据,当传参时要注意,不要带‘省’或‘市’字,如:‘重庆市’应填‘重庆’

获取最新动态新闻(最早到2月6日数据)

http://www.dzyong.top:3005/yiqing/news

请求参数:

参数名 是否必填 说明

pageNum

页码未填时,默认查询所有新闻)

pageSize

每页新闻条数(未填时,默认查询所有新闻)

注:返回结果中的 pubDateStr 字段仅为参考时间,若想实时更新,可通过 pubDate 字段自行计算

通向博主个人网站

我的网站:www.dzyong.top

公众号: 《前端筱园》

我编写的肺炎疫情数据API的实现过程相关推荐

  1. 每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现

    Python 爬虫篇 - 爬取全国新冠肺炎疫情数据实例详解 效果图展示 第一章:疫情信息的下载与数据提取 ① 爬取页面数据到本地 ② json 字符串正则表达式分析 ③ 提取数据中的 json 字符串 ...

  2. 爬取并处理中国新冠肺炎疫情数据

    项目名称: 爬取并处理中国新冠肺炎疫情数据 目的: 通过Python爬取中国新冠肺炎疫情数据,存入Excel,对此数据分析并进行可视化,制作查询中国疫情情况的GUI界面. 具体内容: 通过Python ...

  3. 【GIS实战篇】基于ArcGIS的中国新型冠状肺炎疫情数据分布图的制作

    文章目录 实验目的 实验过程 实验平台 实验工具 实验环境 数据来源 实验背景 简要步骤 详细步骤 结果展示 后续问题(ArcMap10.2版本) 心得体会 实验目的 利用ArcGIS online ...

  4. 新冠肺炎疫情数据爬取以及几种简单的地图可视化方法

    众所周知,新冠肺炎疫情是一次很流行的全球性公共卫生事件.如今我国疫情已经好了许多,但世界各国的疫情依然严峻.特殊时期,正好尝试一下疫情网络数据的抓取,并用几种python库对数据进行简单的地图可视化( ...

  5. 抗击肺炎:新冠肺炎疫情数据可视化及疫情预测分析

    疫情当前,共克时艰. 在新型冠状病毒感染的肺炎疫情牵动社会人心的关键时刻,本文将利用数据分析.数据挖掘.机器学习相关方法,围绕疫情态势展示.疫情走势预测进行分析,挖掘复杂异构多源数据之间的关联关系,以 ...

  6. 新冠肺炎疫情数据可视化分析-FineBI

    目录 一.实验(实训)目的 二.实验(实训)原理或方法 三.仪器设备.材料 四.实验(实训)步骤 五.实训记录及结果 <------------------------------------- ...

  7. Python编程-使用爬虫程序爬取肺炎疫情数据-1 爬取给定国家的历史疫情信息

    首先,我们进入目标页面:腾讯网 如下图所示,按F12进入开发者选项,接着点击 [网络](如下箭头所示),然后刷新页面. 刷新页面之后,我们就可以看到下面多了很多内容,这是浏览器接收到服务器返回的信息. ...

  8. COVID-19 肺炎疫情数据实时监控(python 爬虫 + pyecharts 数据可视化 + wordcloud 词云图)

    文章目录 [1x00]前言 [2x00]思维导图 [3x00]数据结构分析 [4x00]主函数 main() [5x00]数据获取模块 data_get [5x01]初始化函数 init() [5x0 ...

  9. 【大数据平台】基于Spark的美国新冠肺炎疫情数据分析及预测

    (本实验系中国地质大学(武汉)2022年秋期大数据平台及应用课程设计) 一.选题背景 新型冠状病毒疫情是由严重急性呼吸系统综合征冠状病毒2(SARS-CoV-2)导致的2019冠状病毒病(COVID- ...

  10. 含最新数据! 使用Python检测新冠肺炎疫情拐点

    注:本文案例仅供技术学习,不代表研究性观点. 本文对应代码.数据及文献资料已上传至Github仓库https://github.com/CNFeffery/DataScienceStudyNotes ...

最新文章

  1. 服务器mysql在哪里_mysql的服务器在哪里
  2. const volatile同时限定一个类型int a = 10
  3. [Python]元组与列表的区别及内建用法
  4. c语言编译不了什么情况,c语言编译没错但是无法运行
  5. C# DateTime 日期加1天 减一天 加一月 减一月 等方法
  6. html图像区域映射菜鸟,HTML area 标签 | w3cschool菜鸟教程
  7. mysql mpm_mysql mpm
  8. html5打开页面直接取纬度,html5获取不了经度和纬度
  9. 《认知与设计——理解UI设计准则》系列笔记目录
  10. 如何清除 浏览器-hao123的绑定
  11. OrangePi 5 Docker下安装OpenWRT作软路由(同样适用于树莓派等设备)
  12. armv8 ARM64 AARCH64
  13. C#设计模式之简单工厂模式(过渡模式)
  14. 【Moasure魔尺】如何获得面积数据?
  15. 基于Netty的联机版坦克大战
  16. 利用python绘制奥运五环_绘制奥运五环_清华尹成python入门教程_少儿编程视频-51CTO学院...
  17. Fedora30 安装 WPS Office 2019 For Linux
  18. Linux篇之命令行下载远程文件curl命令的介绍与使用
  19. docker制作支持中文的Centos7镜像
  20. js判断移动端是否安装某款app的多种方法

热门文章

  1. HDU 3179 二叉搜索树(树的建立)
  2. AndroidAPI
  3. 尴尬,刚夸完就被罚,因未及时报告Log4j2安全漏洞,阿里云被处罚
  4. RZ G2L核心板内存性能测试
  5. 搞笑git 程序员改bug_这些神奇又搞笑的bug,真的让程序员万万没想到!
  6. Java如何创建参数个数不限的函数
  7. drupal模块_自动测试Drupal 8模块
  8. 浅析虚拟语气 (Subjunctive mood)
  9. 升级openssh后出现问题(kex_exchange_identification: client sent。。。。。)
  10. 拉线传感器的数显仪表在测量中起到多大的作用