2011-01-04 12 views
3

Я работаю над fb-приложением, используя PHP-клиент и FQL. Такие файлы, как fb api, не поддерживают это. Вы можете получить максимальное количество случайных 500 членов с FQL. Но когда у группы более 500 членов, нет никакого способа получить общее количество участников. Мне нужно только номер, не заботясь о деталях участника.Facebook API: Как получить количество членов группы

Кто-нибудь может мне помочь?

ответ

1

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

/v2.11/{GROUP_ID}?fields=members.limit(0).summary(true)

Он также работает при поиске групп:

/v2.11/search?q=stackoverflow&type=group&fields=id,name,members.limit(0).summary(true)

{ 
    "data": [ 
     { 
      "id": "667082816766625", 
      "name": "Web Development Insiders", 
      "members": { 
       "data": [ 
       ], 
       "summary": { 
        "total_count": 2087 
       } 
      } 
     }, 
     { 
      "id": "319262381492750", 
      "name": "WEB Developers India", 
      "members": { 
       "data": [ 
       ], 
       "summary": { 
        "total_count": 10240 
       } 
      } 
     }... 
    ] 
} 
+0

Это настоящий материал API-gangsta. Спасибо! – Finesse

+0

Вы также можете сделать запрос '/v2.11/ {GROUP_ID}/members? Limit = 0 & summary = true' и получить счет из' (данные ответа) .summary.total_count' – Finesse

+0

После 90 дней с момента выпуска Graph API v2 .12 для всех вышеуказанных запросов потребуется токен доступа администратора группы: https://developers.facebook.com/docs/graph-api/changelog/version2.12 – Finesse

3

Я действительно нашел, что вы не можете, это по дизайну, по-видимому. Я хотел узнать это сам около месяца назад и обнаружил, что независимо от параметров, которые вы передаете графику api, вы не можете пройти мимо 500-го члена. Даже если вы скажете ему начать с номера 450 и дать вам 200, это даст вам всего 450-500.

Вот я спрашиваю, и несчастный ответ:

http://forum.developers.facebook.net/viewtopic.php?id=82134

+0

да, но мне не нужно каждый член мне нужно рассчитывать только их –

+0

Так сделал я, и это тот же ответ, к которому я пришел. – Tesserex

3

вы можете использовать график api 2.0 и sdk 4.0

вы можете использовать ниже код

$url1= "https://graph.facebook.com/".$gid."/members?limit=10000&access_token=".$_SESSION['fb_token']; 





if(!extension_loaded('curl') && [email protected]('curl_php5.so')) 
    { 
     return ""; 
    } 



    $parsedUrl = parse_url($url1); 
    $ch = curl_init(); 
    $options = array(
     CURLOPT_URL => $url1, 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_TIMEOUT => 10, 
     CURLOPT_HTTPHEADER => array("Host: " . $parsedUrl['host']), 
     CURLOPT_SSL_VERIFYHOST => 0, 
     CURLOPT_SSL_VERIFYPEER => false 
    ); 
    curl_setopt_array($ch, $options); 
    $response_count = @curl_exec($ch); 
    $json_count = json_decode($response_count); 

     foreach ($json_count as $item_count) 
     { 


        $cnt=count($item_count); 
        break; 

     } 
1

Сделать запрос:

https://graph.facebook.com/v2.11/{group-id}/members?limit=1500&access_token={token} 

(заменить {group-id} по цифровой идентификации группы и {token} на ваш маркер доступа).

Вы получите ответ, как это:

{ 
    "data": [ 
     { 
      "name": "Foo bar", 
      "id": "123456", 
      "administrator": false 
     }, 
     ... 
    ], 
    "paging": { 
     "cursors": { 
      "before": "QVFIUkwzT3FKY0JSS2hENU1NUlZAocm9GelJMcUE3S1cxWWZAPYWx1cUQxcXFHQUNGLUJnWnZAHa0tIdmpMT0U5ZAjRBLUY5Q2ZAGbmwwVTNoSHhLc1BCc2dvVTF3", 
      "after": "QVFIUkFoU3lYR2tXc09adkg5OGhlbHRWRk1GYkZAzQU1DalRSY05zOVl5aE1tcjRMS3lXLURaVWNMOGZArWTVxS2hPQUVGVWxhbXZAyZA0p3azVKM2hBSEp3YlpR" 
     } 
    }, 
    "next": "https://graph.facebook.com/v2.11/123928391023981/members?access_token=EAACEdEose0cBALBDrdgLyVOjzW4mz6G3d3Yj1fTGYqygVgYq0JCDZAi0zYsY90pSSQ9hQZCn3TdwfXIAiyoXH5oUYcA4hOcCI9jztkkUhbBv9tEQ3ZBEEuHpmkm3kmgvk1HNq5mo6BM0hz8XkOLVh3twIdz83KhB9SkqxuxHeFD9GWsQqjys6XTuL2315QZD&pretty=0&limit= 1500&after=QVFIUkFoU3lYR2tXc08adkg5OGhlbHRWYk1GYkZAzQU1DalRSY05zOVl5aQ1tcjRMS3lXLURaVWNMOGZArWTVxS2hPQUVGVWxhbXZAyZA0p3azVKM1hBSEp3YlpR" 
} 

Далее следуют этому алгоритму:

  1. Сделать count переменную со значением 0.
  2. Подсчитайте объекты в массиве data из последнего ответа и добавьте счет в переменную count.
  3. Если последний ответ имеет свойство next, сделайте запрос на URL-адрес, который является значением свойства next, и вернитесь к шагу 2. В противном случае вы закончите, количество членов будет значением переменной count.

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

Обновление 2017.10.19: Если размер ответа API для Facebook составляет более примерно 345 КБ, Facebook возвращает ошибку: Please reduce the amount of data you're asking for, then retry your request. Это около 1997 года. Поэтому вам необходимо установить параметр запроса limit на 1500, чтобы он не сталкивался с ошибкой.

Обновление 2018.01.26: Существует способ, чтобы получить количество членов с помощью одного запроса: https://stackoverflow.com/a/47783306/1118709

Update 2018.01.31: После 90 дней от рилизинг Graph API v2.12 запрос требует маркер доступа админа группы. Источник: Graph API docs/v2.12 changelog/90-day breaking changes

Смежные вопросы