我发现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资源管理器传递整个字符串,只是得到我想要的东西而不必手动解析所有这些东西。
答案 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