使用facebook batch api将同一张照片发布到多个Facebook页面

时间:2012-07-25 18:48:37

标签: facebook photo facebook-batch-request

所以这就是我想要做的。我正在尝试使用facebook batch api同时将一张照片发布到多个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数组的第一个帐户,但所有其他帐户都有错误。我是否必须为每个要将照片发布到具有不同attach_file名称的图像的帐户单独附加图像?对我来说,这意味着请求将是巨大的,因为如果我发布到50个帐户,我可能需要将相同的图像附加50次。

以下是我从facebook获得的回复:

[{ “代码”:200, “报头”:[{ “名称”: “访问控制允许来源”, “值”: “*”},{ “名称”: “缓存控制” ,“值”:“私有,无缓存,无商店,必须重新验证”},{“名称”:“连接”,“值”:“关闭”},{“名称”:“内容类型” ,“value”:“text / javascript; charset = UTF-8”},{“name”:“Expires”,“value”:“Sat,01 Jan 00 00:00:00 GMT”},{“name” : “附注”, “值”: “无缓存”}]中, “身体”: “{\” ID \ “:\” 416193168426655 \ “\ ”POST_ID \“:\ ”159594100753231_416193185093320 \“}”}, {“代码”:400,“报头”:[{“名称”:“访问控制允许来源”,“值”:“*”},{“名称”:“缓存控制”,“值” :“no-store”},{“name”:“Connection”,“value”:“close”},{“name”:“Content-Type”,“value”:“text / javascript; charset = UTF- 8“},{”name“:”Expires“,”value“:”Sat,01 Jan 01 00:00:00 GMT“},{”name“:”Pragma“,”value“:”no-cache“ },{“name”:“WWW-Authenticate”,“value”:“OAuth \”Facebook Platform \“\”invalid_request \“\”(#1)发生未知错误\“”}],“body”: “{\”error \“:{\”message \“:\”(#1)发生未知错误\“,\”键入\“:\”OAuthException \“,\”code \“:1}}” }]

抱歉它很乱。您可以看到第一个代码是200,它成功发布图像并返回图像ID。第二个代码是400,表示发生了未知错误。我认为这意味着它无法找到图像或类似的东西。如果我在阵列中切换两个帐户,那么它将成功发布到另一个帐户,并且会在刚刚成功的帐户上失败。

感谢您一路阅读到最后!这是你的金罐......

1 个答案:

答案 0 :(得分:2)

我的答案在调试你的问题方面略有提及,并提供了一个可能的选择。去年,Facebook launched the ability通过提供源URL而不必提供多部分数据来上传照片。因此,我建议采用以下解决方法:

  1. 将您想要使用的图像上传到Facebook CDN以外的某个位置(使用CDN媒体上传到Facebook可能存在问题)
  2. 抓取所述图片的网址
  3. 而不是拨打当前的电话,将其简化为PAGEID /照片?access_token = PAGETOKEN&amp; url = URLOFPHOTO
  4. 这会将照片直接发布到Page的时间轴。批量调用不应该有任何区别。希望这有帮助!