Go to file
2017-02-20 14:50:54 -08:00
examples Updating dependencies and README 2017-02-20 14:49:12 -08:00
lib Add support for custom elements to the feed 2017-02-20 15:39:16 -05:00
test RSS-26: Cleanup, logging, commenting 2015-06-12 12:52:55 -07:00
.gitignore More cleanup 2015-05-29 11:40:33 -07:00
.travis.yml Removing ancient node versions. 2015-02-11 08:24:53 -08:00
index.js first commit of new repo 2014-12-23 15:39:57 -08:00
package.json Updating dependencies and README 2017-02-20 14:49:12 -08:00
README.md Update README.md 2017-02-20 14:50:54 -08:00

Build Status Dependencies

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 = require('rss-braider'),
    feeds = {};

// Pull feeds from config files:
//      feeds.simple_test_feed = require("./config/feed").feed;
// Or define in-line
feeds.simple_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.createClient(braider_options);

// Override logging level (debug, info, warn, err, off)
rss_braider.logger.level('off');

// Output braided feed as rss. use 'json' for JSON output.
rss_braider.processFeed('simple_test_feed', 'rss', function(err, data){
    if (err) {
        return console.log(err);
    }
    console.log(data);
});

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.exports = function (item, itemOptions, source) {
    if (!item || !itemOptions) {
        return;
    }

    if (itemOptions.title) {
        itemOptions.title = itemOptions.title.toUpperCase();
    }

    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.