我正在使用Facebook Graph API从Facebook粉丝页面获取内容,然后将其显示到网站上。 我是这样做的,并且它起作用了,但不知何故,我的托管提供商似乎会限制我的请求次数...因此,我想缓存响应并仅在例如每8小时请求一次新请求。
$data = get_data("https://graph.facebook.com/12345678/posts?access_token=1111112222233333&limit=20&fields=full_picture,link,message,likes,comments&date_format=U");
$result = json_decode($data);
get_data 函数使用 CURL 如下:
function get_data($url) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$datos = curl_exec($ch);
curl_close($ch);
return $datos;
}
这个功能很好,我可以输出JSON数据响应并将其用于我的网站以显示内容。但是正如我所提到的,在我的主机中,这似乎每隔X时间就会失败,我猜是因为我受到了限制。我尝试使用我在Stackoverflow上看到的一些代码缓存响应。但我无法弄清如何集成和使用两个代码。我已成功创建缓存文件,但我无法正确地从缓存文件中读取并避免向Facebook Graph API发出新请求。
// cache files are created like cache/abcdef123456...
$cacheFile = 'cache' . DIRECTORY_SEPARATOR . md5($url);
if (file_exists($cacheFile)) {
$fh = fopen($cacheFile, 'r');
$cacheTime = trim(fgets($fh));
// if data was cached recently, return cached data
if ($cacheTime > strtotime('-60 minutes')) {
return fread($fh);
}
// else delete cache file
fclose($fh);
unlink($cacheFile);
}
$fh = fopen($cacheFile, 'w');
fwrite($fh, time() . "\n");
fwrite($fh, $json);
fclose($fh);
return $json;
非常感谢您的帮助!