Я в процессе миграции из 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, ));