我一直想知道是否有办法访问所有 Twitter 关注者列表。
我们尝试使用调用 REST API通过 twitter4j:
public List<User> getFriendList() {
List<User> friendList = null;
try {
friendList = mTwitter.getFollowersList(mTwitter.getId(), -1);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (TwitterException e) {
e.printStackTrace();
}
return friendList;
}
但它仅返回 20 个关注者的列表。
我尝试使用相同的 call in loop ,但它会导致速率限制异常 - 表示我们不允许在短时间内发出太多请求。
我们有办法解决这个问题吗?
请您参考如下方法:
您绝对应该使用getFollowersIDs
。正如文档所述,这会返回 ID
对象的数组(列表)。请注意,它会导致列表一次分为大约 5000 个 ID 的页面。要开始分页,请提供值 -1 作为光标。 API 的响应将包含 previous_cursor 和 next_cursor 以允许来回分页。
棘手的部分是处理光标。如果你能做到这一点,那么你就不会有只有 20 个关注者的问题。
第一次调用 getFollowersIDs 时需要将光标指定为 -1。对于后续调用,您需要通过获取下一个光标来更新光标值,如循环的 while 部分中所做的那样。
long cursor =-1L;
IDs ids;
do {
ids = twitter.getFollowersIDs(cursor);
for(long userID : ids.getIDs()){
friendList.add(userID);
}
} while((cursor = ids.getNextCursor())!=0 );
现在,如果用户拥有超过 75000 名关注者,您将不得不等待(请参阅 Vishal 的回答)。 前 15 次调用将产生大约 75000 个 ID。然后你必须睡15分钟。然后再调用 15 个电话,依此类推,直到获得所有关注者。这可以在 for
循环之外使用简单的 Thread.sleep(time_in_milliseconds)
来完成。