Я использую API-интерфейс Facebook, чтобы получить содержимое с страницы поклонника 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. Но я не могу понять, как интегрировать и использовать оба кода. Мне удалось создать файл кеша, но я не могу правильно читать из кэшированного файла и не вносить новый запрос в графический API Facebook.
// 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;
Большое спасибо за вашу помощь!