使用 facebook 批处理 api 将同一张照片发布到多个 facebook 页面

Posted

技术标签:

【中文标题】使用 facebook 批处理 api 将同一张照片发布到多个 facebook 页面【英文标题】:Using the facebook batch api to post the same photo to multiple facebook pages 【发布时间】:2012-07-25 18:48:37 【问题描述】:

这就是我想要做的。我正在尝试使用 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 得到的回复:

["code":200,"headers":["name":"Access-Control-Allow-Origin","value":"*","name":"Cache-Control" ,"value":"private, no-cache, no-store, must-revalidate","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"],"body":"\"id\":\"416193168426655\",\"post_id\":\"159594100753231_416193185093320\"", "code":400,"headers":["name":"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 Platform\" \"invalid_request\" \"(#1) 发生未知错误\""],"body": "\"error\":\"message\":\"(#1) 发生未知错误\",\"type\":\"OAuthException\",\"code\":1" ]

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

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

【问题讨论】:

只是让您知道,如果我多次上传文件并在每次上传时添加不同的名称,那么它可以工作。它仍然是一个请求,但请求的大小可能是所需大小的 50 倍。 【参考方案1】:

我的回答有点绕着调试你的问题,并提供了一个可能的替代方案。早在去年,Facebook launched the ability 就通过提供源 URL 来上传照片,而不必提供多部分数据。因此,我推荐以下解决方法:

    将您要使用的图片上传到 Facebook CDN 之外的某个位置(使用 CDN 媒体上传到 Facebook 时可能会出现问题) 获取该图片的 URL 不要拨打您当前的电话,而是将其简化为 PAGEID/photos?access_token=PAGETOKEN&url=URLOFPHOTO

这会将照片直接发布到主页的时间轴。批处理该调用不应该有任何区别。希望这会有所帮助!

【讨论】:

我很欣赏这个解决方案,但这不是我想要的项目方式。我们之前就是这样做的,我们在其中托管图像,最后将其切换到发布到 Facebook。我们不想再回到托管图像。 如果它对您的情况有所帮助,您将只在发出 Graph API 请求和获得成功响应之间的时间内托管图像 - 您不需要将它们永久存储为他们被上传到 Facebook 这与过去使用 ?source= 有什么不同,它只会引用文件而不是将文件复制到 facebook 的 cdn。我们遇到了一个问题,图像被意外从我们的服务器上删除,然后在 facebook 网站上显示为损坏。 是的,使用 ?url= 将导致 API 实际抓取图像并将其复制到 Facebook CDN,因此您可以立即删除源文件,它仍然会在 Facebook 上。跨度>

以上是关于使用 facebook 批处理 api 将同一张照片发布到多个 facebook 页面的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Apps 脚本的 Facebook API 批处理请求

使用facebook graph api获取Instagram自己/自我饲料

Facebook批处理API不返回用户电子邮件ID

如何正确捕获和处理对 Facebook api 的 Http 获取请求中的错误

使用自己的 API 后端处理社交网络身份验证

Facebook Graph API - 来自批处理请求的同步响应