An ingress for RSS, Atom, JSONFeed, and other news feeds that provides configurable output to multiple sources for storage or processing.
$ nix develop # Or local environment with go + docker-compose
$ $EDITOR config.yaml
$ docker-compose -f docker-compose.dependencies.yml up -d
$ go run *.go$ docker-compose build
$ docker-compose -f docker-compose.dependencies.yml -f docker-compose.yml up# Set up dependencies (at least redisbloom)
$ $EDITOR config.yaml
$ docker run --name feed-ingress -v ./config.yaml:/app/config.yaml:ro ghcr.io/danielunderwood/feed-ingressFeeds are a simple list of URLs in the config file:
feeds:
- https://example.com/rss.xml
- https://example-2.com/feed.xmlThese URLs are parsed by gofeed's universal parser with the hope of handling most things thrown at it.
redisbloom is currently used for deduplication of feed items. At the moment, it only supports the configuration of a host:
redis:
host: redis:6379kind: file will store to local JSON files based on the path format (note that the file name itself currently has a hardcoded format):
- kind: file
config:
pathformat: "./data/{{ .PublishedParsed.UTC.Year }}/{{ .PublishedParsed.UTC.Month }}/{{ .PublishedParsed.UTC.Day }}"The kind: s3 will work with any S3-compatible storage, such as AWS S3, Backblaze B2, or MinIO:
- kind: s3
config:
endpoint: https://s3.some-region.provider.com
region: some-region
accesskeyid: access-key
accesssecret: access-secret
bucket: my-feed-data
keyformat: "{{ .PublishedParsed.UTC.Year }}/{{ .PublishedParsed.UTC.Month }}/{{ .PublishedParsed.UTC.Day }}"kind: kafka will output to a Kafka (or compatible service, such as redpanda) topic:
- kind: kafka
config:
broker: "127.0.0.1:9092"
topic: feedsThe included docker-compose.yml will set up redpanda for testing.
kind: discord will output to a Discord webhook:
- kind: discord
config:
url: https://discord.com/api/webhooks/.../...This won't work as well as the other outputs for high-volume output, but should work for monitoring a handful of low-volume feeds.