Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: OssoH en 7 Noviembre 2014, 15:50 pm



Título: Mostrar anuncios dependiendo de la provincia del visitante. (ESPAÑA)
Publicado por: OssoH en 7 Noviembre 2014, 15:50 pm
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. 


Título: Re: Mostrar anuncios dependiendo de la provincia del visitante. (ESPAÑA)
Publicado por: OssoH en 7 Noviembre 2014, 15:52 pm
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.

Código:
<?php

        $ip = '212.32.52.135'; //IP de ejemplo
        $default = 'desconocido'; //IP por defecto
        if (!is_string($ip) || strlen($ip) < 1 || $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 => 1, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $curlopt_useragent, CURLOPT_URL => $url, CURLOPT_TIMEOUT => 1, CURLOPT_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;
        }
 ?>


Título: Re: Mostrar anuncios dependiendo de la provincia del visitante. (ESPAÑA)
Publicado por: R2100 en 14 Noviembre 2014, 22:39 pm
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




Título: Re: Mostrar anuncios dependiendo de la provincia del visitante. (ESPAÑA)
Publicado por: OssoH en 17 Noviembre 2014, 09:41 am
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.


Título: Re: Mostrar anuncios dependiendo de la provincia del visitante. (ESPAÑA)
Publicado por: OssoH en 17 Noviembre 2014, 20:00 pm
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.


Título: Re: Mostrar anuncios dependiendo de la provincia del visitante. (ESPAÑA)
Publicado por: el-brujo en 17 Noviembre 2014, 20:29 pm
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