Cómo obtener el país de un visitante en tu página web en PHP o JavaScript gratis con la IP

Cómo obtener el país de un visitante en tu página web en PHP o JavaScript gratis con la IP

La dirección IP es un número de identificación único asignado a cada equipo de internet, esta puede ser usada para identificar el lugar de procedencia de una persona a partir de las solicitudes que hace a sitios web. Este es el método más empleado por diferentes servicios y sitios en la red para detectar tu ubicación y ofrecerte contenido relevante de acuerdo a tu localización.

Si quieres utilizar este método para tus proyectos o simplemente quieres aprender a como detectar el país de origen de tu visitante, dependerás de un servicio para conseguirlo. Actualmente hay gran cantidad de APIs que ofrecen este servicio, pero debes pagar por ello. 

Alternativamente a la popular solución de GeoIPLocation , podemos usar una API para obtener esta información del lado del servidor o del cliente sin ningún costo. La API que vamos a usar se llama geoPlugin y es completamente gratuita para uso libre. Puedes leer más acerca de la API aquí en su sitio oficial.

Como funciona

El sitio web geoplugin.net es un recurso webmaster libre y fácil de usar que proporciona información de geolocalización de una IP, esta provée una "API" gratuita y accesible mediante una solicitud GET.

Para obtener información de nuestro visitante, simplemente necesitamos conocer la IP y usar esta como parametro en la solicitud a geoplugin.net/json.gp?ip=IP-DE-USUARIO.

Información

Aparte del país de orígen, podemos obtener información como la moneda que se usa, la región o ciudad especifica si está disponible. Esta información es recibida en formato JSON y contiene las siguiente propiedades :

  • geoplugin_request: contiene la dirección IP que fue enviada en la solicitud como párametro.
  • geoplugin_status: El código http de respuesta de la solicitud.
  • geoplugin_city: La ciudad donde se localiza la IP (si está disponible).
  • geoplugin_countryCode: código del pais (2 carácteres, ejemplo US,DE,RU).
  • geoplugin_countryName
  • geoplugin_continentCode
  • geoplugin_currencyCode: moneda del país.
  • geoplugin_regionCode
  • geoplugin_regionName
  • geoplugin_areaCode
  • geoplugin_currencySymbol : código HTML del símbolo de la moneda del país.

Obtener país en PHP

Obtener la información con PHP es bastante sencillo pues puedes obtener la IP del usuario usando por ejemplo $_SERVER['REMOTE_ADDR'] . Igualmente depende de ti como proporcionar la IP para hacer la solicitud.

Como mencioné anteriormente, simplemente necesitamos hacer una solicitud a geoplugin.net/json.gp con un parámetro GET con el nombre ip que tenga como valor la IP que quieres localizar.

<?php 

$ip = $_SERVER['REMOTE_ADDR'];

// o haz la prueba con una IP de Google
//$ip = '74.125.224.72';

// Contiene el texto como JSON que retorna geoplugin a partir de la IP
// Puedes usar un método más sofisticado para hacer un llamado a geoplugin 
// usando librerias como UNIREST etc
$informacionSolicitud = file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip);

// Convertir el texto JSON en un array
$dataSolicitud = json_decode(informacionSolicitud);

// Ver contenido del array
var_dump($dataArray);

// Imprimiria algo similar a (dependiendo de la IP proporcionada) :
// geoplugin_countryCode => "DE",
// geoplugin_countryName => "Germany"
// geoplugin_continentCode => "EU"

Sencilla, clara y funcional implementación en PHP.

Obtener país en JavaScript

Usando Javascript, la cosa se complica un poco y puede que te encuentres una que otra limitación.

  1. Necesitamos obtener la IP del usuario, que probablemente no tengas y que no puede ser obtenida usando Javascript plano, de una u otra manera dependes de una llamada a un servidor para obtener la IP del usuario. Echa un vistazo a esta pregunta en  Stack Overflow para ver soluciones si tienes este problema.
  2. Usando javascript, te encontraras con el conocido mensaje "No 'Access-Control-Allow-Origin' header is present", debido a la famosa Same Origin policy que que puedes solucionar usando una herramienta CORS (que mencionaremos más adelante).

Si ya tienes una manera de obtener la IP de tu usuario, solo resta ejecutar un llamado a geoplugin usando AJAX.

// Usaremos la IP de un servidor de google como ejemplo
var IP = '74.125.224.72';

// La api de cors-anywhere espera como argument la URL de destino
var CorsAnyWhereUrl = 'https://cors-anywhere.herokuapp.com/';

// La URL de geoplugin que espera la IP de usuario
var GeoPluginUrl =  "http://www.geoplugin.net/json.gp?ip=";

// Hacer llamada usando jQuery
$.getJSON(CorsAnyWhereUrl + GeoPluginUrl + ip,function(response){
    console.log(response);
    // Hola visitante de "Pais"
    alert("Hola visitante de "+ response.geoplugin_countryName);
});

// o hacer llamada a geoplugin usando javascript plano
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    var respuesta = this.responseText;
    var response = JSON.parse(respuesta);
    
    if (this.readyState == 4 && this.status == 200) {
        alert("Hola visitante de "+ response.geoplugin_countryName);
    }
};
xhttp.open("GET", CorsAnyWhereUrl + GeoPluginUrl + ip , true);
xhttp.send();

Para evitar la Same Origin Policy, se usa la API de cors-anywhere. cors-anywhere hace un llamado a la URL proporcionada de tal manera que la política de same-origin es evadida y esta te retorna la información que fue retornada de la solicitud original. De esta manera puedes obtener el país de origen usando Javascript.

Que te diviertas !

Esto podría ser de tu interes

Conviertete en un programador más sociable