Узнаем текущую погоду простеньким скриптом на Python’е

от автора

Есть интересная статья о том, как Энтузиасты делают погоду.
Энтузиасты делают, а мы воспользуемся плодами их трудов — получим эту самую погоду от OpenWeatherMap.org скриптом на Python’е.


Для этого придется зарегистрироваться на сайте openweathermap.org
Это совсем несложно сделать, а остальное сделать будет ещё проще!
Регистрация нужна для получения идентифицирующей пользователя строки App Id, состоящей из набора букв и цифр (похоже — только из шестнадцатеричных цифр). Такого вида:
«6d8e495ca73d5bbc1d6bf8ebd52c4». Этот App Id использовать не стоит, потому что он сгенерирован мной случайным образом такой строкой на Python’е:

appid = "".join(random.choice("abcdef0123456789") for x in range(29)) 

Формирование строки запроса

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

http://api.openweathermap.org/data/2.5/find?q=Petersburg&type=like&APPID=6d8e495ca73d5bbc1d6bf8ebd52c4

В запросе нужно указать нужный город (вместо «Petersburg») и свой App Id (вместо «6d8e495ca73d5bbc1d6bf8ebd52c4»
Можно уточнить запрос, указав идентификатор страны после названия города через запятую. Например, так:

http://api.openweathermap.org/data/2.5/find?q=Petersburg,RU&type=like&APPID=6d8e495ca73d5bbc1d6bf8ebd52c4

Поскольку нужно будет несколько раз формировать строку запроса, решил сделать для этого функцию form_url_string:

appid = "6d8e495ca73d5bbc1d6bf8ebd52c4" def form_url_string(s_request):     global appid     s_appid = "&APPID=" + appid     s_template = "http://api.openweathermap.org/data/2.5/" + s_request + s_appid     return s_template 

Проверка наличия в базе информации о нужном населенном пункте

План такой. В ответ на сформированный запрос получаем пакет в формате JSON. Разбираем пакет и получаем нужные значения по названиям полей.

import requests s_city = "Petersburg" s_country = "RU" s_request = "find?q={},{}&type=like".format(s_city, s_country) s_search_url = form_url_string(s_request) print(s_search_url) try:     res = requests.get(s_search_url)     data = res.json()     cities = ["{} ({})".format(d['name'], d['sys']['country'])           for d in data['list']]     print( "city:", cities ) except Exception as e:     print("Exception (find):", e)     pass 

В ответе может оказаться несколько городов, соответствующих нашему запросу. Кстати, если в запросе указать “Moscow” и убрать страну из строки приведенного в примере запроса, то гарантированно получим несколько строк в списке cities.

Получение информации о текущей погоде

Осталось только получить искомую информацию о погоде. Если нас не интересуют имперские единицы измерения, то в запросе указываем, что желаем получить метрические единицы: «units=metric»

s_request = "weather?q={},{}&units=metric".format(s_city, s_country) s_search_url = form_url_string(s_request) try:     res = requests.get(s_search_url)     data = res.json()     print("conditions:", data['weather'][0]['description'])     print("temp:", data['main']['temp'])     print("temp_min:", data['main']['temp_min'])     print("temp_max:", data['main']['temp_max']) except Exception as e:     print("Exception (weather):", e)     pass 

Как и обещал — всё очень просто.
На сайте OpenWeatherMap есть ещё масса интересного — прогноз, архив погоды, информация со станций погоды. Описание всех доступных сервисов можно посмотреть здесь openweathermap.org/api
ссылка на оригинал статьи https://habrahabr.ru/post/315264/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *