Node.js通过Graph API将视频从s3发布到Facebook

时间:2015-01-27 15:59:06

标签: node.js facebook-graph-api amazon-s3

我在s3上有一个我要发布到用户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)抱歉,您选择的视频文件采用我们不支持的格式。

s3上的视频文件是一个内容类型为video / quicktime的mov文件。

2 个答案:

答案 0 :(得分:2)

好的,显然Facebook忽略了标题中的内容类型,并从文件名中猜出它。由于s3签名的网址没有以filename.mov结尾,例如它没有得到它......

我所要做的就是结束'& f = filename.mov'在signedUrl结束时,现在Facebook得到了......

答案 1 :(得分:0)

以下代码对我来说实际上对我来说很好:

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回发中做出细微差别,

其他解释可能是我使用了公共亚马逊网址......