2012-07-30 51 views
0

從Twitter的REST API我用戶獲取/追隨者功能。 我粘貼了下面的代碼片段。Twitter API - 相同的光標錯誤

我的問題是,我成功地獲得追隨者的ID的時間模式。但是當用戶擁有超過5000-6000名追隨者時,我的結果出錯了。

當我從用戶的個人資料頁面檢查,我看到用戶有5500名追隨者,但是當我運行下面的代碼,大部分時間5500個IDS來,但有時29994追隨者進來$ IDS變量。現在我正在記錄結果有更多的29k追隨者。我看到一些29994追隨者返回的請求,但我找不到答案。

我錯過了什麼在獲得ID - 光標方法?謝謝

編輯:一些調試後,我登錄「$ cursor_archieve」參數,發現了這一點:
*有時next_cursor和previous_cursor來自相同:

Array 
(
    [0] => -1 
    [1] => 1400573121087317741 
    [2] => 1400573121087317741 
    [3] => 1400573121087317741 
    [4] => 1400573121087317741 
    [5] => 1400573121087317741 
    [6] => 1400573121087317741 
) 

所以在這種情況下,雖然用戶有7100個跟隨我只得到5000的追隨者

  • 有時光標有順序相同:

    陣列

    [0] => -1
    [1] => 1404335879106773348
    [2] => 1404341060469987526
    [3] => 1404338682006540​​390
    [4] => 1404341060469987526
    [5] => 1404335879106773348
    [6] => 1404338682006540​​390

我的代碼是這樣的:

public function getIds($user = "someuser"){ 
    $tmhOAuth = new tmhOAuth(array('consumer_key' => YOUR_CONSUMER_KEY, 
       'consumer_secret' => YOUR_CONSUMER_SECRET, 
       'user_token'  => $atoken1, 'user_secret'  => $atoken2,)); 

    $cursor = '-1'; 
    $ids = array(); 
    $cursor_archieve = array(); 
    while(true): 
     $code=$tmhOAuth->request('GET', $tmhOAuth->url('1/followers/ids'), 
       array('screen_name' => $user, 'cursor' => $cursor)); 

     if ($code == 200) { 
      $responseData = json_decode($tmhOAuth->response['response'],true); 
      $ids = array_merge($ids, $responseData['ids']); 
      $cursor = $responseData['next_cursor_str']; 
        $cursor_archieve[] = $cursor; 
     } else { 
      return 0; 
     } 
     if ($cursor == '0' || count($ids) >= 29000) { 
      break; 
     } 
    endwhile; 

    return $ids; 
} 

EDIT2:我應該做「array_unique」刪除重複的ID,否則無法正常使用下一個光標如果previous_cursor =下一個光標或任何其他的選擇嗎? 在每種情況下,用戶都有5500-6500個關注者。所以如果我只帶一個光標,我只能得到第一批5000個追隨者。

回答

0

原因是我的代碼中存在程序錯誤。我在一週的調試會話後修復了它