Llevo toda la mañana buscando información para unos formularios y su validación, y me he topado con la página, iplocationstools, que me ha parecido bastante interesante. Pero el momento en que más me ha gustado, ha sido al acertar mi localización de forma bastante exacta.
Su implementación es bastante sencilla, y no he podido resistir la tentación de compartir con todos el código y su funcionamiento.
La web nos facilita unos datos para que los almacenemos en base de datos y mediante unas operaciones se localice la ip. Pero esto es un engorro, ya que necesitas almacenar una cantidad enorme de información, que ellos ya tienen almacenada.
Mediante el API que nos facilitan, podemos hacerle una petición http enviándoles la dirección IP que queremos localizar, y ellos nos devuelven un XML, con toda la información referente a su ubicación.
Veamos un ejemplo de prueba que he realizado en unos minutillos, no me he complicado mucho, y he creado un par de archivos. Uno a modo de clase, que sería en nuestro proyecto, el nucleo y otro que pinta maquetado en un <pre> la salida del array de datos (una vez parseado el XML devuelto); también vamos a ver el xml que nos devuelven tras la petición.
Primero la clase (muy simple) geo.class.php:
<?php
class geo {
function geo (){}
function locateIp($ip){
$d = file_get_contents(”http://www.iplocationtools.com/ip_query.php?ip=$ip&output=xml”);
if (!$d)
return false; // Failed to open connection
$answer = new SimpleXMLElement($d);
if ($answer->Status != ‘OK’)
return false; // Error si no tenemos xml
$country_code = $answer->CountryCode;
$country_name = $answer->CountryName;
$region_name = $answer->RegionName;
$city = $answer->City;
$zippostalcode = $answer->ZipPostalCode;
$latitude = $answer->Latitude;
$longitude = $answer->Longitude;
//devuelve los datos en un array
return array(’latitude’ => $latitude,
‘longitude’ => $longitude,
‘zippostalcode’ => $zippostalcode,
‘city’ => $city,
‘region_name’ => $region_name,
‘country_name’ => $country_name,
‘country_code’ => $country_code,
‘ip’ => $ip);
}
}
?>
Ahora solo necesitamos un archivo para pintar la petición geo.php:
<?php
include_once “geo.class.php”;
$geo = new geo;
echo “<pre>”;
print_r($geo->locateIp(’XX.XX.XX.XX’)); // me reservo mi IP
echo”</pre>”;
?>
Veamos la salida que nos muestra el archivo una vez pasada la dirección IP:
Array(
[latitude] => SimpleXMLElement Object(
[0] => 37.3772
)
[longitude] => SimpleXMLElement Object(
[0] => -5.9869
)
[zippostalcode] => SimpleXMLElement Object(
)
[city] => SimpleXMLElement Object(
[0] => Sevilla
)
[region_name] => SimpleXMLElement Object(
[0] => Andalucia
)
[country_name] => SimpleXMLElement Object(
[0] => Spain
)
[country_code] => SimpleXMLElement Object(
[0] => ES
)
[ip] => xx.xx.xx.xx
)
Y por último, veamos la salida del XML:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Ip>xx.xx.xx.xx</Ip>
<Status>OK</Status>
<CountryCode>ES</CountryCode>
<CountryName>Spain</CountryName>
<RegionCode>51</RegionCode>
<RegionName>Andalucia</RegionName>
<City>Sevilla</City>
<ZipPostalCode></ZipPostalCode>
<Latitude>37.3772</Latitude>
<Longitude>-5.9869</Longitude>
</Response>
Espero que os guste, y por supuesto, que lo mejoreis todo lo posible.









Sin comentarios
Post al azar
Deje sus comentario: