从 twitter 的 REST API 我用户获取/关注者功能。我在下面粘贴了一个代码片段。
我的问题是,我成功获得追随者身份的时间。但是当一个用户拥有超过 5000-6000 个关注者时,我的结果就会出错。
当我从用户的个人资料页面查看时,我看到该用户有 5500 个关注者,但是当我运行以下代码时,大多数时候会出现 5500 个 id,但有时会在 $ids 变量中出现 29994 个关注者。现在我正在记录拥有超过 29k 关注者的结果。我看到一些请求返回了 29994 个关注者,但我找不到答案。
我是否错过了获取 ids - 光标方法中的某些内容?谢谢
编辑:经过一些调试后,我记录了“$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] => 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:我应该使用“array_unique”来删除重复的 id,还是如果 previous_cursor=next cursor 或任何其他选项不使用下一个光标?在每种情况下,用户都有 5500-6500 个关注者。所以如果我只拿一个光标,我只能获得前 5000 个关注者。