Skip to content

Commit 63012a7

Browse files
author
Dave Conway-Jones
committed
Let feedparser ignore initial "old" stories
1 parent aabba8f commit 63012a7

File tree

4 files changed

+24
-9
lines changed

4 files changed

+24
-9
lines changed

social/feedparser/32-feedparse.html

+7-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
<label for="node-input-interval"><i class="fa fa-repeat"></i> <span data-i18n="feedparse.label.refresh"></span></label>
88
<input type="text" id="node-input-interval" style="width:60px"> <span data-i18n="feedparse.label.minutes"></span>
99
</div>
10+
<div class="form-row">
11+
<label> </label>
12+
<input type="checkbox" id="node-input-ignorefirst" style="display:inline-block; width:20px; vertical-align:baseline;">
13+
<span data-i18n="feedparse.label.ignorefirst"></span>
14+
</div>
1015
<div class="form-row">
1116
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
1217
<input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
@@ -20,7 +25,8 @@
2025
defaults: {
2126
name: {value:""},
2227
url: {value:"", required:true},
23-
interval: { value:15, required:true, validate:function(v) {return (!isNaN(parseInt(v)) && (parseInt(v) <= 35790))} }
28+
interval: { value:15, required:true, validate:function(v) {return (!isNaN(parseInt(v)) && (parseInt(v) <= 35790))} },
29+
ignorefirst: { value:false }
2430
},
2531
inputs:0,
2632
outputs:1,

social/feedparser/32-feedparse.js

+12-5
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ module.exports = function(RED) {
1111
if (n.interval > 35790) { this.warn(RED._("feedparse.errors.invalidinterval")) }
1212
this.interval = (parseInt(n.interval)||15) * 60000;
1313
this.interval_id = null;
14+
this.ignorefirst = n.ignorefirst || false;
1415
this.seen = {};
16+
this.donefirst = false;
1517
var node = this;
1618
var parsedUrl = url.parse(this.url);
1719
if (!(parsedUrl.host || (parsedUrl.hostname && parsedUrl.port)) && !parsedUrl.isUnix) {
18-
node.error(RED._("feedparse.errors.invalidurl"));
20+
node.error(RED._("feedparse.errors.invalidurl"),RED._("feedparse.errors.invalidurl"));
1921
}
2022
else {
2123
var getFeed = function() {
@@ -33,27 +35,32 @@ module.exports = function(RED) {
3335
else { res.pipe(feedparser); }
3436
});
3537

36-
feedparser.on('error', function(error) { node.error(error); });
38+
feedparser.on('error', function(error) { node.error(error,error); });
3739

3840
feedparser.on('readable', function () {
3941
var stream = this, article;
4042
while (article = stream.read()) { // jshint ignore:line
4143
if (!(article.guid in node.seen) || ( node.seen[article.guid] !== 0 && node.seen[article.guid] != article.date.getTime())) {
42-
node.seen[article.guid] = article.date?article.date.getTime():0;
44+
node.seen[article.guid] = article.date ? article.date.getTime() : 0;
4345
var msg = {
4446
topic: article.origlink || article.link,
4547
payload: article.description,
4648
article: article
4749
};
48-
node.send(msg);
50+
if (node.ignorefirst === true && node.donefirst === false) {
51+
// do nothing
52+
}
53+
else {
54+
node.send(msg);
55+
}
4956
}
5057
}
5158
});
5259

5360
feedparser.on('meta', function (meta) {});
5461
feedparser.on('end', function () {});
5562
};
56-
node.interval_id = setInterval(function() { getFeed(); }, node.interval);
63+
node.interval_id = setInterval(function() { node.donefirst = true; getFeed(); }, node.interval);
5764
getFeed();
5865
}
5966

social/feedparser/locales/en-US/32-feedparse.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"label": {
55
"feedurl": "Feed url",
66
"refresh": "Refresh",
7-
"minutes": "minutes"
7+
"minutes": "minutes",
8+
"ignorefirst": "Ignore any stories older than restart"
89
},
910
"errors": {
1011
"badstatuscode": "error - Bad status code",

social/feedparser/package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "node-red-node-feedparser",
3-
"version": "0.2.2",
3+
"version": "0.3.0",
44
"description": "A Node-RED node to get RSS Atom feeds.",
55
"dependencies": {
66
"feedparser": "^2.2.10",
@@ -15,7 +15,8 @@
1515
"keywords": [
1616
"node-red",
1717
"atom",
18-
"rss"
18+
"rss",
19+
"feed"
1920
],
2021
"node-red": {
2122
"nodes": {

0 commit comments

Comments
 (0)