Как настроить rss для телеграмм

RSS из любого Telegram канала

_AMD_

Основатель trigon.im и gm-donate.ru. Интересуюсь айти, текстами, продажами. Меломан, интроверт, альтруист

_AMD_

Без навыков программирования, сторонних ботов, смс и регистрации!

Заменяем в этой ссылке последнее слово на адрес вашего канала и используйте его в качестве RSS ссылки: https://rsshub.app/telegram/channel/tlitter

Также вы можете попробовать использовать этот бот: @crssbot, но он вроде медленно обновлял информацию и не поддерживается

Зачем это мне

Вкратце — vk.com/rurage. Сюда временно дублируется содержание моего t.me/tlitter канала

Я почти забросил VK после начала активного использования телеги и даже написал бота, который присылает мне в телегу посты с групп ВК. Но и у меня самого остается несколько групп в VK, в которые мне самому нужно писать. Чтобы не писать в Telegram и группу одновременно, я сделал, чтобы VK сам забирал новые посты с Telegram

Бонус

Сначала я нашел способ просматривать содержимое канала без регистрации и думал, что придется парсить содержимое с такой страницы: https://t.me/s/tlitter. Но страницу можно использовать даже чтобы просто показывать содержимое канала тем, кто не зарегистрирован в телеграме.

Subscribe to Блог _AMD_

Get the latest posts delivered right to your inbox

Источник

Как сделать простого RSS бота для Telegram с помощью конструктора + бот со статьями iXBT.com

В последнее время тема ботов для Telegram становится все популярнее. Я решил быстренько собрать одного из них на каком-нибудь конструкторе для iXBT.com (картинка не от моего бота, не волнуйтесь).

Я знаю, что для кого-то это может быть абракадаброй, так что чуть разъясню: Telegram — это такой чат клиент типа ICQ и Jabber, удобный, стабильный и привязывающийся к номеру телефона и работающий на всех основных платформах, как мобильных, так и стационарных.

Роботы или боты для телеграм — простейшие программки, которые что-то присылают в ответ на команды в чат. Например, существуют боты, которые умеют скидывать вам пиратские книжки с флибусты (из-за них хотят запретить сам телеграм), боты, умеющие присылать видео или искать самые дешевые билеты на Сапсан.

Я буду делать простейшего бота, который присылает новые сообщения из RSS со статьями iXBT.com вам в чатик. У меня уже есть такой, и он помогает не пропустить ничего-ничего важного.

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

Пишем ему /start и получаем список всех его команд.
Первая и главная — /newbot — отправляем ему и бот просит придумать имя нашему новому боту. Единственное ограничение на имя — в конце оно должно оканчиваться на «bot». В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты, иначе придется поломать голову над именем.

Для начала работы этого уже достаточно. Особо педантичные могут уже здесь присвоить боту аватар, описание и приветственное сообщение.

Вообще бот для Telegram — это по-прежнему приложение, запущенное на вашей стороне и осуществляющее запросы к Telegram Bot API. Причем API довольное простое — бот обращается на определенный URL с параметрами, а Telegram отвечает JSON объектом.

Однако, я давно не занимаюсь веб-программированием «руками», и поэтому для меня изучение всех методов работы с JSON было бы чревато потерей времени. Я решил найти для себя просто адекватный конструктор, который будет хорошо работать, а уже впоследствии перенести рутину на свой сервер.

Я воспользовался для создания бота другим ботом Manybot. Вот его адрес.
Если вы кликните на него и откроете в Telegram, то он все вам напишет, я же продублирую это тут. Итак, прежде всего бот скажет:

Как видите, бот умеет не так уж и многое, но для наших потребностей хватит. Сразу после того, как вы наберете Start, бот станет общаться с вами в интерактивном режиме.

Читайте также:  Nemexia ru не работает

Так как ключ API я уже скопировал, то у меня уже было все, что нужно.

Как видите, все элементарно. Небольшая неточность в описании — команду /autoposting надо давать не боту /Manybot, а вашему новому боту.

В общем, на данный момент бот готов. Вы можете сделать себе такого же простого бота за пару минут, а также подписаться на моего бота ixbt.com, чтобы оперативнейшим образом узнавать про все статьи на iXBT.com.
Такой простейший RSS бот может быть удобен если вам, например, нужно следить за любимым сайтом, или смотреть новые посты в группе во ВКонтакте.

