朋友和追随者在社会春季(Friends and Followers in Spring Social

2019-10-24 11:31发布

我用我的项目弹簧集成,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值被导航。 请参阅使用游标导航收藏获取更多信息。

我怎样才能做到这一点???

Answer 1:

这是一个很好的解决方案,但它不会比第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();


Answer 2:

终于找到了解决办法,

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);


Answer 3:

要回答原来的问题如何通过使用游标导航时,请考虑以下。

你必须通过所有的游标遍历并收集结果如下:

    // ...
    CursoredList<TwitterProfile> friends = twitter.friendOperations().getFriends();
    ArrayList<TwitterProfile> allFriends = friends;
    while (friends.hasNext()) {
        friends = twitter.friendOperations().getFriendsInCursor(friends.getNextCursor());
        allFriends.addAll(friends);
    }
    // process allFriends...


文章来源: Friends and Followers in Spring Social