IP Location con PHP

IP Location Tools es un servicio gratuito que te devolverá la posición, la ciudad, región y país de un determinado número IP. Este servicio ofrece dos versiones para consultar esta información: una base de datos SQL para descargar y un API para consultar directamente.

iplocationtools

Utilizando el API de IP Location Tools
En nuestra caso utilizaremos el API para no estar instalando la base de datos, entonces para acceder a la información requerida es necesario acceder a un URL de la forma:

[code]http://iplocationtools.com/ip_query.php?ip=74.125.45.100[/code]

Esto nos devolverá un XML conteniendo el IP consultado, el estado de la consulta, los datos de pais, región, ciudad incluso los valores de latitud y longitud de posición del IP consultado.

[xml]


200.121.243.199
OK
PE
Peru
15
Lima
Lima

-12.05
-77.05
Utilizando PHP
Como el resultado es un XML podríamos utilizar la función xml2array de la cual comentamos en xml2array: PHP XML Parser, entonces tendríamos el siguiente código para leer los datos del XML.

[php]
include(“xml2array.php”);
$ipquery = $_SERVER[‘REMOTE_ADDR’];
$pathAPI = “http://www.iplocationtools.com/ip_query.php?ip=”.$ipquery.”&output=xml”;
$xmldata = file_get_contents($pathAPI);
$arrdata = xml2array($xmldata);
$params = $arrdata[‘Response’];
[/php]

Donde notamos que tomamos el IP del visitante para hacer la consulta, luego de ello imprimimos estos datos en nuestro HTML como se muestra:

  1. <strong>IP:</strong>
  2. <?php echo $params&#91;'Ip'&#93;&#91;'value'&#93;; ?><br />
  3. <strong>País:</strong>
  4. <?php echo $params&#91;'CountryName'&#93;&#91;'value'&#93;; ?><br />
  5. <strong>Región:</strong>
  6. <?php echo $params&#91;'RegionName'&#93;&#91;'value'&#93;; ?><br />
  7. <strong>Ciudad:</strong>
  8. <?php echo $params&#91;'City'&#93;&#91;'value'&#93;; ?><br /><br />
  9. <strong>Latitud:</strong>
  10. <?php echo $params&#91;'Latitude'&#93;&#91;'value'&#93;; ?><br />
  11. <strong>Longitud:</strong>
  12. <?php echo $params&#91;'Longitude'&#93;&#91;'value'&#93;; ?>

El resultado de este ejemplo lo podemos ver funcionando en iplocation.

maplocation

