我觉得我想太多了。我想要做的是从 instagram api 中提取最新的照片并将生成的 json 信息保存为缓存文件。然后,我将使用 jQuery 从该文件中读取数据——我已经弄清楚了那部分。我现在使用的是将其保存在缓存文件中,但不是以我识别的格式。我想我把这件事复杂化了。
这是我根据我找到的教程一直在使用的代码:
// Client ID for Instagram API
$instagramClientID = '9110e8c268384cb79901a96e3a16f588';
$api = 'https://api.instagram.com/v1/media/popular?client_id='.$instagramClientID; //api request (edit this to reflect tags)
$cache = 'cache.txt';
if(file_exists($cache) && filemtime($cache) > time() - 60*60){
// If a cache file exists, and it is newer than 1 hour, use it
$images = unserialize(file_get_contents($cache));
}
else{
// Make an API request and create the cache file
// For example, gets the 32 most popular images on Instagram
$response = file_get_contents($api); //change request path to pull different photos
$images = array();
// Decode the response and build an array
foreach(json_decode($response)->data as $item){ // Decodes json (javascript) into an array
$title = '';
if($item->caption){
$title = mb_substr($item->caption->text,0,70,"utf8");
}
$src = $item->images->standard_resolution->url; //Caches standard res img path to variable $src
$lat = $item->data->location->latitude; // Caches latitude as $lat
$lon = $item->data->location->longtitude; // Caches longitude as $lon
$images[] = array(
"title" => htmlspecialchars($title),
"src" => htmlspecialchars($src),
"lat" => htmlspecialchars($lat),
"lon" => htmlspecialchars($lon) // Consolidates variables to an array
);
}
// Remove the last item, so we still have
// 32 items when when the cover is added
//array_pop($images);
// Push the cover in the beginning of the array
//array_unshift($images,array("title"=>"Cover", "src"=>"assets/img/cover.jpg"));
// Update the cache file
file_put_contents($cache,serialize($images));
}