0

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

当一个页面有超过 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 对象中获取数据。

4

1 回答 1

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,然后使用>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

确保您在应用程序高级设置 https://developers.facebook.com/apps/YOUR_APP_ID/advanced中启用了“2013 年 7 月重大更改:”字段。更多信息请访问https://developers.facebook.com/roadmap

在此处输入图像描述

于 2013-05-08T04:13:58.740 回答