componente geo posicionamiento ip con cakephp

Con este componente podrás geo posicionar algunas secciones de tu web, mediante una base de datos con los países.
Se puede Geoposiciar un site entero pero no es nada recomendable por motivos de SEO, ya que al señor Google no le gusta nada. Pero puede ser útil para algunos fragmentos de html, como módulos de tienda de diferentes paises, geo posicionamiento de publicidades, etc..

1.- Obtener la base de datos de GeoLite
Descargar la última versión de la base de datos con los países de GeoLite.
Tarda un poco porque son casi 19MB
http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
Cuando se descargue hay que ubicarlo en la siguiente ruta [CakeDirectorio]/webroot/files/geolitecity.dat

2.- Crea el componente de cakephp
/app/controllers/components/geo_ip.php

class GeoIpComponent extends Object {
    function lookupIp($ip)
    {
         App::import('Vendor','geoipcity');

        $gi = geoip_open("files/geolitecity.dat", GEOIP_STANDARD);
        $result = geoip_record_by_addr($gi, $ip);
        geoip_close($gi);

        return get_object_vars($result);
    }

    function findIp()
    {
      if(getenv("HTTP_CLIENT_IP"))
        return getenv("HTTP_CLIENT_IP");
      elseif(getenv("HTTP_X_FORWARDED_FOR"))
        return getenv("HTTP_X_FORWARDED_FOR");
      else
        return getenv("REMOTE_ADDR");
    }
}

3.- Descargar los archivos de la API
Descargar la API que controla la base de datos con las ciudades y países que has descargado en el punto 1.
Esta API controla las consultas y accesos a la base de datos de GeoIP. Si quieres informarte mas sobre los métodos y otras funciones puedes verlo aquí: http://www.maxmind.com/app/php
Descarga de la siguiente url: http://geolite.maxmind.com/download/geoip/api/php/ los siguientes archivos geoipregionvars.php, geoipcity.php, geoip.php y guárdalos en el siguiente path:

[CakeDirectorio]/app/vendors/geoipregionvars.php
[CakeDirectorio]/app/vendors/geoipcity.php
[CakeDirectorio]/app/vendors/geoip.php

4.- Implementar el Geo Posicionamiento en un controlador
/app/controllers/geo_ip_controller.php

class GeoIpController extends AppController {
    var $name = 'GeoIpSample';
    var $components = Array('GeoIp');

    function index() {
        $ip = $this->GeoIp->findIp();
        $ip_loc = $this->GeoIp->lookupIp($ip);

        $this->set('user_ip', $ip);
        $this->set('user_location', $ip_loc);
    }
}

5.- Mostrar los resultados en una vista

<p><?=$user_location['city']?>, <?=$user_location['region']?> <?=$user_location['country_name']?> es mi lugar favorito.</p>
<p><small>Tu ip es: <?=$user_ip?></small></p>

Mostrar la longitud y latitud de los resultados obtenidos

<p>
<strong>Longitud:</strong> <?=$user_location['longitude']?><br/>
<strong>Latitud:</strong> <?=$user_location['latitude']?>
</p>

6.- Geo Posicionamiento permanente en todos los controllers

Si quieres geo posicionar algún elemento en concreto de tu web de manera permanente, y que este geo posicionamiento se lleve a cabo en todos los controllers lo tendrás que incluir en el app_controller.php

/app/controllers/app_controller.php

class AppController extends Controller
 {
     var $components = Array('GeoIp');

     function beforeFilter()
     {
        parent::beforeFilter();
        $ip = $this->GeoIp->findIp();
        $ip_loc = $this->GeoIp->lookupIp($ip);
         // obtengo el codigo de pais y lo asigno a una variable.
        $codigo_pais =  $ip_loc['country_code'];
        $this->set("codigo_pais",$codigo_pais);
     }
}

Deja un comentario

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