2012-07-25 95 views
1

所以这就是我想要做的。我正在尝试使用Facebook批处理API将单张照片同时发布到多个Facebook页面。我首先将所有内容放入数组(fb_batch)中,然后使用JSON对其进行编码。此方法适用于发布消息和链接。在下面的示例中,@pages数组是包含Facebook页面信息(包括有效的访问令牌)的Facebook页面数组。我知道访问令牌是有效的,因为在程序中的其他地方,我可以使用相同的访问令牌发布个人照片。使用Facebook的批量API张贴相同的照片到多个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数组,但所有其他帐户都有错误。我是否需要为每个帐户分别附加图像,以便将照片发布到每个具有不同attached_file名称的图像上?对我来说,这意味着该请求会很大,因为如果我发布到50个帐户,我可能需要将相同的图像附加50次。

这里是我从Facebook得到响应:

[{ “代码”:200, “报头”:[{ “名称”: “访问控制允许来源”, “值”:” *“},{”name“:”Cache-Control“,”value“:”private,no-cache,no-store,must-revalidate“},{”name“:”Connection“,”value“:”关闭“},{”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 \”} “},{” 代码 “:400,” 报头 “:[{” 名称 “:” 访问控制允许来源”, “值”: “*”}, {“名称”:“缓存控制”,“值”:“无存储”},{“名称”:“连接”,“值”:“关闭”},{“名称”:“内容类型” ,“value”:“text/javascript; charset = UTF-8”},{“name”:“Expires”,“value”:“星期六,2000年1月1日00:00:0 0 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说一个未知的错误发生。我认为这意味着它无法找到图像或类似的东西。如果我在数组中切换这两个帐户,那么它将成功发布到另一个帐户,并在刚成功的帐户上失败。

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

+0

就这样,你知道如果我多次上传文件并添加一个不同的名称,每次我上传它然后它的作品。它仍然是一个请求,但该请求可能是它需要的大小的50倍。 – bloveless 2012-07-26 21:18:25

回答

2

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

  1. 上传你要使用某个Facebook的CDN之外(有可能是使用CDN媒体上传到Facebook的问题)
  2. 抢所述图像的URL图像
  3. 而不是使你当前的通话,它简化为PAGEID /照片?=的access_token PAGETOKEN & URL = URLOFPHOTO

这将直接发布照片到页面的时间轴。分批打电话不应该有任何区别。希望这可以帮助!

+0

我很欣赏这个解决方案,但这不是我想要的项目。我们之前就是这样做的,我们在这里托管了这些图片,并最终将其切换到了Facebook上。我们希望不要再回来托管这些图片。 – bloveless 2012-07-26 20:51:25

+0

如果它有助于您的情况,那么只有在制作Graph API请求和获得成功响应之间,您才会托管图片 - 您无需永久存储它们,因为它们会上传到Facebook – 2012-07-26 20:57:13

+0

这与使用?source =时的不同之处在于,当我们在过去使用它时,它只会引用文件而不是将文件复制到Facebook的cdn。我们遇到了一个问题,那就是我们的服务器意外删除了图片,然后在facebook网站上显示为已损坏。 – bloveless 2012-07-26 21:20:04