# rss-watch
[![Build Status](https://travis-ci.org/mkroman/rss-watch.svg?branch=master)](https://travis-ci.org/mkroman/rss-watch)
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/licenses/BSD-2-Clause)
![Crates.io](https://img.shields.io/crates/v/rss-watch.svg)
rss-watch is a command-line utillity for watching RSS/Atom feeds and executing a
script whenever there's a new entry on the given feed.
Data about the entry is passed as environment variables to the script.
## Usage
`rss-watch` creates a SQLite database to keep track of previously seen feeds and
entries.
If you don't override the database path using the `-d` flag, the following
default location will be used, depending on your platform.
Platform | Path
---------|-----
*nix | $XDG_DATA_HOME/rss-watch/database.db
MacOS | $HOME/Library/Application Support/rss-watch/database.db
Windows | %LOCALAPPDATA%\mkroman\rss-watch\database.db
It's a good idea to run `rss-watch` with `--init` the first time you're watching
a new feed if you don't want to execute the scripts for all existing entries in
the feed.
```
rss-watch --init -i 6h https://blog.rust-lang.org/feed.xml ./some-script.sh
```
Will start watching the Rust blog and only run `./some-script.sh` when there's a
new entry from this point forward, whereas
```
rss-watch -i 6h https://blog.rust-lang.org/feed.xml ./some-script.sh
```
Will immediately run `./some-script.sh` for each existing entry if this is the
first time this feed is being watched.
## Examples
### Publish a Redis message when there's a new commit
Create the file `publish-redis-message.sh` with the following contents:
```bash
#!/usr/bin/env bash
redis-cli publish some.channel "There's a new commit: ${FEED_LINK}"
```
Make it executable:
`chmod +x ./publish-redis-message.sh`
And run `rss-watch` with
`rss-watch -i 1m https://github.com/mkroman/rss-watch/commits/master.atom
./publish-redis-message.sh`
And it'll now check for new commits once a minute and publish the commit url to
the channel `some.channel`.
## Environment variables
This is a list of the environment variables that can be passed to the script.
Name | Description
-----|-----------
FEED_URL | The URL to the whole feed. __Required__
FEED_GUID | The unique ID for the given entry. This is used to distinguish the entry from old ones. __Required__
FEED_LINK | Link to the "full story" for this entry. On an Atom entry this will be the first "alternate" link. _Optional_
FEED_TITLE | The title of the new entry. _Optional_
## Installation
Prerequisites:
* libsqlite3-dev
`rss-watch` is currently only available from crates.io or GitHub.
### Installing the latest stable version with Cargo
```
cargo install rss-watch
```
### Installing from git with Cargo
```
cargo install --git https://github.com/mkroman/rss-watch.git rss-watch
```
## License
This software is licensed under the [BSD 2-clause License](LICENSE).