Объединяем все Telegram-каналы в одну ленту

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

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

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

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

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

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

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

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

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

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

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

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

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

Что еще капотом:
  • telethon как telegram-клиент

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

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

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

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

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

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

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

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

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

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

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

Сейчас процесс выглядит так:

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

  2. Создаёте новый канал (приватный или публичный), который будет выступать в роли потока (ленты)

  3. Находите через поиск и добавляете в поток пользователя Телегрегатор (@telegregator) и даёте права на публикацию сообщений (через меню администраторов).

  4. Телегрегатор поздоровается и покажет доступные команды.

  5. Отправляете команду /join @имя_канала (из. п.1), после чего Телегрегатор подписывается на нужный канал. Можно указать пачку каналов, через пробел (займет некоторое время, ограничение порядка 50 каналов в минуту).

  6. Можно просто переслать в поток сообщение из любого канала, Телегрегатор сам подпишется на канал.

  7. Все новые сообщения из подписанных каналов Телегрегатор будет прислать в этот поток.

Потоков может быть несколько. Вы можете добавлять для каждого потока фильтры по стопсловам (это пока тестовая функция, так что если вдруг что-то перестало работать – сбросьте фильтры).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • http://feed.exileed.com/

  • https://rsshub.app/telegram/channel/temablog

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

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

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

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

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

Поэтому, вторым очевидным шагом стало создание моста telegram->rss. По факту, это тот же клиент-Телегрегатор, который по имени канала получает последние сообщения из канала (без подписки) и возвращает в виде rss-ленты. В планах сделать подписку на запрашиваемый канал, тогда можно будет получать ленту и из приватных каналов, но пока так. Отпишитесь, если такой функционал востребован. Проверить можно здесь: http://tg2rss.prosto-tak.ru/.

По вопросам или замечаниям можете писать сюда в личку, в телегу @parotikov или на nik.parotikov@gmail.com.

P.S. В “Я пиарюсь” не хватает кармы. Для телеграма вообще нет хаба, странно.

P.P.S. Вышло продолжение: https://habr.com/ru/post/545580/

Бизнес

Агентство deco.agency создало Telegram-бота, который соберет все каналы, на которые вы подписаны, в одну ленту. Мы разобрались, как им пользоваться.

vctr.media-1551693331.jpg

Что случилось

deco.agency создало бота SingleFeedBot. Он собирает посты со всех Telegram-каналов в одну новостную ленту, как в соцсетях.

Что может SingleFeedBot

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

vctr.media-1551693101.jpg

Как пользоваться ботом

Нужно перейти по ссылке и нажать «Start». Теперь добавляем в бот избранные каналы. Например, пишем @vctr.media, чтобы добавить в ленту Vector (да-да, мы тоже есть в Telegram). Когда в каналах появятся новые посты, лента начнет обновляться. Количество каналов не ограничено.

Чтобы удалить канал, нажимаем на «Settings» внизу — бот покажет список добавленных каналов. Щелкаем на нужный и нажимаем на кнопку «Remove», а затем на «Yes, I’m sure».

–>

Список каналов телеграмм включает в себя лучшие русскоязычные сообщества. Здесь вы найдете все тематики каналов: новостные, развлекательные и т.д.

Total 77590 results

  • “Фильмы Сериалы Кино” Телеграмм канал @netflix_filmy Количество подписчиков: 1152600Дата обновления: 2021-02-24 Переходов в канал: 0 ( “Психология” Телеграмм канал @tg_psy Количество подписчиков: 1123428Дата обновления: 2021-03-14 Переходов в канал: 0 ( “TELEGRA4CH” Телеграмм канал @of4chan Количество подписчиков: 1062704Дата обновления: 2021-03-14 Переходов в канал: 0 ( “AndroHack” Телеграмм канал @AndroHackApp Количество подписчиков: 927399Дата обновления: 2021-03-14 Переходов в канал: 0 ( “Mash” Телеграмм канал @breakingmash Количество подписчиков: 890199Дата обновления: 2021-03-14 Переходов в канал: 0 ( “Глаз Бога | Eye Of God” Телеграмм канал @eyegod Количество подписчиков: 864264Дата обновления: 2021-03-14 Переходов в канал: 0 ( “E V O L U T I O N” Телеграмм канал @evopublik Количество подписчиков: 842398Дата обновления: 2021-03-14 Переходов в канал: 0 ( “Фильмы | Сериалы” Телеграмм канал @movies_filmy Количество подписчиков: 833578Дата обновления: 2021-02-24 Переходов в канал: 0 ( “App Store ” Телеграмм канал @AppStorePlus Количество подписчиков: 784036Дата обновления: 2021-03-14 Переходов в канал: 0 ( “? Easy APK” Телеграмм канал @EasyAPK Количество подписчиков: 780994Дата обновления: 2021-03-14 Переходов в канал: 0 ( “СЛЕЖКА” Телеграмм канал @sms_ot_sIezhki Количество подписчиков: 723967Дата обновления: 2021-03-14 Переходов в канал: 0 (171)

24 Января 2018

8 232

Расскажем как работает наш бот и почему стоит добавить его себе.

Разработка

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

Как работает?

Работает бот очень просто, чтобы создать ленту, нужно переслать боту последние посты из каналов на которые вы подписаны. Он занесет их в ваши каналы и будет постоянно слать оттуда новые сообщения. Вот и всё, вот так просто работает бот. Telegram Lenta – @telelenta_bot

Будем рады, если вы добавите бота к себе и он окажется для вас полезным:)

Используемые источники:

  • https://habr.com/ru/post/544414/
  • https://vctr.media/telegram-bot-lenta-16468/
  • https://ru.telegram-store.com/catalog/channels/lenta-ru-rss/
  • https://spark.ru/startup/telegram-lenta/blog/35239/objedinyaem-vse-telegram-kanali-v-odnu-lentu

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий