Twitter API - 相同的游标错误

时间:2012-07-30 19:44:20

标签: php rest twitter

来自twitter的REST API我用户获取/关注者功能。 我在下面粘贴了一段代码片段。

我的问题是,我成功追随者ID的时间。但是当用户拥有超过5000-6000个关注者时,我的结果就会出错。

当我从用户的个人资料页面查看时,我看到该用户有5500个粉丝,但是当我运行以下代码时,大部分时间都是5500个ID,但有时29994个粉丝来自$ ids变量。现在我正在记录有超过29k粉丝的结果。我看到一些请求与29994粉丝一起返回,但我找不到答案。

我是否会错过get 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 = next cursor或任何其他选项,是否不使用下一个游标? 在每种情况下,用户都有5500-6500个粉丝。所以,如果我只拍一个光标,我只能获得前5000个粉丝。

1 个答案:

答案 0 :(得分:0)

原因是我的代码中存在编程错误。我在一周的调试会话后修复了它