rss-bridge

The RSS feed for websites missing it

Stars
6.44K
Forks
1.02K
Open issues
154
Closed issues
1.42K
Last release
7 months ago
Last commit
4 months ago
Watchers
6.44K
Total releases
32
Total commits
3.74K
Open PRs
3
Closed PRs
1.87K
Repo URL
Platform
License
unlicense
Category
Usecase
Offers premium version?
NO
Proprietary?
NO
About

RSS-Bridge

RSS-Bridge is a web application.

It generates web feeds for websites that don't have one.

Officially hosted instance: https://rss-bridge.org/bridge01/

A subset of bridges (17/412)

Full documentation

Check out RSS-Bridge right now on https://rss-bridge.org/bridge01/

Alternatively find another public instance.

Tutorial Install with composer or git

Requires minimum PHP 7.4.

apt install nginx php-fpm php-mbstring php-simplexml php-curl
cd /var/www
composer create-project -v --no-dev rss-bridge/rss-bridge
cd /var/www
git clone https://github.com/RSS-Bridge/rss-bridge.git

Config:

# 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

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_read_timeout 60s;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}

}

Install from Docker Hub:

Install by downloading the 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 from Dockerfile

# Build image from Dockerfile
docker build -t rss-bridge .

Create container

docker create --name rss-bridge --publish 3000:80 rss-bridge

Start container

docker start rss-bridge

Browse http://localhost:3000/

Install with docker-compose

Create a docker-compose.yml file locally with with the following content:

version: '2'
services:
  rss-bridge:
    image: rssbridge/rss-bridge:latest
    volumes:
      - </local/custom/path>:/config
    ports:
      - 3000:80
    restart: unless-stopped

Then launch with docker-compose:

docker-compose up

Browse http://localhost:3000/

Other 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 #2688

Learn more in Installation.

How-to How to create a new bridge from scratch

Create the new bridge in e.g. 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-&gt;find('.blog-posts li') as $li) {
        $a = $li-&gt;find('a', 0);
        $this-&gt;items[] = [
            'title' =&gt; $a-&gt;plaintext,
            'uri' =&gt; 'https://herman.bearblog.dev' . $a-&gt;href,
        ];
    }
}

}

Learn more in bridge api.

How to enable all bridges

Modify config.ini.php:

enabled_bridges[] = *
How to enable some bridges
enabled_bridges[] = TwitchBridge
enabled_bridges[] = GettrBridge
How to enable debug mode

The debug mode disables the majority of caching operations.

enable_debug_mode = true
How to switch to memcached as cache backend
[cache]

; Cache backend: file (default), sqlite, memcached, null type = "memcached"

How to switch to sqlite3 as cache backend
type = "sqlite"
How to disable bridge errors (as feed items)

When a bridge fails, RSS-Bridge will produce a feed with a single item describing the error.

This way, feed readers pick it up and you are notified.

If you don't want this behaviour, switch the error output to 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"

How to accumulate errors before finally reporting it

Modify report_limit so that an error must occur 3 times before it is reported.

; Defines how often an error must occur before it is reported to the user
report_limit = 3

The report count is reset to 0 each day.

How to password-protect the instance

HTTP basic access authentication:

[authentication]

enable = true username = "alice" password = "cat"

Will typically require feed readers to be configured with the credentials.

It may also be possible to manually include the credentials in the URL:

https://alice:cat@rss-bridge.org/bridge01/?action=display&bridge=FabriceBellardBridge&format=Html

How to create a new output format

See formats/PlaintextFormat.php for an example.

How to run unit tests and linter

These commands require that you have installed the dev dependencies in composer.json.

./vendor/bin/phpunit
./vendor/bin/phpcs --standard=phpcs.xml --warning-severity=0 --extensions=php -p ./
How to spawn a minimal development environment
php -S 127.0.0.1:9001

http://127.0.0.1:9001/

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!

Current maintainers (as of 2023): @dvikan and @Mynacol #2519

Reference Feed item structure

This is the feed item structure that bridges are expected to produce.

    $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',
    ]
Output formats

  • Atom: Atom feed, for use in feed readers
  • Html: Simple HTML page
  • Json: JSON, for consumption by other applications
  • Mrss: MRSS feed, for use in feed readers
  • Plaintext: Raw text, for consumption by other applications
  • Sfeed: Text, TAB separated

Cache backends

  • File
  • SQLite
  • Memcached
  • Array
  • Null

Licenses

The source code for RSS-Bridge is Public Domain.

RSS-Bridge uses third party libraries with their own 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.

Alternative Projects
No projects found

Subscribe to Open Source Businees Newsletter

Twice a month we will interview people behind open source businesses. We will talk about how they are building a business on top of open source projects.

We'll never share your email with anyone else.