Как я создавал бота для телеграм InstantViewBot

Начало

Всем привет я Альберт и я хочу всегда все улучшить.
В 2014 переехав в Питер, я решил начать развиваться, и решил начать читать статьи в интернете.

Тут будет увлекательная история создания телеграм бота читалки статей который:

установили 40 тыс раз
уже обработал более 3 млн страниц
без рекламы, мам, пап, смс и регистрации

Сразу появлились проблемы с этим:

  • статьи появлялись быстрее чем я успевал читать
  • читать в телефоне не удобно
  • нужен постоянный интернет
  • браузер не запоминал где я остановился читать
  • не было списка “почитать позже” куда я мог бы положить статью

Я подумал, что было бы круто решить эти проблемы и я начал гуглить.

Приложение под андроид

2016 год

Я нашел опенсорс проект, вот ссылка https://github.com/JonasCz/save-for-offline, где автор создал приложение где вы можете указать ссылку на статью и вся страница будет загружена на телефон
Круто? Да.

Но были проблемы:

  • верстка съезжала
  • картинки не всегда грузились
  • Не всегда загружались страницы

Я даже внес свой вклад.
Добавил фичу, исправил утечку памяти. Мой код тут https://github.com/JonasCz/save-for-offline/commit/5029491f7cdf5b8e08937d4f3b325f80f90ede90

Телеграм запустил фичу InstantView

Телеграм запустил фичу сохранения и удобного чтения статей из интернета, но вначале это работало плохо:

  • нужно было создавать шаблоны для каждого сайта
  • не все сайты поддерживались
  • кажется большие статьи не поддерживались

В итоге получается удобный формат в телеге для чтения InstantView, запомним этот формат, теперь тут будет речь про этот формат.

InstantView - это наиболее комфортное чтение статей в любимом месседжере, я думаю про лайфхак вы знаете, создаете группу для себя и вот у вас готов список статей на будущее чтение.

Бот читалка в телеграм

Нашел бота (https://t.me/chotamreaderbot) который парсит страницу и превращает ее в InstantView, тогда для меня показалось что там нехватает возможностей и есть проблемы:

  • код закрыт и написан на python
  • не поддерживал большие статьи
  • не поддерживал динамические страницы
  • изначально был на аудиторию русскоязычных стран

И я решил написать своего бота и решить все эти проблемы и добавить самую главную - автоматическая работа - это значит что все сайты он должен обрабатывать одинаково без шаблонов всяких
В конце 2019 я запилил его за 2 недели. В отпуске (ну а когда же еще)

Бесплатный сайт для запуска бота

Денег не было, все делалось на амбициях.

Я нагуглил бесплатный сервис базы данных и веб сайт где можно запустить своего бота.

С базой данных все было окей Free MongoDB Cloud, кстати этот сервис тоже ушел из РФ. Теперь все платно, никаких вам стартапов.

А вот с сайтом были некоторые проблемы. Нужно было периодичеспи “будить” сервер так как из за простоя он отключался.

Я нашел сайт который периодически будит его.

Позже этот сайт ввел платную подписку чтобы сервера постоянно работали, пришлось платить 10 баксов в месяц.

Рост нагрузки

Тратил деньги только на сервер, никакой рекламы. Бот начал набирать обороты. О его полезности никто не спорит. Люди начали передавать друг другу ссылу на бота и читать статьи. Началась большая нагрузка и сервер уже не мог справиться, слишком часто начал падать.

Сервер падал потому что в один момент ему отправляли слишком много и он не успевал обрабатывать сообщения.

Я снова пошел в гугл и нашел бесплатный сервис очереди сообщений cloudamqp. Это как раз то что мне нужно.

Добавил очередь, и теперь бот обрабатывает по 1 сообщению из очереди. В итоге все пользователи ждут, но дождутся обработки и InstantView
Моэно выдохнуть и расслабиться.

Бесплатный сервер от Oracle

Компания oracle запустила для всего мира бесплатный вечный сервер для всяких экспериментов, микростартапов.

Я конечно же переехал туда и все. Бот требовал минимум правок, только баги периодически появлялись.

Сервис ушел из РФ в 2022. Теперь в РФ все платно и дорого, никаких вам стартапов

Код открыт - https://github.com/albertincx/formatbot1

Сам бот находится по адресу https://t.me/CorsaBot

Если вам нужна реклама в боте - обращайтесь https://t.me/safiullin