71 lines
2.5 KiB
Python
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}") |