我正在使用PHP客户端和FQL处理fb应用程序。像这样的fb api不支持这个。您可以使用FQL获得最多随机500个成员。但是当小组有超过500名成员时,如何获得成员总数是没有办法的。 我只需要数字不关心会员的详细信息。
有人可以帮我吗?
答案 0 :(得分:3)
我实际上发现你不能,显然是设计的。我想在一个月前自己知道这一点,并发现无论你传递给图表api的参数是什么,你都无法超越第500名成员。即使你告诉它从450开始并给你200,它只会给你450-500。
这是我的问题,以及不幸的答案:
答案 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"
}
然后按照这个算法:
count
变量0
。data
数组中的对象,并将计数添加到count
变量。next
属性,请向URL请求next
属性值并返回步骤2.否则,您已完成,成员数为count
变量值。 这种方式不是很好,因为组中的成员越多,所需的查询就越多。我最好从组页面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