我用 JAVA 编写了一个小脚本,在使用Open Graph API和RestFB 客户端查询用户的 Facebook 新闻提要时,用四个不同的值(10、100、1000 和 10000)测试参数limit
。如您所见,它有一个奇怪的行为......
设想:
public static void main(String[] args) {
// vars
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
FacebookClient client = new DefaultFacebookClient(accessToken);
Connection<Post> home;
List<Post> postList;
Map<String, Post> 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<Post>();
postMap = new LinkedHashMap<String, Post>();
// get news feed
home = client.fetchConnection(id + "/home", Post.class, Parameter.with("limit", limit));
// going through pages
i = 1;
for (List<Post> 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<Post>() {
@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
解释和问题:
显然,您无法获取用户自创建帐户以来在其新闻提要中发布的所有帖子。限额有限制吗?
对于
limit
100、1000 和 10000,我必须每次在整个返回的新闻提要中都有两个重复的帖子(174 - 172 = 194 - 192)。为什么?我从来没有在我的个人新闻提要上两次看到相同的帖子......使用(并且仅使用)a
limit
为 100,我得到的较旧的帖子是在 2012 年创建的,同时其他值limit
使查询检索在 2009 年创建的帖子。我可以理解,上限limit
(1000或 10000),查询检索较旧的帖子。但是为什么alimit
of 10 使查询检索到较旧的帖子而不是查询限制为 100?最后但并非最不重要的一点:我没有收到相同数量的帖子。显然,越高
limit
,检索到的帖子数越高。我首先想到的是,较小的唯一结果是limit
页数较高(尽管如此),但检索到的帖子数不会改变。但确实如此。为什么?也就是说,帖子的数量似乎在limit
100 和 1000 之间收敛,因为帖子的数量与limit
1000 和limit
10000 的 a 相同。
PS:为查询指定一个since
和/或一个until
参数不会改变任何东西。
欢迎任何回答/评论:)
干杯。
编辑:
这是我最好的回忆:
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?它是否在文档中的任何地方指定?