Facebook API获得帖子的新评论

时间:2015-08-17 19:05:47

标签: facebook facebook-graph-api facebook4j

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

我可以使用

获取一个页面的新帖子列表
connection.getFeed()

并使用以下内容获取帖子的评论:

post.getComments()

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

2 个答案:

答案 0 :(得分:2)

使用当前的Facebook4j API无法做到这一点。

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

您正在寻找新评论实时更新

您可以查看有关订阅实时更新的this guide

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

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

实时更新仅表示特定字段已更改,它们不包含这些字段的值。因此,这只会使应用程序更有效率,因为他们确切知道更改何时发生,并且在未发生更改时不需要依赖连续甚至定期的图谱API请求。

您将知道对象的哪个字段(用户/ 页面 /权限/付款)已更改,在您的情况下是Feed。

但除此之外,您将不得不浏览所有您感兴趣的帖子和评论 - 尽管您可以有效地完成它。为此,您可以保留您的Facebook4j API代码获取Feed并在更新时调用它。或者更好的是升级代码以仅跟踪您想要的更改等等。

关于如何在java中进行facebook实时更新有this example here (SO)。你会明白这一点并且可能会建立更好的东西。

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

答案 1 :(得分:1)

要回答这个问题,如果Facebook4j支持这个,不,它不会。

使用官方图表API也无法轻松完成,因为评论使用cursor based pagination;所以像sinceuntil这样的过滤器不起作用(虽然它们可以用于feed之类的内容。(Source

为了做你想做的事,你需要从现在开始收到所有评论,直到你上次获得它们为止。您可以使用?filter=stream

返回已排序的评论(最近的评论,最后的评论)

您可以通过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支持这种本地