我正在使用Facebook4j
访问页面的Facebook API。
我可以使用
获取一个页面的新帖子列表connection.getFeed()
并使用以下内容获取帖子的评论:
post.getComments()
但我也希望能够在页面帖子中获得新评论(同时忽略我已经提取的评论)。 除了重新搜索每个帖子的评论之外,还知道如何做到这一点吗?
答案 0 :(得分:2)
使用当前的Facebook4j API无法做到这一点。
如果您查看their page上不受支持的功能列表,您会看到:
应用程序API - Application - Facebook Developers
打开图谱API - Open Graph - Facebook Developers
您正在寻找新评论的实时更新。
您可以查看有关订阅实时更新的this guide。
如果您查看我上面提供的实时更新链接,您会注意到实时更新仅限于某些类型的对象及其字段的子集(也列在那里)。
可用订阅的有效对象类型是用户和page Graph API对象(包括Feed字段)。
实时更新仅表示特定字段已更改,它们不包含这些字段的值。因此,这只会使应用程序更有效率,因为他们确切知道更改何时发生,并且在未发生更改时不需要依赖连续甚至定期的图谱API请求。
您将知道对象的哪个字段(用户/ 页面 /权限/付款)已更改,在您的情况下是Feed。
但除此之外,您将不得不浏览所有您感兴趣的帖子和评论 - 尽管您可以有效地完成它。为此,您可以保留您的Facebook4j API代码获取Feed并在更新时调用它。或者更好的是升级代码以仅跟踪您想要的更改等等。
关于如何在java中进行facebook实时更新有this example here (SO)。你会明白这一点并且可能会建立更好的东西。
This answer建议使用Spring Social Facebook,因为它有一个实时更新控制器,用于处理来自Facebook的实时更新回调,而RestFB
和Facebook4j
可以'那样做。
答案 1 :(得分:1)
要回答这个问题,如果Facebook4j支持这个,不,它不会。
使用官方图表API也无法轻松完成,因为评论使用cursor based pagination
;所以像since
和until
这样的过滤器不起作用(虽然它们可以用于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支持这种本地。