27b3d7c34e
* feat: improve logging and error handling * trim absolute path from file name * fix: suppress php errors from xml parsing * fix: respect the error reporting level in the custom error handler * feat: dont log error which is produced by bots * ignore error about invalid bridge name * upgrade bridge exception from warning to error * remove remnants of using phps builin error handler * move responsibility of printing php error from logger to error handler * feat: include url in log record context * fix: always include url in log record contect Also ignore more non-interesting exceptions. * more verbose httpexception * fix * fix |
||
---|---|---|
.github | ||
actions | ||
bridges | ||
cache | ||
caches | ||
config | ||
contrib | ||
docs | ||
formats | ||
lib | ||
static | ||
templates | ||
tests | ||
vendor | ||
.dockerignore | ||
.git-blame-ignore-revs | ||
.gitattributes | ||
.gitignore | ||
app.json | ||
composer.json | ||
composer.lock | ||
config.default.ini.php | ||
CONTRIBUTORS.md | ||
docker-bake.hcl | ||
docker-entrypoint.sh | ||
Dockerfile | ||
index.php | ||
phpcompatibility.xml | ||
phpcs.xml | ||
phpunit.xml | ||
README.md | ||
scalingo.json | ||
UNLICENSE | ||
whitelist.default.txt |
RSS-Bridge
RSS-Bridge is a PHP project capable of generating RSS and Atom feeds for websites that don't have one.
Screenshot of the Twitter bridge configuration:
Screenshot of the Twitter bridge for Rasmus Lerdorf:
Check out RSS-Bridge right now on https://rss-bridge.org/bridge01 or find another public instance.
Tutorial
RSS-Bridge requires php 7.4.
Install with git:
cd /var/www
git clone https://github.com/RSS-Bridge/rss-bridge.git
# Give the http user write permission to the cache folder
chown www-data:www-data /var/www/rss-bridge/cache
# Optionally copy over the default config file
cp config.default.ini.php config.ini.php
# Optionally copy over the default whitelist file
cp whitelist.default.txt whitelist.txt
Example config for nginx:
# /etc/nginx/sites-enabled/rssbridge
server {
listen 80;
server_name example.com;
root /var/www/rss-bridge;
index index.php;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
}
Install with Docker:
Install by using docker image from Docker Hub:
# Create container
docker create --name=rss-bridge --publish 3000:80 rssbridge/rss-bridge
# Start container
docker start rss-bridge
Browse http://localhost:3000/
Install by locally building the image:
# Build image from Dockerfile
docker build -t rss-bridge .
# Create container
docker create --name rss-bridge --publish 3000:80 rss-bridge
# Start the container
docker start rss-bridge
Browse http://localhost:3000/
Alternative installation methods
The Heroku quick deploy currently does not work. It might possibly work if you fork this repo and
modify the repository
in scalingo.json
. See https://github.com/RSS-Bridge/rss-bridge/issues/2688
Learn more in Installation.
Create a bridge
Create the new bridge in e.g. bridges/ExecuteBridge.php
:
<?php
class ExecuteBridge extends BridgeAbstract
{
const NAME = 'Execute Program Blog';
public function collectData()
{
$url = 'https://www.executeprogram.com/api/pages/blog';
$data = json_decode(getContents($url));
foreach ($data->posts as $post) {
$this->items[] = [
'uri' => sprintf('https://www.executeprogram.com/blog/%s', $post->slug),
'title' => $post->title,
'content' => $post->body,
];
}
}
}
Learn more in bridge api.
How-to
How to enable all bridges
Write an asterisks to whitelist.txt
:
echo '*' > whitelist.txt
Learn more in enabling briges
How to enable a bridge
Add the bridge name to whitelist.txt
:
echo 'FirefoxAddonsBridge' >> whitelist.txt
How to enable debug mode
Create a file named DEBUG
:
touch DEBUG
Learn more in debug mode.
How to create a new output format
Explanation
We are RSS-Bridge community, a group of developers continuing the project initiated by sebsauvage, webmaster of sebsauvage.net, author of Shaarli and ZeroBin.
See CONTRIBUTORS.md
RSS-Bridge uses caching to prevent services from banning your server for repeatedly updating feeds. The specific cache duration can be different between bridges. Cached files are deleted automatically after 24 hours.
RSS-Bridge allows you to take full control over which bridges are displayed to the user. That way you can host your own RSS-Bridge service with your favorite collection of bridges!
Supported output formats:
Atom
: Atom feed, for use in feed readersHtml
: Simple HTML pageJson
: JSON, for consumption by other applicationsMrss
: MRSS feed, for use in feed readersPlaintext
: Raw text, for consumption by other applications
Reference
A selection of bridges
Bandcamp
: Returns last release from bandcamp for a tagCryptome
: Returns the most recent documents from Cryptome.orgDansTonChat
: Most recent quotes from danstonchat.comDuckDuckGo
: Most recent results from DuckDuckGo.comFacebook
: Returns the latest posts on a page or profile on Facebook (There is an issue for public instances)FlickrExplore
: Latest interesting images from FlickrGoogleSearch
: Most recent results from Google SearchIdenti.ca
: Identica user timeline (Should be compatible with other Pump.io instances)Instagram
: Most recent photos from an Instagram user (It is recommended to configure this bridge to work)OpenClassrooms
: Lastest tutorials from openclassrooms.comPinterest
: Most recent photos from user or searchScmbBridge
: Newest stories from secouchermoinsbete.frThePirateBay
: Returns the newest indexed torrents from The Pirate Bay with keywordsTwitter
: Return keyword/hashtag search or user timelineWikipedia
: highlighted articles from Wikipedia in English, German, French or EsperantoYouTube
: YouTube user channel, playlist or search
And many more, thanks to the community!
Licenses
The source code for RSS-Bridge is Public Domain.
RSS-Bridge uses third party libraries with their own license:
Parsedown
licensed under the MIT LicensePHP Simple HTML DOM Parser
licensed under the MIT Licensephp-urljoin
licensed under the MIT LicenseLaravel framework
licensed under the MIT License
Rant
Dear so-called "social" websites.
Your catchword is "share", but you don't want us to share. You want to keep us within your walled gardens. That's why you've been removing RSS links from webpages, hiding them deep on your website, or removed feeds entirely, replacing it with crippled or demented proprietary API. FUCK YOU.
You're not social when you hamper sharing by removing feeds. You're happy to have customers creating content for your ecosystem, but you don't want this content out - a content you do not even own. Google Takeout is just a gimmick. We want our data to flow, we want RSS or Atom feeds.
We want to share with friends, using open protocols: RSS, Atom, XMPP, whatever. Because no one wants to have your service with your applications using your API force-feeding them. Friends must be free to choose whatever software and service they want.
We are rebuilding bridges you have willfully destroyed.
Get your shit together: Put RSS/Atom back in.