Не откладываем в долгий ящик логичное продолжение рассмотренной ранее темы про агрегацию новостей. На этот раз собирать новости с разных источников будем не на отдельном сервере, а прямо в Telegram с возможностью автоматической публикации в свой открытый канал.
🔎 Подготовка
Для интересующих новостных ресурсов нужно отыскать rss feed, т.е. ссылку на rss-ленту. На некоторых сайтах она располагается прямо в коде страницы с типом application/rss+xml (смотрим исходный код страницы в браузере, находим по типу), где-то же создают отдельную страницу со списком фидов, а где-то и вовсе ее прячут.
В предыдущей заметке был рассмотрен инструмент RSSHub. Его мы по-прежнему можем использовать для получения rss-лент из Telegram-каналов и использовать в контексте текущей задачи.
Одним из сопутствующих проектов RSSHub является браузерное расширение RSSHub-Radar, которое поможет с поиском rss-лент на сайтах.
⚒️ Инструменты для сбора и публикации
⚡️ 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 посты прилетали с задержкой более двух часов.
🔸 Создание бота
- 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 фидов, т.к. операции обработки лент нельзя назвать требовательными. В конечном счете все зависит от объема данных и количества пользователей, которых вы планируете подключать.