Готовим агрегатор новостей с автоматической публикацией в своем Telegram-канале
Источников контента, новостных сайтов и каналов на сегодняшний день столько, что охватить весь объем становится проблематично. Трудностей в освоении материала добавляет необходимость перепрыгивать с ленты на ленту, из приложения в приложение и по множеству каналов в придачу.
Для формирования краткой сводки по новостям давно существуют RSS-ленты, а для автоматического сбора сообщений из них различные специализированные приложения и сервисы. Я приведу несколько вариантов агрегации новостных источников прямо в Telegram с возможностью автоматической публикации в свой открытый канал.
🔎 Подготовка
RSS-лента с сайта
Для интересующих новостных ресурсов нужно отыскать RSS Feed, т.е. ссылку на RSS-ленту. На некоторых сайтах она располагается прямо в коде страницы с типом application/rss+xml (смотрим исходный код страницы в браузере, находим по типу), где-то же создают отдельную страницу со списком фидов, а где-то и вовсе ее прячут.
Для автоматического поиска RSS-лент в браузере могут помочь расширения. Например, открытый RSSHub-Radar. При открытии целевого сайта расширение ищет ссылку на ленту и предлагает ее сохранить.
RSS-лента из Telegram-канала
С сайтами все довольно несложно. Но что если мы хотим к своей подборке добавить другие типы источников, например, Telegram-каналы, группы в соц сетях или каналы на видеохостингах? Их также можно представить в виде RSS-ленты, используя специальные инструменты. Обратимся к opensource решению RSSHub.
Сервис можно поднять на своем сервере и обращаться к нему за преобразованием контента в ленту или же использовать публичные серверы RSSHub, выполняющие роль промежуточного звена (подробнее про самохостинг в документации).
Предположим, что мы хотим создать RSS-ленту из одного из каналов VC - vcnews.
- Берем ссылку на любой живой публичный инстанс RSSHub из таблицы.
- Для генерации ленты нужно сформировать ссылку, используя роутинг RSSHub.
Структура ссылки: {host}/telegram/channel/{tg channel name}, где host - адрес публичного инстанса хаба (для примера выбрал https://rsshub.rssforever.com), а tg channel name - имя публичного Telegram-канала (vcnews)
- В итоге получаем ссылку вида https://rsshub.rssforever.com/telegram/channel/vcnews, при обращении к которой будет сформирована актуальная лента постов канала.
Представленных способов вполне достаточно для формирования собственной коллекции ресурсов.
🔨 Инструменты для сбора и публикации
⚡ rss2tg_bot
Первый и наиболее быстрый вариант - воспользоваться ботом @rss2tg_bot:
- Находим в поиске rss2tg_bot или проходим по ссылке.
- Start
- Бот готов принимать фиды для обработки и публикации. Достаточно отправить ссылку на RSS Feed, и свежие новости начнут падать в ленту. Отправляем ссылку еще раз - источник перестанет обрабатываться.
Основные команды:
- /list - список подключенных источников.
- /stats - информация об интервале обновления, количестве фидов, чатов и пользователей. По мере роста нагрузки на бота, интервал обновления, естественно, будет увеличиваться. На момент публикации он составляет около 5 минут.
- /settings - небольшой набор параметров для настройки представления публикуемого поста.
🚀 Для того, чтобы бот не только генерировал вашу личную новостную ленту, но и репостил новости в публичный канал, нужно добавить его в администраторы канала с разрешением на отправку сообщений.
- Канал должен быть публичным!
- Информация о канале - Администраторы - Добавить администратора - В разрешениях оставляем только отправку сообщений.
- У канала с привязанным ботом свой список источников. Сформированный в личном чате с ботом список не мигрирует в канал автоматически.
- @rss2tg_bot https://rsshub.rssforever.com/telegram/channel/vcnews - добавить новый источник можно командой прямо в чате канала.
- /list@rss2tg_bot - список источников для канала.
- /settings@rss2tg_bot - настройки.
❗ Важно отметить, что бот размещен на сервере частного разработчика, и до тех пор, пока имеется некое внешнее финансирование проекта, он его обслуживает и продолжает разработку. Такая ситуация не защищает пользователей от внезапного отключения, перебоев в работе или вовсе прекращения поддержки проекта со стороны создателя.
⚡ Manybot
Создание собственного бота с подключением к популярной платформе @Manybot. Занимается платформой компания по разработке программного обеспечения, а аудитория бота превысила 2 млн пользователей, что несколько снижает риск внезапного прекращения работы построенной системы.
❌ Сразу скажу о существующих ограничениях, так как это может быть решающим фактором:
- Максимальное количество подключаемых RSS-лент - 5 штук.
- Плавающее время публикации. Большая аудитория создает высокую нагрузку на ресурсы бота, что в свою очередь увеличивает время обработки назначенных ему заданий. Если время обхода в rss2tg_bot составляет около 5 минут, то с Manybot посты прилетали с задержкой более двух часов.
🔸 Создание бота
- Находим в поиске Manybot или проходим по ссылке.
- Start
- Create a New Bot
- Следуем инструкции по созданию собственного бота с помощью @BotFather.
- В чате с @BotFather отправляем команду /newbot, указываем имя бота, получаем token.
- Копируем token и возвращаемся в чат с @Manybot.
- I've copied the API token
- Отправляем token.
- Бот создан и подключен. Ссылка на него будет в ответном сообщении. Предложенное описание можно пропустить Skip.
🔸 Настройка RSS-трансляции
- Переходим в своего бота.
- Start
- Отправляем команду /autoposting.
- Выбираем RSS Feed.
- Заметим, что среди предложенных вариантов источников, помимо RSS, есть и VK и YouTube.
- Отправляем ссылку на RSS-ленту, которую хотим отслеживать.
- Теперь новости будут транслироваться пользователям бота.
🔸 Пересылка в канал
- Добавляем бота в администраторы канала с разрешением на отправку сообщений по аналогии с rss2tg_bot.
- Возвращаемся в настройки бота.
- Settings - Channels - Add Channel
- Отправляем ссылку на канал, куда хотим пересылать посты.
- Будет предложено отправить тестовое сообщение для проверки.
- Если сообщение пришло в канал, то все сделано корректно, бот выдаст информацию об успешном подключении Channel successfully added.
- Через некоторое время новости начнут пересылаться в канал в автоматическом режиме.
- Репостить можно в несколько каналов одновременно.
⚡ RSS to Telegram Bot
Размещение новостного бота на собственном сервере на основе проекта с открытым исходным кодом RSS to Telegram Bot. Лучший вариант с точки зрения детальной настройки и независимости от внешних факторов, но и самый трудозатратный.
🔖 Предварительно создаем нового бота в @BotFather и получаем token по аналогии с инструкцией для @Manybot.
🔖 Также необходимо определить user ID будущего администратора. Для этого идем в специального бота @userinfobot, выполняем команду /start, в ответ прилетает id.
🚀 Запуск
Разворачивать бота на сервере будем с помощью docker. Конфигурация машины: 2 CPU, 2 Гб RAM, 20 Гб SSD, ос Debian 12.
🔹 Скачиваем docker-compose.yml из репозитория проекта
🔹 Настраиваем переменные окружения в docker-compose.yml. Детальное описание каждого параметра здесь. Я же приведу только измененные значения.
- Проставляем в TOKEN и MANAGER полученные ранее значения токена бота и id пользователя соответственно.
- Отправку через Telegraph использовать не планировалось, поэтому комментируем переменную TELEGRAPH_TOKEN со всеми указанными там тестовыми значениями.
- MULTIUSER=0, т.к. многопользовательского доступа к боту не подразумевается.
🔹 Поднимаем
🚀 Проверка
Возвращаемся в приватный чат с созданным в @BotFather ботом. Если все было сделано верно, то у бота появится меню с целым списком команд.
- /help - перечень доступных команд и инструкция по использованию.
- /set_option - настройки бота.
- /set_default - параметры по умолчанию для новых подписок (формат представления, период проверки, стиль).
- /test rss-link - проверка возможности подключения RSS-ленты с выводом последнего сообщения.
- /sub rss-link - подписка на RSS-ленту.
🚀 Публикация в канал
- Добавляем бота в администраторы канала с разрешением на отправку сообщений.
- Создаем подписку на RSS-ленту прямо из приватного чата с ботом
Руководство по настройке оформления постов здесь.
Таким образом, мы получаем собственный агрегатор с возможностью детальной настройки и полного контроля, а также неплохими опциями по оформлению. Из ограничений только выделенные ресурсы оборудования. Предложенная конфигурация, как оказалось, была выбрана с большим запасом для одного тестового канала до 100 фидов, так как операции обработки лент нельзя назвать требовательными. В конечном счете все зависит от объема данных и количества пользователей, которых вы планируете подключать.
Больше полезной информации в моем Telegram-канале.