#rss #atom #cli #webhook #stdio

app rss-forwarder

Checks RSS feeds for new entries and forwards them

14 releases

new 0.6.1 Mar 25, 2023
0.6.0-beta.0 Jan 9, 2023
0.6.0-alpha.0 Mar 26, 2022
0.5.1 Nov 17, 2021
0.1.0-beta.0 Jun 1, 2021

#310 in Command line utilities

22 downloads per month

MIT license

39KB
1K SLoC

test-badge crates-badge

RSS Forwarder

Checks RSS/Atom feeds for new entries and forwards them to different targets (called "sinks"), such as webhooks or applications/scripts.

Supported sinks

Sink Type value Description
Discord discord Discord webhook
Slack slack Slack webhook
Custom custom JSON stream to stdin

Installation

Official binary

jq required!

curl --proto '=https' --tlsv1.3 -LO "$(curl --proto '=https' --tlsv1.3 -sSf https://api.github.com/repos/morphy2k/rss-forwarder/releases/latest | jq -r ".assets[] | select(.name == \"rss-forwarder-linux-x86_64\") | .browser_download_url")"
chmod +x rss-forwarder-linux-x86_64
sudo mv rss-forwarder-linux-x86_64 /usr/local/bin/rss-forwarder

Cargo

cargo install rss-forwarder

Container image

See GitHub container package

Usage

USAGE: rss-forwarder [OPTIONS] <CONFIG_FILE>

OPTIONS:
--debug             Enables debug mode
-h, --help          Show help information
-v, --version       Show version info

Examples

Configuration

The feed configuration is passed as a TOML file.

Feed

Field Type Required Default Description
url string Yes URL to the RSS feed
interval string No 60s Specifies the time interval between checks. E.g. 10m, 3h, 1d.
retry_limit uint No 10 Specifies the retries after certain errors.
sink object Yes Sink options

Discord Sink

Sends feed items to a Discord webhook

Field Type Required Default Description
type string Yes Sink type
url string Yes Discord webhook URL

Slack Sink

Sends feed items to a Slack webhook

Field Type Required Default Description
type string Yes Sink type
url string Yes Slack webhook URL

Custom Sink

Streams feed items in NDJSON to stdin.

Field Type Required Default Description
type string Yes Sink type
command string Yes Program path
arguments [string] No Arguments to pass to the program.

JSON Example

{
    "title": "Item Example",
    "description": "This is an example",
    "content": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
    "link": "https://example.com/news/item-example",
    "date": "2021-09-08T23:12:05+02:00",
    "authors": [
        {
            "name": "Jane Doe",
            "email": "jane@example.com",
            "uri": "https://example.com/author/jane-doe"
        }
    ]
}

Config Example

# Feed 1
[feeds.github-blog]
url = "https://github.blog/all.atom"
interval = "10m"
retry_limit = 5
sink.type = "discord"
sink.url = "https://discord.com/api/webhooks/84175.../OZdejNBCL1..."

# Feed 2
[feeds.rust-blog]
url = "https://blog.rust-lang.org/feed.xml"
interval = "1m"

[feeds.rust-blog.sink]
type = "custom"
command = "bash"
arguments = ["-c", "cat - >> ./rust-blog.log"]

Dependencies

~14–22MB
~488K SLoC