原创 / 电脑研究 / 网络

自制Niagara Region地区疫情实时监控面板

前段时间 Niagara Region 对外公布的数据只有一个数字,我就想自己把它记下来,画成图表。面板上线的当天晚上,访问量就破了千,点“加油”的人也不少,就是这数据看着有点扎心……

我的想法

每天都会公布确诊数,所以我可以每天从下面两个网址抓取数据。

$html=@file_get_contents("https://niagararegion.ca/health/covid-19/default.aspx");
$html2=@file_get_contents("https://www.niagarahealth.on.ca/site/covid19casereporting");

用 DOMDocument 轻松获取三个数字

// Confirmed Cases in Niagara
$strCaseNumbers = $xpath->query('//strong[@id="strCaseNumbers"]')->item(0)->nodeValue;
// resolved (have recovered)
$spnResolvedCases = $xpath->query('//strong[@id="spnResolvedCases"]')->item(0)->nodeValue;
// Death
$dNum=trim($xpath2->query('//table/tbody/tr[6]/td[2]')->item(0)->nodeValue);

使用我自己的KDB存入数据库

$data = array(
'date' => date("Y/m/d"),
'strCaseNumbers' => $strCaseNumbers,
'spnResolvedCases' => $spnResolvedCases,
'update_time' => $spnUpdateTime,
'death' => $dNum
);
$db->insert('covid-19-niagara',$data);

数据的抓取就是这么简单

前端用 Chart.js 绘制折线图。我看到不少网站都有“加油”按钮,也想做一个,每点一次,数字就加 1。

<button class="mdc-fab like" id="like" onclick="like();">加油 +1</button>
<script>
function like(){
req=new XMLHttpRequest();
req.onreadystatechange=function(){
if (this.readyState==4 & this.status==200) {
$data=this.response.split("\n");
console.log("Like: "+$data[1]);
document.getElementById("like").innerHTML = "感谢您的加油  "+$data[1]+"次";
}
};
req.open("GET","like.php?add=1");
req.send();
}
</script>

开源以及API调用

项目会开源,也会提供免费的数据 API
API 地址:https://niagara.krunk.cn/api.php
API 返回完整的 JSON 数据,可以直接使用,也可以通过 KDB 调用 (使用请标注来源)


访问实时数据面板:https://niagara.krunk.cn/

开源地址

https://github.com/KrunkZhou/COVID19-NiagaraRegion-Dashboard

(开源代码收集数据不易,给个评论呗)

数据来源:Niagara Region, Niagara Health
感谢 Insiderdavidlai 帮助完善数据以及学生会的大力宣传

写于 2020/04/09 · Krunk Zhou

一起聊聊