好吧,通常我对 facebook API 没什么问题,但我遇到了一个让我想知道的问题。 (我认为这是一个错误(检查票http://bugs.developers.facebook.net/show_bug.cgi?id=13694),但如果有人有想法,我想把它扔在这里)。
我正在使用 facebook PHP 库来统计特定活动的所有与会者
$attending = $facebook->api('/'.$fbparams['eventId'].'/attending');
这可以正常工作,它可以正确返回包含所有与会者的数组...
现在问题来了:
此活动目前约有 18,000 名参加者。 API 调用返回最多 992 名与会者(而不是应有的 18000 人)。
我试过了
$attending = $facebook->api('/'.$fbparams['eventId'].'/attending?limit=20000');
用于测试,但它不会改变任何东西。
所以我的实际问题是:
如果我无法使用图形 API 让它工作,什么是一个好的替代方案? (也许解析事件页面的 html?)现在我每隔几个小时手动更改该值,这是乏味且不必要的。
实际上有两个参数,
limit
和offset
。我认为您必须同时使用两者并继续拨打电话,直到其中一个返回的值小于最大值。限制。
类似这样的东西,但是采用递归方法(我正在编写伪代码):
offset = 0;
maxLimit = 992;
totalAttendees = count(result)
if (totalAttendees >= maxLimit)
{
// do your stuff with each attendee
offset += totalAttendees;
// make a new call with the updated offset
// and check again
}
我搜索了很多,这就是我修复它的方法: 请求的 URL 应类似于 this。
这里是您可以测试它的地方,这是我使用的代码:
function events_get_facebook_data($event_id) {
if (!$event_id) {
return false;
}
$token = klicango_friends_facebook_token();
if ($token) {
$parameters['access_token'] = $token;
$parameters['fields']= 'attending_count,invited_count';
$graph_url = url('https://graph.facebook.com/v2.2/' . $event_id , array('absolute' => TRUE, 'query' => $parameters));
$graph_result = drupal_http_request($graph_url, array(), 'GET');
if(is_object($graph_result) && !empty($graph_result->data)) {
$data = json_decode($graph_result->data);
$going = $data->attending_count;
$invited = $data->invited_count;
return array('going' => $going, 'invited' => $invited);
}
return false;
}
return false;
}
尝试
从活动中选择 eid 、 attend_count、unsure_count、all_members_count WHERE eid ="event"