Как я чтение всего контента на RSS переводил

в 9:20, , рубрики: Feedly, github, Inoreader, reddit, rss, YouTube, информационный поток, сохранение рассудка, социальные сети, цифровое благополучие
Обложка

Обложка

TL;DR В статье рассказывается о том, как мне удалось перевести чтение лент в ВКонтакте**, Telegram, Facebook*, Instagram**, Reddit и почтовых рассылок в единый сервис InoReader. Причем почти без написания своих велосипедов.

Дисклеймеры

Общий дисклеймерО личности автораОтказ от ответственностиОб использовании нейросетей

Аннотация

В статье рассказывается о том, как автор дошёл до жизни такой, когда ему потребовалось единое "окно" для чтения контента. Описывается, что это за контент (в основном текстовый и мемчиковый), сколько времени уходило на его переваривание (до-фи-га) и как автора достала необходимость прыгать по разным сервисам для прочтения чего-либо. Написано, сколько времени затрачено на миграцию (неделя), проблемы при миграции, стоимость (€ 56) и собственно цель всего мероприятия.

Введение

Если хотите читать о технической составляющей, то перейдите сразу к следующему разделу. Тут будет предыстория.

Так уж повелось, что первым сервисом для потребления контента у меня стал VK**, в котором зарегистрировался где-то в 2010-м. Ну, тогда выражения "потребление контента" особо не было, а за его озвучивание в моей деревне можно было получить статус "по горшкам дежурного" и заодно ещё и классическое "по морде".
Вовремя не спрыгнув с соцсеточки, когда появились не то, что первые звоночки - а уже целый букет цветочков, я провёл исследование запощенного и потребляемого контента, стоимости миграции, поиск альтернатив (их нет до сих пор). Как итог, решил всё равно остаться в ВК, предаваясь забвению в виде чтения постироничного контента, за ор после которого и присесть на бутылку побольше не жалко. Теперь я подписан на примерно 300 пабликов по копипастам, мемам, разного рода постиронии и метаиронии, которые разбиты на 7 фидов. Рекомендую!

Пытался что-либо писать на Facebook*, но после парадигмы пользования VK** "мордокнига" никак не поддавалась освоению. Ни в 2013-м, ни в 16-м, ни в 20-м, ни в 22-м. Попытки были ленивые, но настойчивые, пусть и размазанные по времени. Вердикт - "ниасилил", и никогда не осилю. Зато Meta Business Suite (там тоже можно постить) прям неплохо зашёл, но об этом когда-нибудь потом...

Что там из альтернатив? Instagram*, который функционально настолько урезан, что отошёл от формата квадратных фото лишь пару лет назад? X/Twitter с ограничениями СМСки и невозможностью оставлять непубличные комментарии к посту? Не смешите мои подковы, они даже 5% от функционала ВК не имеют, лол. Ну, и плюс, там никого из моих постироничных знакомых с Двача особо нет.

Справедливости ради, создать соцсеть, которая настолько широчайше поддерживает различные типы контента и одновременно гибкое в настройке - это надо постараться. У Павла Дурова получилось - и миру явился Telegram. Проблем у него хватает, но с точки зрения публикации и чтения разнородного контента он максимально приблизился по возможностям к ВК. Им и пользуюсь по сей день, 250 каналов разбросаны по 8 папкам.

А ещё я подписан на различные еженедельные бюллетени с краткой сводкой чего угодно - по фронтенду, бекенду, обновлениям Windows. Таких с десяток подписок на электронную почту наберется.

В последние несколько лет, особенно после четвёртого "клубничного" бунта на Пикабу***, я окончательно и публично отказался от портала, основательно засев на местном r/Pikabu и на Reddit в целом. Кроме него, ещё слежу за новыми сообщениями в нескольких форумах типа iXBT, Ru-Board, OSZone, Cyberforum, 4PDA.

Помимо всего вышеперечисленного, слежу за артами на DeviantArt, Pinterest, ArtStation, читаю в Feedly сайты по хайтек-тематике. Вроде бы перечислил всё. В общем, наберется с 700-800 источников, контент которых я потребляю.

