Как получить более 20 друзей в Spring Social Twitter?

Я использую Spring Social Twitter для получения имени друга пользователя. Вот мой код.

@Controller
@RequestMapping("/")
   public class HelloController {

    private Twitter twitter;

    private ConnectionRepository connectionRepository;

    @Inject
    public HelloController(Twitter twitter, ConnectionRepository connectionRepository) {
        this.twitter = twitter;
        this.connectionRepository = connectionRepository;
    }

    @RequestMapping(method=RequestMethod.GET)
    public String helloTwitter(Model model) {
        if (connectionRepository.findPrimaryConnection(Twitter.class) == null) {
            return "redirect:/connect/twitter";
        }

        model.addAttribute(twitter.userOperations().getUserProfile());
        CursoredList<TwitterProfile> friends = twitter.friendOperations().getFriends();
        model.addAttribute("friends", friends);
        for ( TwitterProfile frnd : friends) {
            System.out.println(frnd.getName());
        }
        return "hello";
    }

}

Но он извлекает только 20 друзей. Как я мог получить всех друзей? (Скажем, если у меня 1000 друзей)


person Krishnalal P    schedule 10.10.2014    source источник
comment
У меня смутное воспоминание о том, что API-интерфейсы Twitter выводят такие данные, поэтому вы должны извлекать их итеративно блоками из X элементов (в данном случае, по-видимому, 20). Не сильно вам поможет, но на страницах Twitter API должна быть некоторая документация по этому поводу.   -  person Mena    schedule 10.10.2014
comment
Я попытался найти документацию для этого. Все равно не нашел.   -  person Krishnalal P    schedule 10.10.2014
comment
Согласно документации, этот метод должен получить до 5000 пользователей, используя несколько вызовов API Twitter.   -  person Duncan Jones    schedule 10.10.2014
comment
Я попробовал 'friends.size()'. Возвращает 20.   -  person Krishnalal P    schedule 13.10.2014
comment
У меня также есть тот же вопрос, и я нашел решение для этого случая. Проверьте мой пост.. ссылка на мой пост   -  person Neero    schedule 11.08.2015


Ответы (2)


Вы должны перебрать все курсоры и собрать результаты следующим образом:

    // ...
    CursoredList<TwitterProfile> friends = twitter.friendOperations().getFriends();
    ArrayList<TwitterProfile> allFriends = friends;
    while (friends.hasNext()) {
        friends = twitter.friendOperations().getFriendsInCursor(friends.getNextCursor());
        allFriends.addAll(friends);
    }
    // process allFriends...
person janoskk    schedule 09.05.2016
comment
Вы должны использовать getFriendIdsInCursor, чтобы не превышать лимит скорости. - person funky-nd; 15.07.2017

Должна быть еще одна ошибка, в документации Spring конкретно указано:

получитьдрузей()

«Получает список до 5000 пользователей, на которых подписан аутентифицированный пользователь».

http://docs.spring.io/spring-social-twitter/docs/1.0.5.RELEASE/api/org/springframework/social/twitter/api/FriendOperations.html#getFriendIds%28%29

Вы уверены, что у пользователя, с которым вы делаете запрос, больше друзей? Возможно, вы могли бы попробовать получить пользователя getFriendsIds или getFriends (имя строки).

person Celeb    schedule 10.10.2014