获取Facebook URL共享计数返回HTTP / 1.1 403禁止访问频繁访问的网站

时间:2017-11-20 22:04:59

标签: php facebook facebook-graph-api

在我的一个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=网址发出很多请求。我的问题是如何解决这个问题?我需要为每个子页面更新不小于10-15分钟间隔的份额。其中有2000多个。访问整个网站的用户数量巨大。

1 个答案:

答案 0 :(得分:0)

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

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

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