使用Facebook FQL查询获取所有帖子评论并限制数量

4

我一直在尝试使用Fql查询来显示一个帖子的所有评论。首先显示2个帖子,然后当点击“显示更多评论”时,我显示下50条评论,这样就可以继续显示下去。当点击“显示更多评论”时,我通过ajax调用Graph API执行以下操作:

SELECT text,post_id  FROM comment  WHERE post_id=post_id limit 50

当我第一次点击“显示更多评论”时,它会显示52条评论,然后再次点击时,它会显示大约102条评论。但是对于下一个点击,152条评论没有显示。它停留在约102条评论。
我的目标是:
第一次点击“显示更多评论”=显示从第一条评论开始的52条评论(在查询中指定的限制值为52)
第二次点击=显示从第一条评论开始的102条评论(限制值=102)
第三次点击=显示从第一条评论开始的152条评论(限制值=152)......以此类推
所以我无法实现这个功能。我真的尝试了很多方法,使用偏移量也遇到了很多问题。是否有Facebook的bug?请尽快帮助。

我想知道的主要内容是如何从第50条评论开始获取50条评论? - dev-m
1个回答

5
你应该尝试使用游标分页,正如在https://developers.facebook.com/docs/reference/api/pagination/中所解释的那样,它是被推荐的。
坚持使用游标分页可以更准确地匹配所请求的限制返回结果,即使隐藏了你没有权限查看的任何记录(例如:如果你请求10条记录,但没有权限查看其中3条记录,则会自动透明地拉取额外的3条记录,以便完全获取10条记录)。
以下是post_id_cursor的示例:
SELECT text, post_id, post_id_cursor FROM comment WHERE post_id='22707976849_10151395520781850' ORDER BY time DESC limit 50

您需要获取最后一条评论的post_id_cursor,然后使用>post_id_cursor符号导航到下一页。

SELECT text, post_id, post_id_cursor FROM comment WHERE post_id='22707976849_10151395520781850' AND  post_id_cursor>'Mjg3NA==' ORDER BY time DESC limit 50

使用object_id_cursor的示例相同:

SELECT text, post_id, object_id_cursor FROM comment WHERE object_id='10151395520696850' ORDER BY time DESC limit 50

SELECT text, post_id, time, object_id_cursor FROM comment WHERE object_id='10151395520696850' AND object_id_cursor>'Mjg3NA==' ORDER BY time DESC limit 50

更新:请确保您在应用程序的高级设置中启用了“2013年7月突破性变革”字段,链接如下:https://developers.facebook.com/apps/YOUR_APP_ID/advanced。更多信息请参见https://developers.facebook.com/roadmap 获取某个用户的反馈示例: https://developers.facebook.com/tools/explorer?fql=%7B%22query1%22%3A%22SELECT%20post_id%2C%20actor_id%2C%20created_time%2C%20message%20FROM%20stream%20WHERE%20source_id%3D611693239%20AND%20created_time%3C%3Dnow()%20LIMIT%2050%20%22%2C%22query2%22%3A%22SELECT%20post_id%2C%20id%2C%20fromid%2C%20time%2C%20text%2C%20user_likes%2C%20likes%20FROM%20comment%20WHERE%20post_id%20IN%20(SELECT%20post_id%20FROM%20%23query1)%20LIMIT%205%20%22%2C%22query3%22%3A%22SELECT%20id%2C%20name%2C%20pic_square%20FROM%20profile%20WHERE%20id%20IN%20(SELECT%20actor_id%20FROM%20%23query1)%20or%20id%20IN%20(SELECT%20fromid%20FROM%20%23query2)%22%7D%0A

1
嗨,感谢回复。我在图形API浏览器中测试了您的第一个查询,并收到以下错误消息 - “(#602)post_id_cursor不是评论表的成员。”那么我该怎么办? - dev-m
你能否前往 https://developers.facebook.com/tools/explorer/?fql=SELECT%20text%2C%20post_id%2C%20post_id_cursor%20FROM%20comment%20WHERE%20post_id%3D'22707976849_10151395520781850'%20ORDER%20BY%20time%20DESC%20limit%2050%0A ,粘贴应用程序访问令牌并提交吗?即使我使用应用程序访问令牌,APP_ID | APP_SECRET表单也没有问题。 - 林果皞
是的,我做了。我通过JS SDK生成了访问令牌,然后在服务器端通过应用ID和密钥进行扩展,但没有成功!是否需要更多权限? - dev-m
您应确保在应用程序高级设置中启用了“2013年7月突破变革”字段,https://developers.facebook.com/apps/YOUR_APP_ID/advanced。更多信息请参阅 https://developers.facebook.com/roadmap/。 - 林果皞
现在问题来了!我已经在我的应用中启用了“7月13日的更新”,并生成了访问令牌,但仍然出现了同样的问题!请问我该如何将令牌私发给你以供测试? - dev-m
显示剩余33条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接