10 mayo, 2012

Ubicación de las visitas a tu sitio desde un API en PHP


Siempre vas a necesitar conocer la ubicación de tus visitas, y si no, deberías, ya sea para mantener datos de visitas (aunque si sólo utilizas Google Analytics, no deberías preocuparte) ó para restringir un acceso a un registro o algún otro permiso, pero como obtienes este dato?

Pues hay un API que nos facilita conocer el país, región e incluso la ciudad de una visita solo ingresando la IP de donde nos accede. Desde ahora les aclaro que utilizar servicios de terceros nos deja a sus pies, y no es recomendado si no conoces la fuente o no confías en él, por unas semanas yo he utilizado este y hasta ahora no me ha fallado en lo que necesito.

El servicio se accede mediante la siguiente dirección: http://api.easyjquery.com/ips/?full=true si ingresas al enlace puedes ver tus datos, y reconocemos que nos retorna los datos en una estructura json (si no sabes que es json no te preocupes puedes leer de eso aquí). Pero lo que queremos es obtener los datos del usuario y no los podemos obligar a ingresar al link, para esto vamos a utilizar la función de PHP llamada file_get_contents que va a ingresar a esa dirección por nosotros y retornarnos esa información del usuario, de esta manera:

$ip = $_SERVER['REMOTE_ADDR'];
$json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true");
La variable ip es el valor de la IP del visitante que viene dentro del arreglo $_SERVER propio de php, ahora vienen la pregunta:

¿Cada ves que un usuario venga al sitio vamos a usar nuestro script para sacar los datos?
No, al menos lo ideal sería no hacerlo todo el tiempo, puesto que el request a una pagina aparte lleva su tiempo al servidor.
 ¿Pero entonces qué hacemos? Necesitamos almacenar los resultados ya consultados, podemos hacerlo de dos maneras:
  • Almacenarlos en una base de datos.
  • Almacenarlos en un directorio.
Almacenarlos en una base de datos sería lo más fácil, por eso vamos a tomar un método menos común y los vamos a guardar en una carpeta como archivos individuales:
$file = $_SERVER['DOCUMENT_ROOT']."/ip_cache/".$ip;
if(!file_exists($file)){ // request
 $json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true");
 $f = fopen($file,"w+");
 fwrite($f,$json);
 fclose($f);
}else
 $json = file_get_contents($file);
 De esta manera estaremos guardando únicamente archivos llamados como la IP e insertándoles el json directamente, de manera tal que al correr el script primero verificará si el archivo existe (si esta ip ya ha utilizado el script) si existe recogerá los datos del archivo, sino, verificara mediante el API y creará el archivo, una ÚNICA vez.

Así tendremos una forma ágil y rápida de verificar de donde proviene nuestro usuario, en síntesis el script se debe de ver de esta manera:
function get_country(){
    $ip = $_SERVER['REMOTE_ADDR'];
    $file = $_SERVER['DOCUMENT_ROOT']."/ip_cache/".$ip;
    if(!file_exists($file)) {// request
        $json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true");
        $f = fopen($file,"w+");
        fwrite($f,$json);
        fclose($f);
    }else
        $json = file_get_contents($file);
    $json = json_decode($json,true);
    return $json['COUNTRY'];
}
Si necesitan ver todos los datos que retorna en json, pueden hacerle un var_dump() a la variable $json o bien un print_r(). Espero que les haya parecido funcional el script, hasta la próxima.
Si te gustó este aporte y quieres seguir recibiendo temas como este suscríbete a JeankGeek.

No hay comentarios: