Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const https = require('https');
- loadedData = {}
- function loadJson(name, url) {
- https.get(url, (resp) => {
- let data = '';
- resp.on('data', (chunk) => {data += chunk})
- resp.on('end', () => {
- loadedData[name] = JSON.parse(data)
- renderTable()
- });
- }).on("error", (err) => {
- console.log("Error: " + err.message);
- });
- }
- loadJson("cases", 'https://epistat.sciensano.be/Data/COVID19BE_CASES_AGESEX.json')
- loadJson("deaths", "https://epistat.sciensano.be/Data/COVID19BE_MORT.json")
- loadJson("hosp", "https://epistat.sciensano.be/Data/COVID19BE_HOSP.json")
- loadJson("tests", "https://epistat.sciensano.be/Data/COVID19BE_tests.json")
- let columns = ['casesFlanders', 'casesBrussels', 'casesWallonia', 'casesUnknown', 'casesNew', 'casesTotal', 'deathsNew', 'deathsTotal', 'activeICU', 'activeTotal', 'hospNew', 'hospTotal', 'hospDisch', 'dischTotal', 'testsPosPct', 'testsNew', 'testsTotal']
- function renderTable() {
- if (!loadedData.cases || !loadedData.deaths || !loadedData.hosp || !loadedData.tests)
- return // wait for all data to be loaded
- let data = {}
- function addToDateCount(date, category, count) {
- if (!data[date]) {
- // init all columns to 0
- data[date] = {}
- for (let c of columns) {
- data[date][c] = 0
- }
- }
- data[date][category] += count
- }
- let totalCases = 0
- for (let r of loadedData.cases) {
- let date = r["DATE"]
- let region = r["REGION"]
- let cases = r["CASES"]
- if (region == "Flanders" || region == "Brussels" || region == "Wallonia") {
- addToDateCount(date, "cases" + region, cases)
- } else {
- addToDateCount(date, "casesUnknown", cases)
- }
- addToDateCount(date, "casesNew", cases)
- totalCases += cases
- data[date].casesTotal = totalCases
- }
- let totalDeaths = 0
- for (let r of loadedData.deaths) {
- let date = r["DATE"]
- let deaths = r["DEATHS"]
- addToDateCount(date, "deathsNew", deaths)
- totalDeaths += deaths
- data[date].deathsTotal = totalDeaths
- }
- let totalHosp = 0
- let totalDischHosp = 0
- for (let r of loadedData.hosp) {
- let date = r["DATE"]
- addToDateCount(date, "activeICU", r["TOTAL_IN_ICU"])
- addToDateCount(date, "activeTotal", r["TOTAL_IN"])
- addToDateCount(date, "hospNew", r["NEW_IN"])
- addToDateCount(date, "hospDisch", r["NEW_OUT"])
- totalHosp += r["NEW_IN"]
- data[date].hospTotal = totalHosp
- totalDischHosp += r["NEW_OUT"]
- data[date].dischTotal = totalDischHosp
- }
- let totalTests = 0
- for (let r of loadedData.tests) {
- let date = r["DATE"]
- let tests = r["TESTS"]
- addToDateCount(date, "testsNew", tests)
- totalTests += tests
- data[date].testsTotal = totalTests
- data[date].testsPosPct = 100 * data[date].casesNew / totalTests
- }
- let tableRows = []
- let formatFunctions = {}
- for (let c of columns) {
- let format = {}
- if (c == "testsPosPct")
- format = { maximumFractionDigits: 2, minimumFractionDigits: 2}
- let numberFormat = new Intl.NumberFormat('en-US', format)
- formatFunctions[c] = (n) => {
- if (c == "casesNew" || c == "casesTotal") {
- return ("'''" + numberFormat.format(n) + "'''").padStart(13, ' ')
- }
- if (n == 0) {
- return ''.padStart(7, ' ')
- }
- let formattedNumber = numberFormat.format(n)
- if (c == "testsPosPct")
- formattedNumber += '%'
- return formattedNumber.padStart(7, ' ')
- }
- }
- for (let date of Object.keys(data).sort()) {
- let values = columns.map((c) => formatFunctions[c](data[date][c]))
- tableRows.push([date, ...values, ''])
- }
- console.log("TABLE:")
- console.log('|-\n' + tableRows.map(r => '||' + r.join('||')).join('\n|-\n'))
- }
Add Comment
Please, Sign In to add comment