Серьёзная проблема заключается в том, что каждый источник контента требует присутствия на своей площадке и, как правило, установки своего приложения. Это неудобно, а сервисы, как вы уже поняли, у меня разнородные и чуть ли не взаимоисключающие. Почему бы не попробовать собрать все эти камни бесконечности весь этот поток информации в одном месте?

Как решить проблему?

Чтобы понять, что проблема есть, мне пришлось дожить до 2024 года. Три монитора, на которых в обязательном порядке открыты все мыслимые соцсети и мессенджеры: VK**, FB*, X, TG, WA*, Reddit, DA, Pinterest, ArtStation, форумы - решительно не давали работать, а постоянное отвлечение внимания и переключение контекста разгоняли мой СДВГ до неприличных уровней. Решать непосредственно корень проблемы - это не про меня, мне по нраву купировать проблему и написать о её героическом "решении" на Хабре.

Итак, вот то, что мы имеем, ну, или дано:

  • Как я чтение всего контента на RSS переводил - 2 VK**: ≈300 источников (публичные страницы, сообщества, люди);

  • Как я чтение всего контента на RSS переводил - 3 TG: ≈250 источников (каналы);

  • Как я чтение всего контента на RSS переводил - 4 FB*: ≈30 источников (группы, люди и страницы);

  • Как я чтение всего контента на RSS переводил - 5 Как я чтение всего контента на RSS переводил - 6 Как я чтение всего контента на RSS переводил - 7 Как я чтение всего контента на RSS переводил - 8 Форумы: ≈50 источников;

  • Хайтек и ИТ новости, уже оформленные в RSS: ≈40 источников;

  • Как я чтение всего контента на RSS переводил - 9 X/Twitter: ≈30 источников (публичные аккаунты);

  • Как я чтение всего контента на RSS переводил - 10 Бюллетени на почту: 10 шт.;

  • Как я чтение всего контента на RSS переводил - 11 Reddit: 8 источников (мои публичные мультиреддиты + r/Pikabu с дружественными сабами);

  • Как я чтение всего контента на RSS переводил - 12 Как я чтение всего контента на RSS переводил - 13 Как я чтение всего контента на RSS переводил - 14 Арты: 3 источника.

Может, ещё что-то не учел, но выходит до 700 разношёрстных лент.

Задача: хочу читать всё в едином сервисе.

Способы решения проблемы:

Из доступных есть:

  1. Перенести всё в Telegram. Пошерстив по Хабру и GitHub'у, заметил, что уже есть кое-какие боты, которые умеют конвертировать RSS из сайтов, в сообщения. Как пример.

    • + Из плюсов: тексты и разные медиа будут загружаться, скорее всего, в облако Telegram и оставаться там "навсегда". Ну, как минимум, явно дольше, чем в CDN;

    • - У этого решения есть минусы: лента публикуется в личном диалоге с ботом или в группе, плохо тегируется и маркируется, поиск затруднителен. Единая лента часто обновляется, можно случайно сбить место чтения и улететь куда-то вниз. Даже если будет несколько групп с разными источниками контента, всё равно тяжело систематизировать материалы и экспортировать их куда-то ещё - Telegram ведь тоже платформа, заинтересованная в купировании аудитории внутри себя. А ещё у Павла Дурова очень серьёзные планы на подписку Premium, которую я приобретать не собираюсь, и иногда ради преимуществ подписки разработчики отбирают функционал у бесплатных клиентов. Мало ли, вдруг в течение 10 лет боты станут платными? Да и вообще есть риск, что Telegram исчезнет или (д)эволюционирует до чего-то такого, что будет несовместимо с моей задачей.

  2. RSS (и Atom).

    • + Легко создать, легко подписаться. Тим Бёрнерс-Ли доволен ваш вклад в децентрализацию Сети, вам выдан кошка-веб1.0-жена. Все остальные плюсы полностью ложатся на клиент, который будет читать фиды. Свобода, кристально чистая и идентичная натуралам! Прям как в 00-х;

    • - Все современные социальные сети и мессенджеры будут максимально сильно сопротивляться потреблению "их" контента вне их юрисдикции, потому что через RSS на рекламе зарабатывать тяжело, согласитесь? Это будет тяжелая битва.

