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] => 1404338682006540390
[4] => 1404341060469987526
[5] => 1404335879106773348
[6] => 1404338682006540390
)
私のコードは次のようなものです:
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 人のフォロワーしか取得できません。