【问题标题】:Twitter API POST media/upload (chunked) error "Not found"Twitter API POST 媒体/上传(分块)错误“未找到”
【发布时间】:2015-09-24 06:37:39
【问题描述】:

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

"{"request":"/1.1/media/upload.json","error":"未找到。"}" ?

FINALIZE 返回:

"{"errors":[{"message":"抱歉,该页面不存在","code":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 响应是否正确。

谢谢!

【问题讨论】:

    标签: node.js api twitter


    【解决方案1】:

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

    JSON.parse(media).media_id

    尝试:

    JSON.parse(media).media_id_string

    【讨论】:

      【解决方案2】:

      您的 INIT 调用有什么响应?

      APPEND 调用中的 NOT_FOUND 异常意味着找不到您提供的媒体 ID。这表明 INIT 调用没有成功。

      我在这里看不到您的 FINALIZE 代码,但该错误可能是由于调用该命令导致在 INIT 中失败的不完整上传。

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-03-06
        • 2018-10-20
        • 2016-10-21
        • 2021-07-22
        • 1970-01-01
        • 2019-09-25
        • 2014-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多