Facebook FQL Multi.Query:加入结果集

时间:2011-09-03 00:12:38

标签: ruby facebook-fql

我正在使用Facebook的fql.multiquery来处理许多不同的事情,我正在收到结果 - 正如医生所说的那样。但我似乎无法围绕如何加入结果,所以我可以按照我想要的方式将它们交还给用户。

我正在使用HTTParty来调用它:

  checkin_query = {
    "user_checkins" => "SELECT timestamp, coords, tagged_uids, page_id, post_id, checkin_id, message FROM checkin WHERE author_uid= me()",
    "location_names" => "SELECT name FROM page WHERE page_id IN (SELECT page_id FROM #user_checkins)",
    "friends_with" => "SELECT uid, name, pic_square FROM user WHERE uid IN (select tagged_uids FROM #user_checkins)"
  }

  params = {:queries => checkin_query.to_json, :access_token => user.token, :format => :json}
  @checkin_info = HTTParty.get "https://api.facebook.com/method/fql.multiquery", :query => params

这给了我想要的东西......但它是在3个独立的阵列/哈希(?)中,出于某种原因,我的大脑并没有得出如何处理它的结论。

所以基本上如果我想向用户显示“好伙计,那么你和这些人一起参加* LOCATION_NAME *:* FRIENDS_WITH *

如何获取这3个单独的结果集并匹配所有内容?有没有办法在之前的查询中包含一些内容来回调和匹配它以便我可以显示所有内容?有些签到没有tagged_uids,所以显然只是按照顺序进行,对于他们所在的朋友来说是行不通的。

谷歌搜索向我展示了SQL的JOIN(看起来它可能是一个解决方案) - 但在FQL中不可用。

1 个答案:

答案 0 :(得分:0)

我对FQL或HTTParty都没有经验,所以我可能完全错了。

我倾向于按如下格式化sql:

checkin_query = {
  "user_checkins" => "
    SELECT tagged_uids, page_id
    FROM checkin
    WHERE author_uid = me()
  ",

  "location_names" => "
    SELECT name
    FROM page
    WHERE page_id IN (
      SELECT page_id
      FROM #user_checkins
    )
  ",

  "friends_with" => "
    SELECT name
    FROM user
    WHERE uid IN (
      SELECT tagged_uids
      FROM #user_checkins
    )
  "
}

location_names和friends_with可能作为哈希数组返回:

"friends_with" => [{:name => 'John'}, {:name => 'Sue'}]

不确定HTTParty会返回什么,但如果它是哈希数组的哈希值,您可以尝试:

puts "OK dude, you were at #{ @checkin_info[:location_names].map { |e| e.values } } with these people: #{ @checkin_info[:friends_with].map { |e| e.values } }

要弄清楚@checkin_info返回的内容,你可以试试这个:

puts @checkin_info.to_yaml