javascript - 从 node.js 上传图像到 twitter API

标签 javascript node.js http twitter

我正在尝试将图像发布到 twitter api v1.1 我已经尝试了几乎所有的例子,但似乎没有什么可以发布的。 包括 Posting images to twitter in Node.js using Oauth

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

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

 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;
}
 }

如果无法完成,能否解释一下原因? 否则,任何可以引导我走向正确方向的东西都会很棒。

最佳答案

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!");
    }
}

我最终使用 requestnode-form-data 手动构造一个 multipart/form-data 请求并将其与状态请求一起发送,utf8 用于将状态编码为 UTF-8,不这样做会导致“<3”和其他字符出现问题。

关于javascript - 从 node.js 上传图像到 twitter API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23670403/

相关文章:

java - 在 Android/Java 中使用 JSON/Base64 编码的文件

http - 如何在 anchor 中指定协议(protocol)并仍然使用相对路径?

javascript - Jupyter 笔记本 : How do I execute only cells that have a particular tag

javascript - 如何禁用 Chrome 应用程序上下文菜单

javascript - Mongodb 版本 3+ : how to insert new document only if it doesn't exist and get the result

javascript - 尽管发布推文有效,但从我的 Twitter 帐户获取推文不起作用

javascript - 如何检测某个键是否被按下

javascript - 使用javascript替换特定位置的所有空格

javascript - Decimal.js tan 的精度问题

PHP 发送自定义 HTTP 请求