Java Twitter4J上最多20个好友信息
正如你在这段代码中看到的,我想获得twitter上朋友的所有信息,我关注的人。 但这样做: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
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();
}
}
}