fibra optica icon¿Alguna vez necesitaste saber que lenguaje utiliza el usuario?, ¿Necesitaste saber que moneda utiliza o sobre que zona está? ¿Quizá eres de los que les hace el boicot a telefónica u otra así­ por que le ponen el ADSL a veces y quieres avisar a todo el que utiliza sus servicios? !Pues te traigo la solución a tus problemas! La librerí­a que hoy os presento utiliza el servicio de ippages.com para detectar todos esos parámetros y muchos mas a partir de una IP dada.

La función se llama ip_tool() y viene en 3 sabores: Original, "text" y "clear". La forma de utilización es muy sencilla. Escribimos dentro de la función como 1º parámetro la IP a buscar y como segundo parámetro podemos utilizar "clear" para que nos ordene los contenidos de salida, "text" para que muestre el contenido en formato texto cambiando los caracteres especiales de su formato original a texto o dejarlo sin nada y que salga como lo obtiene directamente, pero limpio de variables vací­as.
Nuestra función se apoya para limpiar los datos en la función _clear() que también es necesario incluir para su correcto funcionamiento.

PHP:
  1. function _clear($busqueda, $reemplazo, $origen){
  2.     if($origen == $busqueda){
  3.         return $reemplazo;
  4.     } else {
  5.         return $origen;
  6.     }
  7. }
  8.  
  9. function ip_tool($ip, $decode = ""){
  10.     $url = "http://www.ippages.com/xml/?ip=".$ip;
  11.     $simple = @file_get_contents($url);
  12.     $p = xml_parser_create();
  13.     xml_parse_into_struct($p, $simple, $vals, $index);
  14.     xml_parser_free($p);
  15.     $out = array();
  16. /**/
  17.     foreach($vals as $valor){
  18.         $valor['value'] = str_replace("+-+", " ", $valor['value']);
  19.         $valor['value'] = str_replace("++", " ", $valor['value']);
  20.         $valor['value'] = str_replace("   ", ""$valor['value']);
  21.         $valor['value'] = str_replace("   ", ""$valor['value']);
  22.         $valor['value'] = str_replace("  """$valor['value']);
  23.         $valor['value'] = str_replace("\n"""$valor['value']);
  24.         $valor['value'] = _clear(" ", "", $valor['value']);
  25.         $valor['value'] = _clear("http://xml.ippages.com", "", $valor['value']);
  26.         $valor['value'] = _clear("http://www.ippages.com"""$valor['value']);
  27.         $valor['value'] = _clear("3.01.13 added support for ?verbose=1 or ?v=1 parameter to replace ?suppress_extra=1 so that less detail is provided by default", "", $valor['value']);
  28.         $valor['value'] = _clear("mailto:support@privacy-ecosystem.com?subject=re: xml", "", $valor['value']);
  29.         $valor['value'] = _clear("available only to subscribers at ippages.com with get=nmap or get=nmapv parameter", ""$valor['value']);
  30.         $valor['value'] = _clear("Need to purchase additional IP Address Lookups? Or get access to all returned data fields? Or need more consistent, faster lookup results? Go to http://www.ippages.com/lookups/", ""$valor['value']);
  31.         $valor['value'] = _clear("provided to subscribers only", "", $valor['value']);
  32.  
  33.         if($valor['value'] != "" && $valor['value'] != "no"){
  34.             if($decode != "text"){
  35.                 $out[$valor['tag']] = urldecode($valor['value']);
  36.             } else {
  37.                 $out[$valor['tag']] = $valor['value'];
  38.             }
  39.         }
  40.     }
  41.     if($decode == "clean"){
  42.         $_out = array(
  43.             "ip" => array(
  44.                 "id" => $out["LOOKUP_IP"],
  45.                 "ip_decimal" => $out["LOOKUP_IP_LONG"],
  46.                 "host" => $out["LOOKUP_HOST"],
  47.                 "ultimo_test" => array(
  48.                     "date" => $out["LOOKUP_TOR_NODE_CHECKED_DATE"],
  49.                     "time" => $out["LOOKUP_TOR_NODE_CHECKED_TIME"],
  50.                     "timezone" => $out["LOOKUP_TOR_NODE_CHECKED_TIMEZONE"],
  51.                     "intervalo" => $out["LOOKUP_TOR_NODE_CHECKED_INTERVAL"]
  52.                 )
  53.             ),
  54.             "local" => array(
  55.                 "pais1" => array(
  56.                     "pais" => $out["LOOKUP_COUNTRY"],
  57.                     "CODE3" => $out["LOOKUP_COUNTRY_CODE3"],
  58.                     "bandera" => $out["LOOKUP_COUNTRY_FLAG"],
  59.                     "moneda" => array(
  60.                         "moneda" => $out["LOOKUP_COUNTRY_CURRENCY"],
  61.                         "CODE3" => $out["LOOKUP_COUNTRY_CURRENCY_CODE"],
  62.                         "nombre" => $out["LOOKUP_COUNTRY_CURRENCY_NAME"]),
  63.                     "continente" => $out["LOOKUP_COUNTRY_CONTINENT"],
  64.                     "nacionalidad" => $out["LOOKUP_NATIONALITY"],
  65.                     "gentilicio" => $out["LOOKUP_NATIONALITY_PLURAL"],
  66.                     "europeos" => $out["LOOKUP_IN_EU"],
  67.                     "iva" => $out["LOOKUP_EU_VAT_RATE"]     
  68.                     ),
  69.                 "pais2" => array(
  70.                     "pais" => $out["LOOKUP_COUNTRY2"],
  71.                     "CODE3" => $out["LOOKUP_COUNTRY_CODE3"],
  72.                     "continente" => $out["LOOKUP_COUNTRY2_CONTINENT"],
  73.                     "europeos" => $out["LOOKUP_IN_EU2"],
  74.                     "iva" => $out["LOOKUP_EU_VAT_RATE2"],
  75.                     "provincia" => $out["LOOKUP_STATE_PROVINCE2"],
  76.                     "lon" => $out["LOOKUP_LONGITUDE2"],
  77.                     "lat" => $out["LOOKUP_LATITUDE2"],
  78.                     "url" => $out["LOOKUP_MAPQUEST_URL2"]
  79.                     )
  80.             ),
  81.             "server" => array(
  82.                 "linea" => $out["LOOKUP_ORG2"],
  83.                 "servidor" => urldecode($out["LOOKUP_REGISTRANT"]),
  84.                 "comp" => $out["LOOKUP_ORG2"],
  85.                 "consulta" => $out["QUERY"],
  86.                 "fecha_hora" => $out["TIMESTAMP"],
  87.                 "GMT" => $out["TIMESTAMP_GMT"],
  88.                 "timeserver" => $out["TIMESERVER"],
  89.                 "respuesta_en_seg" => $out["LOAD_TIME"],
  90.                 "busquedas" => $out["LOOKUP_COUNT"]
  91.             )
  92.         );
  93.         return $_out;
  94.     } else {
  95.         return $out;
  96.     }
  97. }

