diff --git a/social/twitter/27-twitter.html b/social/twitter/27-twitter.html index 4ac7729f..8b958d76 100644 --- a/social/twitter/27-twitter.html +++ b/social/twitter/27-twitter.html @@ -124,7 +124,8 @@
  • all tweets by specific users
  • direct messages received by the authenticated user
  • -

    Use space for and and comma , for or when searching for multiple terms. If you want to pass in the term(s) via the msg.payload, leave the field blank.

    +

    Use space for and and comma , for or when searching for multiple terms. + If you want to pass in the search term(s) via the msg.payload, leave the for field blank.

    Sets the msg.topic to tweets/ and then appends the senders screen name.

    Sets msg.location to the tweeters location if known.

    Sets msg.tweet to the full tweet object as documented by Twitter. @@ -145,8 +146,8 @@ name: {value:""}, topic: {value:"tweets"} }, - inputs:0, - outputs:1, + inputs: 1, + outputs: 1, icon: "twitter.png", label: function() { if (this.name) { @@ -158,7 +159,10 @@ } else if (this.user == "user") { return this.tags+" "+this._("twitter.label.tweetslabel"); } - return this.tags; + else if (this.user == "true") { + return this._("twitter.label.followers"); + } + return "twitter"; }, labelStyle: function() { return this.name?"node_label_italic":""; @@ -181,19 +185,18 @@ $("#node-input-tags-label").html(forlabel); $("#node-input-tags").attr("placeholder",forph); } - }); $("#node-input-user").change(); - }, - oneditsave: function() { - if ($('#node-input-tags').val() === '' && $("#node-input-user option:selected").val() != 'dm' && $("#node-input-user option:selected").val() != 'user') { - this.inputs=1; - } - else { - //set back the default state of 0 inputs - this.inputs=0; - } - } + }//, + // oneditsave: function() { + // if ($('#node-input-tags').val() === '' && $("#node-input-user option:selected").val() != 'dm' && $("#node-input-user option:selected").val() != 'user') { + // this.inputs=1; + // } + // else { + // //set back the default state of 0 inputs + // this.inputs=0; + // } + // } }); diff --git a/social/twitter/27-twitter.js b/social/twitter/27-twitter.js index cbaa2978..a91a187f 100644 --- a/social/twitter/27-twitter.js +++ b/social/twitter/27-twitter.js @@ -88,59 +88,64 @@ module.exports = function(RED) { if (this.user === "user") { node.poll_ids = []; node.since_ids = {}; + node.status({}); var users = node.tags.split(","); - //if (users == '') node.warn("User option selected but no users specified"); - if (users.length === 0) { node.warn(RED._("twitter.warn.nousers")); } - for (var i=0; i=0;t-=1) { - var tweet = cb[t]; - var where = tweet.user.location; - var la = tweet.lang || tweet.user.lang; - var msg = { topic:node.topic+"/"+tweet.user.screen_name, payload:tweet.text, lang:la, tweet:tweet }; - if (where) { - msg.location = {place:where}; - addLocationToTweet(msg); - } - node.send(msg); - if (t === 0) { - node.since_ids[u] = tweet.id_str; + if (users === '') { node.warn(RED._("twitter.warn.nousers")); } + //if (users.length === 0) { node.warn(RED._("twitter.warn.nousers")); } + else { + for (var i=0; i=0; t-=1) { + var tweet = cb[t]; + var where = tweet.user.location; + var la = tweet.lang || tweet.user.lang; + var msg = { topic:node.topic+"/"+tweet.user.screen_name, payload:tweet.text, lang:la, tweet:tweet }; + if (where) { + msg.location = {place:where}; + addLocationToTweet(msg); + } + node.send(msg); + if (t === 0) { + node.since_ids[u] = tweet.id_str; + } } } - } - if (err) { - node.error(err); - } - }); - },60000)); - } - }())); + if (err) { + node.error(err); + } + }); + },60000)); + } + }())); + } } - } else if (this.user === "dm") { + } + else if (this.user === "dm") { node.poll_ids = []; + node.status({}); twit.getDirectMessages({ screen_name:node.twitterConfig.screen_name, trim_user:0, @@ -183,8 +188,8 @@ module.exports = function(RED) { }); },120000)); }); - - } else { + } + else { try { var thing = 'statuses/filter'; if (this.user === "true") { thing = 'user'; } @@ -218,11 +223,13 @@ module.exports = function(RED) { } }); stream.on('limit', function(tweet) { + node.status({fill:"grey", shape:"circle", text:"Rate limiting"}); node.warn(RED._("twitter.errors.ratelimit")); }); stream.on('error', function(tweet,rc) { if (rc == 420) { - node.warn(RED._("twitter.errors.ratelimit")); + node.status({fill:"grey", shape:"dot", text:"Rate limit hit"}); + //node.warn(RED._("twitter.errors.ratelimit")); } else { node.warn(RED._("twitter.errors.streamerror",{error:tweet.toString(),rc:rc})); } @@ -241,13 +248,14 @@ module.exports = function(RED) { node.status({fill:"yellow", shape:"ring", text:RED._("twitter.warn.waiting")}); } else { + node.status({fill:"green", shape:"dot", text:node.tags}); setupStream(); } node.on("input", function(msg) { if (this.tags === '') { if (this.stream) { this.stream.destroy(); } - if (msg.payload !== "") { - st = { track: [msg.payload] }; + if ((typeof msg.payload === "string") && (msg.payload !== "")) { + st = { track:[msg.payload] }; setupStream(); node.status({fill:"green", shape:"dot", text:msg.payload}); } @@ -257,7 +265,6 @@ module.exports = function(RED) { } //We shouldn't get into this state, but just incase, check for it else { - // node.warn("msg.payload passed in, but tag config is not blank, defaulting to tag config"); node.status({fill:"green", shape:"dot", text:node.tags}); } }); @@ -266,7 +273,8 @@ module.exports = function(RED) { node.error(err); } } - } else { + } + else { this.error(RED._("twitter.errors.missingcredentials")); } diff --git a/social/twitter/locales/en-US/27-twitter.json b/social/twitter/locales/en-US/27-twitter.json index 1dd10f6d..f4aaf4a1 100644 --- a/social/twitter/locales/en-US/27-twitter.json +++ b/social/twitter/locales/en-US/27-twitter.json @@ -6,6 +6,7 @@ "for": "for", "user": "User", "dmslabel": "DMs", + "followers": "user stream tweets", "tweetslabel": "tweets", "clickhere": "Click here to authenticate with Twitter." }, @@ -15,11 +16,11 @@ }, "search": { "public": "all public tweets", - "follow": "the tweets of who you follow", + "follow": "the tweets of user stream", "user": "the tweets of specific users", "direct": "your direct messages" }, - "tip": "Tip: Use commas without spaces between multiple search terms. Comma = OR, Space = AND.
    The Twitter API WILL NOT deliver 100% of all tweets.
    Tweets of who you follow will include their retweets and favourites.", + "tip": "Tip: Use commas without spaces between multiple search terms. Comma = OR, Space = AND.
    The Twitter API WILL NOT deliver 100% of all tweets.
    Tweets of who you follow will include their retweets and favourites.

    Leave for blank to set using msg.payload.", "status": { "using-geo": "Using geo location: __location__", "tweeting": "tweeting", @@ -27,7 +28,7 @@ }, "warn": { "nousers":"User option selected but no users specified", - "waiting":"Waiting for search term" + "waiting":"Waiting to search" }, "errors": { "ratelimit":"tweet rate limit hit", @@ -38,7 +39,6 @@ "truncated":"truncated tweet greater than 140 characters", "sendfail":"send tweet failed: __error__", "nopayload":"no payload to tweet", - "oauthbroke":"something in twitter oauth broke.", "oautherror": "

    Something went wrong with the authentication process. The following error was returned:

    __statusCode__: __errorData__

    One known cause of this type of failure is if the clock is wrong on system running Node-RED

    ", "authorized": "

    Authorised - you can close this window and return to Node-RED

    "