RSS-Bridge는 PHP 웹 애플리케이션입니다.
웹사이트가 없는 웹사이트에 대한 웹피드를 생성합니다.
공식 호스팅 인스턴스: https://rss-bridge.org/bridge01/
https://libera.chat/의 IRC 채널 #rssbridge
전체 문서
또는 다른 공개 인스턴스를 찾으십시오.
최소 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 (2MB)
이 지침은 Digital Ocean의 최신 Debian 12 VM(1vcpu-512mb-10gb, 5 USD/월)에서 테스트되었습니다.
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 구성:
# /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
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
TODO. #3785 참조
Docker Hub에서 Docker 이미지를 다운로드하여 설치합니다.
# 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 빠른 배포는 현재 작동하지 않습니다. 이 저장소를 포크하고 scalingo.json
에서 repository
수정하면 작동할 수 있습니다. #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
루트로서:
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 ,
];
}
}
}
브릿지 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"
오류가 3번 발생해야 보고되도록 report_limit
수정합니다.
; 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
에 dev 종속성을 설치해야 합니다.
모든 테스트를 실행합니다.
./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/
우리는 Shaarli 및 ZeroBin의 저자인 sebsauvage.net의 웹마스터인 sebsauvage가 시작한 프로젝트를 계속하는 개발자 그룹인 RSS-Bridge 커뮤니티입니다.
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
PHP Simple HTML DOM Parser
php-urljoin
Laravel framework
친애하는 소위 "소셜" 웹사이트입니다.
귀하의 표어는 "공유"이지만 우리가 공유하는 것을 원하지 않습니다. 당신은 우리를 당신의 벽으로 둘러싸인 정원 안에 가두기를 원하십니다. 그렇기 때문에 웹페이지에서 RSS 링크를 제거하고 웹사이트 깊숙이 숨기거나 피드를 완전히 제거하여 손상되거나 정신이 나간 독점 API로 대체해 왔습니다. 엿먹어라.
피드를 제거하여 공유를 방해하면 소셜 활동이 아닙니다. 귀하는 고객이 귀하의 생태계를 위한 콘텐츠를 제작하는 것을 기쁘게 생각하지만 이 콘텐츠, 즉 귀하가 소유하지도 않은 콘텐츠가 공개되는 것을 원하지 않습니다. Google 테이크아웃은 단지 속임수일 뿐입니다. 우리는 데이터 흐름을 원하고 RSS 또는 Atom 피드를 원합니다.
우리는 RSS, Atom, XMPP 등 개방형 프로토콜을 사용하여 친구들과 공유하고 싶습니다. API 를 사용하여 애플리케이션 에 강제로 공급하는 서비스 를 원하는 사람은 아무도 없기 때문입니다. 친구들은 원하는 소프트웨어와 서비스를 자유롭게 선택할 수 있어야 합니다.
우리는 당신들이 고의로 파괴한 다리를 재건하고 있습니다.
정리하세요: RSS/Atom을 다시 넣으세요.