Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from datetime import datetime | |
| from typing import Any | |
| import pandas as pd | |
| import requests | |
| from config.settings import OPENWEATHER_API_KEY, OPENWEATHER_URL | |
| BALLPARK_COORDS: dict[str, tuple[float, float]] = { | |
| "loanDepot park": (25.7781, -80.2197), | |
| "Daikin Park": (29.7573, -95.3555), | |
| "Dodger Stadium": (34.0739, -118.2400), | |
| "Petco Park": (32.7073, -117.1566), | |
| "Chase Field": (33.4455, -112.0667), | |
| } | |
| def fetch_weather_for_venue(venue_name: str) -> pd.DataFrame: | |
| if not OPENWEATHER_API_KEY or venue_name not in BALLPARK_COORDS: | |
| return pd.DataFrame() | |
| lat, lon = BALLPARK_COORDS[venue_name] | |
| params = { | |
| "lat": lat, | |
| "lon": lon, | |
| "appid": OPENWEATHER_API_KEY, | |
| "units": "imperial", | |
| } | |
| response = requests.get(OPENWEATHER_URL, params=params, timeout=30) | |
| response.raise_for_status() | |
| payload = response.json() | |
| weather_list = payload.get("weather", []) | |
| description = weather_list[0].get("description", "") if weather_list else "" | |
| row = { | |
| "fetched_at": datetime.utcnow(), | |
| "venue_key": venue_name, | |
| "location_name": payload.get("name", venue_name), | |
| "temperature_f": (payload.get("main") or {}).get("temp"), | |
| "humidity": (payload.get("main") or {}).get("humidity"), | |
| "wind_speed_mph": (payload.get("wind") or {}).get("speed"), | |
| "wind_deg": (payload.get("wind") or {}).get("deg"), | |
| "description": description, | |
| } | |
| return pd.DataFrame([row]) |