UNPKG

covid19nys-ts

Version:

Track COVID-19 cases in NYS, rewritten in TypeScript.

72 lines (59 loc) 2.09 kB
#!/usr/bin/env node 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();