Java Twitter4J上最多20个好友信息

Java Twitter4J上最多20个好友信息,java,eclipse,api,size,twitter4j,Java,Eclipse,Api,Size,Twitter4j,正如你在这段代码中看到的,我想获得twitter上朋友的所有信息,我关注的人。 但这样做: PagableResponseList<User> users = twitter.getFriendsList(USER_ID, CURSOR); PagableResponseList users=twitter.getFriendsList(用户ID,光标); 。。。只给了我前20个最近的朋友。。。我能做什么 有关它的完整代码: PagableResponseList<User

正如你在这段代码中看到的,我想获得twitter上朋友的所有信息,我关注的人。 但这样做:

PagableResponseList<User> users = twitter.getFriendsList(USER_ID, CURSOR);
PagableResponseList users=twitter.getFriendsList(用户ID,光标);
。。。只给了我前20个最近的朋友。。。我能做什么

有关它的完整代码:

PagableResponseList<User> users = twitter.getFriendsList(USER_ID, CURSOR);
        User user = null;
        max = users.size();

        System.out.println("Following: "+max);
        for (int i = 0 ; i < users.size() ; i++){

            user = users.get(i);

            System.out.print("\nID: "+user.getId()+" / User: "+user.getName()+" /");
            System.out.print("\nFollowers: "+user.getFollowersCount()+"\n");

            tid.add(Long.parseLong(String.valueOf(user.getId())));
            tusername.add(user.getName());
            tfollowers.add(Long.parseLong(String.valueOf(user.getFollowersCount())));
            tname.add(user.getScreenName());

        }
PagableResponseList users=twitter.getFriendsList(用户ID,光标);
User=null;
max=users.size();
System.out.println(“以下:“+max”);
对于(int i=0;i

谢谢。

您可以尝试使用此代码获取您关注的人的列表

long cursor = -1;
PagableResponseList<User> users;
while ((cursor = followers.getNextCursor()) != 0); 
 {
     users = twitter.getFriendsList(userId, cursor);
 } 
long cursor=-1;
PagableResponseList用户;
而((cursor=followers.getNextCursor())!=0);
{
users=twitter.getFriendsList(userId,游标);
} 

我浏览了Twitter4J和Twitter本身的文档,都是关于光标的

为了防止你一次收到一大堆朋友,Twitter只会返回前20个结果。它不仅返回前20个结果,还返回一个游标。这个光标只是一个由Twitter管理的随机数。当你再次打电话并传递这个光标时,接下来的20个条目(朋友)将被返回,现在光标又不同了。可以重复此操作,直到返回的光标为零。这意味着没有更多可用的条目

如果您想了解更多信息,请查看以下两个链接:和

关于Java,您只需要找到一种获取当前游标的方法,并再次将该游标传递给您的方法,使应用程序加载接下来的20个条目。据英国《每日邮报》报道,这应该能奏效

List<User> allUsers = new ArrayList<User>();
PagableResponseList<User> users;
long cursor = -1;

while (cursor != 0) {
    users = twitter.getFriendsList(USER_ID, cursor);
    cursor = users.getNextCursor();
    allUsers.add(users);
}
List alluser=new ArrayList();
PagableResponseList用户;
长光标=-1;
while(光标!=0){
users=twitter.getFriendsList(用户ID,光标);
cursor=users.getNextCursor();
添加(用户);
}

您最多可以请求:

final PagableResponseList users=twitter.getFriendsList(用户ID,光标,200);
cursor=users.getNextCursor();

如果需要从程序调用之间中断的位置开始,则需要将
游标的值存储在某个位置

我有我的帖子的解决方案。。。感谢桑德,给我一些想法

问题是将
更改为
,而((CURSOR=ids.getNextCursor())!=0)

而且
user=twitter.showUser(id)

与showUser一起玩可以慢慢地获得我所有朋友的所有信息

就这些。不使用user.get(i)

改进

  • 您可以设置
    getFriendsList
    方法的计数值,如中所示。允许计数的最大值为200。循环结构将有助于收集200多个朋友现在。每页或每次迭代200个朋友
  • 然而,你提出的任何要求都是不可能的。
    getFriendsList
    方法将使用此api端点:
    getfriends/list
    ,其速率限制为每15分钟点击15次。每次点击最多可获得200个好友,相当于每15分钟总共有3000个好友(15 x 200=3000)。所以,如果你只有3000个朋友,那就没有问题了。如果您有3000多个好友,将抛出异常。您可以使用
    RateLimitStatus
    类来避免该异常。下面的代码是实现这一点的示例实现
  • 方法1:fetchFriends(长用户ID)


    这样,您的程序将根据速率限制阈值休眠一段时间。它将继续从睡觉后离开的地方跑。这样,我们就可以避免我们的程序在收集超过3000个朋友时中途停止。

    不起作用,PagableResponseList的changin’List给了我20人的限制:我已经更新了答案,你可以这样尝试,现在我们已经更改了光标值,现在它不会停止在20。默认情况下,你只会得到20个用户列表,然后光标将断开。不工作,谢谢。速率限制避开光标。我在考虑如何使用寻呼功能,但我的朋友Sanser,这是不可能的…这很奇怪。。这似乎是正确的做法。我进一步搜索发现:在那篇文章中,在一定数量的朋友/追随者/其他人之后,费率限制也会达到。当您看到提到的“工作”解决方案时,它的工作方式与我的解决方案相同,使用递归。()实际上,朋友名单有多大?如果我看一下这个页面(),似乎你可以在被限制之前提出15次请求。每个请求,您将获得20个朋友,因此最多可以检索300个朋友。如果你有300多个朋友,那么你真的要等到利率限制结束后才去查询下一个x朋友,这有多奇怪/愚蠢?编辑它似乎是那么愚蠢。发现另一个人有问题:是的,但我总是这样做的请求,它会给同样的20个朋友,因为我启动java程序在每个请求。。。因此..此限制未更新或不是我的控制台上显示的限制
    final PagableResponseList<User> users = twitter.getFriendsList(USER_ID, cursor, 200);
    cursor = users.getNextCursor();
    
    public List<User> fetchFriends(long userId) {
    
        List<User> friends = new ArrayList<User>();
    
        PagableResponseList<User> page;
        long cursor = -1;
    
        try {
            while (cursor != 0) {
                page = twitter.getFriendsList(userId, cursor, 200);
                friends.addAll(page);
                System.out.println("Total number of friends fetched so far: " + friends.size());
    
                cursor = page.getNextCursor();
    
                this.handleRateLimit(page.getRateLimitStatus());
            }
        } catch (TwitterException e) {
            e.printStackTrace();
        }
    
        return friends;
    }
    
    private void handleRateLimit(RateLimitStatus rls) {
        int remaining = rls.getRemaining();
        System.out.println("Rate Limit Remaining: " + remaining);
        if (remaining == 0) {
            int resetTime = rls.getSecondsUntilReset() + 5;
            int sleep = (resetTime * 1000);
            try {
                if(sleep > 0) {
                    System.out.println("Rate Limit Exceeded. Sleep for " + (sleep / 1000) + " seconds..");
                    Thread.sleep(sleep);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }