RSS Please

A small tool (rsspls) to generate RSS feeds from web pages that lack them. It runs on BSD, Linux, macOS, Windows, and more.


Build Status Version License


rsspls generates RSS feeds from web pages. Example use cases:

The idea is that you will then subscribe to the generated feeds in your feed reader. This will typically require the feeds to be hosted via a web server.

Contents

Install

rsspls can be installed via one of the following methods:

Package Manager

rsspls is packaged in these package managers:

Pre-compiled Binary

Pre-compiled binaries are available for a number of platforms. They require no additional dependencies on your computer.

Example to download and extract a binary:

curl https://releases.wezm.net/rsspls/0.3.0/rsspls-0.3.0-x86_64-unknown-linux-musl.tar.gz | tar zxf -

This will result in the rsspls binary in the current directory.

Usage

Configuration

Unless specified via the --config command line option rsspls reads its configuration from one of the following paths:

The configuration file is in TOML format.

The parts of the page to extract for the feed are specified using CSS selectors.

Annotated Sample Configuration

The sample file below demonstrates all the parts of the configuration.

```toml

The configuration must start with the [rsspls] section

[rsspls]

Optional output directory to write the feeds to. If not specified it must be supplied via

the --output command line option.

output = "/tmp"

Next is the array of feeds, each one starts with [[feed]]

[[feed]]

The title of the channel in the feed

title = "My Great RSS Feed"

The output filename without the output directory to write this feed to.

Note: this is a filename only, not a path. It should not contain slashes.

filename = "wezm.rss"

The configuration for the feed

[feed.config]

The URL of the web page to generate the feed from.

url = "https://www.wezm.net/"

A CSS selector to select elements on the page that represent items in the feed.

item = "article"

A CSS selector relative to item to an element that will supply the title and link for the item.

Note: This element must have a href attribute.

heading = "h3 a"

Optional CSS selector relative to item that will supply the content of the RSS item.

summary = ".post-body"

Optional CSS selector relative to item that supples the publication date of the RSS item.

date = "time"

A second example feed

[[feed]] title = "Example Site" filename = "example.rss"

[feed.config] url = "https://example.com/" item = "div" heading = "a" ```

The first example above (for my blog WezM.net) matches HTML that looks like this:

```html

Recent Posts

Monitoring My Garage Door With a Raspberry Pi, Rust, and a 13Mb Linux System

I’ve accidentally left our garage door open a few times. To combat this I built a monitor that sends an alert via Mattermost when the door has been left open for more than 5 minutes. This turned out to be a super fun project. I used parts on hand as much as possible, implemented the monitoring application in Rust, and then built a stripped down Linux image to run it.

Continue Reading →
View more posts →

```

Hosting

It is expected that rsspls will be run on a web server that is serving the directory the feeds are written to. rsspls just generates the feeds, it's not a server. In order to have the feeds update you will need to arrange for rsspls to be run periodically. You might do this with [cron], systemd timers, or the Windows equivalent.

Caveats

rsspls just fetches and parses the HTML of the web page you specify. It does not run JavaScript. If the website is entirely generated by JavaScript (such as Twitter) then rsspls will not work.

Caching

When websites respond with cache headers rsspls will make a conditional request on subsequent runs and will not regenerate the feed if the server responds with 304 Not Modified. Cache data is stored in $XDG_CACHE_HOME/rsspls, which defaults to ~/.cache/rsspls on UNIX-like systems or C:\Users\You\AppData\Local\rsspls on Windows.

Build From Source

Minimum Supported Rust Version: 1.61.0

rsspls is implemented in Rust. See the Rust website for instructions on installing the toolchain.

From Git Checkout or Release Tarball

Build the binary with cargo build --release --locked. The binary will be in target/release/rsspls.

From crates.io

cargo install rsspls

Credits

Licence

This project is dual licenced under either of:

at your option.