RSS-Bridge é uma aplicação web PHP.
Ele gera feeds da web para sites que não possuem um.
Instância hospedada oficialmente: https://rss-bridge.org/bridge01/
Canal IRC #rssbridge em https://libera.chat/
Documentação completa
Como alternativa, encontre outra instância pública.
Requer mínimo PHP 7.4.
CssSelectorBridge
: Raspe um feed usando seletores CSSFeedMergeBridge
: Combine vários feeds em umFeedReducerBridge
: reduz um feed barulhento em alguma porcentagemFilterBridge
: filtre um feed excluindo/incluindo itens por palavra-chaveGettrBridge
: busca as postagens mais recentes de um usuário GETTRMastodonBridge
: busca status de uma instância do Mastodon (ActivityPub)RedditBridge
: busca postagens de um usuário/subredit (com opções de filtragem)RumbleBridge
: busca vídeos do canal/usuárioSoundcloudBridge
: busca músicas por nome de usuárioTelegramBridge
: busca postagens de um canal públicoThePirateBayBridge:
busca torrents por pesquisa/usuário/categoriaTikTokBridge
: busca postagens por nome de usuárioTwitchBridge
: busca vídeos do canalVkBridge
: busca postagens do usuário/grupoXPathBridge
: Raspe um feed usando expressões XPathYoutubeBridge
: busca vídeos por nome de usuário/canal/lista de reprodução/pesquisaYouTubeCommunityTabBridge
: busca postagens da guia comunidade de um canal O RSS-Bridge basicamente pode ser descompactado em uma pasta da web. Deve estar funcionando instantaneamente.
Zip mais recente: https://github.com/RSS-Bridge/rss-bridge/archive/refs/heads/master.zip (2MB)
Estas instruções foram testadas em uma VM Debian 12 nova da Digital Ocean (1vcpu-512mb-10gb, 5 USD/mês).
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
Configuração 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 ;
}
}
Configuração do pool 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
Configuração inicial do PHP:
; /etc/php/8.2/fpm/conf.d/30-rss-bridge.ini
max_execution_time = 15
memory_limit = 64M
Reinicie o fpm e o 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 a versão mais recente.
cd /var/www
composer create-project -v --no-dev --no-scripts rss-bridge/rss-bridge
PENDÊNCIA. Veja #3785
Instale baixando a imagem do Docker do Docker Hub:
# Create container
docker create --name=rss-bridge --publish 3000:80 --volume $( pwd ) /config:/config rssbridge/rss-bridge
Você pode colocar config.ini.php
e pontes personalizadas em ./config
.
Você deve reiniciar o contêiner para que as alterações personalizadas entrem em vigor.
Consulte docker-entrypoint.sh
para obter detalhes.
# Start container
docker start rss-bridge
Navegue 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
Você pode colocar config.ini.php
e pontes personalizadas em ./config
.
Você deve reiniciar o contêiner para que as alterações personalizadas entrem em vigor.
Consulte docker-entrypoint.sh
para obter detalhes.
# Start container
docker start rss-bridge
Navegue http://localhost:3000/
Você pode colocar config.ini.php
e pontes personalizadas em ./config
.
Você deve reiniciar o contêiner para que as alterações personalizadas entrem em vigor.
Consulte docker-entrypoint.sh
para obter detalhes.
docker-compose up
Navegue http://localhost:3000/
A implantação rápida do Heroku atualmente não funciona. Pode funcionar se você bifurcar este repositório e modificar o repository
em scalingo.json
. Veja #2688
Saiba mais em Instalação.
A saída é do php-fpm. Não é possível ler index.php.
chown rss-bridge:rss-bridge /var/www/rss-bridge/index.php
Modifique config.ini.php
:
[authentication]
token = "hunter2"
Como usuário atual:
bin/cache-clear
Como usuário rss-bridge:
sudo -u rss-bridge bin/cache-clear
Como raiz:
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/
Os arquivos sqlite (db, wal e shm) não são graváveis.
chown -v rss-bridge:rss-bridge cache/*
rm cache/*
Crie a nova ponte em, por exemplo 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 ,
];
}
}
}
Saiba mais na API da ponte.
enabled_bridges[] = *
enabled_bridges[] = TwitchBridge
enabled_bridges[] = GettrBridge
O modo de depuração desativa a maioria das operações de cache.
enable_debug_mode = true
[cache]
; Cache backend: file (default), sqlite, memcached, null
type = "memcached"
type = "sqlite"
Quando uma ponte falha, o RSS-Bridge produzirá um feed com um único item descrevendo o erro.
Dessa forma, os leitores do feed percebem e você é notificado.
Se você não quiser esse comportamento, mude a saída do erro para 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 um erro ocorra 3 vezes antes de ser relatado.
; Defines how often an error must occur before it is reported to the user
report_limit = 3
A contagem de relatórios é redefinida para 0 a cada dia.
[authentication]
enable = true
username = "alice"
password = "cat"
Normalmente exigirá que os leitores de feed sejam configurados com as credenciais.
Também pode ser possível incluir manualmente as credenciais na URL:
https://alice:[email protected]/bridge01/?action=display&bridge=FabriceBellardBridge&format=Html
Veja formats/PlaintextFormat.php
para obter um exemplo.
Esses comandos exigem que você tenha instalado as dependências dev em composer.json
.
Execute todos os testes:
./vendor/bin/phpunit
Execute uma única classe de teste:
./vendor/bin/phpunit --filter UrlTest
Execute o 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 a comunidade RSS-Bridge, um grupo de desenvolvedores que dá continuidade ao projeto iniciado por sebsauvage, webmaster de sebsauvage.net, autor de Shaarli e ZeroBin.
Consulte CONTRIBUIDORES.md
RSS-Bridge usa cache para evitar que os serviços proíbam seu servidor por atualizar feeds repetidamente. A duração específica do cache pode ser diferente entre pontes. Os arquivos armazenados em cache são excluídos automaticamente após 24 horas.
RSS-Bridge permite que você tenha controle total sobre quais pontes são exibidas ao usuário. Dessa forma você pode hospedar seu próprio serviço RSS-Bridge com sua coleção favorita de pontes!
Mantenedores atuais (em 2024): @dvikan e @Mynacol #2519
Esta é a estrutura de item de feed que se espera que as pontes produzam.
$ 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
: feed Atom, para uso em leitores de feedHtml
: página HTML simplesJson
: JSON, para consumo por outras aplicaçõesMrss
: feed MRSS, para uso em leitores de feedPlaintext
: texto bruto, para consumo por outros aplicativosSfeed
: Texto, separado por TABFile
SQLite
Memcached
Array
Null
O código fonte do RSS-Bridge é de domínio público.
RSS-Bridge usa bibliotecas de terceiros com licença própria:
Parsedown
licenciado sob a licença MITPHP Simple HTML DOM Parser
licenciado sob a licença MITphp-urljoin
licenciado sob a licença MITLaravel framework
licenciada sob a licença MIT Caros sites ditos "sociais".
Sua palavra de ordem é “compartilhar”, mas você não quer que compartilhemos. Você quer nos manter dentro de seus jardins murados. É por isso que você está removendo links RSS de páginas da web, escondendo-os profundamente em seu site, ou removendo feeds completamente, substituindo-os por APIs proprietárias danificadas ou dementes. FODA-SE.
Você não é social quando dificulta o compartilhamento removendo feeds. Você está feliz por ter clientes criando conteúdo para o seu ecossistema, mas não quer que esse conteúdo seja lançado - um conteúdo que você nem possui. O Google Takeout é apenas um truque. Queremos que nossos dados fluam, queremos feeds RSS ou Atom.
Queremos compartilhar com amigos, utilizando protocolos abertos: RSS, Atom, XMPP, qualquer que seja. Porque ninguém quer que seu serviço com seus aplicativos use sua API para alimentá-los à força. Os amigos devem ser livres para escolher qualquer software e serviço que desejarem.
Estamos reconstruindo pontes que vocês destruíram deliberadamente.
Se recomponha: coloque o RSS/Atom de volta.