как сделать fql.multiquery с помощью facebook php sdk 3.0

Я в процессе миграции из 2.x PHP SDK в 3.x. Все вызовы multiquery нарушены, и я не смог выяснить, как их решить.

Фейсбук подключается к логину с помощью oauth javascript и позволяет получить доступ к данным для текущего пользователя на стороне сервера. Я предполагаю, что это подтверждает, что мой токен доступа является законным.

Я пробовал следующие варианты кода и каждый раз получал ошибки:

Старый путь:

$id = $fb->getUser(); // RETURNS A VALID USER ID $fql = '{ "friends" : "SELECT uid FROM user WHERE has_added_app=1 and uid IN (SELECT uid2 FROM friend WHERE uid1 = '.$id.')", "profiles" : "SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid FROM #friends)"}'; $response = $fb->api( array('method' => 'fql.multiquery','queries' => $fql)); 

Дает ошибку: PHP Fatal error: Uncaught Exception: 102: требуется сеанс пользователя \ n брошен

Предполагаемый новый способ сделать это:

  $id = $fb->getUser(); // RETURNS A VALID USER ID $fql = '{ "friends" : "SELECT uid FROM user WHERE has_added_app=1 and uid IN (SELECT uid2 FROM friend WHERE uid1 = '.$id.')", "profiles" : "SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid FROM #friends)"}'; $response = $fb->api( array('method' => 'fql.query','query' => $fql)); 

Дает ошибку: PHP Неустранимая ошибка: Недоступно Исключение: 601: Ошибка Parser: неожиданно '{' в позиции 0

Любая помощь в понимании того, как сделать многоэлемент, используя новый PHP SDK, оценивается.

Для вашего конкретного запроса используйте новую fql API fql интерфейса fql и только в одном запросе:

 $user = $facebook->getUser(); if ($user) { try { $fql = urlencode("SELECT uid, name, pic_square FROM user WHERE is_app_user = 1 AND uid IN (SELECT uid2 FROM friend WHERE uid1 = $user)"); $response = $facebook->api("/fql?q={$fql}"); } catch (FacebookApiException $e) { echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>'; $user = null; } } 

Также используйте is_app_user вместо устаревшего has_added_app !

Просто передавайте запросы как ассоциативный массив:

  $common_fields_fql = 'SELECT uid, email, contact_email, first_name, last_name, birthday_date, pic_square, sex, hometown_location, current_location, is_app_user FROM user WHERE uid '; $fql = array( 'friends' => 'SELECT uid2 FROM friend WHERE uid1 = me()', 'friends_details' => $common_fields_fql . 'IN (SELECT uid2 FROM #friends)', 'me' => $common_fields_fql . '= me()', 'family' => 'SELECT uid, birthday, name, relationship FROM family WHERE profile_id = me()', ); $details = $facebook->api(array( 'method' => 'fql.multiquery', 'queries' => $fql, ));