Last active
March 17, 2020 22:50
-
-
Save ozcanzaferayan/e5a6235f809c009388d83e8950db901f to your computer and use it in GitHub Desktop.
Covid19 cheerio Example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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