Obtener Lista de CIUDADES usando GeoIP ?

Iniciado por Diabliyo, 28 Octubre 2010, 01:13 AM

0 Miembros y 3 Visitantes están viendo este tema.

Diabliyo

Buenas...

Tengo un sistema donde necesito crearme una base de datos de los paises, estados y ciudades, utilizando GeoIP es facil determinar pais, estado y ciudad basandome en la IP de una persona, el problema es que, como les mencione ya, necesito una base de datos ya armada, asi que me hice a la tarea de investigar un poco como lo logra GeoIP.

En realidad fue bastante sencillo saber como logra GeoIP obtener los nombres de estados y paises, vaya, no me refiero usar la IP como medio de rastreo, sino que GeoIP incorpora unas variables definidas en sus archivos PHP donde esta TOOOODA la lista de paises (con codigo de pais) y estados, asi que, solamente copie estas variables, y arme un script en PHP que me genera la sintaxis MySQL.

Aqui el codigo: http://pastebin.com/KQCa2HB7.

Basicamente con ese script podran obtener los paises, codigo pais y estados en forma de Lista o bien con sintaxis MySQL preparado para solo: copiar y pegar, e inmediatamente crean su Tabla personal.

MI PROBLEMA
Es que, no encuentro la manera de como obtener la lista de Todas las Ciudades de cada Pais, no puedo encontrar como las obtiene o como acceder a esa informacion, ya que al parecer (segun a como he leido el codigo), las ciudades se encuentran en el archivo: GeoIPLiteCity.dat.

En donde el archivo GeoIPLiteCity.dat esta en binario, de modo que lo abri en modo binario usando PHP, pero no logro dar con la informacion de las ciudades, ya que pues esta pesadito (26.5 MB) y no entiendo la forma de irlo recorriendo.

Ya ando un poco estresado de todo el dia y se me ha secado el cerebro jjejjejeej, alguna ayuda ?

Saludos !

~ Yoya ~

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Diabliyo

#2
Cita de: ~ Yoya ~ en 28 Octubre 2010, 01:58 AM
Y porque no usas la funciones PHP¿?

http://www.php.net/manual/es/ref.geoip.php

Lo que sucede es que esas funciones solo son para cuando consultas datos apartir de una IP existente o que esta en el sistema (en la web), lo que yo quiero hacer es formar mi propia base de datos de todas las ciudades de cada pais, pero extrayendolo del GeoIP.

En el primer post les deje mi codigo de como obtener todos los Nombre y Codigos_de_Nombre, de los Paises y Estados (todos) que estan en la base de datos de GeoIP, de esta forma pueden armar su propia base de datos (para su sitio web) y que esta tenga una relacion 100% igual a la de GeoIP, de esta forma por ejemplo podremos crear una relacion entre los usuarios que nos visitan y los spots/anuncios que se le mostraran a dicho usuario, ya que tanto en nuestra base de datos con en la de GeoIP, esta el mismo nombre de ciudad, estado y pais.

La funcion que me mencionas (el conjunto) solo sirven para consultar datos (pais, ciudad o estado) apartir de una IP.

En mi primer post mencione que intente cargar el archivo GeoIPLiteCity.dat pero al ser demasiado grande resulta dificil leer linea por linea, vaya menciono linea por line porque no tengo idea de como esta constituido, si tiene funciones o si tiene texto acomodado en forma especial.

