Пост состоит из двух частей: размышлений о ленте постов и описания решений проблемы. Если хотите готовое решение — можете смело скроллить 2/3 текста.

Как было раньше

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

Блоги были относительно удобными в рамках одной площадки. Вот открываешь «френдленту» в каком-нибудь «ЖЖ» и читаешь, что за последние пару дней понаписали те, на кого подписался, от новых постов к старым. Лента была единой, и в ней могли соседствовать совершенно разные мнения совершенно разных и не знакомых друг с другом людей.

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

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

Впрочем, для новостей в какой-то момент придумали формат. И потом ещё один. RSS и Atom. Это стандарты описания постов, позволяющие специальными программами загружать их и читать в виде одной или нескольких лент, не открывая сами сайты. До сих пор многие крупные интернет-СМИ поддерживают как минимум один из таких форматов, хотя, зачастую, это несколько сокращает их возможности демонстрации рекламы.

Подытожим. Были блог-платформы с едиными лентами и были отдельно стоящие новостные сайты, с которых можно было специальным софтом собирать посты воедино.

А потом пришли соцсети...

...и интернет-СМИ начали самоубийственное вторжение в ленты пользователей.

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

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

А что телеграм?

А телеграм, вообще-то, начинался, как мессенджер, в котором люди могли общаться друг с другом, но не с массовой аудиторией. Каналы в нём появились не сразу, лишь через полгода после появления стикеров, осенью 2015 года. И нынче, восемь лет спустя, многие считают их хорошей публичной трибуной. Первые клиенты для Android и iOS, к слову, вышли летом 2013-го.

Однако, даже несмотря на относительно недавнюю фичу, позволяющую переходить к следующему каналу, телеграм всё ещё фактически группирует новости по источникам, а не в хронологическом порядке.

Что плохого? На мой взгляд, это побуждает авторов наращивать частоту публикаций в ущерб их качеству. Наверху главного экрана почти всегда висят очень активные чаты и каналы, регулярно публикующие короткие заметки или мемы. Это, мягко говоря, отвлекает. У активного пользователя под этой грудой «быстрых новостей», мемасиков и заметочек от блогеров частенько остаются погребёнными редкие и ценные материалы, на вдумчивое чтение которых может потребоваться чуть больше времени, чем 8-12 секунд, за которые пролистывается среднестатистический пост. Да, формат классической общей ленты тоже подталкивал к чрезмерной лаконичности и высокой регулярности, однако в телеграме каналу важно постоянно быть на виду: пользователь читает посты из тех каналов, что висят наверху, а остальные остаются без внимания.

Если переход в соцсети был для СМИ началом самоубийства, то переход в телеграм добьёт журналистику, которую мы раньше знали. Но я уже обещал написать об этом потом.

Лирическое отступление

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

Что же делать?

Я вижу несколько вариантов, включая разработку модифицированного клиента и заваливания разработчиков петициями. Расскажу о самых простых, на мой взгляд.

Объединение посредством бота

Я какое-то время пользовался ботом, который может подписываться на много разных источников и копировать их посты в переписку с пользователем или в отдельно настроенный канал. Это относительно удобно, но гибкости всё же маловато. Хочется иметь возможность разбивать источники по категориям: тут мемы, тут мировые новости, тут новости технологий, а тут личные каналы друзей. В какой-то момент бота переклинило, он отключил все подписки, и я на него забил. Так что рекомендовать не стану: лучше разработать своего с нуля. К тому же, бесплатного лимита вряд ли хватит большинству пользователей.

Infomate

У Вастрика есть прикольный сервис: https://infomate.club. Он мне отчасти нравится «как есть»: в нём разные источники информации разделены по разным категориям, хотя дальнейшее деление на блоки довольно субъективно. К сожалению, чтобы развернуть его и настроить под себя, надо знатно помучиться. Из плюсов — он умеет аггрегировать как rss/atom, так и публичные телеграм-каналы.

Собственное решение

Раз уж механизм infomate в целом понятен, можно попробовать воплотить его в виде двух связанных сервисов.

Первый — преобразователь телеграм-каналов в rss-фиды. Механика простая: парсим последние посты, доступные на страницах вида https://t.me/s/channel_name и отображаем их в виде xml.

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

К агрегатору требований было немного: нужна возможность группировать источники по категориям и возможность развернуть локально на собственном сервере. Некоторое время назад я пользовался приложением News для Nextcloud, но оно показалось мне не вполне удобным. Поэтому после недолгого изучения возможных вариантов на Awesome Selfhosted, остановился на Miniflux. Он приятен, к нему есть официальный клиент на Android и в целом неплохой неофициальный клиент на iOS. А веб-версию можно легко затюнить собственным css. А ещё он умеет в кучу интеграций, в том числе, и в отправку новостей в телеграм-канал. Можно загнать в бесконечный цикл постинга одного и того же, хаха!

С парсером дела обстояли сложнее. Найденные публичные решения имели довольно жесткие лимиты, поэтому решено было разработать парсер и развернуть его рядом с Miniflux.

В результате получился вот такой проект. Написан на go за один вечер, но когда-нибудь я его всё же порефакторю. Можно прикрутить в две строчки к любому сервису, развёрнутому через docker compose (см пример в репозитории), или позволить ему смотреть во внешний мир, прокинув порт наружу. Пока что умеет парсить тексты, картинки и видео. В планах также ещё аудио, голосовые, стикеры, опросы и прочая куда более редкая фигня. Уже в таком виде вполне юзабельно.

Использовать очень легко. Конфигурация (пока) не требуется. Указываем вместо хоста http://tg2rss/адрес_канала и читалка начинает опрашивать фид.

О неприятном

Самое обидное в решении, которое здесь описано — это невозможность читать закрытые каналы. Я, впрочем, сильно не переживаю — крупные закрытые каналы, в основном, постят далеко не самый интересный мне контент.

Закрытые каналы действительно намного сложнее читать. Для них надо поднимать какой-то кастомный клиент телеграма, с помощью которого можно будет подписаться на канал и заглять в его содержимое. В идеале, для такой задачи надо завести отдельную учётку в телеграме, чтобы каналы не дублировались и в чатах, и в приложении, да и в целом из соображений безопасности. И в любую учётку телеграма нельзя войти просто с логином и паролем — надо вводить код. Сложно и муторно. Отложим на потом.

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

А напоследок — скрин кусочка общей ленты непрочитанных постов (обычно я читаю ленты только по категориям).

Здесь можно обсудить пост