Skip to content

Commit e208964

Browse files
committed
Node-red-node-twitter retweet support
Fixes #834
1 parent 1f2a256 commit e208964

File tree

2 files changed

+25
-39
lines changed

2 files changed

+25
-39
lines changed

social/twitter/27-twitter.js

+19-39
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ module.exports = function(RED) {
564564
});
565565

566566
node.on("input", function(msg) {
567-
if (msg.hasOwnProperty("payload")) {
567+
if (msg.hasOwnProperty("payload") || msg.hasOwnProperty("retweet")) {
568568
node.status({fill:"blue",shape:"dot",text:"twitter.status.tweeting"});
569569
if (msg.payload.slice(0,2).toLowerCase() === "d ") {
570570
var dm_user;
@@ -605,6 +605,24 @@ module.exports = function(RED) {
605605
node.error(err,msg);
606606
node.status({fill:"red",shape:"ring",text:"twitter.status.failed"});
607607
})
608+
} else if (msg.retweet) {
609+
node.twitterConfig.post("https://api.twitter.com/1.1/statuses/retweet/" + msg.retweet,{},msg.params || {})
610+
.then(function(result) {
611+
if (result.status === 200) {
612+
node.status({});
613+
} else {
614+
node.status({fill:"red",shape:"ring",text:"twitter.status.failed"});
615+
616+
if ('error' in result.body && typeof result.body.error === 'string') {
617+
node.error(result.body.error,msg);
618+
} else {
619+
node.error(result.body.errors[0].message,msg);
620+
}
621+
}
622+
}).catch(function(err) {
623+
node.status({fill:"red",shape:"ring",text:"twitter.status.failed"});
624+
node.error(err,msg);
625+
})
608626
} else {
609627
if (msg.payload.length > 280) {
610628
msg.payload = msg.payload.slice(0,279);
@@ -657,44 +675,6 @@ module.exports = function(RED) {
657675
node.status({fill:"red",shape:"ring",text:"twitter.status.failed"});
658676
node.error(err,msg);
659677
});
660-
// if (msg.payload.length > 280) {
661-
// msg.payload = msg.payload.slice(0,279);
662-
// node.warn(RED._("twitter.errors.truncated"));
663-
// }
664-
// if (msg.media && Buffer.isBuffer(msg.media)) {
665-
// var apiUrl = "https://api.twitter.com/1.1/statuses/update_with_media.json";
666-
// var signedUrl = oa.signUrl(apiUrl,credentials.access_token,credentials.access_token_secret,"POST");
667-
// var r = request.post(signedUrl,function(err,httpResponse,body) {
668-
// if (err) {
669-
// node.error(err,msg);
670-
// node.status({fill:"red",shape:"ring",text:"twitter.status.failed"});
671-
// }
672-
// else {
673-
// var response = JSON.parse(body);
674-
// if (response.errors) {
675-
// var errorList = response.errors.map(function(er) { return er.code+": "+er.message }).join(", ");
676-
// node.error(RED._("twitter.errors.sendfail",{error:errorList}),msg);
677-
// node.status({fill:"red",shape:"ring",text:"twitter.status.failed"});
678-
// }
679-
// else {
680-
// node.status({});
681-
// }
682-
// }
683-
// });
684-
// var form = r.form();
685-
// form.append("status",msg.payload);
686-
// form.append("media[]",msg.media,{filename:"image"});
687-
//
688-
// } else {
689-
// if (typeof msg.params === 'undefined') { msg.params = {}; }
690-
// twit.updateStatus(msg.payload, msg.params, function (err, data) {
691-
// if (err) {
692-
// node.status({fill:"red",shape:"ring",text:"twitter.status.failed"});
693-
// node.error(err,msg);
694-
// }
695-
// node.status({});
696-
// });
697-
// }
698678
}
699679
}
700680
});

social/twitter/README.md

+6
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,9 @@ To send a Direct Message (DM) - use a payload like.
5959
If `msg.media` exists and is a Buffer object, this node will treat it as an image and attach it to the tweet.
6060

6161
If `msg.params` exists and is an object of name:value pairs, this node will treat it as parameters for the update request.
62+
63+
#### Retweet
64+
65+
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.
66+
67+
Before retweeting, make sure the tweet is not a retweet itself.

0 commit comments

Comments
 (0)