Вкратце
После нескольких простых скриптов на Python мне захотелось чего-то настоящего — сделать полноценное терминальное приложение. Решил написать собственный консольный погодный информер. И, к своему удивлению, справился за пару дней — всё оказалось гораздо проще, чем я предполагал. Делюсь, как это было.
Почему именно погодный информер?
Казалось бы, предсказание погоды — не самая захватывающая задача, но мне всегда было интересно, как устроены такие сервисы: от телевизионных прогнозов до современных сайтов и приложений. Как поёт Пол Саймон, «всё, что мне нужно знать, я узнаю из прогноза погоды».
Сервисы вроде Weather Underground у меня всегда под рукой. Когда я освоился с Python и стал активно работать через терминал, захотелось получать актуальную погоду прямо в командной строке — чтобы не отвлекаться на лишние окна и сайты.
Я вовсе не разработчик и раньше никогда не копался ни в API, ни в погодных сервисах. Оказалось, с современными библиотеками Python это доступно даже новичку — понадобилось всего несколько строк кода.
Почему именно Python?
Python был для этой задачи просто идеальным выбором. Это один из самых популярных языков программирования с очень понятным синтаксисом. По сути, Python — это почти что читаемый псевдокод. Даже если впервые видишь чужой код, обычно сразу понятно, что происходит. Благодаря этой простоте Python стал современной заменой Basic на курсах для новичков.
Как я выбрал API
Нужен был надёжный источник погодных данных. Для жителей США отлично подходит бесплатный API Национальной метеослужбы. Не нужно регистрироваться или платить — всё открыто и доступно. Минус — работает только для американских городов, но для эксперимента этого было достаточно.
Данные приходят в формате JSON, а с ним умеют работать почти все современные языки, и уж тем более Python.
Геолокация: как находить координаты
Я хотел, чтобы город можно было вводить прямо в командной строке. Для этого начал искать подходящую библиотеку — и нашёл geopy.
В стандартной библиотеке Python действительно много всего нужного («батарейки прилагаются!»), но для поиска координат пришлось установить отдельный пакет. К счастью, geopy ставится буквально в один клик.
В Ubuntu достаточно стандартной команды для установки из репозитория. Можно и через pip — это классика в мире Python.
После установки я потренировался в интерактивном режиме Python, чтобы разобраться, как всё работает.
Подключил модуль геолокации и использовал сервис OpenStreetMap через Nominatim (user_agent можно назвать как угодно, у меня это было “HTG”).
Создав объект geolocator, просто ввел “San Francisco” — и тут же получил долготу и широту этого города. Это именно те данные, которые потребуются для прогноза.
Ради интереса попробовал и другие адреса, включая города вне США, например, Лондон — было любопытно, сработает ли.
Подключаемся к погодному API
Когда координаты были получены, пришло время интегрировать API Национальной метеослужбы. Всё просто: в URL запроса подставляем широту и долготу:
Это не опечатка: “f” в начале строки — это форматированная строка (f-string) в Python, переменные удобно вставляются прямо внутрь текста.
Для работы с запросами нужна библиотека Requests — она не входит в стандарт Python, но без проблем ставится через pip.
После подключения requests и запроса к API, получаем ответ в виде обычного словаря Python. Достаточно обратиться к полям — и вот у вас уже есть температура и прогноз.
Разобравшись с этим, я перешёл к написанию финального скрипта.
Склеиваем всё в единый проект
А вот и итоговый скрипт:
Сначала через модуль os проверяю, есть ли аргументы командной строки: если есть — использую эту строку как название города для поиска координат через geopy.
Важно: название города обязательно берите в кавычки — иначе Python может всё перепутать и ничего не заработает.
Для большей надёжности я обернул код с геолокацией в блок try, чтобы ловить ошибки и выводить понятные сообщения, если что-то пойдёт не так. Если не удаётся соединиться с сервисом — скорее всего, дело в интернете или сбоях на сервере, тут уже ничего не поделать. Такое пару раз случалось во время тестирования.
Дальше всё просто: берём данные о погоде через requests внутри блока try...except, а результат выводим с помощью принтов, используя всё те же f-strings.
Этот проект — отличный пример того, как можно буквально «слепить» рабочую программу на Python из готовых решений всего за пару вечеров. Для меня стало настоящим открытием, насколько удобно писать и сразу отлаживать код прямо в интерактивной среде Python или IPython: логику набросал в консоли, потом просто перенёс результат в редактор.
Конечно, можно добавить больше функций и сделать интерфейс посолиднее, но даже в таком виде всё работает как часы. Теперь я уверен в своих силах и не боюсь браться за любые интересные API — жду новых IT-экспериментов!
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru