Найти в Дзене
DeSoft.ru

Готовим агрегатор новостей с автоматической публикацией в своем Telegram-канале

Оглавление

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

🔎 Подготовка

Для интересующих новостных ресурсов нужно отыскать rss feed, т.е. ссылку на rss-ленту. На некоторых сайтах она располагается прямо в коде страницы с типом application/rss+xml (смотрим исходный код страницы в браузере, находим по типу), где-то же создают отдельную страницу со списком фидов, а где-то и вовсе ее прячут.

В предыдущей заметке был рассмотрен инструмент RSSHub. Его мы по-прежнему можем использовать для получения rss-лент из Telegram-каналов и использовать в контексте текущей задачи.

Одним из сопутствующих проектов RSSHub является браузерное расширение RSSHub-Radar, которое поможет с поиском rss-лент на сайтах.

⚒️ Инструменты для сбора и публикации

⚡️ rss2tg_bot

Первый, наиболее быстрый вариант - воспользоваться ботом @rss2tg_bot:

  • Находим в поиске rss2tg_bot или проходим по ссылке
  • Start
  • Бот готов принимать фиды для обработки и публикации. Достаточно отправить ссылку на rss feed, например, https://desoft.ru/feed.xml, и свежие новости начнут падать в ленту. Отправляем ссылку еще раз - источник перестанет обрабатываться.

Основные команды:

  • /list - список подключенных источников.
  • /stats - информация об интервале обновления, количестве фидов, чатов и пользователей. По мере роста нагрузки на бота, интервал обновления, естественно, будет увеличиваться. На момент публикации он составляет около 5 минут.
  • /settings - небольшой набор параметров для настройки представления публикуемого поста.

🚀 Для того, чтобы бот не только генерировал вашу личную новостную ленту, но и репостил новости в публичный канал, нужно добавить его в администраторы канала с разрешением на отправку сообщений.

  • Канал должен быть публичным!
  • Информация о канале - Администраторы - Добавить администратора - В разрешениях оставляем только отправку сообщений.
  • У канала с привязанным ботом свой список источников. Сформированный в личном чате с ботом список не мигрирует в канал автоматически.
  • @rss2tg_bot https://desoft.ru/feed.xml - добавить новый источник можно командой прямо в чате канала.
  • /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 из репозитория проекта

wget https://raw.githubusercontent.com/Rongronggg9/RSS-to-Telegram-Bot/dev/docker-compose.yml.sample -O docker-compose.yml

✳️ Настраиваем переменные окружения в docker-compose.yml. Детальное описание каждого параметра здесь. Я же приведу только измененные значения.

  • Проставляем в TOKEN и MANAGER полученные ранее значения токена бота и id пользователя соответственно.
  • Отправку через Telegraph использовать не планировалось, поэтому комментируем переменную TELEGRAPH_TOKEN со всеми указанными там тестовыми значениями.
  • MULTIUSER=0, т.к. многопользовательского доступа к боту не подразумевается.

✳️ Поднимаем

docker compose up -d

🚀 Проверка

Возвращаемся в приватный чат с созданным в @BotFather ботом. Если все было сделано верно, то у бота появится меню с целым списком команд.

  • /help - перечень доступных команд и инструкция по использованию.
  • /set_option - настройки бота.
  • /set_default - параметры по умолчанию для новых подписок (формат представления, период проверки, стиль).
  • /test rss-link - проверка возможности подключения rss-ленты с выводом последнего сообщения.
  • /sub rss-link - подписка на rss-ленту.

Руководство по настройке оформления постов здесь.

🚀 Публикация в канал

  • Добавляем бота в администраторы канала с разрешением на отправку сообщений.
  • Создавать подписки на rss-ленты можно прямо из приватного чата с ботом
/sub @my_public_channel rss-link

а также управлять настройками подписок для канала

/set_default @my_public_channel


🔥 Таким образом, мы получаем собственный агрегатор с возможностью детальной настройки и полного контроля, а также неплохими опциями по оформлению. Из ограничений только выделенные ресурсы оборудования. Предложенная конфигурация, как оказалось, была выбрана с большим запасом для одного тестового канала до 100 фидов, т.к. операции обработки лент нельзя назвать требовательными. В конечном счете все зависит от объема данных и количества пользователей, которых вы планируете подключать.