Пересылка сообщений из любого публичного Телеграм-канала на RSS и Email
Я подписан на несколько (больше 10) Телеграм каналов. Некоторые просматриваю достаточно часто, некоторые — два раза в день (утром и после работы). Из-за этого хотелось бы получать «выжимку» всех сообщений, чтобы, для начала, понять, о чем идет речь и нужно ли читать все эти сообщения.
С моей точки зрения, RSS-лента идеально подходила бы для этого, но… Телеграм не предоставляет позможность интеграции «из коробки» произвольного Телеграм-канала (т.е. канала, где у вас нет административного доступа) с RSS и другими спредствами обмена информацией (email, в первую очередь).
Есть достаточно много решений на основе Телеграм ботов, но все они требуют административного доступа к каналу. Следующий вариант — использовать один из серверов, построенных на основе MadelineProto и изменить исходный код таким образом, чтобы он создавал RSS-ленту при появлении нового сообщения в ТГ-канале. Идея была отвергнута из-за нежелания менять php-код и поддерживать сервер.
Потом настал аврал на работе и я забыл об этой идее. Но недавно ко мне подошла жена со странным вопросом: «Как мне переслать сообщения из Телеграм-канала на электронную почту и куда-то еще, где я могу почитать дайджест сообщений за день?». Я от неожиданности сел и спросил «Дорогая, откуда ты знаешь такие слова, кто тебя им научил и зачем это тебе, вообще, надо?»
Жена открыла лаптоп, ткнула пальцем в несколько каналов на клиенте Телеграм:
— Вот этот канал — кулинарные рецепты. А вот этот — скидки. У меня нет времени все это читать, но я хочу с одной стороны сохранять все рецепты на email-e, чтобы прочитать позднее, а с другой стороны — хочу просматривать скидки раз в день, чтобы решить, что надо, а что нет. 90% — точно не надо, но я хочу видеть весь список (тут я вспомнил «Огласите весь список, пожалуйста»).Владелец канала скидок мне что-то ответила про RSS, но я не знаю, что это такое.
В этот момент я понял, что лучше решить проблему по-быстрее.
Как я уже сказал , Телеграм не предоставляет средств интеграции с RSS и электронной почтой для произвольных каналов.
Поиск в интернете выдал несколько платных решений типа rss.app, позволяющих генерировать RSS фиды из Телеграм каналов, но платить $10 в месяц за возможность обновления ленты раз в 4–8 часов мне не хотелось.
Нашел и бесплатные решения для RSS — rss-bridge.org, rsshub.app. Идея этих сервисов — скармливаешь имя Телеграм канала, а они генерируют URL RSS-фида.
Их основной недостаток — большой интервал обновления фидов — 6–8 часов. Для жены годится (нет проблем архивировать сообщения раз в день с ее каналов), но для меня (новости) все-же лучше иметь более частые обновления.
Учитывая, что rss-bridge.org — решение на основе open source, было решено использовать его.
Купил за 2.5 евро VPS (Ubuntu 22.04) и стал устанавливать этот rss-bridge по инструкциям отсюда https://github.com/RSS-Bridge/rss-bridge
По неизвестной причине, установка напрямую на сервер не привела к желаемому результату: в инструкции отсутствует какая-то часть, ответственная за интеграцию с nginx. Даже ChatGPT не помог.
Но установка через докер сработала:
sudo apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli docker-compose-plugin
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
docker create --name=rss-bridge --publish 3000:80 --volume $(pwd)/config:/config rssbridge/rss-bridge
sudo docker create --name=rss-bridge --publish 3000:80 --volume $(pwd)/config:/config rssbridge/rss-bridge
sudo docker start rss-bridge
Теперь при заходе на http://
Сам RSS Feed имеет вид
http://:3000/?action=display&bridge=TelegramBridge&username=%40ChannelName&format=Atom
Первая часть проблемы решена (RSS) и осталось решить вторую часть (интеграция с email).
Тут все оказалось проще. Инструкции по установке, конфигурации и сам пакет здесь https://github.com/rss2email/rss2email
sudo apt install rss2email
# config file located at cd ~/.config/rss2email.cfg
#setup target email address
r2e new myemail@domain.tld
#setup feed for Wall Street Journal
r2e add WSJ https://feeds.a.dj.com/rss/RSSWorldNews.xml
#setup feed for Telegram channel generated by my rss-bridge instance
r2e add TЕлеграмChannelFeedName "http://:3000/?action=display&bridge=TelegramBridge&username=%40ChannelName&format=Atom"
Конфигурируем SMTP сервер в ~/.config/rss2email.cfg
[DEFAULT]
from = myprivateemail@domain.tld
......
email-protocol = smtp
.....
html-mail = True
.....
smtp-auth = True
smtp-username = myprivateemail@domain.tld
smtp-password = password_for_myprivateemail@domain.tld
smtp-server = smtp.domain.tld
smtp-port = 465
smtp-ssl = True
.............
Дальше вписываем в crontab что-то вроде
0 * * * * r2e run
и получаем нужный результат.
Раз в час все сообщения в фидах, сгенеририванных моим инстансом rss-bridge и любых других фидах, добаленных в конфиг rss2email пересылаются на мой email myprivateemail@domain.tld