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 (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 !
Y porque no usas la funciones PHP¿?
http://www.php.net/manual/es/ref.geoip.php
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 ?
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 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 (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 !
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
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.
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 (http://foro.elhacker.net/php/super_contador_de_visitas_en_php300mb_sql4_millones_de_registrosscripts-t315327.0.html)
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 ?
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 (http://foro.elhacker.net/php/super_contador_de_visitas_en_php300mb_sql4_millones_de_registrosscripts-t315327.0.html)
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 (http://pastebin.com/ssLiVjdF)] [Megaupload (http://www.megaupload.com/?d=EB2V0RLM)]
Los pasos son los siguientes:
Para obtener Paises y Estados1- 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 Ciudades1- Descragas e
CVS este (http://www.maxmind.com/app/faq#what_cities).
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 !