我用我的项目弹簧集成,Twitter的4.1.6.RELEASE。 使用TwitterTemplate我试图让所有经过验证的用户朋友。
因此,即时通讯使用这种方法呢,
friendsList = twitterTemplate.friendOperations().getFriends();
但在这种情况下,我只获得了20个朋友作为默认计数。 但我有33个朋友,我想接他们所有。 我该怎么办this.Also我,当我把这个方法验证用户。 在TwitterTemplate没有办法通过计数作为参数。 但API称它将返回5000个用户。
/** * Retrieves a list of up to 5000 users that the authenticated user follows. * Note that this method make multiple calls to Twitter's REST API (one call to get a list of the friend IDs and one call for every 100 friends). * If all you need is the friend IDs, consider calling getFriendIds() instead. * Or if you need only a subset of the user's friends, call UserOperations.getUsers() passing in the list of friend IDs you need. * @return a list of TwitterProfiles * @throws ApiException if there is an error while communicating with Twitter. * @throws MissingAuthorizationException if TwitterTemplate was not created with OAuth credentials. */ CursoredList<TwitterProfile> getFriends();
TwitterTemplate调用Twitter的API来获取数据。 因此,请求重定向到Twitter API的https://api.twitter.com/1.1/friends/list.json
访问URL。
Twitter的API说明
这时,结果排序,最近的下面先 - 但是,这个顺序是受突击变化和最终一致性的问题。 结果在20个用户和结果的多个“页面”的基团中给出可通过在后续请求中使用next_cursor值被导航。 请参阅使用游标导航收藏获取更多信息。
我怎样才能做到这一点???
这是一个很好的解决方案,但它不会比第100个朋友返回更多。 该方法twitterTemplate.userOperations.getUsers(userIdArray)只能用于一次返回100个用户。 https://dev.twitter.com/rest/reference/get/users/lookup
更好的方法是:
List<TwitterProfile> getAllFollowers() {
CursoredList<Long> cursoredList;
cursoredList = twitter.friendOperations().getFollowerIds();
List<TwitterProfile> followers = getFollowers(cursoredList);
return followers;
}
List<TwitterProfile> getFollowers(CursoredList<Long> cursoredList) {
List<TwitterProfile> followers = new ArrayList<>();
for(int i = 0; i< cursoredList.size(); i+=100){
followers.addAll(getProfiles(cursoredList, i));
}
return followers;
}
List<TwitterProfile> getProfiles(CursoredList<Long> cursoredList, int start){
int end = Math.min(start+100, cursoredList.size());
long[] ids = cursoredList.subList(start, end).toArray(new long[0]);
List<TwitterProfile> profiles = twitter.userOperations().getUsers(ids);
return profiles;
}
然后调用getAllFollowers()。 类似的代码可以用来得到所有朋友。 只要改变通话:
twitter.friendOperations.getFollowerIds()
至
twitter.friendOperations.getFriendIds();
终于找到了解决办法,
1)首先,你必须使用friendOperations得到验证用户的所有好友的ID列表。
2)然后得到使用USEROPERATIONS特定ID列表中的所有朋友。
这里是例子片断,
List<org.springframework.social.twitter.api.TwitterProfile> friendsList;
CursoredList<Long> friendIdList;
long[] userIdArray;
friendIdList = twitterTemplate.friendOperations().getFriendIds();
userIdArray = new long[friendIdList.size()];
for(int i=0; i<friendIdList.size(); i++)
userIdArray[i] = friendIdList.get(i);
friendsList = twitterTemplate.userOperations().getUsers(userIdArray);
要回答原来的问题如何通过使用游标导航时,请考虑以下。
你必须通过所有的游标遍历并收集结果如下:
// ...
CursoredList<TwitterProfile> friends = twitter.friendOperations().getFriends();
ArrayList<TwitterProfile> allFriends = friends;
while (friends.hasNext()) {
friends = twitter.friendOperations().getFriendsInCursor(friends.getNextCursor());
allFriends.addAll(friends);
}
// process allFriends...