Posteriormente leyendo el codigo de las funciones de geoip_xx_(); veo que estas hacen apertura del archivo pero en forma compartida (MEMORY_SHARED), pero en este caso leen ciertas partes del archivo (asumiendo que parte leer ya), pero no me queda del todo claro :(

Alguien sabe como obtener los nombre de las ciudades/regiones que estan en GeoIP ?

engel lex

tienes la opción de lanzarte algo tipo scan
for($i=0;$i<256;i++){
    for($i=0;$i<256;i++){
          $ip="$i.$j.0.0";
          .
          .
          .
    }
}

creo el sistema de ip está contruido como casi todo en base a que los 2 primeros son el identificador... y ese codigo no es tan largo solo son 65535 ciclos... por pesado que sea el proceso (si es en una pc local) dudo que pase de los 10min
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Diabliyo

#4
El script es bueno, pero tardaria un buen :S...

De todos modos graciasm, pero encontre una solucion mas rapida y simple...

Leyendo por el sitio de GeoIP, encontre que GeoIP para los que deseen saber la BAse de datos de Ciudades de GeoIP, existe un archivo grande CVS donde esta la lista, la pueden bajar de aqui:

http://www.maxmind.com/app/faq#what_cities

El archivo lo leen, arman un array con explode() y listo, ya podemos armar nuestra base de datos.

Saludos !

Novlucker

Si lo que necesitas es crearte una lista por País/Ciudad nada más, no hay problema porque son unos 250.000 registros, pero si por el contrario quieres relacionar IP/Ciudad, la cosa ya es un poco "peor", son unos 2.5 millones :-X

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Diabliyo

Cita de: Novlucker en 28 Diciembre 2010, 19:52 PM
Si lo que necesitas es crearte una lista por País/Ciudad nada más, no hay problema porque son unos 250.000 registros, pero si por el contrario quieres relacionar IP/Ciudad, la cosa ya es un poco "peor", son unos 2.5 millones :-X

Saludos


No, las IPs no me importan, lo que buscaba eran los nombres de las ciudades de cada estado/pais !... Pero ya quedo solucionado, publique arriba como.

Graphixx

#7
la verdad son alrededor de 4 millones aqui la BD completa, pesa 300mb y es SQL.
"Super contador de Visitas en PHP"=300MB SQL+4 millones de registros+Scripts

PD: Oye compa Diabliyo , no te importaria compartir esa bd con nosotros, supongo que la organizaste para hacer 3 select dependientes, donde el usuario escoje un PAIS, de ese Pais le salen los departamentos, y de ese departamento, sus ciudades, verdad ?
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

Diabliyo

Cita de: Graphixx en  1 Enero 2011, 03:49 AM
la verdad son alrededor de 4 millones aqui la BD completa, pesa 300mb y es SQL.
"Super contador de Visitas en PHP"=300MB SQL+4 millones de registros+Scripts

PD: Oye compa Diabliyo , no te importaria compartir esa bd con nosotros, supongo que la organizaste para hacer 3 select dependientes, donde el usuario escoje un PAIS, de ese Pais le salen los departamentos, y de ese departamento, sus ciudades, verdad ?

Que tal, mejor en vez de compartirte la BDD, te paso el code en PHP, total la BDD MySQL la armara la fuente PHP apartir de los archivos que tengas de GeoIP y tardara unos cuantos minutos en generarte todo el show.

Respecto a como los utilizo, pues le atinaste :D, utilizo SELECTs, dependiendo el pais que elija, usando AJAX consulto los estados, e igual, dependiendo el estado, con AJAX pongo otro select con las ciudades.




Codigo: mundo.php [Fuente Pastebin] [Megaupload]

Los pasos son los siguientes:

Para obtener Paises y Estados
1- Bajas el software GeoIP para PHP (archivos *.inc y *.php).
2- Los colocas en un directorio, mi source los toma de: admin/geoip/.
3- Verifica la funcion que se llama todo() y veras que descomentando partes del codigo puedes ir haciendo todo, asi no alentas PHP y evitas que el hosting frene el script (por si tarda la ejecucion).

Para las Ciudades
1- Descragas e CVS este.
2- Lo renombras como ciudades.cvs.
3- Corres el script mio en PHP, pero descomentas la parte de todo() correspondiente a ciudades.
4- Tardara cuando mucho unos 5 minutos.

Listo, tienes Paises, Estados y Ciudades relacionados en la BDD.

Para los campos que utilizo, simple... lee el code, al fin ya te hice la gran parte !...

Saludos !