Сразу хочу предупредить о том, что конструктор ботов Manybot бесплатен и может сломаться в любой момент, или, например, постить какую-нибудь пургу в канал. Однако, при необходимости вы можете отключить у него ключ API и написать своего бота самостоятельно (право за именем бота в любом случае остается за вами).

Источник

Читаем telegram-каналы в виде новостной ленты (+ бонусом rss)

UPD: На текущий момент бот не работает, упёрся в лимит каналов на одного юзера (500 каналов).

В конце статьи есть ссылка на инструкцию, как развернуть себе такого самостоятельно.

Предпосылки и проблематика

Когда я переключился с ВК на телеграм, выбрав последний основным мессенджером, я столкнулся с рядом неудобств: в телеге нет привычной ленты новостей и весь контент надо собирать по каналам. ВК имеет функционал групп (сообщения из которых и собираются в ленту), но меня всегда бесило наличие рекламы явной, рекламных постов и прочего мусора, видеть который я в ленте не хотел.

Одно время, когда ВК начал пихать в ленту свои рекомендации (неотключаемые вообще никак), я пользовался адблоком, альтернативными андроид-клиентами (kate mobile), но все эти полумеры напрягали.

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

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

Идея и реализация

Так появилась мысль сделать агрегатор телеграм-каналов с фильтрацией по ключевым словам (которые в рекламных постах достаточно часто попадаются).

Я в курсе про функционал группировки каналов в некоторых клиентах, но по некоторым причинам он мне не подходит:

группировка работает только на уровне клиента. Т.е. сгруппированные в мобильном приложении каналы не будут сгруппированы в веб-версии или другом клиенте

нельзя (по крайней мере я не нашел) группировать чаты и каналы

фильтрация спама и рекламы недоступна

я собирался экспортировать агрегированный контент в rss (об этом во второй части статьи)

Погуглив существующие инструменты для работы с телегой, я остановился на питоновской библиотеке telethon. Ее ключевой особенностью была возможность работать в режиме клиента, а не бота (об этом ниже, в нюансах).

Что еще капотом:

telethon как telegram-клиент

asyncio для асинхронности

peewee и sqlite3 для хранения инфы кто на что подписался.

Сами посты из подписок не сохраняются, пересылаются на лету

Название придумал быстро: я люблю соединять слова, так что агрегатор телеграма быстро превратился в Телегрегатор.

Нюансы агрегатора

Процесс установки и использования самой библиотеки я не буду расписывать, в доках все достаточно подробно. Остановлюсь на нескольких технических нюансах, которые всплыли в процессе создания Телегрегатора:

Поскольку меня напрягают висячие непрочитанные сообщения (а так же больше 5-7 вкладок в браузере), я хотел, чтобы агрегатор вместо меня подписывался на каналы и пересылал мне сообщения в специально заведенный для этого чат/канал (я это назвал поток, feed).

Как следствие из п.1, агрегатор должен был самостоятельно подписываться на каналы (в т.ч. закрытые), вступать в группы и чаты. А это значило, что вариант с ботом не подходил, т.к. он пассивен и его может добавить только участник чата или владелец канала. Здесь и пригодилась возможность telethon’а эмулировать клиент. Т.е. telethon-клиент авторизуется с номером телефона и кодом из смс и эмулирует обычного юзера. Может реагировать на сообщения о наборе текста, заходить в каналы, группы, чаты, пересылать сообщения, и всё это в реалтайме. В общем, полноценный пользователь.

Читайте также:  Жена сына не работает

Как следствие из п.2, возможности бота (кастомные клавиатуры и команды) оказались мне недоступны (или я не нашел, как клиентом это делать). Если знаете как — напишите в комментах. Так что пришлось велосипедить с обработкой пользовательских команд.

Была идея, что пользователю надо общаться с ботом, а тот уже под капотом передает команды клиенту (подписаться на канал), но это показалось слишком сложным для mvp.

Как попробовать?

UPD: Тут была инструкция по запуску, но она более не актуальна. Смотри инструкцию в отдельном посте, ссылка внизу.

Ограничения и планы

Есть несколько ограничений: альбом из фоток, которые пришли в оригинальный канал в одном сообщении, Телегрегатор пересылает отдельными сообщениями. Или репост в поток иногда происходит не мгновенно, а спустя 5-10 секунд. Иногда Телегрегатор падает (рестарт автоматически), и может пропустить какое-то сообщение. Это редко, но случается.

