mirror of
https://github.com/danbulant/covid
synced 2026-05-19 03:48:34 +00:00
93 lines
No EOL
2.3 KiB
JavaScript
93 lines
No EOL
2.3 KiB
JavaScript
const got = require("got");
|
|
const cheerio = require("cheerio");
|
|
const fs = require("fs");
|
|
|
|
function execShellCommand(cmd) {
|
|
const exec = require('child_process').exec;
|
|
return new Promise((resolve, reject) => {
|
|
exec(cmd, (error, stdout, stderr) => {
|
|
if (error) {
|
|
console.warn(error);
|
|
}
|
|
resolve(stdout ? stdout : stderr);
|
|
});
|
|
});
|
|
}
|
|
|
|
module.exports = async () => {
|
|
console.log("Fetching...");
|
|
var res = await execShellCommand("curl https://www.worldometers.info/coronavirus/");
|
|
|
|
var out = {};
|
|
|
|
console.log("Parsing");
|
|
const $ = cheerio.load(res);
|
|
var lines = $("tbody")[0].children;
|
|
var cases = $(".maincounter-number");
|
|
|
|
var all = cases[0].childNodes[1].children[0].data;
|
|
var death = cases[1].childNodes[1].children[0].data;
|
|
var recovered = cases[2].childNodes[1].children[0].data;
|
|
|
|
var countries = {};
|
|
|
|
for(var i = 0; i < lines.length; i++){
|
|
if(i % 2 != 1)continue;
|
|
|
|
var name = lines[i].children[1].children[1];
|
|
|
|
if(!name)break;
|
|
|
|
if(name.type == "text"){
|
|
name = name.data;
|
|
} else {
|
|
//link
|
|
name = name.children[0].data;
|
|
}
|
|
|
|
var o = {};
|
|
var lang = [
|
|
"Country", "cases", null, "deaths", null, "recovered", "active", "serious", "casePerMil"
|
|
];
|
|
var pt = 0;
|
|
|
|
for(var u = 0; u < lines[i].children.length; u++){
|
|
if(lines[i].children[u].type != "tag")continue;
|
|
if(!lines[i].children[u].children[0]) continue;
|
|
|
|
if(lang[pt] == null){
|
|
pt++;
|
|
continue;
|
|
}
|
|
|
|
o[lang[pt]] = lines[i].children[u].children[0].data.trim();
|
|
|
|
o[lang[pt]] = o[lang[pt]].replace(/,/gi, "");
|
|
|
|
pt++;
|
|
}
|
|
|
|
o["Country"] = name;
|
|
countries[name] = o;
|
|
}
|
|
|
|
console.log("Done");
|
|
|
|
out.global = {
|
|
all,
|
|
death,
|
|
recovered
|
|
}
|
|
out.countries = countries;
|
|
|
|
fs.writeFileSync(__dirname + "/cases.json", JSON.stringify(out));
|
|
return out;
|
|
}
|
|
|
|
(async () => {
|
|
if (require.main == module) {
|
|
var keepingAlive = setInterval(() => {}, 1000);
|
|
await module.exports();
|
|
clearInterval(keepingAlive);
|
|
}
|
|
})(); |