Toma como entrada un arivo llamado citys.txt con el formato "codigo postal, nombre ciudad".
Y devuelve un archivo con las coordenadas, y la provincia entre otras cosas.
import urllib
import urllib2
import string
from xml.dom import minidom
import unicodedata
def remove_accents(str):
nkfd_form = unicodedata.normalize('NFKD', unicode(str))
only_ascii = nkfd_form.encode('ASCII', 'ignore')
return only_ascii
def get_text(arbol):
return arbol.firstChild.data
def es_el_que_busco(arbol):
adds = arbol.getElementsByTagName('type')
for a in adds:
if get_text(a) == "administrative_area_level_1":
return 1
return 0
def provincia(arbol):
adds = arbol.getElementsByTagName('address_component')
for a in adds:
if es_el_que_busco(a) == 1:
return get_text(a.getElementsByTagName('long_name')[0])
return ""
def get_coordenadas(arbol):
location = arbol.getElementsByTagName('location')[0]
lat = get_text(location.getElementsByTagName('lat')[0])
lng = get_text(location.getElementsByTagName('lng')[0])
return (lat,lng)
f = open("citys.txt", "r")
ciudades = []
while True:
linea = f.readline()
if not linea: break
ciudades.append( (linea[:4],linea[6:len(linea) - 2 ] ) )
f = open('coordenadas.txt', 'a')
o = urllib2.build_opener()
for ciudad in ciudades:
ss = 'http://maps.googleapis.com/maps/api/geocode/xml?address=' + ciudad[1].replace(" ","%20") + '%20ARGENTINA&sensor=false'
res = o.open(ss)
pagina = res.read()
arbol = minidom.parseString(pagina)
if arbol.getElementsByTagName("status")[0].firstChild.data == "OK":
c = get_coordenadas(arbol)
p = provincia(arbol)
f.write(ciudad[0] + "," + ciudad[1] + "," + remove_accents(p) + "," + str(c[0])+ "," + str(c[1]) + "\n" )
print (ciudad[0] + "," + ciudad[1] + "," + remove_accents(p) + "," + str(c[0])+ "," + str(c[1]) )
else:
print (ciudad[1] + " No encontrado")
f.close()
La idea del codigo es que aprendan como se maneja el minidom Javascript de python y su aplicacion en google. Supongo que no van a tener problema para modificar la entrada o la salida del programa.
No hay comentarios:
Publicar un comentario