1

所以这就是我想要做的。我正在尝试使用 facebook 批处理 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)

请注意,如果有图像,我只添加文件。因此,当我发布消息或链接到多个帐户时,相同的代码也适用。

当我将图像发布到多个帐户时出现错误。它将图像应用到 f​​b_batch 数组中的第一个帐户,但所有其他帐户都有错误。我是否必须为每个帐户单独附加图像我希望将照片发布到具有不同附加文件名的每个图像?对我来说,这意味着请求将是巨大的,因为如果我要发布到 50 个帐户,我可能必须附加相同的图像 50 次。

这是我从 facebook 得到的回复:

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":"2000 年 1 月 1 日星期六 00:00:00 GMT"},{"name":"Pragma","value":" no-cache"},{"name":"WWW-Authenticate","value":"OAuth \"Facebook Platform\" \"invalid_request\" \"(#1) 发生未知错误\""}], "body":"{\"error\":{\"message\":\"(#1) 发生未知错误\",\"type\":\"

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

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

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 回答