[eside-ghost] Localizadoresde IP
altern
altern2 en gmail.com
Lun Jun 23 13:13:57 CEST 2008
Iker Sagasti Markina(e)k dio:
> Aupa Enrike,
>
> altern escribió:
>> que hay de usar alguna web donde te den los datos? por ejemplo
>> http://www.whatismyip.org/
>
> Puedes utilizar los webservices de maxmind
>
> http://www.maxmind.com/app/web_services
>
> Son solo 20$ 50,000 queries
>
> Sino también lo puedes hacer a través de JS
>
> http://www.maxmind.com/app/javascript_city
>
> Saludos y ya nos contarás
bueno pues al final como no encontre una forma sencilla de ejecutar el
js desde python. Dandole vueltas a como acceder a los datos via http,
mirando en el codigo de la pagina encontre que mirando este link que me
devuelve los datos en formato texto solo entrando en la direccion.
http://j.maxmind.com/app/geoip_city
asi que he hecho un script que saca los datos de la string que me llega.
Lo pego abajo, es la funcion geoInfo(), tb van varios scripts
relacionados con el thread este: externalIP() y localIP().
En geoInfo() estaria mas chulo usar una expresion regular para sacar las
palabras entre comillas como 'Bilbao' que vienen en la string, el
formato que llega es tipo "una string larga con 'palabras' en comillas
dentro", hay que sacar las 'palabras' en comillas simples. Pero no
controlo de expresiones regulares y asi va bien de momen como lo he hecho.
Por otro lado no se si es un poco abuso usar este metodo para sacar los
datos de http://j.maxmind.com/app/geoip_city. que os parece?
Tb he hecho un par de scripts mas para conseguir saber la IP local la
externa, esta ultima la leo directamente de http://www.whatismyip.org/
pero aqui no creo que haya problema pq el servicio es ese justamente,
entras via http y te dan los datos directamente, no es como la otra que
se supone que hay que hacerlo via js.
enrike
##############
import urllib2
URL = 'http://www.whatismyip.org/'
URL2 = 'http://j.maxmind.com/app/geoip_city'
IP = None # to avoid requesting external IP too many times to server.
def _getURL( url ) :
try :
opener = urllib2.build_opener()
opener.addheaders = [ ( 'User-agent', 'Mozilla/5.0' ) ]
return opener.open( url )
except :
print '--> error opening URL'
return
def externalIP() :
global IP
if not IP or IP == '' :
f = _getURL( URL )
ip = f.read()
if 'Error' in ip :
print ip ## print error
return None
else :
IP = ip
return IP
def localIP() :
from socket import socket, SOCK_DGRAM, AF_INET
s = socket( AF_INET, SOCK_DGRAM )
s.connect( ('google.com', 0) )
return s.getsockname()[0]
def geoInfo() :
f = _getURL( URL2 )
data = f.read()
sp = data.split( "'" ) # split depending on single '' quotations
return {
'code' : sp[1],
'country' : sp[3],
'city' : sp[5],
'region' : int( sp[7] ),
'latitude' : float( sp[9] ),
'longitude' : float( sp[11] ),
}
if __name__ == '__main__' :
print 'external IP : ', externalIP()
print 'local IP : ', localIP()
print 'Geoinfo : ', geoInfo()
Más información sobre la lista de distribución eside-ghost