facebook php, как вы используете подкачку результатов? - PullRequest
15 голосов
/ 21 ноября 2011

Здравствуйте, я использую Facebook 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
}

Ответы [ 7 ]

13 голосов
/ 21 ноября 2011

Все предыдущие ответы действительны.

Вот как я делаю, чтобы получить «следующий» результат с помощью 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, как хотите, чтобы получать меньше / больше данных за вызов.

8 голосов
/ 21 ноября 2011

Значения в результатах подкачки, которые вы получаете, являются фактическими 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 в первоначальном запросе).Надеюсь, это проясняет ситуацию!удачи!

5 голосов
/ 13 марта 2012

Я адаптировал 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.

Код, похоже, работает.При желании для большей надежности он может попытаться решить временные проблемы с подключением, но я пропустил это для ясности кода.

Я использую Facebook PHP SDK 3.1.1

2 голосов
/ 18 ноября 2013

URL-адреса нумерации страниц, возвращаемые из Facebook, несовместимы с его собственным SDK PHP.

Вы можете извлечь информацию, необходимую для API, из URL-адресов нумерации страниц и передать ее в API SDK.

Используйте функцию PHP parse_url или некоторые строковые манипуляции для извлечения такой информации.

Пример кода для получения части моего списка друзей (используя 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);
1 голос
/ 04 мая 2014

Вы не можете использовать следующий URL напрямую, Facebook php sdk не поддерживает его, но вы можете использовать стандартные функции php для извлечения необходимых данныхЯ использовал его для API поиска Facebook, это пример

$result = $fb->api('/search', 'GET', $paramsArray ); $url = parse_url($result['paging']['next']); parse_str($url['query'], $nextParams ); $nextResult = $fb->api('/search', 'GET', $nextParams );

0 голосов
/ 10 июня 2019

Я не вижу никаких ответов на самом деле с помощью курсора Facebook, поэтому я решил добавить свое решение для получения всех Leadgen Forms страницы. Это должно работать с использованием любого метода, который возвращает курсор:

$params = []; // initial parameters are empty to get the first page
$fields = []; // define the field

while ($leadgen_forms = $account->getLeadGenForms($fields, $params)) {

    foreach ($leadgen_forms as $key => $value) {
        // do stuff
    }   

    $params['after'] = $leadgen_forms->getAfter();
    if (!$params['after']) 
        break;
}
0 голосов
/ 21 марта 2014

Запросы в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...