diff --git a/social/feedparser/32-feedparse.html b/social/feedparser/32-feedparse.html index 8f61c04f..1a9c4770 100644 --- a/social/feedparser/32-feedparse.html +++ b/social/feedparser/32-feedparse.html @@ -7,6 +7,11 @@ +
+ + + +
@@ -20,7 +25,8 @@ defaults: { name: {value:""}, url: {value:"", required:true}, - interval: { value:15, required:true, validate:function(v) {return (!isNaN(parseInt(v)) && (parseInt(v) <= 35790))} } + interval: { value:15, required:true, validate:function(v) {return (!isNaN(parseInt(v)) && (parseInt(v) <= 35790))} }, + ignorefirst: { value:false } }, inputs:0, outputs:1, diff --git a/social/feedparser/32-feedparse.js b/social/feedparser/32-feedparse.js index aea5fef0..9feeeba8 100644 --- a/social/feedparser/32-feedparse.js +++ b/social/feedparser/32-feedparse.js @@ -11,11 +11,13 @@ module.exports = function(RED) { if (n.interval > 35790) { this.warn(RED._("feedparse.errors.invalidinterval")) } this.interval = (parseInt(n.interval)||15) * 60000; this.interval_id = null; + this.ignorefirst = n.ignorefirst || false; this.seen = {}; + this.donefirst = false; var node = this; var parsedUrl = url.parse(this.url); if (!(parsedUrl.host || (parsedUrl.hostname && parsedUrl.port)) && !parsedUrl.isUnix) { - node.error(RED._("feedparse.errors.invalidurl")); + node.error(RED._("feedparse.errors.invalidurl"),RED._("feedparse.errors.invalidurl")); } else { var getFeed = function() { @@ -33,19 +35,24 @@ module.exports = function(RED) { else { res.pipe(feedparser); } }); - feedparser.on('error', function(error) { node.error(error); }); + feedparser.on('error', function(error) { node.error(error,error); }); feedparser.on('readable', function () { var stream = this, article; while (article = stream.read()) { // jshint ignore:line if (!(article.guid in node.seen) || ( node.seen[article.guid] !== 0 && node.seen[article.guid] != article.date.getTime())) { - node.seen[article.guid] = article.date?article.date.getTime():0; + node.seen[article.guid] = article.date ? article.date.getTime() : 0; var msg = { topic: article.origlink || article.link, payload: article.description, article: article }; - node.send(msg); + if (node.ignorefirst === true && node.donefirst === false) { + // do nothing + } + else { + node.send(msg); + } } } }); @@ -53,7 +60,7 @@ module.exports = function(RED) { feedparser.on('meta', function (meta) {}); feedparser.on('end', function () {}); }; - node.interval_id = setInterval(function() { getFeed(); }, node.interval); + node.interval_id = setInterval(function() { node.donefirst = true; getFeed(); }, node.interval); getFeed(); } diff --git a/social/feedparser/locales/en-US/32-feedparse.json b/social/feedparser/locales/en-US/32-feedparse.json index 2a5fd943..c2be15ee 100644 --- a/social/feedparser/locales/en-US/32-feedparse.json +++ b/social/feedparser/locales/en-US/32-feedparse.json @@ -4,7 +4,8 @@ "label": { "feedurl": "Feed url", "refresh": "Refresh", - "minutes": "minutes" + "minutes": "minutes", + "ignorefirst": "Ignore any stories older than restart" }, "errors": { "badstatuscode": "error - Bad status code", diff --git a/social/feedparser/package.json b/social/feedparser/package.json index ca3d75cc..c729aa53 100644 --- a/social/feedparser/package.json +++ b/social/feedparser/package.json @@ -1,6 +1,6 @@ { "name": "node-red-node-feedparser", - "version": "0.2.2", + "version": "0.3.0", "description": "A Node-RED node to get RSS Atom feeds.", "dependencies": { "feedparser": "^2.2.10", @@ -15,7 +15,8 @@ "keywords": [ "node-red", "atom", - "rss" + "rss", + "feed" ], "node-red": { "nodes": {