Node.js post 通过 Graph 从 s3 到 Facebook 的视频 API
Node.js post video from s3 to Facebook via Graph API
我在 s3 上有一个视频文件,我想 post 到用户 Facebook 帐户:
https.get(signedUrlOfObjectInS3, function(httpRes){
var form = new formData(); // that's form-data module https://github.com/felixge/node-form-data
form.append('source', httpRes);
var options = {
method: 'post',
host: 'graph-video.facebook.com',
path: '/me/videos?access_token=' + user_access_token,
headers: form.getHeaders(),
}
var buffer = '';
var apiCall = https.request(options, function (res){
res.on('data',function(chunk){
buffer += chunk;
});
res.on('end',function(){
var data = JSON.parse(buffer);
console.log('data from fb is: ' + util.inspect(data));
});
});
form.pipe(apiCall);
});
我从 Facebook 得到的回复是:
(#352) Sorry, the video file you selected is in a format that we don\'t support.
s3上的视频文件是内容类型为video/quicktime的mov文件。
下面的代码实际上对我来说工作得很好:
https.get(signedUrlOfObjectInS3, function(httpRes) {
var form = new FormData(); // that's form-data module https://github.com/felixge/node-form-data
form.append('source', httpRes);
var options = {
method: 'post',
host: 'graph-video.facebook.com',
path: '/me/videos?access_token=' + user_access_token,
headers: form.getHeaders(),
}
var apiCall = https.request(options);
form.pipe(apiCall);
apiCall.on('response', function(res) {
console.log(res.statusCode);
});
});
尝试在 apiCall 回发中做出细微差别,
其他解释可能是我使用了 public 亚马逊 URL...
好的,显然 Facebook 忽略了 headers 中的内容类型并从文件名中猜测。例如,由于 s3 签名 url 没有以 filename.mov 结尾,所以它不明白...
我所要做的就是将“&f=filename.mov”连接到 signedUrl 的末尾,现在 Facebook 明白了...
我在 s3 上有一个视频文件,我想 post 到用户 Facebook 帐户:
https.get(signedUrlOfObjectInS3, function(httpRes){
var form = new formData(); // that's form-data module https://github.com/felixge/node-form-data
form.append('source', httpRes);
var options = {
method: 'post',
host: 'graph-video.facebook.com',
path: '/me/videos?access_token=' + user_access_token,
headers: form.getHeaders(),
}
var buffer = '';
var apiCall = https.request(options, function (res){
res.on('data',function(chunk){
buffer += chunk;
});
res.on('end',function(){
var data = JSON.parse(buffer);
console.log('data from fb is: ' + util.inspect(data));
});
});
form.pipe(apiCall);
});
我从 Facebook 得到的回复是:
(#352) Sorry, the video file you selected is in a format that we don\'t support.
s3上的视频文件是内容类型为video/quicktime的mov文件。
下面的代码实际上对我来说工作得很好:
https.get(signedUrlOfObjectInS3, function(httpRes) {
var form = new FormData(); // that's form-data module https://github.com/felixge/node-form-data
form.append('source', httpRes);
var options = {
method: 'post',
host: 'graph-video.facebook.com',
path: '/me/videos?access_token=' + user_access_token,
headers: form.getHeaders(),
}
var apiCall = https.request(options);
form.pipe(apiCall);
apiCall.on('response', function(res) {
console.log(res.statusCode);
});
});
尝试在 apiCall 回发中做出细微差别,
其他解释可能是我使用了 public 亚马逊 URL...
好的,显然 Facebook 忽略了 headers 中的内容类型并从文件名中猜测。例如,由于 s3 签名 url 没有以 filename.mov 结尾,所以它不明白...
我所要做的就是将“&f=filename.mov”连接到 signedUrl 的末尾,现在 Facebook 明白了...