redireccionar a un idioma segun el pais del usuario
abril 5th, 2010 by 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.
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
This entry was posted on Lunes, abril 5th, 2010 at 1:14 pm and is filed under Internet, Programacion. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
octubre 19th, 2010 at 3:20 pm
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
octubre 19th, 2010 at 4:58 pm
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
noviembre 18th, 2011 at 8:43 pm
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.