Skip to content

Instantly share code, notes, and snippets.

@ozcanzaferayan
Last active March 17, 2020 22:50
Show Gist options
  • Save ozcanzaferayan/e5a6235f809c009388d83e8950db901f to your computer and use it in GitHub Desktop.
Save ozcanzaferayan/e5a6235f809c009388d83e8950db901f to your computer and use it in GitHub Desktop.
Covid19 cheerio Example
// USAGE:
// mkdir coronavirusAPI && cd coronavirusAPI
// yarn init -y
// wget https://www.worldometers.info/coronavirus/
// mv index.html sample.html
// node index.js
var fs = require('fs');
const cheerio = require('cheerio');
const content = fs.readFileSync('sample.html', 'utf8');
const $ = cheerio.load(content);
const mainNumbers = ($) => {
const mainValues = $('.maincounter-number');
const coronavirusCases = mainValues.eq(0).text().trim();
const deaths = mainValues.eq(1).text().trim();
const recovered = mainValues.eq(2).text().trim();
const result = {
coronavirusCases,
deaths,
recovered
};
return result;
}
const casesCardsNumbers = ($) => {
const casesCardsMainValues = $('.number-table-main');
const casesCardsSecondaryValues = $('.panel-front, .number-table');
const currentlyInfectedPatients = $(casesCardsMainValues).eq(0).text().trim();
const casesWhichHadAnOutcome = $(casesCardsMainValues).eq(1).text().trim();
const inMildCondition = $(casesCardsSecondaryValues).eq(0).text().trim();
const inMildConditionPercent = $(casesCardsSecondaryValues).eq(0).next().text().trim();
const seriousOrCritical = $(casesCardsSecondaryValues).eq(1).text().trim();
const seriousOrCriticalPercent = $(casesCardsSecondaryValues).eq(1).next().text().trim();
const recoveredDischarged = $(casesCardsSecondaryValues).eq(2).text().trim();
const recoveredDischargedPercent = $(casesCardsSecondaryValues).eq(2).next().text().trim();
const deaths = $(casesCardsSecondaryValues).eq(3).text().trim();
const deathsPercent = $(casesCardsSecondaryValues).eq(3).next().text().trim();
const result = {
currentlyInfectedPatients,
casesWhichHadAnOutcome,
inMildCondition,
inMildConditionPercent,
seriousOrCritical,
seriousOrCriticalPercent,
recoveredDischarged,
recoveredDischargedPercent,
deaths,
deathsPercent
};
return result;
}
const activeCases = ($) => {
const dom = $('script').get()[20].children[0].data
const categories = eval(dom.match(/categories: \[(\s?"(\w|\s)+",?)+\]/g)[0]);
const data = eval(dom.match(/data: \[(\s?(\d|\s)+,?)+\]/g)[0]);
return { categories, data };
}
const closedCases = ($) => {
const dom = $('script').get()[21].children[0].data
const categories = eval(dom.match(/categories: \[(\s?"(\w|\s)+",?)+\]/g)[0]);
const deathRate = eval(dom.match(/data: \[(\s?(\d+.\d|\s)+,?)+\]/g)[0]);
const recoveryRate = eval(dom.match(/data: \[(\s?(\d+.\d|\s)+,?)+\]/g)[1]);
return { categories, deathRate, recoveryRate };
}
const totalCasesLinear = ($) => {
const dom = $('script').get()[22].children[0].data
const categories = eval(dom.match(/categories: \[(\s?"(\w|\s)+",?)+\]/g)[0]);
const data = eval(dom.match(/data: \[(\s?(\d|\s)+,?)+\]/g)[0]);
return { categories, data };
}
// Same values as above
// const totalCasesLogarithmic = ($) => {
// const dom = $('script').get()[23].children[0].data
// const categories = eval(dom.match(/categories: \[(\s?"(\w|\s)+",?)+\]/g)[0]);
// const data = eval(dom.match(/data: \[(\s?(\d|\s)+,?)+\]/g)[0]);
// return { 'categories': categories, 'data': data };
// }
const totalDeathsLinear = ($) => {
const dom = $('script').get()[24].children[0].data;
const categories = eval(dom.match(/categories: \[(\s?"(\w|\s)+",?)+\]/g)[0]);
const data = eval(dom.match(/data: \[(\s?(\d|\s)+,?)+\]/g)[0]);
return { categories, data };
}
// Same values as above
// const totalDeathsLogarithmic = ($) => {
// const dom = $('script').get()[25].children[0].data;
// const categories = eval(dom.match(/categories: \[(\s?"(\w|\s)+",?)+\]/g)[0]);
// const data = eval(dom.match(/data: \[(\s?(\d|\s)+,?)+\]/g)[0]);
// return { 'categories': categories, 'data': data };
// }
const tableData = ($) => {
const countries = [];
const rows = $('table#main_table_countries tbody tr');
for (var i = 0; i < rows.length; i++) {
var row = $(rows).eq(i);
var children = $(row).children('td');
var country = children.eq(0).text().trim();
var totalCases = children.eq(1).text().trim();
var newCases = children.eq(2).text().trim();
var totalDeaths = children.eq(3).text().trim();
var newDeaths = children.eq(4).text().trim();
var totalRecovered = children.eq(5).text().trim();
var activeCases = children.eq(6).text().trim();
var criticalCases = children.eq(7).text().trim();
var totalCasesIn1m = children.eq(8).text().trim();
countries.push(
{
country: country,
totalCases: totalCases,
newCases: newCases,
totalDeaths: totalDeaths,
newDeaths: newDeaths,
totalRecovered: totalRecovered,
activeCases: activeCases,
criticalCases: criticalCases,
totalCasesIn1m: totalCasesIn1m,
}
);
}
return countries;
}
console.log(mainNumbers($));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment