Files
test/covid.py
2025-11-27 22:25:36 +00:00

71 lines
2.5 KiB
Python

import time
import json
import psycopg2
import psycopg2.extensions
from psycopg2.extras import Json
import re
import pandas as pd
import requests
import xmltodict
import datetime
from tabulate import tabulate
allobs = []
states = ['wv', 'oh', 'va', 'ky']
ohcounties = ['-LW-', '-GL-', '-JC-', '-MS-', '-AT-', '-PY-', '-WS-', '-MG-', '-VN-']
vacounties = ['-DC-', '-BC-']
kycounties = ['-LR-', '-CT-', '-GP-', '-BD-']
datewanted = datetime.date.today().strftime("%m/%d/%Y")
try:
for state in states:
url = f'https://data.cocorahs.org/export/exportreports.aspx?state={state}&Format=XML&Date={datewanted}&responsefields=all'
response = requests.get(url)
response.raise_for_status() # Check for HTTP errors
data = xmltodict.parse(response.content.decode('utf-8')) # Explicitly decode as UTF-8
try:
reports = data['Cocorahs']['DailyPrecipReports']['DailyPrecipReport']
# Handle case where reports might be a single dict or a list
if isinstance(reports, dict):
reports = [reports]
for report in reports:
if state == 'wv':
allobs.append(report)
else:
for county in eval(state + 'counties'):
if county in report['StationNumber']:
allobs.append(report)
except (KeyError, TypeError) as e:
print(f"Error processing data for state {state}: {e}")
continue
# Process observations
finalobs = []
for obs in allobs:
tempob = [
obs.get('DateTimeStamp', ''),
obs.get('StationNumber', ''),
obs.get('StationName', ''),
obs.get('TotalPrecipAmt', ''),
obs.get('NewSnowDepth', ''),
obs.get('TotalSnowDepth', ''),
obs.get('Notes', '')
]
finalobs.append(tempob)
# Write to file with UTF-8 encoding
with open('/var/www/html/work/today.txt', 'w', encoding='utf-8') as f:
f.write(tabulate(
finalobs,
headers=["Date/Time of Ob (Z)", "Station Number", "Station Name",
"New Precip", "New Snow", "Snow Depth", "Comments"],
tablefmt='plain' # Changed to 'plain' for simpler text output
))
except requests.RequestException as e:
print(f"Error fetching data: {e}")
except Exception as e:
print(f"Unexpected error: {e}")