有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取超过25条post消息

我正在尝试使用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条消息,但我不想限制获取帖子消息。所以

我是否可以在不设置限制参数的情况下获得符合搜索条件的完整帖子列表


共 (4) 个答案

  1. # 1 楼答案

    也许你可以试着使用循环。FB每次不能获得超过1000个,所以你可以使用循环来获得整个提要。使用如下偏移量:

    Parameter.with("limit", 1000));
    Parameter.with("offset", offset));
    

    偏移量将是一个变量,其值将为100020003000

  2. # 2 楼答案

    正如我最近测试的那样,您不必指定任何内容。Connection类通过以下方式实现Iterable:

    • 获取25个结果
    • hasNext检查是否有下一个要处理的项目
    • 如果没有,它将获取下一页的25个结果

    所以基本上你需要做的就是:

    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
            }
    }
    

    如果你想要一种返回结果的方法,我会非常小心,因为你可能会返回数千个结果,在其中爬行可能需要一些时间(从几秒钟到几分钟甚至几小时),结果对象数组将非常大。更好的方法是使用一些异步调用,并定期检查方法的结果

    尽管参数“自”似乎被忽略了。帖子是从最新的到最旧的,我认为它在进行分页时忽略了这个参数

    希望我能更清楚地告诉你:)

  3. # 3 楼答案

    我们在Post中有一个迭代器对象。所以我们可以这样做:

    Connection<Post> messages = publicFbClient.fetchConnection(...) ;
    someMethodUsingPage(messages);
        while (messages.hasNext()) {
            messages = facebookClient.fetchConnectionPage(messages.getNextPageUrl(), Post.class);
            someMethodUsingPage(messages);
        }
    

    然后在每条消息中,我们将有接下来的25条消息

  4. # 4 楼答案

    没有办法从FB获取无限的结果。默认限制设置为25。如您所知,您可以使用limit参数来更改这一点。我还没有找到搜索网页的上限。也许,你可以设定一个非常高的数值