我一直想知道是否有办法访问所有 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 ); 

这里有一个非常好的引用: 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) 来完成。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!