Aggreplop
Aggreplop is a simple Bash script that aggregates multiple podcast and RSS/Atom feeds into a single website and RSS feed.
You can download the Aggreblop code here.
It downloads entries from a list of feeds, sorts them by publication date, renders an HTML page, and generates a combined RSS feed using lightweight HTML and XML templates.
The project is designed to be easy to understand, easy to modify, and depend only on standard Unix tools.
Features
- Merge multiple RSS and Atom feeds into one feed.
- Generate a static HTML page.
- Generate a valid RSS feed.
- Sort items by publication date.
- Customisable HTML and XML templates.
- No databases.
- No web server required for generation.
- Simple Bash implementation.
Requirements
Aggreplop requires:
- Bash
- curl
- xmlstarlet
- GNU awk
- GNU sed
- GNU date (coreutils)
Directory Layout
feeds.csv List of feeds to aggregate
template.html HTML page template
template.xml RSS feed template
item.html HTML template for a single item
item.xml RSS template for a single item
index.html Generated HTML page
rss.xml Generated RSS feed
Feed List
Feeds are listed in feeds.csv.
Each line has the format:
feed-url|author|category
For example:
https://example.com/feed.xml|Example Podcast|Podcast
https://example.org/rss|Chris Were|Blog
Blank lines and lines beginning with # are ignored.
Templates
Aggreplop uses four templates.
template.html
Defines the overall HTML page.
The placeholder
{{items}}
is replaced with the rendered list of feed items.
item.html
Defines how each HTML item is displayed.
Available placeholders are:
{{title}}{{link}}{{author}}{{class}}{{date}}{{pretty_date}}
template.xml
Defines the overall RSS document.
The placeholder
{{items}}
is replaced with the generated RSS items.
item.xml
Defines a single RSS item using the same placeholders as item.html.
Usage
Run the script from the project directory:
./aggreplopor, if installed in your $PATH:
aggreplopThe script downloads every configured feed, extracts each item’s publication date, title and link, sorts everything into reverse chronological order, then generates:
index.htmlrss.xml
Existing output files are replaced when generation completes successfully.
Error Handling
If a feed cannot be downloaded, Aggreplop skips it and continues processing the remaining feeds.
Missing template files or configuration files cause the script to terminate with an error.
Philosophy
Aggreplop is intentionally simple.
Rather than relying on frameworks, databases or static-site generators, it uses a straightforward Bash pipeline and a small number of standard Unix utilities. The goal is for the entire generation process to remain readable, hackable and easy to adapt to individual websites.