Facebook API:如何获得小组成员的数量

时间:2011-01-04 21:24:20

标签: facebook facebook-fql

我正在使用PHP客户端和FQL处理fb应用程序。像这样的fb api不支持这个。您可以使用FQL获得最多随机500个成员。但是当小组有超过500名成员时,如何获得成员总数是没有办法的。 我只需要数字不关心会员的详细信息。

有人可以帮我吗?

5 个答案:

答案 0 :(得分:3)

我实际上发现你不能,显然是设计的。我想在一个月前自己知道这一点,并发现无论你传递给图表api的参数是什么,你都无法超越第500名成员。即使你告诉它从450开始并给你200,它只会给你450-500。

这是我的问题,以及不幸的答案:

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

答案 1 :(得分:3)

你可以使用graph api 2.0和sdk 4.0

您可以使用以下代码

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





if(!extension_loaded('curl') && !@dl('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;

        }

答案 2 :(得分: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变量值。
  4. 这种方式不是很好,因为组中的成员越多,所需的查询就越多。我最好从组页面HTML中解析成员数量,但我找不到可靠的方法来做到这一点。

    更新2017.10.19:如果Facebook API响应大小超过345KB,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

    更新2018.01.31:在发布Graph API v2.12 90天后,该请求将需要该组管理员的访问令牌。资料来源:Graph API docs / v2.12 changelog / 90-day breaking changes

答案 3 :(得分:1)

您可以使用summary参数,该参数将返回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
                }
            }
        }...
    ]
}

答案 4 :(得分:0)

您应该在group_member表上使用FQL查询执行此操作,如:

SELECT uid FROM group_member WHERE gid = <group_id> limit 500 offset 500

此处示例:Is it possible / how to get number of a particular Facebook Group members (even if number of them is 500+)?