import openmeteo_requests import requests_cache import pandas as pd from retry_requests import retry # Setup the Open-Meteo API client with cache and retry on error cache_session = requests_cache.CachedSession('.cache', expire_after = 3600) retry_session = retry(cache_session, retries = 5, backoff_factor = 0.2) openmeteo = openmeteo_requests.Client(session = retry_session) # Make sure all required weather variables are listed here # The order of variables in hourly or daily is important to assign them correctly below url = "https://api.open-meteo.com/v1/forecast" params = { "latitude": 40.408, "longitude": -3.688, "current": ["temperature_2m", "is_day", "weather_code"], "daily": ["weather_code", "temperature_2m_max", "temperature_2m_min"], "timezone": "Europe/Madrid", "forecast_days": 3 } responses = openmeteo.weather_api(url, params=params) # Process first location. Add a for-loop for multiple locations or weather models response = responses[0] print(f"Coordinates {response.Latitude()}°N {response.Longitude()}°E") print(f"Elevation {response.Elevation()} m asl") print(f"Timezone {response.Timezone()} {response.TimezoneAbbreviation()}") print(f"Timezone difference to GMT+0 {response.UtcOffsetSeconds()} s") # Current values. The order of variables needs to be the same as requested. current = response.Current() current_temperature_2m = current.Variables(0).Value() current_is_day = current.Variables(1).Value() current_weather_code = current.Variables(2).Value() print(f"Current time {current.Time()}") print(f"Current temperature_2m {current_temperature_2m}") print(f"Current is_day {current_is_day}") print(f"Current weather_code {current_weather_code}") # Process daily data. The order of variables needs to be the same as requested. daily = response.Daily() daily_weather_code = daily.Variables(0).ValuesAsNumpy() daily_temperature_2m_max = daily.Variables(1).ValuesAsNumpy() daily_temperature_2m_min = daily.Variables(2).ValuesAsNumpy() daily_data = {"date": pd.date_range( start = pd.to_datetime(daily.Time(), unit = "s", utc = True), end = pd.to_datetime(daily.TimeEnd(), unit = "s", utc = True), freq = pd.Timedelta(seconds = daily.Interval()), inclusive = "left" )} daily_data["weather_code"] = daily_weather_code daily_data["temperature_2m_max"] = daily_temperature_2m_max daily_data["temperature_2m_min"] = daily_temperature_2m_min daily_dataframe = pd.DataFrame(data = daily_data) print(daily_dataframe)