Как обобщить автоматически сгенерированный вызов API Open-Meteo для произвольных погодных переменныхPython

Программы на Python
Ответить
Anonymous
 Как обобщить автоматически сгенерированный вызов API Open-Meteo для произвольных погодных переменных

Сообщение Anonymous »

Я использую погодный API с открытым исходным кодом open-meteo для загрузки данных о погоде. Веб-сайт предоставляет автоматически сгенерированные вызовы API Python в разделе документации.
Я хотел бы обобщить этот вызов API, чтобы иметь возможность запрашивать произвольные переменные погоды, используя тот же код. .
Для минимального рабочего примера я буду использовать упомянутую выше страницу документации и установить следующие значения:
Местоположение (где-то в Гамбурге):
  • Широта: 53,33
  • Долгота: 9,99

    Почасовые переменные погоды, отметьте галочкой:
  • Температура (2 м)
  • Скорость ветра (10 м)
При этом генерируется следующий вызов API для загрузки почасовых значений наблюдаемых значений temp_2m (температура воздуха на высоте 2 м над землей) и Wind_speed_10m (скорость ветра на высоте 10 м над землей) где-то в Гамбурге.

Код: Выделить всё

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": 53.55,
"longitude": 9.99,
"hourly": ["temperature_2m", "wind_speed_10m"]
}
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")

# Process hourly data. The order of variables needs to be the same as requested.
hourly = response.Hourly()
hourly_temperature_2m = hourly.Variables(0).ValuesAsNumpy()
hourly_wind_speed_10m = hourly.Variables(1).ValuesAsNumpy()

hourly_data = {"date": pd.date_range(
start = pd.to_datetime(hourly.Time(), unit = "s", utc = True),
end = pd.to_datetime(hourly.TimeEnd(), unit = "s", utc = True),
freq = pd.Timedelta(seconds = hourly.Interval()),
inclusive = "left"
)}
hourly_data["temperature_2m"] = hourly_temperature_2m
hourly_data["wind_speed_10m"] = hourly_wind_speed_10m

hourly_dataframe = pd.DataFrame(data = hourly_data)
print(hourly_dataframe)
На данный момент мой подход заключается в том, чтобы ввести новую переменную python custom_variables_list для имен переменных погоды, а затем перебрать ее. Я пропускаю ту часть, где массивы ValuesAsNumpy присваиваются новым переменным только для последующего копирования в словарь. Это выглядит следующим образом:

Код: Выделить всё

import openmeteo_requests

import requests_cache
import pandas as pd
from retry_requests import retry

custom_variables_list = ["temperature_2m", "wind_speed_10m"]

# 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": 53.55,
"longitude": 9.99,
"hourly": custom_variables_list
}
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")

# Process hourly data. The order of variables needs to be the same as requested.
hourly = response.Hourly()
# hourly_temperature_2m = hourly.Variables(0).ValuesAsNumpy()  

Подробнее здесь: [url]https://stackoverflow.com/questions/79156375/how-to-generalize-the-autogenerated-open-meteo-api-call-to-arbitrary-weather-var[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»