为什么当我附上它返回的分块数据时
“{”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响应是否正确。
谢谢!
答案 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实现这一点。随意关注该问题,它可以作为一个很好的参考实现: