android - 如何使用 twitter4j 获取所有推特关注者的列表?

标签 android twitter twitter4j

我一直在想是否有一种方法可以访问所有 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。如文档所述,这将返回 IDs 对象的数组(列表)。请注意,它会导致列表一次被分成大约 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 );

这是一个很好的引用: https://github.com/yusuke/twitter4j/blob/master/twitter4j-examples/src/main/java/twitter4j/examples/friendsandfollowers/GetFriendsIDs.java

现在,如果用户的关注者超过 75000 人,您将需要等待一段时间(请参阅 Vishal 的回答)。 前 15 个调用将为您提供大约 75000 个 ID。然后你将不得不睡15分钟。然后再打 15 个电话,依此类推,直到获得所有关注者。这可以在 for 循环之外使用一个简单的 Thread.sleep(time_in_milliseconds) 来完成。

关于android - 如何使用 twitter4j 获取所有推特关注者的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21569169/

相关文章:

iphone - 备份/恢复 Gmail?

java - 如何使 Android ImageView 部分透明

iphone - 如何多次发送相同的 Twitter 消息?

java - 如何在 Android 中设置主菜单布局?

java - Twitter4J sendDirectMessage 返回页面不存在

streaming - Twitter4j 流 API 失败并出现 "connect timed out"错误

java - 安卓 java.net.ProtocolException : Connection already established

Android 调试应用程序在跳出方法/函数时崩溃,在 Release模式下运行正常

java - Twitter4j API : setMaxId() not working properly

java - 如何获取 Twitter4J 中查询的推文的转发和 Collection ?