Выбрал второе по причине децентрализованности, зрелости технологии и просто по тому факту, что это тупо XML'ка, простая и понятная. Не какой-нибудь B2C SaaS, который сегодня есть, а завтра он пропадёт или будет ограждён пейволлом. Отличный инструмент, простой и надёжный.

Гипотеза: RSS может объединить контент со всех источников в любой читалке RSS-фидов. Ведь фид - это всего лишь подмножество XML, а сервер для выплевывания XML можно и самому накодить, в крайнем случае.

Требования: "единое окно" для чтения контента должно быть доступна на любой популярной платформе (Windows (web) и Android), а также должно поддерживать получение информации от 3000 источников и больше, в идеале не должно быть ограничений по количеству читаемых RSS-фидов.

Полезные ресурсы, выбор клиентов и схема работы

Где окунуться в мир RSS?

Что ж. С RSS я знаком, в Feedly вон уже какие-то подписки крутятся, они читаются, но всё как-то не всерьёз.

Я уж даже поначалу и не знал, как основательно подступиться. Давайте прочитаем про RSS, пройдясь по списку популярных ресурсов:

  • All-about-RSS: лучший сборник в Интернете по всем сервисам, утилитам и исходникам, которые относятся к этой технологии;

  • Топик на 4PDA где-то под Технотрепалкой: всё объяснят, подскажут, для новичков обряд посвящения (надо поплеваться в иконку Feedly и публично от него отречься);

  • r/RSS, чтобы почитать о свежих анонсах и актуальных ответах пользователей.

Читаем вдумчиво день-два, представляем себе принципиальную схему формирования фидов.
Спасибо Web 2.0, где после вливания сотен нефти где-то с начала 10-х годов связность между крупными платформами настолько ослабла, что мне надо аж думать, как вычленить контент из какой-нибудь соцсеточки!
Так как соцсети, мессенджеры и прочие платформы для публикации контент стараются максимально долго удержать набранную аудиторию внутри себя, они очень слабо интегрированы с остальным вебом, но программно автоматизировать веб-скрапинг текстов и картинок можно даже с них.

Выбор читалки

А ещё давайте пройдемся по кросс-платформенным RSS-читалкам. В общем-то, после небольшого исследования осталось только два кандидата:

  1. ❌ Feedly - драконовские ограничения на бесплатном тарифе, платный тариф только на год и то имеет ограничения по количеству источников. Есть различные интеграции, местный ИИ, threat hunting, слежение за упоминаниями бренда. В общем, зрелое, надежное и дорогое решение, за которое (так думают авторы) можно и приплатить побольше;

  2. ✅ InoReader - чуть менее драконовские ограничения, платный тариф со скидкой вполне себе демократичен, широкая возможность для разных автоматизаций, правил, фильтров, и доп. сервисов типа тегирования материалов, избранного, списки для чтения, пересылка, реэкспорт лент, социальные функции, подборки и прочее-прочее... А самое главное - нет лимита по количеству источников, ещё можно реэкспортировать созданные тобой фиды кому-нибудь ещё.

Feedbin, Feeder, Digg и прочие облачные решения отпали по причине незрелости или меньшем количестве фич и лимитов при сопоставимой цене.
От self-hosted решений я отказался, так как в таком случае поддержка работы сервера, покупка железа, пролонгация и прочие рутинные вещи ложатся на мои плечи, а на них уже положены десятки проектов, которые я должен поддерживать. Ещё минус - как правило, self-hosted требуют некислого такого объема постоянной памяти для хранения базы данных. При 700 источниках с их картинками, нужен сервер хотя бы в 100 ГБ памяти - это если брать с сильным запасом. И то БД придется регулярно, раз в пару лет, подчищать, я боюсь...

-56 € с баланса как нефиг делать!

-56 € с баланса как нефиг делать!

Как вы поняли, был выбран InoReader. Прости, Feedly, но твой основной конкурент на лопатки кладёт всех, с учетом моих требований о большом количестве источников.
Донатнул на годовой тариф, чтоб жаба заставила меня пользоваться им и отрабатывать каждый потраченный евробакс.

