Накидываем структуру приложения
Итак, первое, что надо сделать — подумать, из каких слоёв будет состоять наше приложение. Бросаться писать код сразу не надо. Давайте подумаем, что будет делать наша программа, вот просто перечислим, не думая пока о коде, функциях, классах, о том, как именно мы будем это реализовывать, а просто подумаем, что будет делать программа, из каких функциональных блоков она будет состоять.
Итак, наша программа погоды должна:
- уметь получать текущие координаты устройства
- запрашивать по этим координатам где-то погоду, в нашем случае на OpenWeather, но потенциально было бы здорово, если бы была возможность потом подцепить и какой-то другой сервис, если понадобится
- результаты работы этого погодного сервиса надо распарсить, то есть разобрать, чтобы выдернуть оттуда нужные нам данные
- и, наконец, наши данные надо отобразить в терминале.
Получается, 4 блока тут есть, причём второй и третий функции мы можем объединить в один верхнеуровневый слой получения погоды из внешнего сервиса. Итого мы имеем следующие слои работы приложения:
- Слой, запускающий приложение и связывающий остальные слои
- Получение текущих координат
- Получение по координатам погоды
- Печать погоды
Отлично.
Создаём директорию и накидываем туда слои нашего приложения. Сразу создаём структуру. У нас есть 4 слоя нашего приложения, создадим под них сразу Python-модули, чтобы логика каждого слоя лежала сразу в них.
weather
— входная точка приложения, сделаем её исполнимым файлом без расширения.py
, чтобы можно было запускать её без указания интерпретатораcoordinates.py
— получение текущих GPS-координат ноутбукаweather_api_service.py
— работа с внешним сервисом прогноза погодыweather_formatter.py
— форматирование погоды, то есть «сборка» строки с данными погоды (например, для последующей печати этой строки в терминале)
Создаём директорию для проекта, в моём случае weather-yt
, переходим в неё и создаём в ней пустой файл weather
, добавляем этому файлу права на выполнение с помощью chmod
, и затем открываем этот файл в редакторе кода, в моём случае в nvim
:
mkdir weather-yt && cd $_
true > weather
chmod +x weather
nvim weather
Зададим заглушку в файле weather
:
#!/usr/bin/env python3.10
print("Hello world")
Первая строка называется шебанг, при помощи чего будет запускаться текущий файл. В нашем случае файл будет запускаться с помощью интерпретатора python3.10
. Убедитесь, что у вас есть такой интерпретатор в системе, что путь к нему добавлен в переменную окружения PATH
, убедитесь, что python3.10
успешно запускается. Мы будем использовать здесь возможности актуальной на сегодня версии Python — 3.10. Проверим работу приложения:
./weather
Отлично! Точка входа в приложение готова. Теперь сделаем, чтобы она запускалась откуда угодно из системы, прокинув симлинк (ярлык) на этот исполнимый файл в /usr/local/bin/
:
sudo ln -s $(pwd)/weather /usr/local/bin/
Отлично, теперь мы можем узнавать погоду (запускать weather
) из любой директории в системе.
Создаём остальные модули приложения:
true > coordinates.py
true > weather_api_service.py
true > weather_formatter.py
ls -l
Итак, у нас есть структура приложения, начинаем накидывать функционал.