【问题标题】:Facebook API get new comments to postsFacebook API 获取帖子的新评论
【发布时间】:2015-08-17 19:05:46
【问题描述】:

我正在使用Facebook4j 访问主页的 Facebook API。

我可以获取页面的新帖子列表,使用

connection.getFeed()

并使用以下方法获取帖子的 cmets:

post.getComments()

但我也希望能够在页面帖子中获取新的 cmets(同时忽略我已经获取的 cmets)。 除了重新搜索每个帖子的 cmets 之外,您知道如何做到这一点吗?

【问题讨论】:

    标签: facebook facebook-graph-api facebook4j


    【解决方案1】:

    目前的 Facebook4j API 无法做到这一点。

    如果您查看their page 上不支持的功能列表,您会看到:

    您正在寻找的是新 cmets实时更新

    你可以看看this guide关于订阅实时更新。

    如果您查看我在上面提供的实时更新链接,您会注意到实时更新仅限于某些类型的对象及其字段的子集,这些字段也列在此处。

    可供订阅的有效对象类型是用户和page Graph API 对象(包括提要字段)。

    实时更新仅表示特定字段已更改,它们不包括这些字段的值。因此,这只会使应用程序更高效,因为它们可以准确地知道何时发生了变化,并且在没有发生变化时不需要依赖连续甚至定期的 Graph API 请求。

    您将知道对象的哪个字段(用户/页面/permissions/payments)发生了变化,在您的情况下是供稿。

    但除此之外,您还必须浏览所有您感兴趣的帖子和 cmets - 尽管您可能可以有效地做到这一点。为此,您可能可以保留获取提要的 Facebook4j API 代码,并在更新时重新调用它。或者更好的是升级代码以仅跟踪您想要的更改等等。

    this example here (SO) 介绍了如何在 java 中获取 facebook 实时更新。你会明白这一点,并且可能会构建更好的东西。

    This answer 建议使用 Spring Social Facebook,因为它有一个实时更新控制器来处理来自 Facebook 的实时更新回调,而 RestFBFacebook4j 不能这样做。

    【讨论】:

    • 感谢您的信息,但我不想要实时更新,我只想查询某个时间以来页面帖子的新 cmets
    • 也许可以使用 Facebook 的查询语言?
    • 目前我正在通过页面提要(帖子的最新页面)搜索所有帖子返回,并检查是否有任何新的 cmets。不理想,但它有效。
    • @James 我查看了 facebook 查询的语言,但没有看到明显的方法。您可以尝试提出一个新问题以引起更多关注。就复杂性而言,它可能并不理想(即可以以某种方式简化),但如果在性能方面它不会引发任何问题,我会说这没什么大不了的。
    【解决方案2】:

    回答这个问题,如果 Facebook4j 支持这一点,不,它不支持。

    使用官方图形 API 也不容易做到这一点,因为 cmets 使用 cursor based pagination;所以像 sinceuntil 这样的过滤器将不起作用(尽管它们可以处理像 feed 这样的事情。(Source

    为了做你想做的事,你需要从现在到你最后一次得到所有的 cmets。您可以使用 ?filter=stream 让 cmets 按顺序返回(最近的在前,最后是最旧的)

    您可以通过 fb4j execute a raw fb request 为此:

    // GET
    Map<String, String> params = new HashMap<String, String>();
    params.put("filter", "stream"); //add the ?filter=stream
    
    //res will be the RAW response
    RawAPIResponse res = facebook.callGetAPI("POST_ID/comments");
    //you can get it as a JSONObj with:
    JSONObject jsonObject = actual.asJSONObject();
    

    或者,要在没有原始请求的情况下执行此操作,您可以使用 comment.getCreatedTime() 获取每条评论的时间,然后过滤掉旧评论。

    无论哪种方式,您都必须自己过滤它们,因为 facebook4j 和图形 API 都不支持本机

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 2016-03-21
      • 1970-01-01
      • 2012-01-07
      • 2019-04-27
      • 2020-07-08
      • 2012-04-12
      • 1970-01-01
      相关资源
      最近更新 更多