我正在举办一场比赛,我每天计算每个独特评论者在网页上的所有每日评论。在月底,评论投票最多的人获胜。我为此编写了完美的逻辑......直到今天。
当一个页面有超过 900 条左右的评论时,投票计数器停止上升。我认为这与分页有关,因此我将 FQL 查询更改为使用 LIMIT 和 OFFSET 来一次解析 100 条评论并将结果组合起来用于我的计票功能,但是在运行我的查询时(即使是手动,将https://graph.facebook.com/comments网址在地址栏中)它会产生 500 到 600 条评论,因此网页上最后 400 条左右的评论甚至永远不会返回!
由于此方法失败,是否有更可靠的方法来获取评论数据?
更新:我提供了一些代码,但我发现 FQL 中仍然存在与 Graph 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);
但没有骰子。如果我在时间比较中将 < 翻转为 >,则整个查询将失败并且不返回任何内容。理想情况下,我希望获取分页信息,如下面的答案中所建议的那样,但是我无法在查询中选择它...如果我尝试获取以 _cursor 结尾的任何内容,则查询返回空。
我不得不得出结论,无论 Graph API 代码中存在什么可怕的错误,它都会扩展到 FQL 代码中。我知道没有其他方法可以从这种大小的 facebook 对象中获取数据。