Spaces:
Sleeping
Sleeping
import requests | |
from datetime import datetime, timedelta | |
def get_weather_data(city, days, api_key): | |
try: | |
# Geocode city to lat/lon | |
geo_url = f"http://api.openweathermap.org/geo/1.0/direct?q={city}&limit=1&appid={api_key}" | |
geo_response = requests.get(geo_url).json() | |
if not geo_response: | |
return None | |
lat, lon = geo_response[0]['lat'], geo_response[0]['lon'] | |
# Fetch weather data | |
url = f"http://api.openweathermap.org/data/2.5/onecall?lat={lat}&lon={lon}&exclude=minutely,hourly&units=metric&appid={api_key}" | |
response = requests.get(url).json() | |
# Current weather | |
current = { | |
'temp': response['current']['temp'], | |
'weather': response['current']['weather'][0]['description'], | |
'humidity': response['current']['humidity'], | |
'wind_speed': response['current']['wind_speed'] | |
} | |
# Forecast | |
forecast = [] | |
for i in range(min(days, len(response['daily']))): | |
day = response['daily'][i] | |
forecast.append({ | |
'date': datetime.fromtimestamp(day['dt']).strftime('%Y-%m-%d'), | |
'temp': day['temp']['day'], | |
'precipitation': day.get('rain', 0) + day.get('snow', 0), | |
'wind_speed': day['wind_speed'], | |
'weather': day['weather'][0]['main'] | |
}) | |
return {'current': current, 'forecast': forecast} | |
except Exception as e: | |
print(f"Error fetching weather data: {e}") | |
return None |