X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=cached%2Fweather_data.py;fp=cached%2Fweather_data.py;h=94a01313375f5a6e6ecc5b485c873e9280c54db5;hb=fa4298fa508e00759565c246aef423ba28fedf31;hp=78f7ade4b571a01436cf79876fc1b540d5ee52b3;hpb=b0bde5bef4a19382136112196b238088641738d5;p=python_utils.git diff --git a/cached/weather_data.py b/cached/weather_data.py index 78f7ade..94a0131 100644 --- a/cached/weather_data.py +++ b/cached/weather_data.py @@ -3,6 +3,7 @@ from dataclasses import dataclass import datetime import json +import logging import os from typing import List import urllib.request @@ -13,6 +14,8 @@ import datetime_utils import list_utils import persistent +logger = logging.getLogger(__name__) + cfg = config.add_commandline_args( f'Cached Weather Data List ({__file__})', 'Arguments controlling cached weather data', @@ -38,6 +41,7 @@ class WeatherData: date: datetime.date # The date high: float # The predicted high in F low: float # The predicted low in F + precipitation_inchs: float # Number of inches of precipitation / day conditions: List[str] # Conditions per ~3h window most_common_condition: str # The most common condition icon: str # An icon to represent it @@ -73,6 +77,7 @@ class CachedWeatherData(persistent.Persistent): highs = {} lows = {} conditions = {} + precip = {} param = "id=5786882" # Bellevue, WA key = "c0b160c49743622f62a9cd3cda0270b3" www = urllib.request.urlopen( @@ -81,16 +86,29 @@ class CachedWeatherData(persistent.Persistent): response = www.read() www.close() parsed_json = json.loads(response) + logger.debug(parsed_json) dt = datetime.datetime.fromtimestamp(parsed_json["dt"]).date() dates.add(dt) condition = parsed_json["weather"][0]["main"] icon = icon_by_condition.get(condition, '?') + p = 0.0 + if 'rain' in parsed_json: + if '3h' in parsed_json['rain']: + p += float(parsed_json['rain']['3h']) + elif '1h' in parsed_json['rain']: + p += float(parsed_json['rain']['1h']) + if 'snow' in parsed_json: + if '3h' in parsed_json['snow']: + p += float(parsed_json['snow']['3h']) + elif '1h' in parsed_json['snow']: + p += float(parsed_json['snow']['1h']) if dt == now.date() and now.hour > 18 and condition == 'Clear': icon = '🌙' self.weather_data[dt] = WeatherData( date = dt, high = float(parsed_json["main"]["temp_max"]), low = float(parsed_json["main"]["temp_min"]), + precipitation_inchs = p / 25.4, conditions = [condition], most_common_condition = condition, icon = icon, @@ -102,6 +120,7 @@ class CachedWeatherData(persistent.Persistent): response = www.read() www.close() parsed_json = json.loads(response) + logger.debug(parsed_json) count = parsed_json["cnt"] for x in range(count): data = parsed_json["list"][x] @@ -112,12 +131,27 @@ class CachedWeatherData(persistent.Persistent): highs[dt] = None lows[dt] = None conditions[dt] = [] - temp = data["main"]["temp"] - if highs[dt] is None or temp > highs[dt]: - highs[dt] = temp - if lows[dt] is None or temp < lows[dt]: - lows[dt] = temp + for temp in ( + data["main"]["temp"], + data['main']['temp_min'], + data['main']['temp_max'], + ): + if highs[dt] is None or temp > highs[dt]: + highs[dt] = temp + if lows[dt] is None or temp < lows[dt]: + lows[dt] = temp cond = data["weather"][0]["main"] + precip[dt] = 0.0 + if 'rain' in parsed_json: + if '3h' in parsed_json['rain']: + precip[dt] += float(parsed_json['rain']['3h']) + elif '1h' in parsed_json['rain']: + precip[dt] += float(parsed_json['rain']['1h']) + if 'snow' in parsed_json: + if '3h' in parsed_json['snow']: + precip[dt] += float(parsed_json['snow']['3h']) + elif '1h' in parsed_json['snow']: + precip[dt] += float(parsed_json['snow']['1h']) conditions[dt].append(cond) today = datetime_utils.now_pacific().date() @@ -138,6 +172,7 @@ class CachedWeatherData(persistent.Persistent): date = dt, high = highs[dt], low = lows[dt], + precipitation_inchs = precip[dt] / 25.4, conditions = conditions[dt], most_common_condition = most_common_condition, icon = icon