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

Готовим агрегатор новостей с автоматической публикацией в своем 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)

Представленных способов вполне достаточно для формирования собственной коллекции ресурсов.

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

⚡ 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 млн пользователей, что несколько снижает риск внезапного прекращения работы построенной системы.

❌ Сразу скажу о существующих ограничениях, так как это может быть решающим фактором:

  1. Максимальное количество подключаемых RSS-лент - 5 штук.
  2. Плавающее время публикации. Большая аудитория создает высокую нагрузку на ресурсы бота, что в свою очередь увеличивает время обработки назначенных ему заданий. Если время обхода в 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

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

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

Больше полезной информации в моем Telegram-канале.

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