2011-03-22 52 views
3

好吧,通常我對facebook API都很好,但是我遇到了一個問題,只是讓我困惑。 (我認爲這是一個錯誤(檢查票http://bugs.developers.facebook.net/show_bug.cgi?id=13694),但如果有人有想法,我想把它扔在這裏)。facebook api:計數參加者的事件(限制問題)

我USNG Facebook的PHP庫繼承人的統計所有與會者特定事件

$attending = $facebook->api('/'.$fbparams['eventId'].'/attending'); 

這個作品沒有它正確返回了所有與會者的數組的一個問題...

現在問題:

此事件現在大約有18000名與會者。 api調用返回最多992位與會者(而不是18000)。

我試圖

$attending = $facebook->api('/'.$fbparams['eventId'].'/attending?limit=20000'); 

進行測試,但它不會改變任何東西。

所以我實際的問題是:

如果我不能得到它通過使用圖形API這將是一個很好的替代工作? (解析活動頁面的html可能?)現在我每隔幾個小時手動更改一次價值,這是乏味和不必要的。

+1

http://forum.developers.facebook.net/viewtopic.php?id=75457 這是Facebook方面尚未解決的一個已知問題。 – arik 2011-12-09 23:35:38

回答

2

實際上有兩個參數,limitoffset。我認爲你必須同時使用並繼續撥打電話,直到回到低於最大值。限制。

這樣的事情,但是在遞歸方法(我書面方式僞代碼):

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 
} 
+0

我會盡快嘗試我的想法 – 2011-03-22 22:29:49

+0

擺弄一下,但沒有得到它的工作,現在睡在德國凌晨0點我明天再來看看 – 2011-03-22 23:08:27

+0

分辨率是多少? – 2011-05-14 19:57:01

0

嘗試

SELECT EID,ATTENDING_COUNT,unsure_count,all_members_count FROM事件WHERE EID =「事件「

1

我搜索了很多,這是我如何修復它: 請求的URL應該看起來像this

Here是在那裏你可以測試一下,這裏是我使用的代碼:

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; 
 
}