Видимо, это особенности протокола. Если заметите странное поведение — напишите мне.

В планах добавить следующий функционал:

показать случайный пост из случайного канала

топ самых популярных каналов (самых редких, как вариант)

предлагает случайный канал

Я люблю находить годноту в телеге. Порой, в канале всего человек 200, и о нём вообще не узнать, кроме как по рекомендациям друзей.

Сам пользуюсь Телегрегатором где-то полгода, решил поделиться, вдруг кому-то зайдет. Из своего аккаунта я удалил все подписки, теперь ими рулю через потоки, полет нормальный.

Исходный код пока грязный, так что публиковать не стал.

все-так бот или клиент?

Как я уже писал выше, есть альтернативный способ реализации задуманного мной функционала:
Я должен взаимодействовать с ботом, отправляя ему команды о создании потока, после чего он сам создает нужный канал, добавляет туда меня, выставляет нужные права. Дальнейшее управление каналом тоже происходит через бота. Если такая схема выглядит удобнее — дайте знать.

Часть вторая, про RSS

В процессе работы над Телегрегатором появилась мысль экспортировать это все в RSS-ленту. Я многократно встречал статьи, в т.ч. на Хабре, как автор читает вообще всё через rss, собирая его из разных источников. Кто-то пошел дальше: из rss собирает подборку и формирует ежедневную рассылку на почту. Планирую прийти к такому варианту. Если вы имеете такой опыт — отпишитесь, пожалуйста, в комментах, очень интересна ваша реализация.

Генераторов rss из соцсетей много, пару примеров:

Но у них есть недостатки:

не умеют читать приватные каналы

редко обновляют кеш

не отображают вложения (фото, видео, музыку)

медленно или нестабильно работают (иногда падают)

Источник

Микросервисы на php и swoole для конвертации телеграм каналов в RSS

В предыдущем посте я рассказал про то, как настроить и использовать php телеграм клиент madelineProto для парсинга постов. Но при использовании библиотеки я столкнулся с несколькими недостатками:

  • Долгая обработка запросов из-за авторизации телеграм клиента;
  • Неудобная настройка;
  • Проблемы с отдачей изображений из постов.

Поэтому решил создать два микросервиса на php для парсинга телеграм каналов, используя асинхронное расширение swoole. Теперь эти пакеты упрощают и ускоряют работу с telegram api (не путать с bot api) в нескольких моих проектах. Хочется поделится ими и услышать мнение других разработчиков.

Под катом расскажу об архитектуре, использовании разных областей видимости в swoole server и устранении последствий ошибок в сторонних библиотеках и внешних api. Ссылки на репозитории с исходным кодом и на тестовый сервер — в конце поста.

Общая архитектура

Изначально планировался один пакет, который выступал бы в качестве парсера telegram и генератора RSS потоков. Но в процессе разработки код становился все более и более неподдерживаемым. Стало ясно, что нужно строже следовать одному из базовых канонов разработки: метод или библиотека должны решать только одну задачу.

В результате декомпозиции появились два микросервиса: TelegramApiServer и TelegramRSS.


Общая схема сервиса по генерации RSS потоков из telegram каналов

TelegramRSS
Отвечает за коммуникацию с пользователями и генерацию RSS потоков. Упрощенная схема работы:

  1. Получаем запрос от клиента;
  2. Определяем, что запросили: главную страницу, favicon, rss, json или media файл;
  3. Если пользователь сделал некорректный запрос, или слишком часто обращается к api — добавляем ip в blacklist;
  4. Если пользователь в blacklist — выдаем ошибку;
  5. Запрашиваем сообщения из телеграм канала или конкретный медиафайл из поста через http запрос к TelegramSwooleClient;
  6. Если запросили media файл: даем команду TelegramApiServer скачать файл во временную папку и вернуть путь до этого файла. Отдаем файл и удаляем его;
  7. Если запросили RSS: парсим ответ TelegramApiServer и генерируем RSS;
Читайте также:  Iptv android приставка настроить

В TelegramRSS использование swoole сервера было не обязательным, но дало небольшие преимущества:

  • Не нужен кеш для хранения черного списка ip адресов (или других данных). Все необходимое хранится в памяти, в экземпляре класса, доступном во всех запросах.
  • Проще конфигурация nginx: проксируем запросы на ip микросервиса и не беспокоимся о безопасности файлов: .env или *.session.madeline и любых других.

