Tutorial: Parsear datos de otra web, cachearlos y mostrarlos

tutorial php cachear

A veces necesitamos cargar un contenido público de una web (por ejemplo un json con datos) para mostrarlos en nuestra web. Esto nos plantea un problema, si por cada petición que recibimos realizamos una petición al otro servidor podems saturarle de forma innecesaria. Además puede que la carga de nuestra página tarde más de lo debido ya que hay que esperar a que el otro servidor nos responda con los datos. 

En estos casos lo normal es pensar cada cuanto tiempo es necesario hacer la llamada y cachear en nuestro disco los datos para cargarlos de ahí la mayoría de las veces y sólo llamar al servidor externo cuando la caché caduque.

Lo primero que necesitamos es una función que nos diga si la caché está expirada, sería algo así:

/** Recibe la ruta del archivo de cache y los segundos pasados los cuales la caché expira **/

function isExpiredFile($s_file,$i_seconds){
        $expired=false;
        $i_time = filemtime($s_file);
        $i_actual=time();
        $i_diff = $i_actual-$i_time;
        if ($i_diff>$i_seconds){
                $expired = true;
        } 
        return $expired;
}

Ahora leemos el json de datos y si la cache esta expirada lo regeneramos

<?
$s_cache_file = "contaminacion.cache";
$i_time = 60*60 ;// 1 hora
$s_ws = "http://www.rutadelws.com";

// Si ha expirado la cache
if (isExpiredFile($s_cache_file,$i_time)){
        // Cargamos el json de datos
        $s_datos = file_get_contents($s_ws);

        // Lo guardamos en disco
        $i_id = fopen($s_cache_file,"w");
        fputs($i_id,$s_datos);
        fclose($i_id);
}else{
        $s_datos = file_get_contents($s_cache_file);
}

// En $s_datos tendremos los datos del json (leidos de cache o cogidos directamente)
print_R($s_datos);

?>

Una vez hecho esto tendremos siempre los datos json (o xml o lo que sean). He usado 

Votos totales: 294