Хорошо, нормально, я отлично разбираюсь в API facebook, но у меня проблема, которая просто заставляет меня задуматься. (Я думаю, что это ошибка (проверьте билет http://bugs.developers.facebook.net/show_bug.cgi?id=13694 ), но я хотел бросить его здесь, если у кого-то есть идея).
Я использую библиотеку PHP facebook для подсчета всех участников для определенного события
$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-адрес должен выглядеть примерно так.
Здесь вы можете проверить это, и вот код, который я использовал:
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; }
Пытаться
SELECT eid, attending_count, unsure_count, all_members_count FROM event WHERE eid = "event"