RSS-Bridge es una aplicación web PHP.
Genera feeds web para sitios web que no tienen uno.
Instancia alojada oficialmente: https://rss-bridge.org/bridge01/
Canal IRC #rssbridge en https://libera.chat/
Documentación completa
Alternativamente, busque otra instancia pública.
Requiere PHP mínimo 7.4.
CssSelectorBridge
: elimina un feed usando selectores CSSFeedMergeBridge
: combine varios feeds en unoFeedReducerBridge
: reduce un feed ruidoso en algún porcentajeFilterBridge
: filtre un feed excluyendo/incluyendo elementos por palabra claveGettrBridge
: recupera las últimas publicaciones de un usuario de GETTRMastodonBridge
: recupera estados de una instancia de Mastodon (ActivityPub)RedditBridge
: recupera publicaciones de un usuario/subrédito (con opciones de filtrado)RumbleBridge
: recupera vídeos de canal/usuario.SoundcloudBridge
: recupera música por nombre de usuarioTelegramBridge
: recupera publicaciones de un canal públicoThePirateBayBridge:
recupera torrents por búsqueda/usuario/categoríaTikTokBridge
: recupera publicaciones por nombre de usuarioTwitchBridge
: recupera vídeos del canalVkBridge
: recupera publicaciones del usuario/grupoXPathBridge
: elimina un feed utilizando expresiones XPathYoutubeBridge
: recupera vídeos por nombre de usuario/canal/lista de reproducción/búsquedaYouTubeCommunityTabBridge
: recupera publicaciones de la pestaña de comunidad de un canal. Básicamente, RSS-Bridge se puede descomprimir en una carpeta web. Debería estar funcionando al instante.
Zip más reciente: https://github.com/RSS-Bridge/rss-bridge/archive/refs/heads/master.zip (2 MB)
Estas instrucciones se han probado en una máquina virtual Debian 12 nueva de Digital Ocean (1vcpu-512mb-10gb, 5 USD/mes).
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
Configuración de Nginx:
# /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 ;
}
}
Configuración del grupo 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
Configuración inicial de PHP:
; /etc/php/8.2/fpm/conf.d/30-rss-bridge.ini
max_execution_time = 15
memory_limit = 64M
Reinicie fpm y nginx:
# Lint and restart php-fpm
php-fpm8.2 -t && systemctl restart php8.2-fpm
# Lint and restart nginx
nginx -t && systemctl restart nginx
Instale la última versión.
cd /var/www
composer create-project -v --no-dev --no-scripts rss-bridge/rss-bridge
HACER. Ver #3785
Instálelo descargando la imagen de Docker desde Docker Hub:
# Create container
docker create --name=rss-bridge --publish 3000:80 --volume $( pwd ) /config:/config rssbridge/rss-bridge
Puede colocar config.ini.php
y puentes personalizados en ./config
.
Debe reiniciar el contenedor para que los cambios personalizados surtan efecto.
Consulte docker-entrypoint.sh
para obtener más detalles.
# Start container
docker start rss-bridge
Explorar 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
Puede colocar config.ini.php
y puentes personalizados en ./config
.
Debe reiniciar el contenedor para que los cambios personalizados surtan efecto.
Consulte docker-entrypoint.sh
para obtener más detalles.
# Start container
docker start rss-bridge
Explorar http://localhost:3000/
Puede colocar config.ini.php
y puentes personalizados en ./config
.
Debe reiniciar el contenedor para que los cambios personalizados surtan efecto.
Consulte docker-entrypoint.sh
para obtener más detalles.
docker-compose up
Explorar http://localhost:3000/
La implementación rápida de Heroku no funciona actualmente. Podría funcionar si bifurcas este repositorio y modificas el repository
en scalingo.json
. Ver #2688
Obtenga más información en Instalación.
La salida es de php-fpm. No puede leer index.php.
chown rss-bridge:rss-bridge /var/www/rss-bridge/index.php
Modificar config.ini.php
:
[authentication]
token = "hunter2"
Como usuario actual:
bin/cache-clear
Como usuario rss-bridge:
sudo -u rss-bridge bin/cache-clear
Como raíz:
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/
Los archivos sqlite (db, wal y shm) no se pueden escribir.
chown -v rss-bridge:rss-bridge cache/*
rm cache/*
Cree el nuevo puente, por ejemplo, en 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 ,
];
}
}
}
Obtenga más información en la API de Bridge.
enabled_bridges[] = *
enabled_bridges[] = TwitchBridge
enabled_bridges[] = GettrBridge
El modo de depuración desactiva la mayoría de las operaciones de almacenamiento en caché.
enable_debug_mode = true
[cache]
; Cache backend: file (default), sqlite, memcached, null
type = "memcached"
type = "sqlite"
Cuando falla un puente, RSS-Bridge generará un feed con un único elemento que describe el error.
De esta manera, los lectores del feed lo recogen y usted recibe una notificación.
Si no desea este comportamiento, cambie la salida del error a 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"
Modifique report_limit
para que un error deba ocurrir 3 veces antes de que se informe.
; Defines how often an error must occur before it is reported to the user
report_limit = 3
El recuento de informes se restablece a 0 cada día.
[authentication]
enable = true
username = "alice"
password = "cat"
Normalmente requerirá que los lectores de feeds estén configurados con las credenciales.
También es posible incluir manualmente las credenciales en la URL:
https://alice:[email protected]/bridge01/?action=display&bridge=FabriceBellardBridge&format=Html
Consulte formats/PlaintextFormat.php
para ver un ejemplo.
Estos comandos requieren que haya instalado las dependencias de desarrollo en composer.json
.
Ejecute todas las pruebas:
./vendor/bin/phpunit
Ejecute una única clase de prueba:
./vendor/bin/phpunit --filter UrlTest
Ejecute linter:
./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/
Somos la comunidad RSS-Bridge, un grupo de desarrolladores que continuamos el proyecto iniciado por sebsauvage, webmaster de sebsauvage.net, autor de Shaarli y ZeroBin.
Ver CONTRIBUIDORES.md
RSS-Bridge utiliza el almacenamiento en caché para evitar que los servicios bloqueen su servidor por actualizar repetidamente los feeds. La duración específica de la caché puede ser diferente entre los puentes. Los archivos almacenados en caché se eliminan automáticamente después de 24 horas.
RSS-Bridge le permite tomar control total sobre qué puentes se muestran al usuario. ¡De esa manera puedes alojar tu propio servicio RSS-Bridge con tu colección de puentes favorita!
Mantenedores actuales (a partir de 2024): @dvikan y @Mynacol #2519
Esta es la estructura de elementos de alimentación que se espera que produzcan los puentes.
$ 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, para uso en lectores de feedsHtml
: página HTML sencillaJson
: JSON, para consumo de otras aplicaciones.Mrss
: feed MRSS, para uso en lectores de feedsPlaintext
: texto sin formato, para consumo de otras aplicaciones.Sfeed
: Texto, separado por TABFile
SQLite
Memcached
Array
Null
El código fuente de RSS-Bridge es de dominio público.
RSS-Bridge utiliza bibliotecas de terceros con licencia propia:
Parsedown
con licencia bajo la licencia MITPHP Simple HTML DOM Parser
con licencia MITphp-urljoin
bajo la licencia MITLaravel framework
con licencia MIT Estimados sitios web llamados "sociales".
Tu lema es "compartir", pero no quieres que lo compartamos. Quiere mantenernos dentro de sus jardines amurallados. Es por eso que ha estado eliminando enlaces RSS de páginas web, ocultándolos en lo más profundo de su sitio web, o eliminando feeds por completo, reemplazándolos con API propietaria dañada o demente. JODETE.
No eres sociable cuando obstaculizas el intercambio eliminando feeds. Está contento de que los clientes creen contenido para su ecosistema, pero no quiere que ese contenido salga a la luz, un contenido que ni siquiera es de su propiedad. Google Takeout es sólo un truco. Queremos que nuestros datos fluyan, queremos canales RSS o Atom.
Queremos compartir con amigos, usando protocolos abiertos: RSS, Atom, XMPP, lo que sea. Porque nadie quiere que su servicio con sus aplicaciones utilice su API para alimentarlas a la fuerza. Los amigos deben tener libertad para elegir el software y servicio que quieran.
Estamos reconstruyendo puentes que ustedes han destruido intencionalmente.
Reúna sus cosas: vuelva a colocar RSS/Atom.