Если вернуться во времена, когда гугл был корпорацией добра, трава была зеленее, а я читал новости в google reader - это было прекрасное время. Мы подписывались, на то что нас интересовало по RSS и читали в Google Reader (RIP), чистые статьи без рекламы и назойливых баннеров. После, случился бум твиттера и многие новостные порталы начали постить заголовки с ссылками туда.
В целом после скитаний я снова вернулся в это прекрасное время. Помогу вернуться и вам.

Мой интернет сегодня

Суть проблемы

С 2007 (никто и никогда..) всё поменялось и многие сайты дабы затянуть пользователя к себе и заработать на этом, начали в RSS показывать ленту твиттера, то есть первые N символов статьи или если есть краткое описание о чём она и дальше ссылка на сайт чтобы почитать полностью. Собственно именно это убило в RSS смысл, что доставка происходит контента сразу и главное для того времени - что можно читать оффлайн в метро например. И это мы тоже исправим.

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

Сразу скажу, я свой выбор остановил на FreshRSS, как читалки. Но есть ещё варианты, которые можно поднять у себя, тут на ваш вкус и цвет, только opensource с возможностью развернуть у себя:

Выделю необычную читалку от vas3k сообщества

  • Infomate.club - Это не совсем обычная читалка. Можете посмотреть на сайте, её минус, что она будет перебрасывать вас читать статью на оригинальный сайт. Но её преимущество, но наведению показывает превью стати которое сделано машиной с помощью NLP. Она старается ёмко передать суть. Не совсем вписывается, в то что хотелось бы. Но может заинтересует.
    git-repo, docker-compose

Подготавливаем сервер

Для начала нам понадобится, любой компьютер/сервер. Можно даже ваш собственный, если вы читаете с него. Поставить туда docker и docker-compose, но можно просто только docker.
Далее, мне так удобнее, может будет удобнее и вам, поставить Portainer (в нём уже есть docker-compose):

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
2 команды и готово

Заходим на http://[ip-где-подняли]:9000 и настраиваем первый вход, запоминаем логин/пароль в какой нить BitWarden например и на этом пока что всё.

Почему docker и docker-compose? Как по мне - это стало стандартом де-факто в мире. Это самый простой способ запустить любое приложение, без чтения тонны мануалов, установки нужных библиотек и тд. Особенно если хочется попробовать много разного и после выбрать что-то одно, удалив остальное безвозвратно.

Получаем полный текст из RSS

Надеюсь было время покликать и определиться с выбором читалки. Следующее - основное что будет нужно, это решить проблему, полного текста статей вместо обрезков. И для этой задачи нам поможет Full-Text RSS изначально, как я понял он платный даже для self-hosted, но вот версии старее есть и бесплатно. И так же с докер образом. Сразу скажу, иногда бывают сбои и не всегда корректно подтягивает текст статьи. Могут выпасть экзотические блоки если они есть. Но в целом на 95% результат отличный.

version: '3.1'

services: 
  full-test-rss:
    image: heussd/fivefilters-full-text-rss:latest
    container_name: full-text-rss
    restart: always
    ports:
      - "50000:80"
Docker-compose, чтобы поднять наш сервис полных статей.

Задача сводиться до банального. Найти RSS поток, проверить, выдаёт он полные статьи или только заголовок с описанием. Если полная - оставить как есть, если же урезанная, завести через сервис, который отдаст снова rss, но с полным текстом.

Поднять паруса!

Дальше будет пример, как поднять FreshRSS, но сути для других, это взять другой docker-compose и вставить его.

Для начала запустим сервис полного текста:

1. Заходим в Portainer переходим в Stacks

2. Справа тыкаем в "+ Add stack"

3. И заполняем Name - в самом начале, любое понятное вам

4. Далее вставляем docker-compose из прошлой части

5. И последнее нажать "Deploy the stack" в самом низу

Всё готово, можете заходить на сервис. Он будет там же где и Portainer, только порт теперь у него 50000, то есть http://[ip-где-подняли]:50000 и должны увидеть

Ну и осталось теперь запустить читалку и попробовать добавить первые новости.

Для этого снова повторяем шаг с 1-ого по 5-ый, только на 4-ом шаге пишем другой docker-compose. Для Fresh RSS это:

version: '3.1'

services: 
  freshrss:
    image: lscr.io/linuxserver/freshrss:latest
    container_name: freshrss
    restart: unless-stopped
    ports:
      - "49999:80"
    volumes:
      - freshrss:/config
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/London

volumes:
  freshrss:

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

Первые новости!

Для яркого примера возьмём habr.ru у них RSS поток найти легко, он прям в блоке "Все потоки". Но не всегда это так же легко. Для Chrome можно использовать Get RSS Feed URL (gh) для Firefox Awesome RSS ну или просто руками находить, тоже вариант.

И так добавляем хабр https://habr.com/ru/rss/all/all/?fl=ru и понимаем, что у нас только описание есть, без полных статей.

Чтобы получить их, открываем наш сервис full-text-rss, который у нас на 50000 порту. Вставляем ссылку на RSS туда и ставим получать статей (Max items) 10 больше можно, но смысла нет, а нагрузка большая, да и редко между проверками новых статей их будет больше десятка. У меня стоит 10 и этого достаточно. Нажимаем "Create Feed"

И вауля! У нас RSS поток с полными статьями, копируем полученный URL и теперь его используем для подписки, он такого вида должен быть:
http://[ip-где-подняли]:50000/makefulltextfeed.php?url=sec%3A%2F%2Fhabr.com%2Fru%2Frss%2Fall%2Fall%2F%3Ffl%3Dru+&max=10&links=preserve&exc=&submit=Create+Feed

Маленький трюк для быстрого наполнения ленты.
Этот URL это запрос с параметром, то есть можно его руками собрать и сразу добавлять уже в RSS не заходя в сервис
http://[ip-где-подняли]:50000/makefulltextfeed.php?url=sec://[тут-ссылка-без-https://]&max=10

Не все сайты плохие, проверьте, может и нет смысла получать полный текст, так как он уже полный.

Про мобильные приложения

У большей части есть f-droid версия. У всех есть web. Но на сегодня, если нужно чтобы был оффлайн, выбирайте с приложением и будет вам счастье.

Если есть что дополнить, пишите в комментарии.