Найти в Дзене
Герман Геншин

Как я собрал погодный терминал на Python всего за 2 дня — и почему у вас получится не хуже

Вкратце После нескольких простых скриптов на Python мне захотелось чего-то настоящего — сделать полноценное терминальное приложение. Решил написать собственный консольный погодный информер. И, к своему удивлению, справился за пару дней — всё оказалось гораздо проще, чем я предполагал. Делюсь, как это было. Почему именно погодный информер? Казалось бы, предсказание погоды — не самая захватывающая задача, но мне всегда было интересно, как устроены такие сервисы: от телевизионных прогнозов до современных сайтов и приложений. Как поёт Пол Саймон, «всё, что мне нужно знать, я узнаю из прогноза погоды». Сервисы вроде Weather Underground у меня всегда под рукой. Когда я освоился с Python и стал активно работать через терминал, захотелось получать актуальную погоду прямо в командной строке — чтобы не отвлекаться на лишние окна и сайты. Я вовсе не разработчик и раньше никогда не копался ни в API, ни в погодных сервисах. Оказалось, с современными библиотеками Python это доступно даже новичку —
Оглавление

Вкратце

После нескольких простых скриптов на Python мне захотелось чего-то настоящего — сделать полноценное терминальное приложение. Решил написать собственный консольный погодный информер. И, к своему удивлению, справился за пару дней — всё оказалось гораздо проще, чем я предполагал. Делюсь, как это было.

Почему именно погодный информер?

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

Сервисы вроде Weather Underground у меня всегда под рукой. Когда я освоился с Python и стал активно работать через терминал, захотелось получать актуальную погоду прямо в командной строке — чтобы не отвлекаться на лишние окна и сайты.

Я вовсе не разработчик и раньше никогда не копался ни в API, ни в погодных сервисах. Оказалось, с современными библиотеками Python это доступно даже новичку — понадобилось всего несколько строк кода.

Почему именно Python?

Python был для этой задачи просто идеальным выбором. Это один из самых популярных языков программирования с очень понятным синтаксисом. По сути, Python — это почти что читаемый псевдокод. Даже если впервые видишь чужой код, обычно сразу понятно, что происходит. Благодаря этой простоте Python стал современной заменой Basic на курсах для новичков.

Как я выбрал API

Нужен был надёжный источник погодных данных. Для жителей США отлично подходит бесплатный API Национальной метеослужбы. Не нужно регистрироваться или платить — всё открыто и доступно. Минус — работает только для американских городов, но для эксперимента этого было достаточно.

Данные приходят в формате JSON, а с ним умеют работать почти все современные языки, и уж тем более Python.

Геолокация: как находить координаты

-2

Я хотел, чтобы город можно было вводить прямо в командной строке. Для этого начал искать подходящую библиотеку — и нашёл geopy.

В стандартной библиотеке Python действительно много всего нужного («батарейки прилагаются!»), но для поиска координат пришлось установить отдельный пакет. К счастью, geopy ставится буквально в один клик.

В Ubuntu достаточно стандартной команды для установки из репозитория. Можно и через pip — это классика в мире Python.

После установки я потренировался в интерактивном режиме Python, чтобы разобраться, как всё работает.

Подключил модуль геолокации и использовал сервис OpenStreetMap через Nominatim (user_agent можно назвать как угодно, у меня это было “HTG”).

Создав объект geolocator, просто ввел “San Francisco” — и тут же получил долготу и широту этого города. Это именно те данные, которые потребуются для прогноза.

Ради интереса попробовал и другие адреса, включая города вне США, например, Лондон — было любопытно, сработает ли.

Подключаемся к погодному API

-3

Когда координаты были получены, пришло время интегрировать API Национальной метеослужбы. Всё просто: в URL запроса подставляем широту и долготу:

Это не опечатка: “f” в начале строки — это форматированная строка (f-string) в Python, переменные удобно вставляются прямо внутрь текста.

Для работы с запросами нужна библиотека Requests — она не входит в стандарт Python, но без проблем ставится через pip.

После подключения requests и запроса к API, получаем ответ в виде обычного словаря Python. Достаточно обратиться к полям — и вот у вас уже есть температура и прогноз.

Разобравшись с этим, я перешёл к написанию финального скрипта.

Склеиваем всё в единый проект

А вот и итоговый скрипт:

Сначала через модуль os проверяю, есть ли аргументы командной строки: если есть — использую эту строку как название города для поиска координат через geopy.

-4

Важно: название города обязательно берите в кавычки — иначе Python может всё перепутать и ничего не заработает.

Для большей надёжности я обернул код с геолокацией в блок try, чтобы ловить ошибки и выводить понятные сообщения, если что-то пойдёт не так. Если не удаётся соединиться с сервисом — скорее всего, дело в интернете или сбоях на сервере, тут уже ничего не поделать. Такое пару раз случалось во время тестирования.

Дальше всё просто: берём данные о погоде через requests внутри блока try...except, а результат выводим с помощью принтов, используя всё те же f-strings.

Этот проект — отличный пример того, как можно буквально «слепить» рабочую программу на Python из готовых решений всего за пару вечеров. Для меня стало настоящим открытием, насколько удобно писать и сразу отлаживать код прямо в интерактивной среде Python или IPython: логику набросал в консоли, потом просто перенёс результат в редактор.

Конечно, можно добавить больше функций и сделать интерфейс посолиднее, но даже в таком виде всё работает как часы. Теперь я уверен в своих силах и не боюсь браться за любые интересные API — жду новых IT-экспериментов!

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: