我正在连接到trakt.tv api,我想为自己创建一个小应用程序,用于显示评级等电影海报。
这就是我目前用来检索包含我需要的所有信息的.json文件。
$json = file_get_contents('http://api.trakt.tv/movies/trending.json/2998fbac88fd207cc762b1cfad8e34e6');
$movies = json_decode($json, true);
$movies = array_slice($movies, 0, 20);
foreach($movies as $movie) {
echo $movie['images']['fanart'];
}
因为.json文件很大,所以加载速度很慢。我只需要文件中的几个属性,如标题,评级和海报链接。除此之外,我只需要前20个左右。我怎样才能确保只加载.json文件的一部分来加载它?
除此之外,我没有使用php与.json结合使用,所以如果我的代码是垃圾而你有建议我会很乐意听到它们。
答案 0 :(得分:3)
除非API提供limit
参数或类似参数,否则我认为您无法限制查询。快速浏览它似乎并没有提供这个。它看起来也不会真正返回那么多数据(低于100KB),所以我想它只是很慢。
鉴于API速度慢,我会缓存您收到的数据,并且每小时左右只更新一次。您可以使用file_put_contents
将其保存到服务器上的文件中,并记录保存时间。当您需要使用数据时,如果保存的数据超过一个小时,请刷新它。
这个想法的快速草图有效:
function get_trending_movies() {
if(! file_exists('trending-cache.php')) {
return cache_trending_movies();
}
include('trending-cache.php');
if(time() - $movies['retreived-timestamp'] > 60 * 60) { // 60*60 = 1 hour
return cache_trending_movies();
} else {
unset($movies['retreived-timestamp']);
return $movies;
}
}
function cache_trending_movies() {
$json = file_get_contents('http://api.trakt.tv/movies/trending.json/2998fbac88fd207cc762b1cfad8e34e6');
$movies = json_decode($json, true);
$movies = array_slice($movies, 0, 20);
$movies_with_date = $movies;
$movies_with_date['retreived-timestamp'] = time();
file_put_contents('trending-cache.php', '<?php $movies = ' . var_export($movies_with_date, true) . ';');
return $movies;
}
print_r(get_trending_movies());