F1 Help! La solución que buscabas

Desarrollo, programación, tips, consejos y soluciones para los usarios de PC

jueves, 7 de julio de 2011

Codigos Postales - Argentina

La idea prncipal de este tutorial es enseñarle como aprovechar el sistema de Codigo Postales del Correo Argentino. Veran que se puede obtener un codigo postal de una ciudad simplemente haciendo un Post a una pagina determinada.Es realmente facil.

Cada provincia tiene un codigo. Ese codigo se usa para formar la pagina a la cual se le va hacer la peticion. Como datos hay que pasarle la variable localidad con el nombre entero o uno parte de la ciudad que estemos buscando. Como resultaro obtendremos codigo html, que representa una lista HTML con los resultado.

Aca les paso el codigo, esta hecho en python pero es muy facil de interpretar y llevar a otro lenguaje.



import urllib
import urllib2
import string       
from xml.dom import minidom
import unicodedata 
 
allprov = ["Buenos Aires","Catamarca","Chaco","Chubut","Cordoba","Corrientes","Entre Rios","Formosa","Jujuy","La Pampa","La Rioja","Mendoza","Misiones","Neuquen","Rio Negro","Salta","San Juan","San Luis","Santa Cruz","Santa Fe","Santiago del Estero","Tierra del Fuego","Tucuman"] 

def remove_accents(str): 
    nkfd_form = unicodedata.normalize('NFKD', unicode(str)) 
    only_ascii = nkfd_form.encode('ASCII', 'ignore') 
    return only_ascii  
 
def codprov(prov):
 provincia = prov.upper()
 if provincia == "CAPITAL FEDERAL":
  return "C"
 if provincia == "Ciudad Autonoma de Buenos Aires".upper():
  return "C"
 if provincia == "Buenos Aires".upper():
  return "B" 
 if provincia == "Catamarca".upper():
  return "K"
 if provincia == "Chaco".upper():
  return "H" 
 if provincia == "Chubut".upper():
  return "U"
 if provincia == "Cordoba".upper():
  return "X" 
 if provincia == "Corrientes".upper():
  return "W"
 if provincia == "Entre Rios".upper():  
  return "E"
 if provincia == "Formosa".upper():
  return "P"
 if provincia == "Jujuy".upper():
  return "Y" 
 if provincia == "La Pampa".upper():
  return "L"
 if provincia == "La Rioja".upper():
  return "F" 
 if provincia == "Mendoza".upper():
  return "M"
 if provincia == "Misiones".upper():
  return "N" 
 if provincia == "Neuquen".upper():
  return "O"
 if provincia == "Rio Negro".upper():
  return "R"  
 if provincia == "Salta".upper():
  return "A"
 if provincia == "San Juan".upper():
  return "J"  
 if provincia == "San Luis".upper(): 
  return "D"
 if provincia == "Santa Cruz".upper():
  return "Z" 
 if provincia == "Santa Fe".upper():
  return "S"
 if provincia == "Santiago del Estero".upper():
  return "G" 
 if provincia == "Tierra del Fuego".upper():
  return "V"
 if provincia == "Tucuman".upper():
  return "T" 
 return "NONE"
 
def get_text(arbol):
 return arbol.firstChild.data
 
def buscar_codigo(city,provincia):
 cod = codprov(provincia)
 datos = urllib.urlencode({'localidad' : city})
 url = 'http://www.correoargentino.com.ar/consultas/cpa/obtener_localidades/' + cod
 o = urllib2.build_opener()
 res = o.open(url, datos)
 pagina = res.read().replace("&","")
 if pagina == "Error":
  return []
 arbol = minidom.parseString(pagina)
 adds = arbol.getElementsByTagName('option')
 l = []
 for a in adds:
  s = get_text(a)
  ss = s.split("(") #[s.find("(") + 1 : ]
  l.append( ( remove_accents(ss[0]) ,int(ss[1][:len(ss[1]) - 1])))
 return l

def read_pot_file(filename):
 f = open(filename, "r")
 ciudades = []
 while True:
  linea = f.readline()
  if not linea: break
  ciudades.append(linea[:len(linea) - 2].split(','))
 f.close()
 return ciudades

def generar_todos(filename):
 allf = open(filename,'a')
 for p in allprov:
  ls = buscar_codigo("",p)
  for l in ls:
   allf.write(l[0] + " , " + codprov(p) + ' , ' + str(l[1]) +  "\n")
   print (l[0] + " , " + codprov(p) + ' , ' + str(l[1]) )
 allf.close()
 
if __name__ == "__main__":
 print "1. Buscar todos"
 print "2. Buscar uno simple"
 a = raw_input()
 if a == "1":
  print "Ingrese nombre de archivo de salida: "
  f = raw_input()
  generar_todos(f)
 if a == "2":
  print "Ingrese nombre de la ciudad: "
  c = raw_input()
  print "Ingrese provincia: "
  p = raw_input()
  ll = buscar_codigo(c,p)
  for l in ll:
   print (l[0] + "  " + l[1])
  

No hay comentarios: