从node.js将图像上传到twitter API [英] Upload images to twitter API from node.js

查看:137
本文介绍了从node.js将图像上传到twitter API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正试图将图片发布到twitter api上,v1.1
我已经尝试了所有的例子,似乎没有任何东西可以发布它。
包括使用Node.js将图片发布到Twitter Oauth

I'm attempting to post an image onto the twitter api, v1.1 I've tried just about all the example out there, and nothing seems to be able to post it. include Posting images to twitter in Node.js using Oauth

我正在使用那里提到的oauth库,我也有jsOauth,我认为我会根据 https://gist.github.com/lukaszkorecki/1038408

I'm using the oauth library mentioned there, and I also had jsOauth, which I thought I'd give a shot according to https://gist.github.com/lukaszkorecki/1038408

没有任何效果,此时我开始对我是否能做到这一点开始失去希望。

Nothing has worked, and at this point I'm starting to lose hope on whether I can even do this.

 function postStatusWithMedia(status, file) {
var err = new Object();
if(fs.existsSync(file) === false) {
    err.message = "File not found :(";
    parseTwitterError(err);
} else {
    var oauth = OAuth(options = {
        "consumerKey": consumer_key,
        "consumerSecret": consumer_secret,
        "accessTokenKey": access_token,
        "accessTokenSecret": access_token_secret
    });

    callbacks = {
                onSuccess : function() {
                    console.log('upload worked!')
                },
                onFailure : function() {
                    console.log('upload failed!');
                    console.dir(arguments);
                }
    },

    uploadData = {
        'status' : status,
        'media' : Base64.encode(fs.readFileSync(file))
    };

        oauth.post('https://api.twitter.com/1.1/statuses/update_with_media.json',uploadData, callbacks.onSuccess, callbacks.onFailure);

    return false;
}
 }

如果无法完成,请问你能不能解释为什么
否则,任何可能导致我走向正确方向的事情都会很棒。

If it can't be done, can you please explain why? Otherwise, anything that could lead me to the right direction would be great.

推荐答案

var fs = require('fs');
var request = require('request');
var FormData = require('form-data');
var utf8 = require('utf8');

// Encode in UTF-8
status = utf8.encode(status);

var form = new FormData();
form.append('status', status)
form.append('media[]', fs.createReadStream(file));

// Twitter OAuth
form.getLength(function(err, length){
    if (err) {
        return requestCallback(err);
    }
    var oauth = { 
            consumer_key: consumer_key,
            consumer_secret: consumer_secret,
            token: access_token,
            token_secret: access_token_secret
    };
    var r = request.post({url:"https://api.twitter.com/1.1/statuses/update_with_media.json", oauth:oauth, host: "api.twitter.com", protocol: "https:"}, requestCallback);
    r._form = form;
    r.setHeader('content-length', length);
});

function requestCallback(err, res, body) {
    if(err) {
        throw err;
    } else {
        console.log("Tweet and Image uploaded successfully!");
    }
}

我最终使用请求 node-form-data 手动构建multipart / form-data请求并发送状态请求 utf8 用于将状态编码为UTF-8,但没有这样做会导致'< 3'和其他字符出现问题。

I ended up using request and node-form-data to manually construct a multipart/form-data request and send it with the status request, utf8 was for encoding the status into UTF-8, not doing so caused issues with '<3' and other characters.

这篇关于从node.js将图像上传到twitter API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