Facebook Open Graph API: странное поведение параметра limit при получении ленты новостей пользователя с разбивкой на страницы

Я написал небольшой скрипт на JAVA, который проверяет параметр limitс четырьмя разными значениями. (10, 100, 1000 и 10000) при запросе ленты новостей пользователя Facebookс использованием Open Graph APIи клиента RestFB. Как вы увидите, у него странное поведение...

Сценарий:

public static void main(String[] args) {

    // vars
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    FacebookClient client = new DefaultFacebookClient(accessToken);
    Connection home;
    List postList;
    Map postMap;
    int i;

    // limits to test
    String[] limits = {"10", "100", "1000", "10000"};
    for (String limit : limits) {

        // init list and map (looking for duplicate posts)
        postList = new LinkedList();
        postMap = new LinkedHashMap();
        // get news feed
        home = client.fetchConnection(id + "/home", Post.class, Parameter.with("limit", limit));

        // going through pages
        i = 1;
        for (List page : home) {
            for (Post post : page) {
                // store into list
                postList.add(post);
                // store into map (unique post id)
                postMap.put(post.getId(), post);
            }
            i++;
        }

        // sort posts by created time
        Collections.sort(postList, new Comparator() {
            @Override
            public int compare(Post post1, Post post2) {
                return post1.getCreatedTime().compareTo(post2.getCreatedTime());
            }
        });

        // log
        try {
            FileWriter out = new FileWriter("log/output.txt", true);
            out.write("LIMIT: " + limit + "\n");
            out.write("\tPAGES: " + (i - 1) + "\n");
            out.write("\tLIST SIZE: " + postList.size() + "\n");
            out.write("\tMAP SIZE: " + postMap.size() + "\n");
            out.write("\tOLDER POST: " + dateFormat.format(postList.get(0).getCreatedTime()) + "\n");
            out.write("\tYOUGNER POST: " + dateFormat.format(postList.get(postList.size() - 1).getCreatedTime()) + "\n");
            out.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

}

Вывод:

LIMIT: 10
    PAGES: 7
    LIST SIZE: 56
    MAP SIZE: 56
    OLDER POST: 2009-03-22 14:58:03
    YOUGNER POST: 2012-05-11 15:48:49
LIMIT: 100
    PAGES: 3
    LIST SIZE: 174
    MAP SIZE: 172
    OLDER POST: 2012-01-12 23:01:34
    YOUGNER POST: 2012-05-11 15:48:49
LIMIT: 1000
    PAGES: 2
    LIST SIZE: 294
    MAP SIZE: 292
    OLDER POST: 2009-03-22 14:58:03
    YOUGNER POST: 2012-05-11 15:48:49
LIMIT: 10000
    PAGES: 2
    LIST SIZE: 294
    MAP SIZE: 292
    OLDER POST: 2009-03-22 14:58:03
    YOUGNER POST: 2012-05-11 15:48:49

Интерпретации и вопросы:

  1. Очевидно, вы не можете получить все постыпользователь был в своей ленте новостей с момента создания его учетной записи. Лимит ограничен?

  2. При лимитев 100, 1000 и 10000 у меня должно было быть каждый раз два дублированных поставо всей возвращенной ленте новостей (174 - 172 = 194 - 192). Почему? Я никогда не видел один и тот же пост дважды в своей личной новостной ленте...

  3. С (и только с) лимитомв 100, самый старый пост, который я получаю, был создан в 2012 году, в то время как другой значения limitзаставляют запрос извлекать сообщение, созданное в 2009 году. Я понимаю, что при верхнем limit(1000 или 10000) запрос извлекает более старые сообщения.Но почему a limitиз 10 делает запрос извлекающим более раннее сообщение, чем запрос, ограниченный 100?

  4. И последнее, но не менее важное замечание: Я не получаю одинаковое количество сообщений. Очевидно, что чем выше limit, тем выше число полученных постов. Сначала я подумал, что единственным последствием меньшего пределабудет большее количество страниц (хотя это действительно так), но количество извлеченных сообщений не изменится. Но это так. Почему? Тем не менее, количество сообщений, похоже, сходится между пределомв 100 и 1000, потому что количество сообщений идентично пределув 1000 и пределуиз 10000.

PS: указание параметра с и/или до в запросе ничего не меняет.

Приветствуются любые ответы/комментарии. :)

Ура.

Редактировать:

Это мой лучший отзыв:

LIMIT: 200
    PAGES: 3
    LIST SIZE: 391
    MAP SIZE: 389
    OLDER POST: 2012-01-27 14:17:16
    YOUGNER POST: 2012-05-11 16:52:38

Почему 200? Указано ли это где-нибудь в документации?

10
задан sp00m 19 December 2013 в 13:03
поделиться