Кто будет парсить вилкой это всё?

Если кратко, то в основном Как я чтение всего контента на RSS переводил - 16 RSS-Bridge - self-hosted сервис для удобного "выдирания" контента откуда угодно (если сообщество озаботилось написанием кому к нему), есть публичные серверы для разных локаций. Все мои источники информации им поддерживаются: VK**, FB*, IG*, X, TG... удобно! Оно на колени кладёт любые PolitePol, RSS.app, TT-RSS и прочие "выдираловки" контента по финансовой и технической доступности.

RSS-Bridge умеет предоставлять ленты в виде Atom, MRSS (пользуюсь им по дефолту), JSON, SFeed и просто в PlainText.

Решено было делать так:

  1. RSS-Bridge выдирает контент, формирует RSS;

  2. InoReader на него подписывается.

Все довольны? Ну, почти...

Моя борьба (с VK**)

Что я обычно читаю в ВКшечке

Что я обычно читаю в ВКшечке

Началось утро в деревне... По итогам двухдневных тестов InoReader с ссылками на ВКонтакте** в связке RSS-Bridge замечено, что где-то половина запросов валится из-за агрессивной защиты соцсети. А ведь это всего лишь 150 источников из 300. Кстати, я тогда ещё понятия не имел о других публичных экземплярах RSS-Bridge на других доменах и локациях, как-то мимо информация прошла.

Зато встретил золото - это woxcab/vkrss, PHP-сервер для выдачи постов из VK** в RSS. Очень подробные инструкции в комплекте. Минус - не докеризирован.

Форкнул, за два дня упаковал, как умел, в Docker этот проект, так что его можно пощупать и развернуть здесь (позже солью в master). Бонусом можно спрятать access_token от приложения VK** в .env-файл.
Арендовал дешманский сервер в PureServers, залил и запустил. Работает!

Как пользоваться (кратко, в ином случае читаем инструкцию):

  1. Заимейте свой домен, укажите A-запись на IP вашего сервера;

  2. Регистрируем Standalone-приложение в VK**;

  3. Проходим Authorization Flow (не Implicit Flow) в два этапа, получаем бессрочный токен;

  4. Токен и прочую инфу вписываем в .env-файл;

  5. Запускаем docker compose up -d certbot webserver для получения сертификатов;

  6. После успешного получения SSL-сертов раскомментируем sed -i 's/### //' templates/default.conf.template SSL-секцию в конфиге NGINX;

  7. Полноценно запускаем: docker compose restart webserver && docker compose up -d php.

Теперь сервер будет выдавать RSS на любой запрос а-ля: https://<ВАШ_ДОМЕН>:8082/api/vkrss/index.php?id=<ЮЗЕРНЕЙМ_ПАБЛИКА_ВК>&vkrss_access_token=<ВАШ_ТОКЕН_ДОСТУПА_В_DOTENV>. Практически всё в этом URL конфигурируется.

Скорость выполнения довольно медленная: 3-7 секунд - но не критичная для InoReader. Ни одной ошибки при обновлении 300 лент в ВК!

Ru-Board наносит ответный удар

Легендарный форум, который даже в век доминирования социальных сетей и мессенджеров и после внутренних трясок продолжает доживать жить!

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

К счастью, нашёлся умелец, который сделал бо́льшую часть работы за меня. Помог тот же RSS-Bridge!

А что остальные?

С ними проблем не было. RSS-Bridge всему голова! Вбиваешь туда, к примеру, Telegram - он тянет с Телеграма контент как миленький. Главное, чтобы канал был публичный. С другими формумами тоже 0 проблем - в них нет мега-тредов, как в Ru-Board, а подписки на новосозданные топики форумы умеют предоставлять.

Reddit по-прежнему поддерживает RSS, несмотря на дальнейшее прикрытие сторонних приложений и своего API, и всё это ради выхода на IPO.

Подписки Youtube импортировались двумя кликами. Бюллетени я подписал, создав для каждого отдельный почтовый ящик (InoReader имеет такую фичу) и переподписав туда еженедельные рассылки.

