Ingen beskrivning

Steve Kemp 8494f5af29 Removed travis badge; documented github actions 5 år sedan
.github 1bcde1caf5 Added github actions 5 år sedan
webhook 7637f9b0c2 Initial import 6 år sedan
LICENSE 7637f9b0c2 Initial import 6 år sedan
README.md 8494f5af29 Removed travis badge; documented github actions 5 år sedan
rss2hook.go d0349a909f Significant comment updates. 6 år sedan
sample.cfg 7637f9b0c2 Initial import 6 år sedan

README.md

Go Report Card license Release

RSS2Hook

This project is a self-hosted utility which will make HTTP POST requests to remote web-hooks when new items appear in an RSS feed.

Rational

I have a couple of webhooks in-place already which will take incoming HTTP submissions and "do stuff" with them, for example:

  • Posting to my alerting system.
    • Which is called purppura and is pretty neat.
  • Posting to IRC.
    • IRC was mattermost before slack before born.

I also have a bunch of RSS feeds that I follow, typically these include github releases of projects. For example my git-host runs gitbucket so I subscribe to the release feed of that, to ensure I'm always up to date:

Deployment

If you have a working golang setup you should be able to install this application via:

go get -u  github.com/skx/rss2hook
go install github.com/skx/rss2hook

If you prefer you can fetch a binary from our release page. Currently there is only a binary for Linux (amd64) due to the use of cgo in our dependencies.

Setup

There are two parts to the setup:

  • Configure the list of feeds and the corresponding hooks to POST to.
  • Ensure the program is running.

For the first create a configuration-file like so:

http://example.com/feed.rss = https://webhook.example.com/notify/me

(There is a sample configuration file sample.cfg which will demonstrate this more verbosely.)

You can use your favourite supervision tool to launch the deamon, but you can test interactively like so:

 $ rss2hook -config ./sample.cfg

Sample Webhook Receiver

There is a simple webserver located beneath webhook/ which will listen upon http://localhost:8080, and dump any POST submission to the console.

You can launch it like so:

 cd webhook/
 go run webhook.go

Testing it via curl would look like this:

  $ curl --header "Content-Type: application/json"  \
  --request POST \
  --data '{"username":"blah","password":"blah"}' \
  http://localhost:8080/

The sample.cfg file will POST to this end-point so you can see how things work:

$ rss2hook --config=sample.cfg

Implementation Notes

  • By default the server will poll all configured feeds immediately upon startup.
    • It will look for changes every five minutes.
  • To ensure items are only announced once state is kept on the filesystem.
    • Beneath the directory ~/.rss2hook/seen/.
  • Feed items are submitted to the webhook as JSON.

Feedback?

Turning this into a SaaS project would be interesting. A simple setup would be very straight-forward to implement, however at a larger scale it would get more interesting:

  • Assume two people have subscribed to the same feed.
    • But they did so a few days apart.
  • That means what is "new" to each of them differs.
    • So you need to keep track of "seen" vs. "new" on a per-user and per-feed basis.

Anyway it would be fun to implement, but I'm not sure there is a decent revenue model out there for it. Especially when you can wire up IFTTT or similar system to do the same thing.

Github Setup

This repository is configured to run tests upon every commit, and when pull-requests are created/updated. The testing is carried out via .github/run-tests.sh which is used by the github-action-tester action.

Releases are automated in a similar fashion via .github/build, and the github-action-publish-binaries action.

Steve