sp0*_*00m 10 pagination facebook limit news-feed facebook-graph-api
我在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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
解释和问题:
显然,自从他的帐户创建以来,您无法获得用户在其新闻Feed中拥有的所有帖子.限制有限吗?
使用limit100,1000和10000,我必须每次在整个返回的新闻提要中有两个重复的帖子(174 - 172 = 194 - 192).为什么?我从未在个人新闻摘要上看过两次相同的帖子......
随着(并且只有)limit100的一个,我得到的旧帖子是在2012年创建的,同时其他值limit使查询检索在2009年创建的帖子.我可以理解上面的limit(1000)或10000),查询检索旧帖子.但是为什么10中的一个limit使查询检索旧帖子而不是查询限制为100?
最后但并非最不重要的一点:我没有得到相同数量的帖子.显然,越高limit越高,检索帖子的数量越多.我首先想到的是,较小的唯一后果limit是页面数量较多(尽管如此),但检索到的帖子数量不会改变.但确实如此.为什么?也就是说,帖子的数量似乎在limit100到1000之间,因为帖子的数量与limit1000和limit10000的相同.
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
Run Code Online (Sandbox Code Playgroud)
为什么200?它是否在文档中的任何位置指定?
Jas*_*ant 18
它不在文档中,但我亲自为我的项目测试过.
Facebook limit仅限500个帖子.无论你设置的限制高于500,它最多只能获得500个结果.尝试使用500(或更多),您将获得最多的帖子.
你不会每次都获得500个帖子,但一般会获得490个以上的帖子.有些帖子因各种原因(如隐私,被阻止的用户,不适合特定区域和其他内容)进行过滤
这回答了你的第1和第4个问题.
对于问题没有.2,我不在java中工作,所以我不能说你的代码/逻辑是否有问题,或者你的代码在做什么.
对于问题没有.3,上帝帮助facebook!
编辑
对于第4个问题,你可能会达到图api的查询/小时限制(Facebook使用它来防止垃圾邮件,你不能经常快速查询apis)
也,

这就是为什么,你没有得到facebook返回的所有结果.
(如果您指定了限制"5"但是返回的五个帖子对查看器不可见,您将获得一个空的结果集.)
除了上面列出的每个表和连接的文档中提到的限制之外,知道在运行可见性检查之前我们将获取的最大结果数是5,000是有帮助的.
此外,对特定表的结果没有限制.您可以在各自的fql表上获得有关它们的详细信息.
对于流表(发布/订阅的表),
流表的每个查询都限制在前30天或50个帖子中,以较大者为准,但是您可以使用特定于时间的字段(如created_time)和FQL运算符(例如<或>)来检索更大范围的帖子.
参考:Fql流表
看看这里: Facebook FQL流限制?
| 归档时间: |
|
| 查看次数: |
5764 次 |
| 最近记录: |