mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	| @@ -111,10 +111,11 @@ | ||||
|         <select type="text" id="node-input-user" style="display: inline-block; vertical-align: middle; width:60%;"> | ||||
|             <option value="false">all public tweets</option> | ||||
|             <option value="true">the tweets of who you follow</option> | ||||
|             <option value="user">the tweets of specific users</option> | ||||
|         </select> | ||||
|     </div> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-tags"><i class="icon-tags"></i> for</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"> | ||||
|     </div> | ||||
|     <div class="form-row"> | ||||
| @@ -141,7 +142,7 @@ | ||||
|         defaults: { | ||||
|             twitter: {type:"twitter-credentials",required:true}, | ||||
|             tags: {value:"",required:true}, | ||||
|             user: {value:"false",required:true}, | ||||
|             user: {value:"public",required:true}, | ||||
|             name: {value:""}, | ||||
|             topic: {value:"tweets"} | ||||
|         }, | ||||
| @@ -153,6 +154,21 @@ | ||||
|         }, | ||||
|         labelStyle: function() { | ||||
|             return this.name?"node_label_italic":""; | ||||
|         }, | ||||
|         oneditprepare: function() { | ||||
|             $("#node-input-user").change(function() { | ||||
|                 var type = $("#node-input-user option:selected").val(); | ||||
|                 if (type == "user") { | ||||
|                     $("#node-input-tags-label").html("User"); | ||||
|                     $("#node-input-tags").attr("placeholder","comma-separated @twitter handles"); | ||||
|                 } else { | ||||
|                     $("#node-input-tags-label").html("for"); | ||||
|                     $("#node-input-tags").attr("placeholder","comma-separated words, @ids, #hashtags"); | ||||
|                 }                 | ||||
|  | ||||
|             }); | ||||
|             $("#node-input-user").change(); | ||||
|          | ||||
|         } | ||||
|     }); | ||||
| </script> | ||||
|   | ||||
| @@ -44,10 +44,55 @@ function TwitterInNode(n) { | ||||
|         }); | ||||
|  | ||||
|         var node = this; | ||||
|         if (this.tags !== "") { | ||||
|         if (this.user === "user") { | ||||
|             node.poll_ids = []; | ||||
|             node.since_ids = {}; | ||||
|             var users = node.tags.split(","); | ||||
|             for (var i=0;i<users.length;i++) { | ||||
|                 var user = users[i].replace(" ",""); | ||||
|                 twit.getUserTimeline({ | ||||
|                         screen_name:user, | ||||
|                         trim_user:0, | ||||
|                         count:1 | ||||
|                 },function() {  | ||||
|                     var u = user+""; | ||||
|                     return function(err,cb) { | ||||
|                         if (cb[0]) { | ||||
|                             node.since_ids[u] = cb[0].id_str; | ||||
|                         } else { | ||||
|                             node.since_ids[u] = '0'; | ||||
|                         } | ||||
|                         node.poll_ids.push(setInterval(function() { | ||||
|                             twit.getUserTimeline({ | ||||
|                                     screen_name:u, | ||||
|                                     trim_user:0, | ||||
|                                     since_id:node.since_ids[u] | ||||
|                             },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_ids[u] = tweet.id_str; | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                                 if (err) { | ||||
|                                     node.error(err); | ||||
|                                 } | ||||
|                             }); | ||||
|                         },60000)); | ||||
|                     } | ||||
|                 }()); | ||||
|             } | ||||
|         } else if (this.tags !== "") { | ||||
|             try { | ||||
|                 var thing = 'statuses/filter'; | ||||
|                 if (this.user == "true") { thing = 'user'; } | ||||
|                 if (this.user === "true") { thing = 'user'; } | ||||
|                 var st = { track: [node.tags] }; | ||||
|                 var bits = node.tags.split(","); | ||||
|                 if ((bits.length > 0) && (bits.length % 4 == 0)) { | ||||
| @@ -110,6 +155,11 @@ function TwitterInNode(n) { | ||||
|             this.active = false; | ||||
|             this.stream.destroy(); | ||||
|         } | ||||
|         if (this.poll_ids) { | ||||
|             for (var i=0;i<this.poll_ids.length;i++) { | ||||
|                 clearInterval(this.poll_ids[i]); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| } | ||||
| RED.nodes.registerType("twitter in",TwitterInNode); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user