def tratar_gob_es(total, visto, id, raiz, padre): if id in visto: org = visto[id] if padre: org.idPadres.add(padre) return print("%3d%% completado: %6d" % (len(visto.keys()) * 100 / total, id), end="\r") fn = "fuentes/administracion.gob.es/id_%06d.html" % id if not os.path.isfile(fn): return soup = soup_from_file(fn) for n in soup.select(".hideAccessible"): n.extract() codigo = None hijos = [] deDireccion = None latlon = None for div in soup.select("section div"): for br in div.findAll("br"): br.replaceWith(" ") txt = div.get_text() txt = re_bk.sub(" ", txt) txt = txt.strip() if ":" not in txt: continue key, value = [i.strip() for i in txt.split(":", 1)] if key == "Código de unidad orgánica": codigo = value elif key == "Estructura orgánica": hijos = set([ int(a.attrs["href"].split("&")[0].split("=")[1]) for a in div.select("a[href]") if "idUnidOrganica=" in a.attrs["href"] ]) elif key == "Dirección": deDireccion = value if not codigo: return deOrganismo = re_bk.sub( " ", soup.select("h1.ppg-heading")[0].get_text()).strip() img = soup.find("img", attrs={"src": re_map}) if img: latlon = re_map.search(img.attrs["src"]).group(1) org = Organismo(codigo, deOrganismo, deDireccion, latlon=latlon, idRaiz=raiz, idUnidOrganica=id) visto[id] = org for h in hijos: tratar_gob_es(total, visto, h, raiz, codigo)
#!/usr/bin/env python3 import simplekml import utm from api import Descripciones, Organismo, Puesto, dict_from_txt puestos = [ p for p in Puesto.load() if p.idCentroDirectivo != 1301 and p.idProvision not in ( "L", ) and p.isTAI() ] descripciones = Descripciones.load() organismos = Organismo.load() rcp_organi = {} for o in organismos: for c in o.codigos: if isinstance(c, int): rcp_organi[c] = o kml = simplekml.Kml() kml.document.name = "TAI" style_normal = simplekml.Style() style_normal.iconstyle.color = simplekml.Color.blue style_normal.iconstyle.icon.href = 'http://maps.google.com/mapfiles/ms/micons/blue.png' kml.document.style = style_normal style_con_vacantes = simplekml.Style()
organismos = {} for xls in xlss: count = count + 1 print("%3d%% completado: %-30s" % (count * 100 / total, os.path.basename(xls)), end="\r") wb = xlrd.open_workbook(xls) sh = wb.sheet_by_index(0) for rx in range(sh.nrows): row = [parse(c) for c in sh.row(rx)] if len(row) > 1 and isinstance(row[0], int): p = Puesto(*row) todos.append(p) isCsic = p.idMinisterio == 47811 if p.idMinisterio and p.idMinisterio not in organismos: organismos[p.idMinisterio] = Organismo( p.idMinisterio, p.deMinisterio, isCsic=isCsic) if p.idCentroDirectivo and p.idCentroDirectivo not in organismos: idPadres = set({p.idMinisterio, }) organismos[p.idCentroDirectivo] = Organismo( p.idCentroDirectivo, p.deCentroDirectivo, idPadres=idPadres, isCsic=isCsic) if p.idUnidad and p.idUnidad not in organismos: idPadres = set({p.idCentroDirectivo or p.idMinisterio, }) organismos[p.idUnidad] = Organismo( p.idUnidad, p.deUnidad, idPadres=idPadres, isCsic=isCsic) print("100%% completado") Organismo.save(list(organismos.values()), name="organismos_rpt") for p in todos: data = p.__dict__ keys = [k for k in data.keys() if k.startswith("id")
data_excel={} for rx in range(sh.nrows): row = [parse(c) for c in sh.row(rx)] info, index = row[2], row[4] if index is None: index = "¿?¿?¿?" if info is None: info = "¿?¿?¿?" print (str(index) + " ---- " +info) ''' idUnidOrganica = set( [int(i[33:-5]) for i in glob("fuentes/administracion.gob.es/id_*.html")]) organismos = {} for o in Organismo.load(): if o.idUnidOrganica not in idUnidOrganica: o.idUnidOrganica = None for c in o.codigos: organismos[c] = o cod_dir_latlon = get_cod_dir_latlon() arreglos = yaml_from_file("arreglos/rpt_dir3.yml") notas = dict_from_txt("arreglos/notas.txt") todos_puestos = {p.idPuesto: p for p in Puesto.load(name="destinos_tai")} vacantes_tai = [p for p in Puesto.load() if p.isTAI() and p.estado == "V"] class Org: def __init__(self, codigo, descripcion):