Как я писал «простенького» бота про погоду для друзей, и почему это оказалось сложнее, чем корпоративные проекты

У меня за плечами приличный опыт разработки ботов разной сложности. Но недавно я взялся за задачу, которая в мыслях выглядела настолько лёгкой, что я планировал уложиться за час. В общем переоценил свои навыки)))). При этом, в разработке мне всегда активно помогает нейросеть. Понятно, что если не владеешь Питоном никакая нейронка ситуацию не спасет.

Нужно было: бот, который каждое утро в наш общий чат с друзьями кидает сообщение:

  • прогноз погоды на день,
  • курс валют,
  • курс крипты.

Хотел порадовать друзей, себя проверить на скорость реализации, ну и так чисто поржать!))

И вот началось.

Шаг 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, конфликты библиотек.

В итоге всё заработало только после танцев с бубном.

Как я писал «простенького» бота про погоду для друзей, и почему это оказалось сложнее, чем корпоративные проекты

Результат

Теперь каждое утро бот отправляет сообщение в чат:

Как я писал «простенького» бота про погоду для друзей, и почему это оказалось сложнее, чем корпоративные проекты

Пара доделок и готово! Бот запущен! Мне приятно, друзья довольны ну и так в целом было занятно заморочиться на вечер)).

Что я понял:

  1. Нет «простых» ботов. Даже самая мелкая идея рождает кучу нюансов.
  2. Автоматизация всегда сложнее, чем кажется. Написать команду — легко, а вот заставить бота стабильно работать — совсем другое.
  3. Опыт — это вообще не гарантия скорости. Иногда мелкая бытовая задача высасывает больше времени, чем серьёзный проект.
  4. И главное не надо увлекаться и усложнять проект! А то я в черновом варианте еще хотел добавить к сообщению новости прошедшего дня))).

И хоть я потратил целый вечер, ощущение приятное, сделал маленький сервис, который реально работает на благо. Я к стати веду тг канал в котором бесплатно публикую всякие разборы, кейсы и гайды по работе с нейросетями Ум + AI = Доход

2
Начать дискуссию