From 21f31cf4a04941d4e719497c4745266dabb72a7f Mon Sep 17 00:00:00 2001 From: Baruch Odem Date: Fri, 10 Sep 2021 08:46:21 +0300 Subject: [PATCH] Node-red-node-twitter retweet support Fixes #834 --- social/twitter/27-twitter.js | 58 ++++++++++++------------------------ social/twitter/README.md | 6 ++++ 2 files changed, 25 insertions(+), 39 deletions(-) diff --git a/social/twitter/27-twitter.js b/social/twitter/27-twitter.js index ac037bee8..65082c704 100644 --- a/social/twitter/27-twitter.js +++ b/social/twitter/27-twitter.js @@ -564,7 +564,7 @@ module.exports = function(RED) { }); node.on("input", function(msg) { - if (msg.hasOwnProperty("payload")) { + if (msg.hasOwnProperty("payload") || msg.hasOwnProperty("retweet")) { node.status({fill:"blue",shape:"dot",text:"twitter.status.tweeting"}); if (msg.payload.slice(0,2).toLowerCase() === "d ") { var dm_user; @@ -605,6 +605,24 @@ module.exports = function(RED) { node.error(err,msg); node.status({fill:"red",shape:"ring",text:"twitter.status.failed"}); }) + } else if (msg.retweet) { + node.twitterConfig.post("https://api.twitter.com/1.1/statuses/retweet/" + msg.retweet,{},msg.params || {}) + .then(function(result) { + if (result.status === 200) { + node.status({}); + } else { + node.status({fill:"red",shape:"ring",text:"twitter.status.failed"}); + + if ('error' in result.body && typeof result.body.error === 'string') { + node.error(result.body.error,msg); + } else { + node.error(result.body.errors[0].message,msg); + } + } + }).catch(function(err) { + node.status({fill:"red",shape:"ring",text:"twitter.status.failed"}); + node.error(err,msg); + }) } else { if (msg.payload.length > 280) { msg.payload = msg.payload.slice(0,279); @@ -657,44 +675,6 @@ module.exports = function(RED) { node.status({fill:"red",shape:"ring",text:"twitter.status.failed"}); node.error(err,msg); }); - // if (msg.payload.length > 280) { - // msg.payload = msg.payload.slice(0,279); - // node.warn(RED._("twitter.errors.truncated")); - // } - // if (msg.media && Buffer.isBuffer(msg.media)) { - // var apiUrl = "https://api.twitter.com/1.1/statuses/update_with_media.json"; - // var signedUrl = oa.signUrl(apiUrl,credentials.access_token,credentials.access_token_secret,"POST"); - // var r = request.post(signedUrl,function(err,httpResponse,body) { - // if (err) { - // node.error(err,msg); - // node.status({fill:"red",shape:"ring",text:"twitter.status.failed"}); - // } - // else { - // var response = JSON.parse(body); - // if (response.errors) { - // var errorList = response.errors.map(function(er) { return er.code+": "+er.message }).join(", "); - // node.error(RED._("twitter.errors.sendfail",{error:errorList}),msg); - // node.status({fill:"red",shape:"ring",text:"twitter.status.failed"}); - // } - // else { - // node.status({}); - // } - // } - // }); - // var form = r.form(); - // form.append("status",msg.payload); - // form.append("media[]",msg.media,{filename:"image"}); - // - // } else { - // if (typeof msg.params === 'undefined') { msg.params = {}; } - // twit.updateStatus(msg.payload, msg.params, function (err, data) { - // if (err) { - // node.status({fill:"red",shape:"ring",text:"twitter.status.failed"}); - // node.error(err,msg); - // } - // node.status({}); - // }); - // } } } }); diff --git a/social/twitter/README.md b/social/twitter/README.md index 033b5aac6..c25fdcc6c 100644 --- a/social/twitter/README.md +++ b/social/twitter/README.md @@ -59,3 +59,9 @@ To send a Direct Message (DM) - use a payload like. If `msg.media` exists and is a Buffer object, this node will treat it as an image and attach it to the tweet. If `msg.params` exists and is an object of name:value pairs, this node will treat it as parameters for the update request. + +#### Retweet + +To retweet an existing tweet, set `msg.retweet` to the tweet id. The tweet id can be found in the `id_str` field of the tweet object. + +Before retweeting, make sure the tweet is not a retweet itself.