Here's my current script that does the API calling:
$client = "55447265ed444bb5b768ecb0765ba9cb"; $query = $_POST['q']; $clnum = mt_rand(1,3); $api = "https://api.instagram.com/v1/tags/".$query."/media/recent?client_id=".$client; function get_curl($url) { if(function_exists('curl_init')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $output = curl_exec($ch); echo curl_error($ch); curl_close($ch); return $output; } else{ return file_get_contents($url); } } $response = get_curl($api); $images = array(); if($response){ foreach(json_decode($response)->data as $item){ $src = $item->images->standard_resolution->url; $thumb = $item->images->thumbnail->url; $url = $item->link; $images[] = array( "src" => htmlspecialchars($src), "thumb" => htmlspecialchars($thumb), "url" => htmlspecialchars($url) ); } } print_r(str_replace('\\/', '/', json_encode($images))); die();
I found 2 codes that can do caching but need help integrating them into my current script. One script is longer than the other. Both scripts do a $cache variable followed by an "if, else" code then they both branch out into different codes. The 2nd code is really similar to my current script but trying to figure out how to merge them.
1st code:
// Also Perhaps you should cache the results as the instagram API is slow $cache = './'.sha1($url).'.json'; if(file_exists($cache) && filemtime($cache) > time() - 60*60){ // If a cache file exists, and it is newer than 1 hour, use it $jsonData = json_decode(file_get_contents($cache)); } else { $jsonData = json_decode((file_get_contents($url))); file_put_contents($cache,json_encode($jsonData)); } $result = '<div id="instagram">'.PHP_EOL; foreach ($jsonData->data as $key=>$value) { $result .= "\t".'<a class="fancybox" data-fancybox-group="gallery" title="'.htmlentities($value->caption->text).' '.htmlentities(date("F j, Y, g:i a", $value->caption->created_time)).'" style="padding:3px" href="'.$value->images->standard_resolution->url.'"> <img src="'.$value->images->low_resolution->url.'" alt="'.$value->caption->text.'" width="'.$width.'" height="'.$height.'" /> </a>'.PHP_EOL; } $result .= '</div>'.PHP_EOL; return $result; }
2nd code:
$cache = './cache.json'; if(file_exists($cache) && filemtime($cache) > time() - 60*60){ // If a cache file exists, and it is newer than 1 hour, use it $images = json_decode(file_get_contents($cache),true); //Decode as an json array } else{ // Make an API request and create the cache file // For example, gets the 32 most popular images on Instagram $response = get_curl($api); //change request path to pull different photos $images = array(); if($response){ // Decode the response and build an array foreach(json_decode($response)->data as $item){ $title = (isset($item->caption))?mb_substr($item->caption->text,0,70,"utf8"):null; $src = $item->images->standard_resolution->url; //Caches standard res img path to variable $src //Location coords seemed empty in the results but you would need to check them as mostly be undefined $lat = (isset($item->data->location->latitude))?$item->data->location->latitude:null; // Caches latitude as $lat $lon = (isset($item->data->location->longtitude))?$item->data->location->longtitude:null; // Caches longitude as $lon $images[] = array( "title" => htmlspecialchars($title), "src" => htmlspecialchars($src), "lat" => htmlspecialchars($lat), "lon" => htmlspecialchars($lon) // Consolidates variables to an array ); } file_put_contents($cache,json_encode($images)); //Save as json } } //Debug out print_r($images); //Added curl for faster response function get_curl($url){ if(function_exists('curl_init')){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); $output = curl_exec($ch); echo curl_error($ch); curl_close($ch); return $output; }else{ return file_get_contents($url); } }