#python #json #api #weather-api
#python #json #API #погода-api
Вопрос:
Прямо сейчас я смог запросить погоду только на текущее время. Тем не менее, я хочу запрашивать текущую погоду и прогноз погоды каждый час после этого.
Вот так
Чтобы найти текущую погоду, я использовал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)
Спасибо
Ответ №1:
Вам нужно использовать onecall API:
https://api.openweathermap.org/data/2.5/onecall
Это позволяет вам получать текущую погоду и прогнозы на основе минут, ежечасно, ежедневно и оповещений. Вы можете настроить то, что вы получаете обратно, используя параметр exclude:
amp;exclude=daily,minutely,current,alerts
Пример:
https://api.openweathermap.org/data/2.5/onecall?lat=-41.211128amp;lon=174.908081amp;exclude=daily,minutely,current,alertsamp;units=metricamp;appid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
где xxxx — это ваш ключ API. Оттуда вам нужно обратиться к документации для формата ответа и проанализировать json.
Ответ №2:
Выглядит как https://openweathermap.org/api/hourly-forecast предоставит вам список прогнозов.
Посмотрите на значение list.dt, которое является «Временем прогноза данных, Unix, UTC».
Выполните итерацию по списку и найдите значение времени, которое соответствует (как можно ближе) интересующему вас времени. Вы должны работать со значениями, которые предоставляет вам API, не стоит угадывать, какие прогнозы существуют, вместо этого вы должны проверять каждое значение list.dt, пока не найдете то, которое вы ищете (если вы ищете конкретный прогноз).
Например, допустим, вы ищете прогноз на среду, 5 августа 2020 года, 14:00:00 (UTC), что составляет 1596636000 по времени Unix.
(извините за код pythonesque, смотрите на это как на псевдокод)
requested_time = 1596636000
for forecast in api_response["list"]:
if forecast.dt => requested_time:
print forecast
break
Комментарии:
1. Как именно я это сделаю, потому что я не знаю, как изменить это значение. Я подумал, что вы могли бы просто добавить 3600 к времени Unix, чтобы продвинуть его на час вперед и получить погоду за это время.
2. Я обновил ответ некоторыми подробностями и примером, надеюсь, это поможет!