This commit is contained in:
2025-11-27 22:25:36 +00:00
commit c1667681e7
117 changed files with 91960 additions and 0 deletions

71
covid.py Normal file
View File

@@ -0,0 +1,71 @@
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}")