4

nodejs(+ express + mongodb、gridstore)バックエンドがあり、Facebookアルバムに写真をアップロードしたいと思います。

私は2つの方法に出くわしました。最初の(https://developers.facebook.com/blog/post/526/)は、私の写真の完全なURLリソースを取得する必要があります。これは、グリッドストアから取得したデータであるため、持っていません。2番目の(https://developers.facebook.com/docs/reference/api/album/)は、Graph APIを介して文書化されていないため、リクエストがどのようになるかわかりません。(フォームデータ、どのフィールドが必要か、データblob \ streamをグリッドストアからそれに変換する方法)

これが私が現在持っているもので、機能しません:

facebook.uploadPhoto = function (token, albumId, photo, callback) {
    var fb = fermata.json('https://graph.facebook.com/' + albumId);
    fb.photos({access_token:token}).post({'Content-Type':"multipart/form-data"}, {source:{data:photo}}, callback);
};

どんな助けでも大歓迎です

4

3 に答える 3

4

ファイルが適切にシリアル化されていない可能性があります。Fermataは、データを介してノードのファイルバッファを取得します。代わりにそれを渡してみましたか?

fs.readFile("/path/to/photo.jpg", function (err, data) {
  fermata.json("https://graph.facebook.com/graph/api").post({"Content-Type":"multipart/form-data"},  {fileField:  {data:data, name:"", type:""}  }, callback);
});

アクセストークンの追加など。

于 2012-10-04T01:31:45.563 に答える
1

この問題は、posterモジュールを使用してFacebookグラフAPIへの単純なPOSTを使用することで解決しました。

var options = {
  uploadUrl: 'https://graph.facebook.com/'+user+'/photos?access_token='+accessToken,
  method: 'POST',
  fileId: 'source',
  fields: {'message':''} // Additional fields according to graph API
};

var fileName = ''; // Local or remote url where to find the image
poster.post(fileName, options, function(err, data) {
  if (err) {
    //Something went wrong
  } else {
    // Everything ok
  }
});
于 2012-10-03T21:47:02.267 に答える
0

正直なところ、FacebookグラフAPIを使用し、主にPHPとJavaを使用した経験は限られています。

役立つと思われるストリームを次に示します。

基本的に、実装を少しパントして、次のようにコーディングすることをお勧めします。

  1. Node.jsでRESTWebサービス関数呼び出しを作成し、内部UIDを使用してグリッドストアから単一の画像を出力します。
  2. UploadToFacebook関数をコーディングして、RESTWebサービス関数を呼び出す画像URLを使用します。

基本的に、これにより、ブラウザーをREST Webサービスにポイントすることで画像出力を検証し、uploadToFacebook関数内でのblob\stream変換を回避できます。画像をgridstoreとmongodbに保存すると仮定します。

それが役立つことを願っています...

于 2012-10-02T05:15:22.743 に答える