Как я писал «простенького» бота про погоду для друзей, и почему это оказалось сложнее, чем корпоративные проекты
У меня за плечами приличный опыт разработки ботов разной сложности. Но недавно я взялся за задачу, которая в мыслях выглядела настолько лёгкой, что я планировал уложиться за час. В общем переоценил свои навыки)))). При этом, в разработке мне всегда активно помогает нейросеть. Понятно, что если не владеешь Питоном никакая нейронка ситуацию не спасет.
Нужно было:
бот, который каждое утро в наш общий чат с друзьями кидает сообщение:
прогноз погоды на день,
курс валют,
курс крипты.
Хотел порадовать друзей, себя проверить на скорость реализации, ну и так чисто поржать!))
И вот началось.
Шаг 1. Архитектура
Я сел и понял: просто сделать /weather мало. Нужно автоматическое сообщение в определённое время.
Значит, придётся подключать планировщик задач. Варианты:
apscheduler — классика для Python;
cron на сервере (но я хотел, чтобы бот оставался автономным);
или костыль с asyncio.sleep(), но тут надо файл багов клепать.
Сделал проще, использовал планировщик pythonanywhere - ту да же и деплой бота).
Шаг 2. Погода
Я думал: «Да что там, подключу API и готово».
В реальности пришлось:
зарегаться на OpenWeather,
получить API-ключ (а он еще и не сразу активируется),
настроить обработку ошибок (а то погода иногда не грузится),
форматировать сообщение так, чтобы не было унылым набором цифр.
В итоге бот пишет что-то вроде:
📊 Прогноз на день:
09:00 — 14.9°C, Облачно с прояснениями 🌤️
12:00 — 18.6°C, Облачно с прояснениями 🌤️
15:00 — 17.8°C, Переменная облачность 🌤️
18:00 — 18.6°C, Небольшая облачность 🌤️
21:00 — 20.0°C, Облачно с прояснениями 🌤️
И вот именно эта «мелочь с автоподстановкой смайликов» меня реально заморочила, перебрал кучу вариантов всяких смайлов))).
Шаг 3. Курсы валют и криптовалют
Валюты я тянул через ЦБ РФ (официальный XML-API).
Крипту — через coingecko API.
Тут все просто:
курсы пришлось парсить;
coingecko иногда выдаёт ошибку 429 (ограничение по запросам), пришлось ставить задержку и кэширование (это я уже на опыте схавал, когда в качестве эксперимента писал бота по автоматическим сигналам торговли на криптобирже).
потом сижу думаю "какие нафиг запросы если запрос всего один в 07:00 утром))", стер код и упростил все до невозможости.
В какой-то момент я ловил себя на мысли: «Что сижу с этим мини ботом уже весь вечер, сам себе мозги вскипятил».
Шаг 4. Автоматическая отправка в чат
Это самое простое:
нужно chat_id;
бот должен быть админом, иначе он не может писать в группу;
И в путь!
Шаг 5. Деплой
Локально всё работало идеально.
На pythonanywhere — нет.
Классика: timezones, конфликты библиотек.
В итоге всё заработало только после танцев с бубном.
Результат
Теперь каждое утро бот отправляет сообщение в чат:
Пара доделок и готово! Бот запущен! Мне приятно, друзья довольны, ну и так в целом было занятно заморочиться на вечер)).
Что я понял:
Нет «простых» ботов. Даже самая мелкая идея рождает кучу нюансов.
Автоматизация всегда сложнее, чем кажется. Написать команду — легко, а вот заставить бота стабильно работать — совсем другое.
Опыт — это вообще не гарантия скорости. Иногда мелкая бытовая задача высасывает больше времени, чем серьёзный проект.
И главное не надо увлекаться и усложнять проект! А то я в черновом варианте еще хотел добавить новости прошедшего дня к сообщению о погоде))).
И хоть я потратил целый вечер, ощущение приятное, сделал маленький сервис, который реально работает на благо. Я к стати веду тг канал в котором бесплатно публикую всякие разборы, кейсы и гайды по работе с нейросетями Ум + AI = Доход