Summary
Braid/aggregate one or more RSS feeds (file or url) into a single feed (RSS or JSON output). Process resulting feed through specified plugins. Automatic deduplication
Installation
npm install rss-braider
Test
npm install
npm test
Examples
$ cd examples
$ node simple.js (combines 3 sources)
$ node use_plugins.js (combines 3 sources and runs a transformation plugin)
Code Example
var RssBraider = feeds = {}; // Pull feeds from config files:// feeds.simple_test_feed = require("./config/feed").feed;// Or define in-linefeedssimple_test_feed = "feed_name" : "feed" "default_count" : 1 "no_cdata_fields" : // Don't wrap these fields in CDATA tags "meta" : "title": "NPR Braided Feed" "description": "This is a test of two NPR" "sources" : "name" : "NPR Headlines" "count" : 2 "feed_url" : "http://www.npr.org/rss/rss.php?id=1001" "name" : "NPR Sports" "count" : 2 "feed_url" : "http://www.npr.org/rss/rss.php?id=1055" ;var braider_options = feeds : feeds indent : " " date_sort_order : "desc" // Newest first log_level : "debug";var rss_braider = RssBraider; // Override logging level (debug, info, warn, err, off)rss_braiderlogger; // Output braided feed as rss. use 'json' for JSON output.rss_braider;
Plugins
Plugins provide custom manipulation and filtering of RSS items/articles. See examples/plugins
for examples.
A plugin operates by modifying the itemOptions
object or by returning null
which will exclude the item
(article) from the resulting feed (See examples/plugins/filter_out_all_articles.js
).
The itemsOptions
object gets passed to node-rss
to generate the RSS feeds, so read the documentation on that module and its use of custom namespaces. (https://github.com/dylang/node-rss)
Plugin Example
This plugin will capitalize the article title for all articles
module { if !item || !itemOptions return; if itemOptionstitle itemOptionstitle = itemOptionstitle; return itemOptions;};
The plugin is registered with the feed in the feed config .js file and are run in order.
var feed = "feed_name" : "feed with plugins" "default_count" : 1 "plugins" : 'capitalize_title' 'plugin_template'...
Release Notes
1.0.0
Changed plugin architecture to allow filtering out of article/items by returning -1
instead of a modified itemsOptions
object. This is a breaking change as it will require existing plugins to return itemsOptions
instead of modifying the reference. See examples/plugins
.