[PHP] Detectar el país de tu visita, sencillito

PiradoIV

¡Buenas!,

Vamos a hacer un script muy sencillo para detectar el país desde donde nos visita un usuario, usando una API externa para mostrarle, por ejemplo, los precios de tu producto en su divisa... ¡y todo en menos de 10 lineas de código!:

<?php
// Cogemos la IP del usuario del array que nos pasa el servidor
$user_ip = $_SERVER['REMOTE_ADDR'];

// Iniciamos el handler de CURL y le pasamos la URL de la API externa
$ch = curl_init("http://api.hostip.info/country.php?ip=$user_ip");

// Con este comando le pedimos a CURL que, en vez de mostrar
// el resultado en pantalla, nos lo devuelva como una variable
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Y simplemente hacemos la petición HTTP.
$country_code = curl_exec($ch);

// Y para muestra, un botón, vamos a probar que funciona bien:
echo "Este adorable servidor ha detectado que tu código de país es... $country_code";
?>

Como norma general, siempre que usemos una API externa a nuestro servidor, tenemos que minimizar la cantidad de peticiones que le hagamos... por una parte lo necesitamos por la rapidez, por otra parte, nos podríamos encontrar con problemas de que esa API nos limite a cierta cantidad de peticiones por hora/día/etc, como Twitter o, en el peor de los casos, que nos banee la IP del servidor.

Para evitar este problema, en este caso vamos a guardarnos este código del país en una variable de sesión y así, antes de pedirle nada a la API, comprobaremos si ya lo teníamos:

<?php
// Antes de nada, iniciamos la sesión
session_start();

// Comprobamos si ya tenemos la variable de sesión guardada, o
// más concretamente, le pedimos a nuestro script que sólo
// ejecute este bloque de código si NO está asignada.
if(!$_SESSION['country_code']) {
    // Cogemos la IP del usuario del array que nos pasa el servidor
    $user_ip = $_SERVER['REMOTE_ADDR'];

// Iniciamos el handler de CURL y le pasamos la URL de la API externa
$ch = curl_init("http://api.hostip.info/country.php?ip=$user_ip");

// Con este comando le pedimos a CURL que, en vez de mostrar
// el resultado en pantalla, nos lo devuelva como una variable
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Y simplemente hacemos la petición HTTP.
$country_code = curl_exec($ch);

// Guardamos la variable en $_SESSION
$_SESSION['country_code'] = $country_code;
}
?>

¡Profit! =)

Si necesitáis más información de la visita como, de forma inquietantemente aproximada, la ciudad y la geolocalización (para integrarlo en un mapa), podéis echarle un ojo a la documentación que tienen.

PD: ¿Qué categoría pensáis que le va mejor para esta clase de hilos?, al no haber una específica de "Tutoriales", tiene cabida en "Recursos" y "Código"... de momento la he puesto como "Recursos" porque no es una duda acerca del código, ¿qué opináis?.

zoeshadow

Yo creo que a falta de tutoriales, le vendria mejor la categoria recurso xDDD.

La verdad es que parece bastante sencillo, procuraré usarlo la proxima vez que haga algo en php a ver que sale xD

NeB1

Ostia, esto es mucho mejor que hacerlo a mano, lot of thanks ^^

aNuBiS

Me hubiera venido de perlas hace un mes, que tuve una practica de hacer una web de comercio desde 0 con cosillas de php. ¡Gracias!

LOc0

God bless curl xD

Salu2 ;)

Usuarios habituales

  • LOc0
  • aNuBiS
  • NeB1
  • zoeshadow
  • PiradoIV