Найти в Дзене
DeSoft.ru

Собираем единую ленту новостей с сайтов и Telegram-каналов на своем сервере

Оглавление

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

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

⚡️ Tiny Tiny RSS

В качестве RSS сервера будем использовать проект с открытым исходным кодом - Tiny Tiny RSS. В основе лежит минималистичное веб-приложение для сбора и чтения RSS-лент. Поддерживает категоризацию, метки, различные фильтры, варианты представления, кастомные темы и расширения за счет плагинов. Быстро и просто разворачивается с помощью docker.

🔹 Установка

  • Имеем виртуальную машину на Debian 12 с предварительно установленным docker.
  • Забираем с официального сайта .env и docker-compose.yml файлы.
  • Внесем несколько правок в переменные окружения, поскольку планируем использовать только в локальной сети
ADMIN_USER_PASS=admin
ADMIN_USER_PASS_ACCESS_LEVEL=10
HTTP_PORT=8280
  • Собираем и запускаем
docker compose up -d

🔹 Проверка

По адресу виртуальной машины идем в приложение через порт 8280. Здесь все интуитивно понятно - создаем новую подписку - добавляем либо адрес rss-ленты (например, https://3dnews.ru/news/rss/), либо просто ссылку на сайт (https://3dnews.ru), а приложение попробует найти его ленту и добавит в список. Настраиваем удобный вид отображения и тему, листаем сотни подгруженных новостей.

⚡️ RSSHub

Для многих авторов Telegram стал чуть ли не основной площадкой публикации собственного контента, однако, не каждый заводит отдельный сайт для дублирования своего творчества, а следовательно и подписаться на сводку новостей напрямую, без подписки на канал через мессенджер, не представляется возможным. В данном случае нам поможет еще один opensource инструмент - RSSHub, с помощью которого разного рода площадки, будь то социальные сети, видеохостинги или мессенджеры, могут быть представлены в виде RSS-ленты.

🔹 Установка

  • Разворачивается также в контейнерах. Скачиваем docker-compose.yml.
  • Поскольку reverse proxy не используем, https нам тоже без надобности, то необходимо выставить внешним 80й порт для основного контейнера вместо проставленного по умолчанию 1200, тогда ранее установленный агрегатор успешно подхватит все формируемые через RSSHub ленты.
services:
rsshub:
image: diygod/rsshub
restart: always
ports:
- "80:1200"
...
  • Собираем и запускаем
docker compose up -d

🔹 Проверка

Заходим по адресу виртуальной машины и видим страницу приветствие - сервис успешно запущен. Никаких манипуляций непосредственно с RSSHub больше делать не требуется.

🔹 Создание rss-ленты из Telegram-канала

  • Возвращаемся в Tiny Tiny RSS. Предположим, что мы хотим добавить в каталог источников Telegram-канал Хабра https://t.me/habr_com.
  • Для преобразования канала в RSS-ленту, нам нужно сформировать ссылку, используя роутинг RSSHub.

Выглядит она следующим образом: http://{host}/telegram/channel/{tg channel name}, где host - адрес виртуальной машины, на которой развернут RSSHub (192.168.1.134 в моем случае), а tg channel name - имя Telegram-канала (habr_com).

  • В итоге получаем ссылку: http://192.168.1.134/telegram/channel/habr_com.
  • Добавляем ее в подписки в Tiny Tiny RSS и проверяем выгрузку новостей.

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