covid19nys-ts
Version:
Track COVID-19 cases in NYS, rewritten in TypeScript.
72 lines (59 loc) • 2.09 kB
text/typescript
const axios = require('axios');
const cheerio = require('cheerio');
const NYS_HEALTH_URL =
'https://health.ny.gov/statistics/diseases/communicable/2019-nCoV/new_york_state_positive_cases_by_county.htm';
interface CountyData {
name: string;
cases: number;
}
async function getCountyData(): Promise<CountyData[]> {
console.log('Fetching COVID-19 data from NYS Health Department...');
try {
const { data } = await axios.get(NYS_HEALTH_URL, {
headers: {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
Accept:
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
Connection: 'keep-alive',
},
});
console.log('Data fetched successfully!');
const $ = cheerio.load(data);
const countyData: CountyData[] = [];
$('table#case_count_table tbody tr').each((i: number, elem: any) => {
const countyName = $(elem).find('td:first-child').text().trim();
const casesText = $(elem).find('td:last-child').text().trim();
const cases = parseInt(casesText.replace(/,/g, ''), 10);
if (countyName && !isNaN(cases)) {
countyData.push({ name: countyName, cases });
}
});
return countyData;
} catch (error) {
console.error('Failed to fetch data:', error);
throw error;
}
}
async function main() {
try {
const countyData = await getCountyData();
console.log('\nCOVID-19 Cases by County in New York State:');
console.log('===========================================');
countyData.forEach((county) => {
console.log(`${county.name}: ${county.cases.toLocaleString()} cases`);
});
const totalCases = countyData.reduce(
(sum, county) => sum + county.cases,
0
);
console.log(
`\nTotal cases across all counties: ${totalCases.toLocaleString()}`
);
} catch (error) {
console.error('An error occurred:', error);
}
}
main();