Есть интересная статья о том, как Энтузиасты делают погоду.
Энтузиасты делают, а мы воспользуемся плодами их трудов — получим эту самую погоду от 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/
Добавить комментарий