diff --git a/main.py b/main.py index ad465aa..387e509 100644 --- a/main.py +++ b/main.py @@ -110,6 +110,7 @@ async def fetch_pollen(zipcode): "period": relative_day_to_date(d["Type"]), } for d in data["Location"]["periods"] + if d["Type"].lower().strip() in ["today", "tomorrow"] ], } ] @@ -122,7 +123,7 @@ async def fetch_weather(lat, lon, weather_api_key): response = await client.get(url) response.raise_for_status() data = response.json() - current, periods = data["current"], data["daily"][:3] + current, periods = data["current"], data["daily"][:2] return [ { "forecast_date": format_datetime(datetime.fromtimestamp(current["dt"])), @@ -163,8 +164,58 @@ async def read_root(token: str): fetch_weather(CONFIG["lat"], CONFIG["lon"], CONFIG["weather_api_key"]), ) + pollen_periods = {p["period"]: p for p in pollen[0]["periods"]} if pollen and pollen[0]["periods"] else {} + weather_periods = {p["period"]: p for p in weather[0]["periods"]} if weather and weather[0]["periods"] else {} + + # Add current weather data as a "current" period + if weather and weather[0]: + data = weather[0] + weather_periods["current"] = { + "period": "current", + "temp": data["current_temp"], + "feels_like": data["current_feels_like"], + "humidity": data["current_humidity"], + "pressure": data["current_pressure"], + "desc": data["current_desc"], + "sunrise": data["sunrise"], + "sunset": data["sunset"] + } + + all_periods = set(pollen_periods.keys()) | set(weather_periods.keys()) + merged_periods = [] + + sorted_periods = sorted(all_periods, key=lambda x: (x != "current", x)) + + for period in sorted_periods: + merged_period = {"period": period} + + if period in pollen_periods: + merged_period["pollen"] = pollen_periods[period]["index"] + + if period in weather_periods: + weather_data = weather_periods[period] + if period == "current": + merged_period.update({ + "temp": weather_data["temp"], + "feels_like": weather_data["feels_like"], + "desc": weather_data["desc"], + "humidity": weather_data["humidity"], + "pressure": weather_data["pressure"] + }) + else: + merged_period.update({ + "low": weather_data["low"], + "high": weather_data["high"], + "desc": weather_data["desc"], + "humidity": weather_data["humidity"], + "sunrise": weather_data["sunrise"], + "sunset": weather_data["sunset"], + "pressure": weather_data["pressure"] + }) + + merged_periods.append(merged_period) + return { "fetched_at": format_datetime(datetime.now()), - "pollen": pollen, - "weather": weather, + "data": merged_periods, }