weather api working -> 2025-01-27 17:49:29
This commit is contained in:
parent
7a933631d9
commit
a9c7381977
14 changed files with 288 additions and 17 deletions
|
@ -0,0 +1,65 @@
|
|||
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)
|
Loading…
Add table
Add a link
Reference in a new issue