• Aviso Legal
  • About

Bienvenidos al Blog de David Rodriguez

redireccionar a un idioma segun el pais del usuario

abril 5, 2010 1:14 pm / 5 Comments / David Rodriguez

Para redireccionar a un usuario según sea su pais de procedencia (bueno .. ya sabemos que los servidores desde donde se conectan los usuarios no son 100% fiables .. pero es la unica forma que tenemos de saberlo), utilizamos el api de hostip.info y cargamos el xml que nos dan.

Actualización (2017-06-14): El url api.hostip.info no está devolviendo nada. Buscaré otro api para actualizar el post.

Para ello hemos definido la siguiente función:

function getPaisProcedencia(){
$salida = »;

$IPADDRESS = $_SERVER[«REMOTE_ADDR»];

$archivo_xml = «http://api.hostip.info/get_xml.php?ip=».$IPADDRESS .»»;
$procedencia_xml = get_url_contents ($archivo_xml);

if (empty($procedencia_xml)){
$salida = »;
}else{
preg_match_all(«|<Hostip>(.*)</Hostip>|sU», $procedencia_xml, $items);
$lista_nodos = array();
foreach ($items[1] as $key => $item)
{
//preg_match(«|<gml:name>(.*)</gml:name>|s», $item, $mi_lugar);
//preg_match(«|<countryName>(.*)</countryName>|s», $item, $mi_pais);
preg_match(«|<countryAbbrev>(.*)</countryAbbrev>|s», $item, $mi_sigla);
$salida = $mi_sigla[1];
}
$procedencia_xml = «»;
}

return  $salida;
}

En esta función hemos utilizado la función get_url_contents descrita en un post anterior sobre optimizacion de file_get_contents en php.

Podemos sacar mucha información del xml de este API http://api.hostip.info/get_xml.php?ip=200.147.3.156

<HostipLookupResultSet version=»1.0.1″ xsi:noNamespaceSchemaLocation=»http://www.hostip.info/api/hostip-1.0.1.xsd»>
<gml:description>This is the Hostip Lookup Service</gml:description>
<gml:name>hostip</gml:name>
−
<gml:boundedBy>
<gml:Null>inapplicable</gml:Null>
</gml:boundedBy>
−
<gml:featureMember>
−
<Hostip>
<ip>200.147.3.156</ip>
<gml:name>(Unknown city)</gml:name>
<countryName>BRAZIL</countryName>
<countryAbbrev>BR</countryAbbrev>
<!– Co-ordinates are unavailable –>
</Hostip>
</gml:featureMember>
</HostipLookupResultSet>

El nodo sobre el que hemos realizado las comprobaciones es countryAbbrev aunque se podría utilizar countryName, aunque siempre vamos a usar menos recursos si comparamos abreviaturas que cadenas de nombres más largas.

Ojo, esta función no es recomendable utilizarla cada vez que tenemos una hit .. ya que ralentizaría nuestra maquina de manera injustificada. Asi que lo que recomiendo es utilizarla unicamente en la primera visita a nuestra web. Esto lo podemos controlar con sesiones, cookies, referer, etc … nosotros hemos utilizado el referer del usurio aunque otras opciones serían igualmente válidas.

Posts relacionados

  • Encuestas online gratis con PHP
  • Actualizacion modulo envio de correos en de PHPMimeMail a RMail
  • optimizar tiempos de file-get-contents en php
  • Problemas con tildes y acentos en el Subject utilizando HtmlMimeMail
  • Error 503 service unavailable y como solucionarlo optimizando php-fpm
Posted in: Internet, Programacion / Tagged: geoip, php, Programacion

5 Thoughts on “redireccionar a un idioma segun el pais del usuario”

  1. leo on octubre 19, 2010 at 3:20 pm said:

    Hola david, estube intentando correr tu funcion pero me da un par de errores, estoy utilizando dreamweaver 8 pero dudo que tenga algo que ver, solucione uno de unas comillas pero ahora me sale este
    «Parse error: syntax error, unexpected ‘<' in C:\Users\leo\Documents\Current\unificacion de transporte\wosportable\www\Nuevo Transporte\pais.php on line 23
    "
    como ves estoy usando el wos, la funcion la puse en en pais.php y luego la inclui en mi pagina principal

    esto es lo que dice la linea 23: "preg_match_all(“|(.*)|sU”, $procedencia_xml, $items);»

    creo que esta bien, de cualqueir forma el mi objetivo es restringir el paso a mi pagina a aquellos usuarios que no vengan de mi pais (venezuela).. si conoces algun codigo para esto o como arreglar el tuyo me ayudarias mucho :).. de cualquier manera gracias

  2. David Rodriguez on octubre 19, 2010 at 4:58 pm said:

    HOla Leo, cuidado con las comillas, que wordpress pone algunas como dobles cuando son simples y viceversa, y eso es lo que te está fallando.
    He dejado una copia de esa funcion en http://blogdavidrodriguez.piensaennaranja.com/otros/paisProcedencia.rar

    Espero te sirva.
    Un saludo,
    DAvid Rodriguez

  3. juan salvador on noviembre 18, 2011 at 8:43 pm said:

    hola, me gustaria saber como puedo introducir un codigo en la entrada de mi blog que redireccione a otra url segun el pais del visitante, me gustaria saber lo que tengo que poner.

  4. Reynaldo on junio 14, 2017 at 5:25 pm said:

    Hla, he probado su archivo pero no me devuelve nada, ejecuto la funcion pero no hay salida…???

  5. David Rodriguez on junio 15, 2017 at 10:18 am said:

    Parece ser que el xml del api de hostip.info ya no funciona. Buscaré algún otro api para actualizarlo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Post Navigation

← Previous Post
Next Post →

Categorias

  • Base de datos
  • Empresas
  • Internet
  • Mac
  • marketing
  • Otros
  • Prensa
  • Programacion
  • Redes Sociales
  • Retos deportivos
  • Seguridad
  • SEO
  • servidores
  • SPAM
  • Uncategorized
© Copyright 2023 - Blog de David Rodriguez