Я написал небольшой скрипт на 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
Интерпретации и вопросы:
Очевидно, вы не можете получить все постыпользователь был в своей ленте новостей с момента создания его учетной записи. Лимит ограничен?
При лимите
в 100, 1000 и 10000 у меня должно было быть каждый раз два дублированных поставо всей возвращенной ленте новостей (174 - 172 = 194 - 192). Почему? Я никогда не видел один и тот же пост дважды в своей личной новостной ленте...
С (и только с) лимитом
в 100, самый старый пост, который я получаю, был создан в 2012 году, в то время как другой значения limit
заставляют запрос извлекать сообщение, созданное в 2009 году. Я понимаю, что при верхнем limit
(1000 или 10000) запрос извлекает более старые сообщения.Но почему a limit
из 10 делает запрос извлекающим более раннее сообщение, чем запрос, ограниченный 100?
И последнее, но не менее важное замечание: Я не получаю одинаковое количество сообщений. Очевидно, что чем выше 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? Указано ли это где-нибудь в документации?