首页 > 解决方案 > 如何缓存多个 imdb 评分结果

问题描述

我正在尝试制作电影名称的电影列表,并且我正在尝试从 url(数据库)和代码作品中获取 imdb 评级。但我的问题是,如果我在列表中有 50 部电影,那么这段代码会进行 50 次不同的 omdb api 调用,这会大大降低我的网站速度。

那么我如何存储/缓存评级?我根本不适合缓存薄。谢谢 :)

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);
}

标签: phpapicachingimdb

解决方案


推荐阅读