1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Twitter: monitor direct messages

This commit is contained in:
Nicholas O'Leary 2013-11-23 21:48:17 +00:00
parent 8176506d72
commit f2ed2365cd
2 changed files with 52 additions and 1 deletions

View File

@ -112,9 +112,10 @@
<option value="false">all public tweets</option> <option value="false">all public tweets</option>
<option value="true">the tweets of who you follow</option> <option value="true">the tweets of who you follow</option>
<option value="user">the tweets of specific users</option> <option value="user">the tweets of specific users</option>
<option value="dm">your direct messages</option>
</select> </select>
</div> </div>
<div class="form-row"> <div class="form-row" id="node-input-tags-row">
<label for="node-input-tags"><i class="icon-tags"></i> <span id="node-input-tags-label">for</span></label> <label for="node-input-tags"><i class="icon-tags"></i> <span id="node-input-tags-label">for</span></label>
<input type="text" id="node-input-tags" placeholder="comma-separated words, @ids, #tags"> <input type="text" id="node-input-tags" placeholder="comma-separated words, @ids, #tags">
</div> </div>
@ -159,9 +160,13 @@
$("#node-input-user").change(function() { $("#node-input-user").change(function() {
var type = $("#node-input-user option:selected").val(); var type = $("#node-input-user option:selected").val();
if (type == "user") { if (type == "user") {
$("#node-input-tags-row").show();
$("#node-input-tags-label").html("User"); $("#node-input-tags-label").html("User");
$("#node-input-tags").attr("placeholder","comma-separated @twitter handles"); $("#node-input-tags").attr("placeholder","comma-separated @twitter handles");
} else if (type == "dm") {
$("#node-input-tags-row").hide();
} else { } else {
$("#node-input-tags-row").show();
$("#node-input-tags-label").html("for"); $("#node-input-tags-label").html("for");
$("#node-input-tags").attr("placeholder","comma-separated words, @ids, #hashtags"); $("#node-input-tags").attr("placeholder","comma-separated words, @ids, #hashtags");
} }

View File

@ -57,6 +57,10 @@ function TwitterInNode(n) {
},function() { },function() {
var u = user+""; var u = user+"";
return function(err,cb) { return function(err,cb) {
if (err) {
node.error(err);
return;
}
if (cb[0]) { if (cb[0]) {
node.since_ids[u] = cb[0].id_str; node.since_ids[u] = cb[0].id_str;
} else { } else {
@ -89,6 +93,48 @@ function TwitterInNode(n) {
} }
}()); }());
} }
} else if (this.user === "dm") {
node.poll_ids = [];
twit.getDirectMessages({
screen_name:node.twitterConfig.screen_name,
trim_user:0,
count:1
},function(err,cb) {
if (err) {
node.error(err);
return;
}
if (cb[0]) {
node.since_id = cb[0].id_str;
} else {
node.since_id = '0';
}
node.poll_ids.push(setInterval(function() {
twit.getDirectMessages({
screen_name:node.twitterConfig.screen_name,
trim_user:0,
since_id:node.since_id
},function(err,cb) {
if (cb) {
for (var t=cb.length-1;t>=0;t-=1) {
var tweet = cb[t];
var where = tweet.user.location||"";
var la = tweet.lang || tweet.user.lang;
//console.log(tweet.user.location,"=>",tweet.user.screen_name,"=>",pay);
var msg = { topic:node.topic+"/"+tweet.user.screen_name, payload:tweet.text, location:where, lang:la, tweet:tweet };
node.send(msg);
if (t == 0) {
node.since_id = tweet.id_str;
}
}
}
if (err) {
node.error(err);
}
});
},65000));
});
} else if (this.tags !== "") { } else if (this.tags !== "") {
try { try {
var thing = 'statuses/filter'; var thing = 'statuses/filter';