En todos los ejemplos plantearemos la variable $ip definida con $_SERVER['REMOTE_ADDR'], lo que dará como resultado los datos de vuestra propia conexión. Si queréis, podéis utilizar una IP fija escribiéndola en la variable de los ejemplos entre comillas. Ejemplo: "255.255.255.255".

El ejemplo a continuación muestra que IVA se aplica en la zona donde está el usuario y la moneda que se utilizará:

PHP:
  1. $ip = $_SERVER['REMOTE_ADDR'];
  2. $dato = ip_tool($ip, "clean");
  3. echo "El Impuesto que debe pagar el usuario en <b>".$dato["local"]["pais1"]["moneda"]["nombre"]."</b>s es del <b>".($dato["local"]["pais2"]["iva"]*100)."</b>%";

El siguiente ejemplo muestra un mapa de la posible posición donde se encuentra el usuario:

PHP:
  1. $ip = $_SERVER['REMOTE_ADDR'];
  2. $dato = ip_tool($ip, "clean");
  3. echo "<a href=\"".$dato["local"]["pais2"]["url"]."\">";
  4. echo "Usuario localizado en ".$dato["local"]["pais2"]["pais"];
  5. echo " provincia de ".$dato["local"]["pais2"]["provincia"]."</a>";

El ejemplo que pongo a continuación indica que compañí­a utiliza el usuario… si la reconoce claro…:

PHP:
  1. $ip = $_SERVER['REMOTE_ADDR'];
  2. $dato = ip_tool($ip, "clean");
  3. if($dato["server"]["comp"] != ""){
  4.     $out = "La compa&ntilde;ia que ofrece este servicio es ".$dato["server"]["comp"];
  5.     if($dato["server"]["linea"] != ""){
  6.         $out .= " a trav&eacute;s de las lineas propiedad de ".$dato["server"]["linea"];
  7.         if($dato["server"]["servidor"] != ""){
  8.             $out .= " desde servidores propiedad de ".$dato["server"]["servidor"];
  9.         }
  10.     }
  11. } else {
  12.     $out = "El nombre de la compa&ntilde;ia que ofrece este servicio no est&aacute; disponible en este momento";
  13.     if($dato["server"]["linea"] != ""){
  14.         $out .= " pero ofrece el servicio a trav&eacute;s de las lineas propiedad de ".$dato["server"]["linea"];
  15.         if($dato["server"]["servidor"] != ""){
  16.             $out .= " desde servidores propiedad de ".$dato["server"]["servidor"];
  17.         }
  18.     }
  19. }
  20. echo $out;