TelegramApiServer
Отвечает за коммуникацию с telegram api. По сути — это обертка над madelineProto, задача которой держать телеграм клиент в памяти и при получении http запроса вызывать соответствующий метод madelineProto.

Допустим, нам нужно получить 10 последних постов из канала. Пример кода из документации madelineProto:

Данный код будет выполняться минимум 1-2 секунды при горячем запуске или около 10 секунд при холодном. Большую часть этого времени занимает проверка или генерация временных ключей, соединение с серверами телеграм и авторизация на них.

Однако, если запустить swoole server, инициализировать madelineProto при запуске и в обработчике запросов использовать инициализированный экземпляр madelineProto, то мы получим сервис, который будет обрабатывать запросы за 100-200 мс. Пример простого обращения к такому микросервису, дающего аналогичный результат:

Основные преимущества микросервисного подхода:

  • Снижение времени обработки запросов с 1-10 секунд до 50-300 мс. за счет авторизации при запуске сервиса, а не при каждом запросе.
  • Упрощение кода
  • Снижение размера проектов. Нет необходимости включать madelineProto в зависимости, достаточно просто обращаться к нужному адресу из любого проекта (можно даже настроить прием запросов из внешних источников)
  • Можно запустить неограниченное число клиентов с разными аккаунтами на разных портах

Swoole: использование

Swoole сервер дает огромные преимущества, но сложно ли его запустить? Совсем нет.
Разберем на примере:

Это лишь часть кода из библиотеки TelegramApiServer, но она дает представление о том, как запустить http swoole сервер, и как использовать разные области видимости.

Swoole: установка

Надеюсь, вы уже хотите начать использовать swoole в своих проектах, поэтому распишу чуть подробнее про установку.

Для установки необходим, как минимум, виртуальный сервер с KVM, для возможности установки расширений php. На ubuntu 18.04, с php 7.3 сделал следующее:

Далее последуют вопросы касательно включения разных модулей. В моем случае я сделал такой выбор:

На MacOs вместо apt-get можно использовать brew.

При наличии включенного Xdebug, при старте скрипта, swoole предупреждает, что могут возникнуть проблемы с дебагом внутри корутин. Но я с ними так и не столкнулся.

Особенности работы микросервисов

Swoole server — это демон, который должен работать непрерывно. Значит необходимо обеспечить автоматическое восстановление работы после падений. Для мониторинга и перезапуска я использую supervisor.

Содержимое .conf файла для TelegramApiServer:

Для TelegramRSS конфигурация аналогична.

Логи в supervisor отключены, так как логирование реализовано внутри пакета. Главные параметры — это `autostart=true` (запускает микросервис при запуске системы) и `autorestart=true` (безусловный перезапуск, даже если работа была завершена без ошибок).

В последних версиях madelineProto есть неприятная особенность: при получении запроса после 10-15 минут без запросов, библиотека выдает неустранимую ошибку. После этого требуется ее перезапускать. Все запросы во время перезапуска не будут обработаны и завершатся ошибкой.

Для решения этой проблемы я сначала использовал рестарт по крону:

Но условия возникновения фатальной ошибки и интервал точно установить не удалось. Вероятно, в часы пик телеграм агрессивнее закрывает неактивные соединения, и такой сценарий не предусмотрен в библиотеке. Но во время рестарта сервис гарантированно был недоступен, что было неприемлемо.

Сейчас реализован более элегантный костыль: TelegramApiServer завершает работу при определенном виде ошибки в madelineProto и происходит перезапуск через supervisor. TelegramRSS ждет, когда сервер восстановит работу и дублирует ему запросы. Таким образом, нет ненужных рестартов. А если при обработке запроса TelegramApiServer упал, то запрос все равно будет обработан корректно, хоть и с задержкой в несколько секунд.

Используя swoole версий 2 и 4 в течении последнего года, могу сказать: на умеренных нагрузках он стабилен, не вызывает утечек памяти и вполне подходит для продакшена. Но нужно тщательно тестировать все зависимости и свой код, что бы не было никаких не перехваченных \Throwable.

Выдерживает без проблем.

Среднее использование памяти (параметр RSS из утилиты ps): до 30 МБ для TelegramRSS и до 60 МБ для TelegramApiServer.

Источник

Оцените статью