Как я могу узнать почасовую погоду на сайте openweathermap.org?

Прямо сейчас я могу запросить погоду только на текущее время. Однако после этого я хочу запрашивать текущую погоду и погоду каждый час.

Это вроде того, что я хочу

Нравится

Чтобы узнать текущую погоду, я использовал https://openweathermap.org/current, но я пытаюсь использовать https://openweathermap.org/api/hourly-forecast для почасовых данных, но когда я посмотрел в примере .json я не мог понять, как изменить время, чтобы получить погоду на это время.

Это пример того, как я получаю данные о текущей погоде:

combined = city + ',' + country
weatherkey = '****'
url = 'https://api.openweathermap.org/data/2.5/weather'
params = {'APPID' : weatherkey, 'q' : combined, 'units' : 'metric'}
response = requests.get(url, params = params)
weather = response.json()

desc = string.capwords(str(weather['weather'][0]['description']))
temp = str(round(weather['main']['temp'], 1)) + '°C'

print(desc)
print(temp)

Спасибо


person jarrybarry    schedule 27.08.2020    source источник


Ответы (2)


Похоже, https://openweathermap.org/api/hourly-forecast предоставит вам список прогнозов.

Посмотрите на значение list.dt, которое представляет собой время прогнозируемых данных, Unix, UTC.

Просмотрите список и найдите значение времени, которое соответствует (как можно точнее) интересующему вас времени. Вы должны работать со значениями, которые дает вам API, не рекомендуется угадывать, какие прогнозы существуют, вместо этого вы должны проверять каждое значение list.dt, пока не найдете то, которое ищете (если вы ищете конкретный прогноз).

Например, предположим, что вы ищете прогноз на среду, 5 августа 2020 г., 14:00:00 (UTC), что составляет 1596636000 по времени Unix.

(извините за питонский код, смотрите это как псевдокод)

requested_time = 1596636000
for forecast in api_response["list"]:
   if forecast.dt => requested_time:
      print forecast
      break
person Karl    schedule 27.08.2020
comment
Как именно я бы это сделал, потому что я не знаю, как изменить это значение. Я думал, что можно просто добавить 3600 к времени Unix, чтобы продвинуть его на час вперед и получить погоду на это время. - person jarrybarry; 27.08.2020
comment
Я обновил ответ, добавив более подробную информацию и пример, надеюсь, это поможет! - person Karl; 27.08.2020

Вам необходимо использовать onecall API:

https://api.openweathermap.org/data/2.5/onecall

Это позволяет вам получать текущую погоду и прогнозы на основе минутных, ежечасных, ежедневных и предупреждений. Вы можете настроить то, что получите обратно, используя параметр exclude:

&exclude=daily,minutely,current,alerts

Пример:

https://api.openweathermap.org/data/2.5/onecall?lat=-41.211128&lon=174.908081&exclude=daily,minutely,current,alerts&units=metric&appid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

где xxxx - ваш ключ API. Оттуда вам нужно обратиться к документации по формату ответа и проанализировать файл json.

person monkey    schedule 15.02.2021