Ruby - 将facebook的Graph API Explorer与koala gem结合使用

时间:2013-06-12 00:09:14

标签: ruby facebook-graph-api rubygems oauth-2.0 koala

我发现facebook的'Graph API Explorer'工具(https://developers.facebook.com/tools/explorer/)是一种非常简单的方式,欢迎(适合初学者)&通过GUI使用facebook的图形API的有效方法。

我希望能够使用考拉宝石将这些生成的URL传递给facebook的api。

现在,假设我有这样的查询

url = "me?fields=id,name,posts.fields(likes.fields(id,name),comments.fields(parent,likes.fields(id,name)),message)"

我希望能够将其作为单个字符串直接传递给考拉。

@graph.get_connections(url)

它不喜欢这样,所以我将uid和?运算符分开,就像宝石似乎想要

url = "fields=id,name,posts.fields(likes.fields(id,name),comments.fields(parent,likes.fields(id,name)),message)"
@graph.get_connections("me", url)

然而,这也会返回错误:

Koala::Facebook::AuthenticationError: 
type: OAuthException, code: 2500, 
message: Unknown path components: /fields=id,name,posts.fields(likes.fields(id,name),comments.fields(parent,likes.fields(id,name)),message) [HTTP 400]

目前这是我被困的地方。我想继续使用考拉,因为我喜欢使用API​​的方法,特别是,当涉及到使用OAuth& OAuth2用户。

更新:

我开始将请求分解为考拉宝石可以处理的部分,例如

posts = @graph.get_connections("me", "posts")
postids = posts.map { |p| p['id'] }
likes = postids.inject([]) {|ary, id| ary << @graph.get_connection(id, "likes") }

所以这是一个很长的方式来获得两个数组,一个帖子,一个类似的数据。

但是我会立即使用这种方法快速刻录我的API请求限制。

我有点希望我能够从Graph API资源管理器传递整个字符串,只是得到我想要的东西而不必手动解析所有这些东西。

2 个答案:

答案 0 :(得分:3)

我真的不知道你的posts.fields(likes.fields(id,name) - 这在Graph API Explorer中不起作用 - 以及类似的东西,但我知道你可以这样做:

fb_api = Koala::Facebook::API.new(access_token)
fb_api.api("/me?fields=id,name,posts")
# => => {"id"=>"71170", "name"=>"My Name", "posts"=>{"paging"=>{"next"=>"https://graph.facebook.com/71170/posts?access_token=CAAEO&limit=25&until=13705022", "previous"=>"https://graph.facebook.com/711737070/posts?access_token=CAAEOTYMZD&limit=25&since=1370723&__previous=1"}, "data"=>[{"id"=>"71170_1013572471", "comments"=>{"count"=>0}, "created_time"=>"2013-06-09T08:03:43+0000", "from"=>{"id"=>"71170", "name"=>"My Name"}, "updated_time"=>"2013-06-09T08:03:43+0000", "privacy"=>{"value"=>""}, "type"=>"status", "story_tags"=>{"0"=>[{"id"=>"71170", "name"=>"  ", "length"=>8, "type"=>"user", "offset"=>0}]}, "story"=>"  likes a photo."}]}}

你会收到你要求的哈希值。

答案 1 :(得分:0)

有时,你必须将nil作为参考传递给考拉:

result += graph_api.batch do |batch_api|
  facebook_page_ids.each do |facebook_page_id|
    batch_api.get_connections(facebook_page_id, nil, {"fields"=>"posts"})
  end
end