RSS-Bridge ist eine PHP-Webanwendung.
Es generiert Web-Feeds für Websites, die keinen haben.
Offiziell gehostete Instanz: https://rss-bridge.org/bridge01/
IRC-Kanal #rssbridge unter https://libera.chat/
Vollständige Dokumentation
Alternativ können Sie eine andere öffentliche Instanz suchen.
Erfordert mindestens PHP 7.4.
CssSelectorBridge
: Mit CSS-Selektoren einen Feed herauskratzenFeedMergeBridge
: Kombinieren Sie mehrere Feeds zu einemFeedReducerBridge
: Reduziert einen lauten Feed um einen bestimmten ProzentsatzFilterBridge
: Filtern Sie einen Feed, indem Sie Elemente nach Schlüsselwörtern ausschließen/einschließenGettrBridge
: Ruft die neuesten Beiträge eines GETTR-Benutzers abMastodonBridge
: Ruft Status von einer Mastodon-Instanz (ActivityPub) abRedditBridge
: Ruft Beiträge von einem Benutzer/Subredit ab (mit Filteroptionen)RumbleBridge
: Ruft Kanal-/Benutzervideos abSoundcloudBridge
: Ruft Musik nach Benutzernamen abTelegramBridge
: Ruft Beiträge von einem öffentlichen Kanal abThePirateBayBridge:
Ruft Torrents nach Suche/Benutzer/Kategorie abTikTokBridge
: Ruft Beiträge nach Benutzernamen abTwitchBridge
: Ruft Videos vom Kanal abVkBridge
: Ruft Beiträge von Benutzern/Gruppen abXPathBridge
: Scrapen Sie einen Feed mithilfe von XPath-AusdrückenYoutubeBridge
: Ruft Videos nach Benutzername/Kanal/Playlist/Suche abYouTubeCommunityTabBridge
: Ruft Beiträge vom Community-Tab eines Kanals ab RSS-Bridge kann grundsätzlich in einen Webordner entpackt werden. Sollte sofort funktionieren.
Aktuelle Zip-Datei: https://github.com/RSS-Bridge/rss-bridge/archive/refs/heads/master.zip (2 MB)
Diese Anweisungen wurden auf einer neuen Debian 12-VM von Digital Ocean (1vcpu-512mb-10gb, 5 USD/Monat) getestet.
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
Nginx-Konfiguration:
# /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-Pool-Konfiguration:
; /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
PHP-INI-Konfiguration:
; /etc/php/8.2/fpm/conf.d/30-rss-bridge.ini
max_execution_time = 15
memory_limit = 64M
Starten Sie fpm und nginx neu:
# Lint and restart php-fpm
php-fpm8.2 -t && systemctl restart php8.2-fpm
# Lint and restart nginx
nginx -t && systemctl restart nginx
Installieren Sie die neueste Version.
cd /var/www
composer create-project -v --no-dev --no-scripts rss-bridge/rss-bridge
TODO. Siehe #3785
Installieren Sie, indem Sie das Docker-Image vom Docker Hub herunterladen:
# Create container
docker create --name=rss-bridge --publish 3000:80 --volume $( pwd ) /config:/config rssbridge/rss-bridge
Sie können benutzerdefinierte config.ini.php
und Bridges in ./config
einfügen.
Sie müssen den Container neu starten, damit benutzerdefinierte Änderungen wirksam werden.
Weitere Informationen finden Sie unter docker-entrypoint.sh
.
# Start container
docker start rss-bridge
Durchsuchen Sie 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
Sie können benutzerdefinierte config.ini.php
und Bridges in ./config
einfügen.
Sie müssen den Container neu starten, damit benutzerdefinierte Änderungen wirksam werden.
Weitere Informationen finden Sie unter docker-entrypoint.sh
.
# Start container
docker start rss-bridge
Durchsuchen Sie http://localhost:3000/
Sie können benutzerdefinierte config.ini.php
und Bridges in ./config
einfügen.
Sie müssen den Container neu starten, damit benutzerdefinierte Änderungen wirksam werden.
Weitere Informationen finden Sie unter docker-entrypoint.sh
.
docker-compose up
Durchsuchen Sie http://localhost:3000/
Die Heroku-Schnellbereitstellung funktioniert derzeit nicht. Es könnte funktionieren, wenn Sie dieses Repo forken und das repository
in scalingo.json
ändern. Siehe #2688
Erfahren Sie mehr unter Installation.
Die Ausgabe erfolgt von php-fpm. Die Datei index.php kann nicht gelesen werden.
chown rss-bridge:rss-bridge /var/www/rss-bridge/index.php
Ändern Sie config.ini.php
:
[authentication]
token = "hunter2"
Als aktueller Benutzer:
bin/cache-clear
Als Benutzer rss-bridge:
sudo -u rss-bridge bin/cache-clear
Als 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/
Die SQLite-Dateien (db, wal und shm) sind nicht beschreibbar.
chown -v rss-bridge:rss-bridge cache/*
rm cache/*
Erstellen Sie die neue Brücke z. B. in „ 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 ,
];
}
}
}
Weitere Informationen finden Sie in der Bridge-API.
enabled_bridges[] = *
enabled_bridges[] = TwitchBridge
enabled_bridges[] = GettrBridge
Der Debug-Modus deaktiviert die meisten Caching-Vorgänge.
enable_debug_mode = true
[cache]
; Cache backend: file (default), sqlite, memcached, null
type = "memcached"
type = "sqlite"
Wenn eine Bridge ausfällt, erstellt RSS-Bridge einen Feed mit einer einzelnen Beschreibung des Fehlers.
Auf diese Weise wird es von den Feed-Lesern erfasst und Sie werden benachrichtigt.
Wenn Sie dieses Verhalten nicht wünschen, stellen Sie die Fehlerausgabe auf http
um:
[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"
Ändern Sie report_limit
so, dass ein Fehler dreimal auftreten muss, bevor er gemeldet wird.
; Defines how often an error must occur before it is reported to the user
report_limit = 3
Die Berichtsanzahl wird jeden Tag auf 0 zurückgesetzt.
[authentication]
enable = true
username = "alice"
password = "cat"
Normalerweise müssen Feed-Reader mit den Anmeldeinformationen konfiguriert werden.
Möglicherweise ist es auch möglich, die Anmeldeinformationen manuell in die URL einzufügen:
https://alice:[email protected]/bridge01/?action=display&bridge=FabriceBellardBridge&format=Html
Ein Beispiel finden Sie formats/PlaintextFormat.php
.
Für diese Befehle ist es erforderlich, dass Sie die Entwicklungsabhängigkeiten in composer.json
installiert haben.
Führen Sie alle Tests durch:
./vendor/bin/phpunit
Führen Sie eine einzelne Testklasse aus:
./vendor/bin/phpunit --filter UrlTest
Linter ausführen:
./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/
Wir sind die RSS-Bridge-Community, eine Gruppe von Entwicklern, die das von sebsauvage, Webmaster von sebsauvage.net, Autor von Shaarli und ZeroBin, initiierte Projekt fortführen.
Siehe CONTRIBUTORS.md
RSS-Bridge verwendet Caching, um zu verhindern, dass Dienste Ihren Server für die wiederholte Aktualisierung von Feeds sperren. Die spezifische Cache-Dauer kann zwischen den Bridges unterschiedlich sein. Zwischengespeicherte Dateien werden nach 24 Stunden automatisch gelöscht.
Mit RSS-Bridge haben Sie die volle Kontrolle darüber, welche Bridges dem Benutzer angezeigt werden. Auf diese Weise können Sie Ihren eigenen RSS-Bridge-Dienst mit Ihrer Lieblings-Bridge-Sammlung hosten!
Aktuelle Betreuer (Stand 2024): @dvikan und @Mynacol #2519
Dies ist die Struktur des Feed-Elements, die von Bridges erwartet wird.
$ 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-Feed zur Verwendung in Feed-ReadernHtml
: Einfache HTML-SeiteJson
: JSON, zur Nutzung durch andere AnwendungenMrss
: MRSS-Feed zur Verwendung in Feed-ReadernPlaintext
: Rohtext zur Verwendung durch andere AnwendungenSfeed
: Text, TAB getrenntFile
SQLite
Memcached
Array
Null
Der Quellcode für RSS-Bridge ist Public Domain.
RSS-Bridge nutzt Bibliotheken von Drittanbietern mit eigener Lizenz:
Parsedown
lizenziert unter der MIT-LizenzPHP Simple HTML DOM Parser
lizenziert unter der MIT-Lizenzphp-urljoin
lizenziert unter der MIT-LizenzLaravel framework
lizenziert unter der MIT-Lizenz Liebe sogenannte „soziale“ Websites.
Ihr Schlagwort ist „teilen“, aber Sie möchten nicht, dass wir teilen. Sie möchten, dass wir in Ihren ummauerten Gärten bleiben. Aus diesem Grund haben Sie RSS-Links von Webseiten entfernt, sie tief auf Ihrer Website versteckt oder Feeds vollständig entfernt und sie durch eine verkümmerte oder verrückte proprietäre API ersetzt. FICK DICH.
Sie sind nicht sozial, wenn Sie das Teilen durch Entfernen von Feeds behindern. Sie freuen sich, wenn Kunden Inhalte für Ihr Ökosystem erstellen, aber Sie möchten nicht, dass diese Inhalte veröffentlicht werden – Inhalte, die Ihnen nicht einmal gehören. Google Takeout ist nur eine Spielerei. Wir möchten, dass unsere Daten fließen, wir möchten RSS- oder Atom-Feeds.
Wir möchten es mit Freunden teilen und dabei offene Protokolle verwenden: RSS, Atom, XMPP, was auch immer. Denn niemand möchte, dass Ihr Service Ihre Anwendungen mithilfe Ihrer API zwangsweise einspeist. Freunde müssen die Freiheit haben, die Software und den Service zu wählen, die sie wollen.
Wir bauen Brücken wieder auf, die Sie vorsätzlich zerstört haben.
Bringen Sie Ihre Scheiße zusammen: Setzen Sie RSS/Atom wieder ein.