我正在尝试使用restfb获取所有帖子消息,我的代码如下
public Connection<Post> publicSearchMessages(Date fromDate, Date toDate) {
Connection<Post> messages = publicFbClient.fetchConnection("search",
Post.class,
Parameter.with("q", "Watermelon"),
Parameter.with("since", fromDate),
Parameter.with("until", toDate),
Parameter.with("type", "post"));
return messages;
}
这只会提供最新的25条帖子。
Parameter.with(“limit”,100)
如果我设置了limit参数,它会提供100条消息,但我不想限制提取帖子。所以,
无论如何,我可以在不设置限制参数的情况下获得与搜索条件匹配的完整邮件列表吗?
答案 0 :(得分:5)
也许你可以尝试使用循环。 FB每次都不能超过1000,因此您可以使用循环来获取整个Feed。像这样使用偏移量:
Parameter.with("limit", 1000));
Parameter.with("offset", offset));
偏移量将是一个变量,其值将为1000,2000,3000 ......
答案 1 :(得分:2)
无法从FB获取无限制的结果。默认限制设置为25.如您所知,您可以使用limit
参数进行更改。我没有找到限制搜索网页的上边框。也许,你可以把它设置得很高。
答案 2 :(得分:0)
我最近测试过,你不必指定任何东西。 Connection类以这种方式实现Iterable:
基本上你需要做的就是:
Connection<Post> messages = publicFbClient.fetchConnection("search",
Post.class,
Parameter.with("q", "Watermelon"),
Parameter.with("since", fromDate),
Parameter.with("until", toDate),
Parameter.with("type", "post"));
for (List<Post> feedConnectionPage : messages) {
for (Post post : myFeedConnectionPage) {
// do stuff with post
}
}
如果你想要某种返回结果的方法,我会非常小心,因为你可以返回数千个结果并且通过它们爬行可能需要一些时间(从几秒到几分钟甚至几小时)和结果对象数组会变得非常大。更好的想法是使用一些异步调用并定期检查方法的结果。
虽然它似乎是参数&#34;因为&#34;被忽略了。帖子从最新到最旧被提取,我认为在进行分页时它会以某种方式省略此参数。
希望我能让你更清楚:)
答案 3 :(得分:0)
我们在Post中有一个Iterator对象。所以我们可以这样做:
Connection<Post> messages = publicFbClient.fetchConnection(...) ;
someMethodUsingPage(messages);
while (messages.hasNext()) {
messages = facebookClient.fetchConnectionPage(messages.getNextPageUrl(), Post.class);
someMethodUsingPage(messages);
}
然后在每封邮件中,我们接下来会有25封邮件。