【问题标题】:Getting Facebook URL shares count returns HTTP/1.1 403 Forbidden on frequently visited site获取 Facebook URL 共享计数返回 HTTP/1.1 403 Forbidden 在经常访问的站点上
【发布时间】:2017-11-21 16:36:35
【问题描述】:

在我的一个 PHP 网站上,我使用以下代码来获取每个网站子页面的 Facebook 分享数:

$json_string = file_get_contents('http://graph.facebook.com/?id=' . $url);
$json = json_decode($json_string, true);
if(isset($json['share']['share_count'])){
    return intval( $json['share']['share_count'] );
} else { 
  return 0;
}

代码在参与度不高的网站上运行良好。 但是当我在一个经常访问的网站上使用该代码时,它给了我零共享计数和以下警告:

警告:警告(2):file_get_contents(http://graph.facebook.com/?id=...):打开流失败:HTTP 请求失败! HTTP/1.1 403 禁止

我猜我可能会调用http://graph.facebook.com/?id= URL 的许多请求。我的问题是如何解决这个问题?我需要更新每个子页面的共享计数不少于 10-15 分钟的间隔。其中有2000多个。并且访问整个网站的用户数量巨大。

【问题讨论】:

  • 根据their documentation,您应该能够检查您的Apps Dashboard,看看您是否受到API 的速率限制。
  • 我已经在developers.facebook.com注册并获得了APP ID,但我只是使用上面的代码。我应该使用更多的东西吗?

标签: php facebook facebook-graph-api


【解决方案1】:

你真的不应该为每一个页面点击调用 api,那肯定会达到速率限制。您应该做两件事:

  • 创建一个应用并为每个 API 调用使用一个应用访问令牌http://www.devils-heaven.com/facebook-access-tokens/
  • 缓存 API 结果并仅通过 cron 作业不时更新一次 - 或如果最后一个结果早于特定时间范围,则在页面命中。如果您需要使共享计数保持最新,那将是一个更好的解决方案。 2000 个 API 调用的 cron 作业肯定也会达到 API 限制。确保您不会在短时间内使用所有这些 API 调用,在一批 API 调用之间实现一些超时。

如果这不起作用,您需要减少 API 调用量。

【讨论】:

  • 是的,我将结果缓存在数据库中并使用了 10 分钟的时间范围。但它仍然产生了太多的调用。无论如何,我听从了您的建议 - 我创建了一个应用程序,获得了一个应用程序 ID 和应用程序密码,并获得了我的访问令牌 ( app_ID|app_secret )。现在我查询 graph.facebook.com/?id={url}&access_token={access_token}&fie‌​lds=engagement 但我得到错误作为回报:未能打开流:HTTP 请求失败! HTTP/1.1 400 错误请求。这很奇怪,因为当我在浏览器中触发相同的 URL 时,它会工作并显示所需的数据。你知道我为什么会收到这样的错误吗?
  • 解决了问题...应该使用 &而不是 file_get_contents() 的 URL 中的 &
  • 你能分享完整的代码吗?我遇到了同样的错误。电话太多?你对我们做了什么? ???我不明白你是如何使用它的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 2022-01-10
  • 2023-02-18
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
相关资源
最近更新 更多