Вот как выглядят подписки Youtube в интерфейсе InoReader. Я так музыку и слушаю

Вот как выглядят подписки Youtube в интерфейсе InoReader. Я так музыку и слушаю

Полезные советы для массового импорта в InoReader (и в другие сервисы, поддерживающие импорт OPML)

В Inoreader есть фича по массовому импорту ссылок на фиды, но только в виде OPML-файлов. Если вам лень вручную импортировать свои подписки, делаем следующее...

  1. В процессе переноса выяснилось, что мне лень выполнять ручные операции, поэтому написал парочку скриптов:

    1. Можно экспортировать все ссылки из определенной ленты VK**: https://gist.github.com/Kenya-West/d2fc748958a88e8b7288bba6179f2b7f;

    2. Можно экспортировать все ссылки из определенной папки TG: https://gist.github.com/Kenya-West/0e489eb750bbdd240d372032c8b7d595.

  2. Как только получил нужные юзернеймы пабликов в VK**, я сформировал из них ссылки:

    1. Для VK**: https://<ВАШ_ДОМЕН>:8082/api/vkrss/index.php?id=<ЮЗЕРНЕЙМ_ПАБЛИКА_ВК>&vkrss_access_token=<ВАШ_ТОКЕН_ДОСТУПА_В_DOTENV>, ну, тот самый из секции выше.

    2. Для TG: https://rss-bridge.org/bridge01/?action=display&bridge=TelegramBridge&username=%40<ЮЗЕРНЕЙМ_ПАБЛИКА_ТГ>&format=Mrss.

  3. Список этих ссылок, разделенных новой строкой, я вставил в сервис OPML Maker и получил готовый OPML файл. Можно создать несколько OPML файлов, каждый для определенной папки в InoReader;

  4. Импортировал это дело в InoReader. Для VK** пришлось ждать довольно долго - для каждого паблика лента формировалась на моём сервере до 7 секунд, а таких лент 300. Но в итоге всё успешно импортировалось!

Улучшения качества жизни

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

Telegram

По TG вышло лучше, чем я ожидал! RSS-Bridge выдает ленту со встроенным тегом <video>, который можно смотреть, кликнув по картинке... но ничего не происходит. Оказалось, надо вручную через правую кнопку мыши включить элементы управления у видео и вручную же его запустить.
Гениально, InoReader, просто гениально! Значит, надо это автоматизировать.

VK**

С VK** вышло сложнее. Видео точно не присутствует на ленте, зато есть картинка со ссылкой на видеоролик. Можно было бы родить <iframe> для вставки видосика, но всё, как всегда, сложнее, чем вы думаете - для встраимового контента нужен ещё и параметр hash, который можно получить через API ВКонтакте**.
Создаём ещё одно Standalone приложение "под себя" или пользуемся уже готовым VKHost для получения access_token. Если есть какие-то баги при авторизации (например, VK забыл выдать грант на video), можно указать в redirect_uri=https://oauth.vk.com/blank.html, потому что где-то в феврале лучшее в мире API авторизации сломалось и до сих пор не починилось.

Решение этих двух проблем - готовый userscript

Запилил скрипт (нужен Как я чтение всего контента на RSS переводил - 19 Tampermonkey или аналог), которые решает эти две проблемы с TG и VK**:

  1. Автопроигрывает видео и включает для него контролы в InoReader;

  2. Вместо картинки подставляет видео из ВК (после установки скрипта надо нажать на значок Tampermonkey, выбрать скрипт и нажать Add VK** Access Token и вставьте токен).

Если уже установлен Как я чтение всего контента на RSS переводил - 20 Tampermonkey: Установить | Greasyfork (cuming soon...)

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

Ну, и всё, работает! Читаем!

Ну, и всё, работает! Читаем!

Итоги

Итоги миграции

Итоги миграции

В общем, можете сами заценить, сколько в среднем накапливается новостей за сутки:

4000 новостей в сутки

4000 новостей в сутки

Ну, удачи мне, пытающемуся прочесть все эти мемчики, новости, статьи и т. д.

