Макс 20 друзей Информация на Twitter4J

1

Как вы видите в этом коде, я хочу получить всю информацию о друзьях в twitter, людей, которых я придерживаюсь. Но делая это:

PagableResponseList<User> users = twitter.getFriendsList(USER_ID, CURSOR);

... только дает мне первые 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());

        }

Благодаря..

  • 0
    по умолчанию вы получите только 20 пользовательских списков, и после этого курсор сломается.
Теги:
size
twitter4j

5 ответов

-1
Лучший ответ

У меня есть решение для моего поста... благодаря Сандеру, дайте мне несколько идей...

Вещь изменилась for while ((CURSOR = ids.getNextCursor()) != 0); ,

И... user = twitter.showUser(id);

Игра с помощью showUser позволяет с медленным временем получать всю информацию обо всех моих друзьях...

Все это. Не используйте user.get(i);

2

Вы можете запросить до 200 результатов за раз:

final PagableResponseList<User> users = twitter.getFriendsList(USER_ID, cursor, 200);
cursor = users.getNextCursor();

Если вам нужно начать с того места, где вы остановились между вызовами вашей программы, вам нужно где-то сохранить значение cursor.

  • 0
    ты обалденный
2

Я заглянул в документацию в Twitter4J и Twitter, и все об этом курсоре.

Чтобы вы не загрузились сразу с целым рядом друзей, Twitter только возвращает первые 20 результатов. Он не возвращает только первые 20 результатов, но также возвращает курсор. Этот курсор - это просто случайное число, которое управляется Twitter. Когда вы снова сделаете вызов и передаете этот курсор, будут возвращены следующие 20 записей (друзей), опять же с курсором, который сейчас отличается. Вы можете повторить это до тех пор, пока курсор не будет равен нулю. Это означает, что больше нет доступных записей.

Если вы хотите узнать больше, проверьте эти две ссылки: Twitter DEV и Twitter4J.

Что касается вашей 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);
}
  • 0
    Не работает, спасибо Ограничение скорости позволяет избежать курсора. Я думаю о работе с Пейджингом, но мой друг Сансер ни за что, ни за что ...
  • 0
    Это странно .. Кажется, это правильный способ сделать это. Я искал немного дальше и нашел это: stackoverflow.com/questions/16618037/… В этом посте ограничение скорости также будет достигнуто после определенного количества друзей / подписчиков / что угодно. Когда вы смотрите на упомянутое «рабочее» решение, оно работает так же, как мое решение, используя рекурсию. ( gist.github.com/kent/451413 )
Показать ещё 4 комментария
2

вы можете попробовать этот код, чтобы получить список людей, которых вы придерживаетесь.

long cursor = -1;
PagableResponseList<User> users;
while ((cursor = followers.getNextCursor()) != 0); 
 {
     users = twitter.getFriendsList(userId, cursor);
 } 
  • 0
    Не работает, изменение списка для PagableResponseList дает мне ограничение в 20 человек, на которых я подписан: /
  • 0
    я обновил ответ, который вы можете попробовать таким образом, теперь мы изменили значение курсора, и теперь он не остановится на 20.
0

Усовершенствования Сандера отвечают !

  1. Вы можете установить значение count для метода getFriendsList как в Jonathan Answer. Максимальное допустимое значение для счета - 200. Конструкция цикла поможет собрать более 200 друзей. 200 друзей на страницу или за итерацию!
  2. Тем не менее, существуют лимиты ставок для любого вашего запроса. Метод getFriendsList будет использовать эту конечную точку api: GET friends/list который имеет ограничение по скорости 15 ударов за 15 минут. Каждый хит может принести максимум 200 друзьям, что эквивалентно 3000 друзьям (15 x 200 = 3000) за 15 минут. Таким образом, не будет проблем, если у вас будет только 3000 друзей. Если у вас более 3000 друзей, будет выбрано исключение. Вы можете использовать класс RateLimitStatus чтобы избежать этого исключения. Следующий код является примером реализации для достижения этого.

Метод 1: fetchFriends (long userId)

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

Способ 2: handleRateLimit (RateLimitStatus rls)

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

Таким образом, ваша программа будет спать в течение некоторого периода времени, основываясь на пороге ограничения скорости. Он будет продолжать бежать от того места, где он остался после сна. Таким образом, мы можем избежать нашей программы, останавливающейся в середине сбора друзей, насчитывающих более 3000 человек.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню