0

Twitter の REST API から、ユーザーの get/followers 関数を取得します。以下にコードスニペットを貼り付けました。

私の問題は、フォロワーのIDを正常に取得するときのmodtです。しかし、ユーザーのフォロワーが 5000 ~ 6000 人を超えると、結果が間違ってしまいます。

ユーザーのプロフィール ページから確認すると、5500 人のフォロワーがいることがわかりますが、次のコードを実行すると、ほとんどの場合 5500 の ID が来ますが、時々 29994 人のフォロワーが $ids 変数内に来ます。現在、29,000 人以上のフォロワーを持つ結果をログに記録しています。29994 人のフォロワーで返されたリクエストをいくつか見ましたが、答えが見つかりませんでした。

get ids-cursor アプローチで何か見逃していますか? ありがとうございました

編集:いくつかのデバッグの後、「$cursor_archieve」パラメーターをログに記録し、これを見つけました:
* next_cursorとprevious_cursorが同じになる場合があります:

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

したがって、この状況では、ユーザーには7100人のフォロワーがいますが、5000人のフォロワーしか得られません

  • カーソルが順番に同じになることがあります:

    Array
    (
    [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: 重複する ID を削除するために「array_unique」を作成する必要がありますか? いずれの場合も、ユーザーには 5500 ~ 6500 人のフォロワーがいます。したがって、カーソルを 1 つだけ取得すると、最初の 5000 人のフォロワーしか取得できません。

4

1 に答える 1

0

その理由は、私のコードのプログラム エラーでした。1週間のデバッグセッションの後に修正しました

于 2012-08-23T13:08:19.290 に答える