Skip to content

Instantly share code, notes, and snippets.

@wgbartley
Last active August 29, 2015 14:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wgbartley/b9f1f016b0e223699da0 to your computer and use it in GitHub Desktop.
Save wgbartley/b9f1f016b0e223699da0 to your computer and use it in GitHub Desktop.
Discourse Forum User Post Alert
/**
* This monitors a Discourse forum for postings by a particular user.
* I stopped just shy of figuring out how to publish an event to a
* Particle device PubSub stream.
**/
var https = require('https'),
cp = require('child_process'),
xmlParseString = require('xml2js').parseString;
getLatest();
function getLatest() {
https.get('https://community.particle.io/latest.rss', function(res) {
var body = '';
res.on('data', function(d) {
body += d.toString();
});
res.on('end', function() {
xmlParseString(body, function(err, result) {
var items = result.rss.channel[0].item;
for(var i in items) {
getTopic(items[i].source[0].$.url);
}
});
});
}).on('error', function(e) {
console.log('ERROR: ', e);
setTimeout(getLatest, 60000);
});
}
function getTopic(url) {
url = url.replace('spark.io', 'particle.io');
https.get(url, function(res) {
var body = '';
res.on('data', function(d) {
body += d.toString();
});
res.on('end', function() {
xmlParseString(body, function(err, result) {
var items = result.rss.channel[0].item;
for(var i in items) {
var author = /\(\@(\w)+/.exec(items[i].author)[0].substr(1);
if(author.toUpperCase()=='@JACK') {
console.log(items[i].pubDate);
cp.execFileSync('particle', ['publish', 'jackattack', '"'+items[i].pubDate+'"']);
}
}
});
setTimeout(getLatest, 60000);
});
}).on('error', function(e) {
console.log('ERROR: ', e);
setTimeout(getLatest, 60000);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment