Привет, я использую PHP PHP SDK (v.3.1.1)
Я не понимаю, как использовать URL-адрес поискового вызова.
Я хочу получить список ВСЕХ моих друзей, вот мой код
$friends = $fb->api('/me/friends'); /* $friend == Array ( [data] => Array ( ... ), [paging] => Array ( [next] => https://graph.facebook.com/me/friends?method=GET&access_token=SOMETHING&limit=5000&offset=5000 ) */ if (!empty($friends['paging']['next'])) { $friends2 = $fb->api($friends['paging']['next']); //doesn't work }
Значения в результатах поискового вызова, которые вы получаете, являются фактическими URL-адресами, которые вам нужно запросить, чтобы получить следующую группу результатов. Например :
... { "name": "Adobe Flash", "category": "Software", "id": "14043570633", "created_time": "2008-06-05T17:12:36+0000" } ], "paging": { "next" :https://graph.facebook.com/{USER_ID}/likes?format=json&limit=5000&offset=5000 }
Это «следующий» результат подкачки, который я получаю, когда я запрашиваю у своего пользователя страницы, которые мне нравятся. Если я попрошу этот URL-адрес, он даст мне всего 5000 понравившихся со смещением 5000 (потому что я уже получил первые 5000 в первоначальном запросе). Надеюсь, это прояснит все! удачи!
Все предыдущие ответы действительны.
Вот как я это делаю, чтобы получить все «следующий» результат с помощью Graph API:
Обратите внимание, что я не получаю «предыдущие» результаты.
function FB_GetUserTaggedPhotos($user_id, $fields="source,id") { $photos_data = array(); $offset = 0; $limit = 500; $data = $GLOBALS["facebook"]->api("/$user_id/photos?limit=$limit&offset=$offset&fields=$fields",'GET'); $photos_data = array_merge($photos_data, $data["data"]); while(in_array("paging", $data) && array_key_exists("next", $data["paging"])) { $offset += $limit; $data = $GLOBALS["facebook"]->api("/$user_id/photos?limit=$limit&offset=$offset&fields=$fields",'GET'); $photos_data = array_merge($photos_data, $data["data"]); } return $photos_data; }
Вы можете изменить значение $ limit, как вы хотите, чтобы получить меньше / больше данных за звонок.
Я адаптировал способ F2000 работать с пейджингом и получил следующий код:
// Initialize the Facebook PHP SDK object: $config = array( 'appId' => '123456789012345', 'secret' => 'be8024db1579deadbeefbcbe587c0bd8', 'fileUpload' => false ); $fbApi = new Facebook( $config ); // Retrieve list of user's friends: $offset = 0; // Initial offset $limit = 10; // Maximum number of records per chunk $friends = array(); // Result array for friend records accumulation $chunk = $fbApi->api( "/me/friends", 'GET', array( 'fields' => 'id,name,gender', 'offset' => $offset, 'limit' => $limit ) ); while ( $chunk['data'] ) { $friends = array_merge( $friends, $chunk['data'] ); $offset += $limit; $chunk = $fbApi->api( "/me/friends", 'GET', array( 'fields' => 'id,name,gender', 'offset' => $offset, 'limit' => $limit ) ); } // The $friends array contains all user's friend records at this point.
Код, похоже, работает. При желании, для повышения надежности, он может попытаться справиться с проблемами временного соединения, но я пропустил это для ясности кода.
Я использую PHP PHP SDK 3.1.1
URL-адреса страницы, возвращенные из Facebook, несовместимы со своим собственным PHP SDK.
Вы можете извлечь информацию, необходимую API, из URL-адресов для разбивки на страницы и передать ее в API SDK.
Используйте функцию parse_url PHP или некоторые строковые манипуляции для извлечения такой информации.
Пример кода для извлечения части моего списка друзей (с использованием parse_url
) :
$ret = $facebook->api('/me/friends?limit=25'); var_dump($ret); $next = parse_url($ret['paging']['next']); $ret = $facebook->api($next['path'] . '?' . $next['query']); var_dump($ret);
Вы не можете использовать следующий url напрямую, Facebook php sdk не поддерживает его, но вы можете использовать стандартные функции php для извлечения необходимых данных. Я использовал его для поиска в facebook api, это пример
$result = $fb->api('/search', 'GET', $paramsArray ); $url = parse_url($result['paging']['next']); parse_str($url['query'], $nextParams ); $nextResult = $fb->api('/search', 'GET', $nextParams );
Опрос Facebook с предельной и смещенной разбивкой страниц не работал хорошо, не возвращая все результаты, поэтому я сделал рекурсивную функцию, используя поля страницы ['next'], предоставленные API.
Функция:
function chunk_results($arr,$query) { global $facebook; $chunk = $facebook->api($query); if($chunk['data']==null) { return $arr; } else { foreach($chunk['data'] as $dato) $arr['data'][] = $dato; return chunk_results($arr,substr($chunk['paging']['next'],26)); } }
И вы можете инициализировать его пустым массивом и запросом, который вы хотите получить, например, в следующем примере:
chunk_results(array(),"/457568434275922/posts?fields=message")
Надеюсь, поможет!
PD: Мой объект Facebook называется $ facebook