Twitter API POST媒体/上传(分块)错误“未找到”

时间:2015-08-12 11:04:07

标签: node.js api twitter

为什么当我附上它返回的分块数据时

  

“{”request“:”/ 1.1 / media / upload.json“,”错误“:”找不到。“}”?

FINALIZE它返回:

  

“{”errors“:[{”message“:”抱歉,该页面不存在“,”代码“:34}]}”

var CHUNK_SIZE = 1024, 
    buffer = new Buffer(CHUNK_SIZE),
    filePath = './web.mp4',
    data, segment_index,
    media = null;


async.series([
    function (callback) { 
        request.post({
            url: "https://upload.twitter.com/1.1/media/upload.json", oauth: oauth, host: "upload.twitter.com", protocol: "https:", formData: {
                command: "INIT",
                media_type: 'video/mp4',
                total_bytes: 854429
            }
        }, function requestCallback(err, res, body) {
            media = body;
            segment_index = 0;
            callback();
        });

    },
    function (callback) {
        var fd = fs.openSync(filePath, 'r');

        var nread = fs.readSync(fd, buffer, 0, CHUNK_SIZE, null);

        if (nread === 0) {
        } else {

            if (nread < CHUNK_SIZE) {
                data = buffer.slice(0, nread);
            } else {
                data = buffer;
            }

            request.post({
                url: "https://upload.twitter.com/1.1/media/upload.json", oauth: oauth, host: "upload.twitter.com", protocol: "https:", formData: {
                    command: "APPEND",
                    media_id: JSON.parse(media).media_id,
                    segment_index: segment_index,
                    media: data.toString('base64')
                },
                headers: {
                    'Content-Transfer-Encoding': 'base64'
                }
            }, function requestCallback(err, res, body) {
                if (err) {
                    throw err;
                }
            });

        }

        callback();

    }
], function (err) { 
    if (err) return null;
}); 

此代码用于测试目的,我读取了第一个1024块,以查看API响应是否正确。

谢谢!

2 个答案:

答案 0 :(得分:2)

我相信你的问题可能就在这里:

JSON.parse(media).media_id

尝试:

JSON.parse(media).media_id_string

答案 1 :(得分:1)

你的INIT电话有什么回应?

APPEND调用中的NOT_FOUND异常表示无法找到您提供的媒体ID。这表明INIT呼叫没有成功。

我在这里看不到你的FINALIZE代码,但错误可能是因为调用该命令导致INIT失败的内容不完整。

我在这里有一个shell脚本,用于演示整体流程(不适用于生产,仅用于测试和演示目的):

https://gist.github.com/brandonblack/bb3feaff9f0a2cad2d74

我们也应该很快在Ruby SDK中为Ads API实现这一点。随意关注该问题,它可以作为一个很好的参考实现:

https://github.com/twitterdev/twitter-ruby-ads-sdk/issues/7