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

Add ability to tweet images

Closes #117
This commit is contained in:
Nick O'Leary 2014-09-01 10:15:25 +01:00
parent 27e34f20fb
commit 961c9f3fa9
3 changed files with 53 additions and 16 deletions

View File

@ -199,6 +199,8 @@
<script type="text/x-red" data-help-name="twitter out"> <script type="text/x-red" data-help-name="twitter out">
<p>Twitter out node. Tweets the <b>msg.payload</b>.</p> <p>Twitter out node. Tweets the <b>msg.payload</b>.</p>
<p>If <b>msg.media</b> exists and is a Buffer object, this node will treat it
as an image and attach it to the tweet.</p>
</script> </script>
<script type="text/javascript"> <script type="text/javascript">

View File

@ -18,6 +18,7 @@ module.exports = function(RED) {
"use strict"; "use strict";
var ntwitter = require('twitter-ng'); var ntwitter = require('twitter-ng');
var OAuth= require('oauth').OAuth; var OAuth= require('oauth').OAuth;
var request = require('request');
function TwitterNode(n) { function TwitterNode(n) {
RED.nodes.createNode(this,n); RED.nodes.createNode(this,n);
@ -241,21 +242,54 @@ module.exports = function(RED) {
consumer_secret: "meRsltCktVMUI8gmggpXett7WBLd1k0qidYazoML6g", consumer_secret: "meRsltCktVMUI8gmggpXett7WBLd1k0qidYazoML6g",
access_token_key: credentials.access_token, access_token_key: credentials.access_token,
access_token_secret: credentials.access_token_secret access_token_secret: credentials.access_token_secret
}).verifyCredentials(function (err, data) { });
if (err) {
node.error("Error verifying credentials: " + err);
} else {
node.on("input", function(msg) { node.on("input", function(msg) {
if (msg != null) { if (msg != null) {
node.status({fill:"blue",shape:"dot",text:"tweeting"});
if (msg.payload.length > 140) { if (msg.payload.length > 140) {
msg.payload = msg.payload.slice(0,139); msg.payload = msg.payload.slice(0,139);
node.warn("Tweet greater than 140 : truncated"); node.warn("Tweet greater than 140 : truncated");
} }
twit.updateStatus(msg.payload, function (err, data) {
if (err) node.error(err); 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.toString());
node.status({fill:"red",shape:"ring",text:"failed"});
} else {
var response = JSON.parse(body);
if (body.errors) {
var errorList = body.errors.map(function(er) { return er.code+": "+er.message }).join(", ");
node.error("tweet failed: "+errorList);
node.status({fill:"red",shape:"ring",text:"failed"});
} else {
node.status({});
}
} }
}); });
var form = r.form();
form.append("status",msg.payload);
form.append("media[]",msg.media,{filename:"image"});
} else {
twit.updateStatus(msg.payload, function (err, data) {
if (err) {
node.status({fill:"red",shape:"ring",text:"failed"});
node.error(err);
}
node.status({});
});
}
} }
}); });
} }

View File

@ -42,7 +42,8 @@
"cheerio":"0.15.0", "cheerio":"0.15.0",
"uglify-js":"2.4.13", "uglify-js":"2.4.13",
"nodemailer":"1.2.0", "nodemailer":"1.2.0",
"imap":"0.8.13" "imap":"0.8.13",
"request":"~2.40.0"
}, },
"devDependencies": { "devDependencies": {
"grunt": "0.4.4", "grunt": "0.4.4",