UNPKG

covid19nys-ts

Version:

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

64 lines (63 loc) 3.07 kB
#!/usr/bin/env node "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; 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'; function getCountyData() { return __awaiter(this, void 0, void 0, function* () { console.log('Fetching COVID-19 data from NYS Health Department...'); try { const { data } = yield 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 = []; $('table#case_count_table tbody tr').each((i, elem) => { 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; } }); } function main() { return __awaiter(this, void 0, void 0, function* () { try { const countyData = yield 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();