Facebook FQL Multi.Query: объединение результирующих наборов - PullRequest
1 голос
/ 03 сентября 2011

Я использую fql.multiquery от Facebook для множества разных вещей и получаю результаты обратно - так, как приказал доктор. Но я не могу понять, как объединить результаты, чтобы я мог вернуть их пользователю так, как я хочу.

Я использую 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, поэтому, очевидно, простое выполнение по порядку не сработает, когда дело доходит до друзей, с которыми они находятся.

Поиски в Google показали мне, что SQL JOIN (кажется, это может быть решением) - но не доступен в FQL.

1 Ответ

0 голосов
/ 03 сентября 2011

У меня нет опыта работы с 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
...