Как кэшировать несколько результатов рейтинга IMDB - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь создать список фильмов, где указано название фильма, и я пытаюсь получить рейтинги IMDB из URL (базы данных) и кода работает.Но моя проблема в том, что если у меня в списке 50 фильмов, этот код делает 50 различных вызовов API OMDB, и это очень сильно замедляет мой сайт.

Так как я могу хранить / кэшировать рейтинги?Я не хорош для кеша вообще.Спасибо:)

if (($row["imdb"] != "") AND (strpos($row["imdb"],'imdb')) AND 
   (strpos($row["imdb"],'title'))) {

 $imdbID = ltrim(strrchr($row["imdb_url"],'tt'),'tt');
 $imdbID = preg_replace("/[^A-Za-z0-9]/", "", $imdbID);
 $omdbapi_key  = 'API_KEY';

 $url = file_get_contents("https://www.omdbapi.com/?i=tt" . $imdbID .  "&apikey=" . $omdbapi_key);
 $omdb = json_decode($url, true);


 $imdb_rating = "<a target='_blank' href='https://www.imdb.com/title/tt" . $imdbID . "'>Rating: " . $omdb['imdbRating'] . " / 10</a>";

Теперь я могу написать файл кэша только для одного фильма.Я не знаю, как я могу добавить несколько вызовов API фильмов в одном файле.У меня есть форма, где я добавляю фильм (название, imdb URL).Я думаю, что мне нужно переписать весь файл, когда я добавлю новый фильм.

Обновление:

$cacheFile = 'cache' . DIRECTORY_SEPARATOR . md5($url);

if( file_exists($cacheFile))
{
    $omdb = json_decode(file_get_contents($cacheFile), true);
}
else
{

   $url = file_get_contents("https://www.omdbapi.com/?i=tt".$imdbID."&apikey=" . $omdbapi_key);
   file_put_contents($cacheFile, $url);
   $omdb = json_decode($url, true);
}
...