使用FQL从网页,LIMIT和OFFSET获取注释,但是当有超过900条注释时结果会失败

时间:2013-05-08 00:13:19

标签: php facebook-graph-api facebook-fql facebook-comments

我正在举办一场比赛,我每天都会在每个独特的评论者的网页上统计所有日常评论。在月底,评论最多的人获胜。我为此编写了完美的逻辑......直到今天。

当一个页面的评论超过900条时,投票计数器就会停止上升。我认为这与分页有关,所以我改变了我的FQL查询,使用LIMIT和OFFSET一次解析100条评论,并将结果合并到我的计票计数功能中,但是在运行我的查询时(即使是手动,放入地址栏中的https://graph.facebook.com/comments url)它会在500到600条评论之间扯掉,所以网页上最后400条左右的评论甚至都没有回复!

由于此方法失败,是否有更可靠的方式来获取评论数据?

更新:我提供了一些代码,但我发现FQL中的问题与图谱API中的问题一样。这是我的图形API调用:

https://graph.facebook.com/comments/?ids=http://www.burlesquebitch.com/article.php?id=538&limit=500

如果您将限制超过600,超过900条评论存在(或添加一个会使结果超出该范围的偏移量),它就会开始失败。早先的评论消失了。当我计算结果时,它们介于500-600之间。

    https://graph.facebook.com/comments/?ids=http://www.burlesquebitch.com/article.php?id=538&limit=1000

然后我终于让fql工作了:

$fql_query_result =  file_get_contents("https://graph.facebook.com/fql?q=SELECT+object_id,+id,+text,+time+,+fromid+FROM+comment+WHERE+object_id='366760226746431'+LIMIT+1000");
$data = json_decode($fql_query_result,true);

它也失败了,但更像是800-900左右。在任何情况下,不良行为都是一样的。我甚至做了一些实验,在那里我通过时间来限制查询,希望通过将我的结果隔离到日期范围,我会将自己置于其失败的阈值之内:

$fql_query_result =  file_get_contents("https://graph.facebook.com/fql?q=SELECT+object_id,+id,+text,+time,+fromid+FROM+comment+WHERE+object_id='366760226746431'+AND+time>1365984000+AND+time<1366416000+LIMIT+500");
$data = json_decode($fql_query_result,true);

但没有骰子。如果我翻转&lt;到&gt;在我的时间比较中,整个查询失败并且什么都不返回。理想我想得到分页信息,如下面的答案所示,但我不能在我的查询中选择...如果我尝试得到任何以_cursor结尾的查询返回空。

我不得不得出结论,无论Graph API代码中存在什么可怕的错误,它都会扩展到FQL代码中。我知道没有其他方法可以从这个大小的facebook对象获取数据。

1 个答案:

答案 0 :(得分:1)

您应该尝试使用光标分页,建议按照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,然后使用&gt; 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

enter image description here