Mostrar anuncios dependiendo de la provincia del visitante. (ESPAÑA)

Iniciado por OssoH, 7 Noviembre 2014, 15:50 PM

0 Miembros y 1 Visitante están viendo este tema.

OssoH

Buenas tardes :
Quiero mostrar anuncios personalizados dependiendo de la ubicación del visitante (en concreto únicamente por la provincia).
Es decir, si el visitante es de madrid que muestre el banner1 y si el visitante es de Sevilla que muestre el banner2.

He visto que por html5 te dice la ubicación exacta pero necesita la previa aprobación del usuario. Quisiera que fuese transparente al usuario y no le pregunte que alguien quiere obtener su ubicación y que si quiere aceptar.

Sólo necesito saber la provincia.

Me aconsejan algún método?

Gracias. 

OssoH

Habia pensado en hacer llamadas a url externas que te proporcionan dicha información a través de la IP pero quisiera saber vuestra opinión ya que tiene que ser lo más fiable posible.


<?php

        $ip 
'212.32.52.135'//IP de ejemplo
        
$default 'desconocido'//IP por defecto
        
if (!is_string($ip) || strlen($ip) < || $ip == '127.0.0.1' || $ip == 'localhost'$ip '8.8.8.8';
        
$curlopt_useragent 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)';
        
        
$url 'http://ipinfodb.com/ip_locator.php?ip='.urlencode($ip);
        
$ch curl_init();
        
        
$curl_opt = array(
            
CURLOPT_FOLLOWLOCATION => 1CURLOPT_HEADER => 0CURLOPT_RETURNTRANSFER => 1CURLOPT_USERAGENT => $curlopt_useragentCURLOPT_URL => $urlCURLOPT_TIMEOUT => 1CURLOPT_REFERER => 'http://'.$_SERVER['HTTP_HOST'],
        );
        
        
curl_setopt_array($ch$curl_opt);
        
        
$content curl_exec($ch);
        
        if (!
is_null($curl_info)) { $curl_info curl_getinfo($ch);  }
        
        
curl_close($ch);
        
        if ( 
preg_match('{<li>Ciudad: ([^<]*)</li>}i'$content$regs))  $ciudad $regs[1];
        if ( 
preg_match('{<li>Provincia: ([^<]*)</li>}i'$content$regs)) $estado $regs[1];
        if( 
$ciudad != '' && $estado != '' ){
            
$location $ciudad', ' $estado;
            echo 
$location;
        } else {
            echo 
$default
        }
 
?>


R2100

Si lo quieres que funcione desde móviles, haz primero unas cuantas pruebas a ver qué provincia te devuelven para conexiones gprs, 3g...
El servicio que utilizas (http://ipinfodb.com) y todos los que he probado fallan a nivel de provincia en España.
A mi desde Madrid y Vodafone, me da State/Province : Catalonia  :o, y eso que entrando directamente en la web, te dicen que los datos provienen de la versión de pago, que tiene más puntería.

A parte de esto, el único 'problema' que le veo al código es que tu hosting no te permita curl y el problema de utilizar el literal que devuelvan de provincia. En vez de este, utiliza las 2 primeras cifras del cp



OssoH

Estoy buscando otras alternativas porque me gustaría algo local y que no haga llamadas externas, aunque creo que esto no va a ser posible.
Gracias por tu consejo.

OssoH

Me temo que no es viable e igual ninguna página lo hace porque el número de llamadas a la api para obtener la provincia sería muchísimos.

el-brujo

si es un proyecto serio pues compra la base de datos en local y actualizada y no uses recursos externos (apis).

Al ser local no habría límite de peticiones.

Hay varios servicios con base de datos de ip's (Versiones gratuitas y de pago)

ipinfodb
ip2location.com
MaxMind GeoIP

[IP2Location][Lite] Bases de datos para localizar IP's (gratis).
http://foro.elhacker.net/desarrollo_web/ip2locationlite_bases_de_datos_para_localizar_ips_gratis-t394871.0.html

En el localizador de ip de elhacker.net estamos usando base de datos gratuita en local junto con una de pago:

http://www.elhacker.net/geolocalizacion.html

- Actualizada la versión de la base de datos geoip (http://ipinfodb.com/) a la última versión gratuita (por ejemplo mi ip decía que era de Viladecans y es de Barcelona). La base de datos se actualizó por última vez en Mayo de 2013. La base de datos manda la longitud y latitud para dibujarla en el mapa de google maps usando la api de google.

Usamos la base de datos:

Citar
DB11.LITE   IP2Location LITE IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE Database