1

だからここに私がやろうとしていることがあります。FacebookバッチAPIを使用して、1枚の写真を複数のFacebookページに同時に投稿しようとしています。最初にすべてを配列 (fb_batch) に入れ、JSON を使用してエンコードします。この方法は、メッセージやリンクを投稿する場合にうまく機能します。以下の例では、@pages 配列は、有効なアクセス トークンを含む Facebook ページ情報を含む Facebook ページの配列です。プログラムの他の場所で、この同じアクセス トークンを使用して個々の写真を投稿できるため、アクセス トークンが有効であることはわかっています。

fb_batch = []
top_access_token = nil
@pages.each do |page|
  top_access_token = page.access_token if top_access_token.nil?
  if image.nil?
    fb_batch << {method: 'POST', relative_url: 'me/feed?access_token=' + page.access_token, body: body}
  else
    fb_batch << {method: 'POST', relative_url: 'me/photos?access_token=' + page.access_token, body: body, attached_files: 'file1'}
  end
end

c = Curl::Easy.new('https://graph.facebook.com')
c.multipart_form_post = true
c.verbose = true
post_data = [Curl::PostField.content('access_token', top_access_token), Curl::PostField.content('batch', fb_batch.to_json)]
post_data << Curl::PostField.file('file1', image.image.current_path) if !image.nil?
c.http_post(post_data)

画像がある場合にのみファイルを追加する方法に注意してください。したがって、この同じコードは、複数のアカウントにメッセージやリンクを投稿するときにも機能します。

複数のアカウントに画像を投稿するとエラーが発生します。fb_batch 配列の最初のアカウントにイメージを適用しますが、他のすべてのアカウントにはエラーがあります。写真を投稿したいアカウントごとに個別に画像を添付する必要がありますか? 私にとってこれは、50 個のアカウントに投稿する場合、同じ画像を 50 回添付しなければならない可能性があるため、リクエストが膨大になることを意味します。

以下はフェイスブックからの回答です。

Access-Control-Allow-Origin","value":"*"},{"name":"Cache-Control","value":"no-store"},{"name":"Connection"," value":"close"},{"name":"Content-Type","value":"text/javascript; charset=UTF-8"},{"name":"Expires","value":"Sat, 01 Jan 2000 00:00:00 GMT"},{"name":"Pragma","value":" no-cache"},{"name":"WWW-Authenticate","value":"OAuth \"Facebook プラットフォーム\" \"invalid_request\" \"(#1) 不明なエラーが発生しました\""}], "body":"{\"error\":{\"message\":\"(#1) 不明なエラーが発生しました\",\"type\":\"

雑ですみません。最初のコードは 200 で、画像が正常に投稿され、画像 ID が返されていることがわかります。2 番目のコードは 400 で、不明なエラーが発生しました。これは、画像などを見つけることができなかったことを意味すると思います。配列内の 2 つのアカウントを切り替えると、他のアカウントに正常に投稿され、成功したばかりのアカウントでは失敗します。

最後まで読んでくれてありがとう!これがあなたの金の鍋です...

4

1 に答える 1

2

私の答えは、問題のデバッグを多少回避し、可能な代替案を提供します。昨年、Facebookは、マルチパート データを提供する代わりに、ソース URL を提供することで写真をアップロードする機能を開始しました。したがって、次の回避策をお勧めします。

  1. 使用したい画像を Facebook CDN 以外の場所にアップロードします (CDN メディアを使用して Facebook にアップロードする際に問題が発生する可能性があります)。
  2. 上記の画像のURLを取得します
  3. 現在の呼び出しを行う代わりに、PAGEID/photos?access_token=PAGETOKEN&url=URLOFPHOTO に単純化します。

これにより、写真がページのタイムラインに直接投稿されます。その呼び出しをバッチ処理しても違いはありません。お役に立てれば!

于 2012-07-25T19:31:01.167 に答える