Готовим агрегатор новостей с автоматической публикацией в своем 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 из репозитория проекта
1
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, т.к. многопользовательского доступа к боту не подразумевается.
✳️ Поднимаем
1
docker compose up -d
🚀 Проверка
Возвращаемся в приватный чат с созданным в @BotFather ботом. Если все было сделано верно, то у бота появится меню с целым списком команд.
/help- перечень доступных команд и инструкция по использованию./set_option- настройки бота./set_default- параметры по умолчанию для новых подписок (формат представления, период проверки, стиль)./test rss-link- проверка возможности подключения rss-ленты с выводом последнего сообщения./sub rss-link- подписка на rss-ленту.
Руководство по настройке оформления постов здесь.
🚀 Публикация в канал
-
Добавляем бота в администраторы канала с разрешением на отправку сообщений.
-
Создавать подписки на
rss-лентыможно прямо из приватного чата с ботом
1
/sub @my_public_channel rss-link
а также управлять настройками подписок для канала
1
/set_default @my_public_channel
🔥 Таким образом, мы получаем собственный агрегатор с возможностью детальной настройки и полного контроля, а также неплохими опциями по оформлению. Из ограничений только выделенные ресурсы оборудования. Предложенная конфигурация, как оказалось, была выбрана с большим запасом для одного тестового канала до 100 фидов, т.к. операции обработки лент нельзя назвать требовательными. В конечном счете все зависит от объема данных и количества пользователей, которых вы планируете подключать.
