RSS-Bridge — это веб-приложение PHP.
Он генерирует веб-каналы для веб-сайтов, у которых их нет.
Официально размещенный экземпляр: https://rss-bridge.org/bridge01/.
IRC-канал #rssbridge на https://libera.chat/
Полная документация
Альтернативно найдите другой публичный экземпляр.
Требуется минимум PHP 7.4.
CssSelectorBridge
: извлекает канал с помощью селекторов CSS.FeedMergeBridge
: объединить несколько каналов в один.FeedReducerBridge
: Уменьшите шумную подачу на некоторый процент.FilterBridge
: фильтровать канал, исключая/включая элементы по ключевому слову.GettrBridge
: извлекает последние сообщения от пользователя GETTR.MastodonBridge
: извлекает статусы из экземпляра Mastodon (ActivityPub).RedditBridge
: извлекает сообщения от пользователя/субредита (с параметрами фильтрации).RumbleBridge
: извлекает видео канала/пользователя.SoundcloudBridge
: извлекает музыку по имени пользователя.TelegramBridge
: извлекает сообщения из общедоступного канала.ThePirateBayBridge:
извлекает торренты по поиску/пользователю/категории.TikTokBridge
: извлекает сообщения по имени пользователя.TwitchBridge
: извлекает видео с канала.VkBridge
: извлекает сообщения от пользователя/группы.XPathBridge
: извлечь канал с помощью выражений XPath.YoutubeBridge
: извлекает видео по имени пользователя/каналу/списку воспроизведения/поиску.YouTubeCommunityTabBridge
: извлекает сообщения со вкладки сообщества канала. RSS-Bridge можно распаковать в веб-папку. Должно работать мгновенно.
Последний почтовый индекс: https://github.com/RSS-Bridge/rss-bridge/archive/refs/heads/master.zip (2 МБ)
Эти инструкции были протестированы на новой виртуальной машине Debian 12 от Digital Ocean (1vcpu-512mb-10gb, 5 долларов США в месяц).
timedatectl set-timezone Europe/Oslo
apt install git nginx php8.2-fpm php-mbstring php-simplexml php-curl php-intl
# Create a user account
useradd --shell /bin/bash --create-home rss-bridge
cd /var/www
# Create folder and change ownership
mkdir rss-bridge && chown rss-bridge:rss-bridge rss-bridge/
# Become user
su rss-bridge
# Fetch latest master
git clone https://github.com/RSS-Bridge/rss-bridge.git rss-bridge/
cd rss-bridge
# Copy over the default config
cp -v config.default.ini.php config.ini.php
# Give full permissions only to owner (rss-bridge)
chmod 700 -R ./
# Give read and execute to others (nginx and php-fpm)
chmod o+rx ./ ./static
# Give read to others (nginx)
chmod o+r -R ./static
Конфигурация Нгинкса:
# /etc/nginx/sites-enabled/rss-bridge.conf
server {
listen 80 ;
# TODO: change to your own server name
server_name example.com;
access_log /var/log/nginx/rss-bridge.access.log;
error_log /var/log/nginx/rss-bridge.error.log;
log_not_found off ;
# Intentionally not setting a root folder here
# autoindex is off by default but feels good to explicitly turn off
autoindex off ;
# Static content only served here
location /static/ {
alias /var/www/rss-bridge/static/;
}
# Pass off to php-fpm when location is exactly /
location = / {
root /var/www/rss-bridge/;
include snippets/fastcgi-php.conf;
fastcgi_read_timeout 45s ;
fastcgi_pass unix:/run/php/rss-bridge.sock;
}
# Reduce spam
location = /favicon.ico {
access_log off ;
}
# Reduce spam
location = /robots.txt {
access_log off ;
}
}
Конфигурация пула PHP FPM:
; /etc/php/8.2/fpm/pool.d/rss-bridge.conf
[rss-bridge]
user = rss-bridge
group = rss-bridge
listen = /run/php/rss-bridge.sock
listen.owner = www-data
listen.group = www-data
# Create 10 workers standing by to serve requests
pm = static
pm.max_children = 10
# Respawn worker after 500 requests (workaround for memory leaks etc.)
pm.max_requests = 500
INI-конфигурация PHP:
; /etc/php/8.2/fpm/conf.d/30-rss-bridge.ini
max_execution_time = 15
memory_limit = 64M
Перезапустите fpm и nginx:
# Lint and restart php-fpm
php-fpm8.2 -t && systemctl restart php8.2-fpm
# Lint and restart nginx
nginx -t && systemctl restart nginx
Установите последнюю версию.
cd /var/www
composer create-project -v --no-dev --no-scripts rss-bridge/rss-bridge
ТОДО. См. № 3785.
Установите, загрузив образ Docker из Docker Hub:
# Create container
docker create --name=rss-bridge --publish 3000:80 --volume $( pwd ) /config:/config rssbridge/rss-bridge
Вы можете поместить собственный config.ini.php
и мосты в ./config
.
Вам необходимо перезапустить контейнер, чтобы пользовательские изменения вступили в силу.
Подробности см. в docker-entrypoint.sh
.
# Start container
docker start rss-bridge
Просмотрите http://localhost:3000/
# Build image from Dockerfile
docker build -t rss-bridge .
# Create container
docker create --name rss-bridge --publish 3000:80 --volume $( pwd ) /config:/config rss-bridge
Вы можете поместить собственный config.ini.php
и мосты в ./config
.
Вам необходимо перезапустить контейнер, чтобы пользовательские изменения вступили в силу.
Подробности смотрите в docker-entrypoint.sh
.
# Start container
docker start rss-bridge
Просмотрите http://localhost:3000/
Вы можете поместить собственный config.ini.php
и мосты в ./config
.
Вам необходимо перезапустить контейнер, чтобы пользовательские изменения вступили в силу.
Подробности см. в docker-entrypoint.sh
.
docker-compose up
Просмотрите http://localhost:3000/
Быстрое развертывание Heroku в настоящее время не работает. Это может сработать, если вы разветвите этот репозиторий и измените repository
в scalingo.json
. См. № 2688.
Узнайте больше в разделе «Установка».
Вывод осуществляется из php-fpm. Он не может прочитать index.php.
chown rss-bridge:rss-bridge /var/www/rss-bridge/index.php
Измените config.ini.php
:
[authentication]
token = "hunter2"
Как текущий пользователь:
bin/cache-clear
От имени пользователя rss-bridge:
sudo -u rss-bridge bin/cache-clear
Как root:
sudo bin/cache-clear
bin/cache-prune
# Give rss-bridge ownership
chown rss-bridge:rss-bridge -R /var/www/rss-bridge/cache
# Or, give www-data ownership
chown www-data:www-data -R /var/www/rss-bridge/cache
# Or, give everyone write permission
chmod 777 -R /var/www/rss-bridge/cache
# Or last ditch effort (CAREFUL)
rm -rf /var/www/rss-bridge/cache/ && mkdir /var/www/rss-bridge/cache/
Файлы sqlite (db, wal и shm) недоступны для записи.
chown -v rss-bridge:rss-bridge cache/*
rm cache/*
Создайте новый мост, например, в bridges/BearBlogBridge.php
:
<?php
class BearBlogBridge extends BridgeAbstract
{
const NAME = ' BearBlog (bearblog.dev) ' ;
public function collectData ()
{
$ dom = getSimpleHTMLDOM ( ' https://herman.bearblog.dev/blog/ ' );
foreach ( $ dom -> find ( ' .blog-posts li ' ) as $ li ) {
$ a = $ li -> find ( ' a ' , 0 );
$ this -> items [] = [
' title ' => $ a -> plaintext ,
' uri ' => ' https://herman.bearblog.dev ' . $ a -> href ,
];
}
}
}
Узнайте больше в Bridge API.
enabled_bridges[] = *
enabled_bridges[] = TwitchBridge
enabled_bridges[] = GettrBridge
Режим отладки отключает большинство операций кэширования.
enable_debug_mode = true
[cache]
; Cache backend: file (default), sqlite, memcached, null
type = "memcached"
type = "sqlite"
В случае сбоя моста RSS-Bridge создаст канал с одним элементом, описывающим ошибку.
Таким образом, читатели ленты увидят это, и вы получите уведомление.
Если вы не хотите такого поведения, переключите вывод ошибок на http
:
[error]
; Defines how error messages are returned by RSS-Bridge
;
; "feed" = As part of the feed (default)
; "http" = As HTTP error message
; "none" = No errors are reported
output = "http"
Измените report_limit
так, чтобы ошибка должна была произойти 3 раза, прежде чем о ней будет сообщено.
; Defines how often an error must occur before it is reported to the user
report_limit = 3
Счетчик отчетов сбрасывается до 0 каждый день.
[authentication]
enable = true
username = "alice"
password = "cat"
Обычно требуется, чтобы программы чтения каналов были настроены с использованием учетных данных.
Также возможно вручную включить учетные данные в URL-адрес:
https://alice:[email protected]/bridge01/?action=display&bridge=FabriceBellardBridge&format=Html
Пример см. в formats/PlaintextFormat.php
.
Эти команды требуют, чтобы вы установили зависимости разработчика в composer.json
.
Запустите все тесты:
./vendor/bin/phpunit
Запустите один тестовый класс:
./vendor/bin/phpunit --filter UrlTest
Запускаем линтер:
./vendor/bin/phpcs --standard=phpcs.xml --warning-severity=0 --extensions=php -p ./
https://github.com/squizlabs/PHP_CodeSniffer/wiki
php -S 127.0.0.1:9001
http://127.0.0.1:9001/
Мы — сообщество RSS-Bridge, группа разработчиков, продолжающая проект, инициированный sebsauvage, веб-мастером sebsauvage.net, автором Shaarli и ZeroBin.
См. CONTRIBUTORS.md
RSS-Bridge использует кеширование, чтобы службы не блокировали ваш сервер за неоднократное обновление каналов. Конкретная продолжительность кэша может быть разной для разных мостов. Кэшированные файлы удаляются автоматически через 24 часа.
RSS-Bridge позволяет вам полностью контролировать, какие мосты отображаются пользователю. Таким образом, вы сможете разместить свой собственный сервис RSS-Bridge с вашей любимой коллекцией мостов!
Текущие сопровождающие (по состоянию на 2024 г.): @dvikan и @Mynacol #2519.
Это структура элементов фида, которую должны создавать мосты.
$ item = [
' uri ' => ' https://example.com/blog/hello ' ,
' title ' => ' Hello world ' ,
// Publication date in unix timestamp
' timestamp ' => 1668706254 ,
' author ' => ' Alice ' ,
' content ' => ' Here be item content ' ,
' enclosures ' => [
' https://example.com/foo.png ' ,
' https://example.com/bar.png '
],
' categories ' => [
' news ' ,
' tech ' ,
],
// Globally unique id
' uid ' => ' e7147580c8747aad ' ,
]
Atom
: канал Atom, для использования в программах чтения каналов.Html
: Простая HTML-страница.Json
: JSON для использования другими приложениями.Mrss
: канал MRSS, для использования в программах чтения каналов.Plaintext
: необработанный текст для использования другими приложениями.Sfeed
: текст, разделенный TAB.File
SQLite
Memcached
Array
Null
Исходный код RSS-Bridge является общественным достоянием.
RSS-Bridge использует сторонние библиотеки с собственной лицензией:
Parsedown
лицензируется по лицензии MIT.PHP Simple HTML DOM Parser
лицензированный по лицензии MIT.php-urljoin
под лицензией MITLaravel framework
лицензируется по лицензии MIT. Дорогие так называемые «социальные» сайты.
Ваш девиз — «поделиться», но вы не хотите, чтобы мы делились. Вы хотите держать нас в своих огороженных садах. Вот почему вы удаляете RSS-ссылки с веб-страниц, скрываете их глубоко на своем веб-сайте или полностью удаляете каналы, заменяя их испорченным или безумным собственным API. ПОХУЙ ТЕБЯ.
Вы не общительны, если препятствуете обмену информацией, удаляя каналы. Вы рады, что клиенты создают контент для вашей экосистемы, но вы не хотите, чтобы этот контент был опубликован — контент, которым вы даже не владеете. Google Takeout — это всего лишь трюк. Мы хотим, чтобы наши данные передавались, нам нужны каналы RSS или Atom.
Мы хотим поделиться с друзьями, используя открытые протоколы: RSS, Atom, XMPP и т. д. Потому что никто не хочет, чтобы ваш сервис с вашими приложениями использовал ваш API и принудительно их кормил. Друзья должны иметь свободу выбора любого программного обеспечения и услуг, которые они хотят.
Мы восстанавливаем мосты, которые вы умышленно разрушили.
Соберитесь с силами: вставьте RSS/Atom обратно.