Integrando los resultados con Google Maps
Podríamos mejorar aun mas nuestro ejemplo si mostramos los resultados de la búsqueda en un mapa, para ello basados en el ejemplo Google Maps en tu Web creamos una instancia de nuestro mapa centrado en la latitud y longitud recién obtenidas, ademas de ello posicionamos un campo de texto con los datos de la consulta.

  1. <title>IP Location Demo - unijimpe</title>
  2. <script type="text/javascript"
  3. src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=TU_KEY"></script>
  4. <script type="text/javascript">
  5. //<!&#91;CDATA&#91;
  6. function load() {
  7.     if (GBrowserIsCompatible()) {
  8.         var map = new GMap2(document.getElementById("map"));
  9.         var pos = new GLatLng(<?php echo $params&#91;'Latitude'&#93;&#91;'value'&#93;; ?>,<?php echo $params&#91;'Longitude'&#93;&#91;'value'&#93;; ?>)
  10.        
  11.         map.setCenter(pos, 12);
  12.         map.addOverlay(new GMarker(pos));
  13.        
  14.         var myHtml = "<strong>IP:</strong> <?php echo $params&#91;'Ip'&#93;&#91;'value'&#93;; ?><br /><strong>Ubicación:</strong> <?php echo $params&#91;'City'&#93;&#91;'value'&#93;." - ".$params&#91;'CountryName'&#93;&#91;'value'&#93;; ?>";
  15.         map.openInfoWindow(pos, myHtml);
  16.     }
  17. }
  18. //&#93;&#93;>
  19. </head>
  20. <body onload="load()" onunload="GUnload()">
  21. <h3>IP Location Demo</h3>
  22. <div id="map" style="width:500px; height:300px"></div>
  23. </body>
  24. </html>

El resultado de este ejemplo lo puedes ver en maplocation.php en donde se muestran los datos de la consulta sobre el mapa. Finalmente les dejo los archivos fuente de este post para que hagan sus pruebas y lo utilicen en sus webs.

Comentarios Total 15 comentarios


Christian
Publicado: 14/04/2009 6:28 am

En realidad, los datos que se obtiene son los de ubicación del AP del ISP, por tanto, la información puede no ser del todo util, ya que (como en mi caso) se puede estar a 1450kms desde el ISP y la información puede ser interpretada que yo estoy en Buenos Aires, sin embargo estoy en Formosa (1400 kms al norte), y encima mostrar en un mata una ubicación incierta, no me convence

Matias
Publicado: 14/04/2009 1:03 pm

Si bien, Christian tiene razon, no deja de ser util para llevar un control de accesos por paises. Comparto que puede llegar a ser un poco inciarto, pero es una buena utilidad. Muchas gracias por el aporte!

mrtin94
Publicado: 15/04/2009 2:45 pm

¿Como lo haria para obtener el codigo del pais en vez del nombre? Me refiero a en vez de obtener “spain” obtener “ES”

caos30
Publicado: 16/04/2009 1:13 am

Vaya tío, me ha venido genial!! lo he añadido como opción en el módulo de visitas de mis CMS ;) así opcionalmente puedes hacer clic sobre la IP de un visitante reciente y ver su ubicación :)))

Por cierto, me ha costado encontrar la dirección en donde solicitar a Google Maps una KEY para usar su API :S

Aquí dejo la URL, porque creo que a más de uno le va a servir :D

http://code.google.com/intl/es-ES/apis/maps/signup.html

Gracias!
SERGI

Carlinho
Publicado: 29/04/2009 2:06 pm

Felicidades, estaba buscando algo de esto. Te agradezo una vez más tu trabajo.

Yo estoy empezando a montar mi propio blog. Po si quieres echarle un vistazo y darme tu opinion.

http://carlinho-chisposo.blogospot.com

Uriel Albarrán Oropeza
Publicado: 08/05/2009 2:25 pm

a mi me da error:

http://www.turistika.com.mx/pruebas/IPlocator/

Rahul
Publicado: 16/05/2009 3:57 am

thx great script it is working very fine

Daniel
Publicado: 31/05/2009 1:29 am

un aplauso, perfecto script, miles de felicitaciones, me aclaraste muchas dudas

Luis
Publicado: 24/06/2009 12:26 pm

Cómo dato importante y para que este script funcione se debe cambiar la URL iplocationtools.com a ipinfodb.com

Saludos

Albert
Publicado: 03/07/2009 12:26 pm

el servicio ya no esta habilitado con la direccion http://iplocationtools.com/ip_query.php?ip=******

ya redirecciona a http://www.ip2location.com/

Albert
Publicado: 03/07/2009 12:28 pm

Pueden utilizar como alternativa http://api.hostip.info/?ip=****

solo es cuestion de parsear el xml estructurado como gml

Albert
Publicado: 03/07/2009 12:37 pm

Otra alternativa de usarlo: http://www.hostip.info/use.html

Saludos

nico
Publicado: 05/08/2009 4:19 pm

excelente! muchas gracias. siempre paso por aca y es la primera vez que firmo… porque este script vale la pena!!!

Aacini
Publicado: 28/07/2010 11:45 pm

creo que el servicio dejo de ser gratuito
no tendrás otro que funcione igual?

Luis Rodriguez
Publicado: 26/08/2010 1:59 am

Hola Uni, es 26 de Agosto de 2010, ya bajé e instalé todo, pero no genera el xml y por ende no presenta valores.

Rastreando, si capta y lee la ip, también arma la cadena para pasarla a la api, pero la api no regresa nada.

Crees que la api ya no esté disponible?

Saludos!!

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)