Все подписки работают стабильно, ошибок пока что нет. Это по итогам недели эксплуатации.

С привычкой чекать новости в TG, Reddit и VK** я разобрался сразу на следующий день, заставив себя сидеть в InoReader. Буквально за один день привык к его интерфейсу и, как видите, немножко улучшил его UX под себя.

Критика решения

Ну, вот, вы скажете: "Опять облако!", "Почему не self-hosted?" - но я вам отвечу, что облачное решение в моих условиях явно будет надёжнее, требующее меньше внимания к обслуживанию. В случае с InoReader точка отказа одна (ну, две, если хуситов добавить), а у какого-нибудь TT-RSS на пару-тройку больше: может отвалиться сеть, провайдер может накосячить, в датацентр прилетит ракета - а у тебя бекапов нет (ну, допустим, они настроены, но не в этом суть). Плюс у меня вообще не хватает времени нормально настроить весь конвейер в парадигме self-hosted. Ведь если на постройку облачного пайплайна ушло до недели, то сколько отожрёт развертывание, настройка и тестирование всех решений на своём сервере?

С привыканием реально проблем нет, за один день освоил всё, научился хоткеям и дальше только в нём и сижу. Заставить себя пользоваться InoReader удалось на удивление легко - мне почему-то удалось обмануть мозг и не ждать 21 день, пока привычка будет формироваться. В общем, "перепрыгнул" я очень легко.

На самом деле моё решение - не чисто облачное, а гибридное, так как большая часть контента (подписки VK** и TG) сформированы промежуточными сервисами woxcab/vkrss и RSS-Bridge. Но этому есть причина - изначальные платформы максимально закрываются от внешнего веба и RSS-ленты не предоставляют, поэтому фиды формируются не напрямую.

Выводы

Мой путь самурая рекомендуется всем тем, кто устал от постоянного переключения между разными сервисами, чтобы читать контент. Конечно, намного удобнее читать всё в одном месте. С привыканием к InoReader у вас, скорее всего, проблем не будет. Если не хватает бесплатных лимитов, то есть оплата за месяц или за год. Выдирать контент из VK** и TG тяжело, но возможно. На подобную миграцию с помощью моей статьи у вас может уйти времени меньше, чем у меня (менее недели). Считаю, что моя связка была лучшим выбором из существующих, с учетом моих требований.

Дальнейшие планы

  1. Есть проблема с формулами и чертежами в виде прозрачных PNG'шек на тёмной же теме:

Черные прозрачные PNG на тёмной теме

Черные прозрачные PNG на тёмной теме

Надо найти JS-библиотеку для определения палитры в картинке и затем по совпадению с паттерном применять к картинке CSS-правило filter: invert(1) и написать отдельный userscript для этого;

  1. Глянув в r/RSS, нашел прикольный воркфлоу для потребления контента. Надо изучить его попозже;

  2. GitHub научился показывать ленту активностей (жаль, алгоритмическую) на главной, надо бы научиться парсить его и формировать фид, ну, или дождаться, когда кто-то другой озаботится данной проблемой;

  3. А ещё хотелось бы иметь отдельную ленту с краткой конфиденциальной сводкой, сколько мне в личные сообщения написало людей, состояние почтового ящика поутру, погода за окном, сколько новых сообщений появилось в чатах Telegram и Whatsapp* и на какие темы. Наверное, нужно будет создать юзерботов (есть такие библиотеки) и прогонять через их массивы данных отдельную нейронку, чтобы она суммировала все эти сообщения и как-то упаковывала их в красивый отчёт;

  4. То же самое с нейросетью можно реализовать и для других RSS лент, например, новостных. Но это явно дело недолгое, так как соответствующих мощностей и, главное, времени у меня нет.


Приятного аппетита в потреблении контента!


* Компания-разработчик, Meta, Inc., обвинена в терроризме, экстремизме, пессимизме, метеоризме и прочих грехах, наказуемых в правовом поле Российской Федерации
** Принадлежат ОПГ Mail.ru Group
*** Они какашки

Автор: Иннокентий Иванов

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js