# -*- coding: utf-8 -*-
"""
Este script inserta un infobox a los municipios de Cantabria que todavía no tienen uno, basándose en un fichero de datos csv.
Con Prueba = True prepara una lista con enlaces a todas las localidades.
Requiere pywikipedia para su ejecución.
"""
#import sys
#sys.path.insert(0, '../') #Esta linea es necesaria solo si este script se encuentra en una carpeta dentro de la de pywikipedia.
import wikipedia
class Localidad(object):
def __init__(self, text):
trozos = text.replace('"','').split(";")
self.INE = trozos[0]
self.Nombre = trozos[1]
self.Municipio = trozos[2]
self.DistanciaCapitalProvincia = trozos[3]
self.DistanciaCapitalMunicipio = trozos[4]
self.Altitud = trozos[5]
self.Poblacion2006 = trozos[6]
self.Latitud = trozos[7]
self.Longitud = trozos[8]
self.CodigoPostal = trozos[9]
self.Patron = trozos[10]
self.CapitalMunicipio = trozos[11]
self.CapitalMunicipioWikipedia = trozos[12]
self.ArticuloWikipedia = trozos[13]
#print trozos
def gradosDecimalesToCoordenadas(self,valor):
print valor
valor=str(valor).replace(",",".")
vabs=abs(float(valor))
grados=int(vabs)
minutos=int((vabs-grados)*60)
segundos=int(round((vabs-grados-(minutos/60.0))*3600,0))
return grados,minutos,segundos
def get_infobox(self):
EsMunicipio=False
# if self.Nombre == self.Municipio:
if self.Nombre == self.CapitalMunicipio:
EsMunicipio=True
ib = u"{{Infobox ciudad España\n"
ib += u"| nombre = %s\n" % self.Nombre
if EsMunicipio:
ib += u"| bandera =\n"
ib += u"| escudo =\n"
else:
ib += u"| bandera = no\n"
ib += u"| escudo = no\n"
ib += u"| imagen =\n"
ib += u"| cod_provincia = 39\n"
ib += u"| región =\n"
if not EsMunicipio:
ib += u"| municipio = [[%s]]\n" % self.Municipio
ib += u"| cp = %s\n" % self.CodigoPostal
if self.Latitud != "" and self.Longitud != "":
gradosLat,minutosLat,segundosLat = self.gradosDecimalesToCoordenadas(self.Latitud)
gradosLon,minutosLon,segundosLon = self.gradosDecimalesToCoordenadas(self.Longitud)
ib += u"| coor = {{coor dms|%i|%i|%i|N|%i|%i|%i|O}}\n" % (gradosLat,minutosLat,segundosLat,gradosLon,minutosLon,segundosLon)
else:
ib += u"| coor = \n"
ib += u"| superficie = \n"
if self.Altitud != "":
ib += u"| altitud = %s\n" % self.Altitud
else:
ib += u"| altitud =\n"
if self.Nombre=="Santander":
ib += u"| distancia = XX\n"
ib += u"| referencia = [[Madrid]]\n"
elif self.DistanciaCapitalProvincia != "":
ib += u"| distancia = %s\n" % self.DistanciaCapitalProvincia
ib += u"| referencia = [[Santander (Cantabria)|Santander]]\n"
if not EsMunicipio and \
self.DistanciaCapitalMunicipio != "":
ib += u"| distancia2 = %s\n" % self.DistanciaCapitalMunicipio
ib += u"| referencia2 = [[%s|%s]]\n" % (self.CapitalMunicipioWikipedia,self.CapitalMunicipio)
if self.Poblacion2006 != "":
ib += u"| población = %s\n" % self.Poblacion2006
ib += u"| ine_año = 2006\n"
else:
ib += u"| población =\n"
ib += u"| ine_año =\n"
ib += u"| gentilicio =\n"
if EsMunicipio:
ib += u"| alcalde =\n"
ib += u"| alcalde_año =\n"
ib += u"| presupuesto =\n"
ib += u"| presupuesto_año =\n"
ib += u"| patrón =\n"
ib += u"| patrona =\n"
ib += u"| web =\n"
ib += u"}}"
return ib
def obtenerPagina(site,nombreArticulo):
pagina = wikipedia.Page(site, nombreArticulo)
try:
pagina.get()
return pagina
except wikipedia.NoPage:
return None
except wikipedia.IsRedirectPage, err:
target = err[0]
return obtenerPagina(site, target)
else:
return None
if __name__ == '__main__':
localidades='{| {{tablabonita}} class="sortable wikitable"\n! Enlace Localidad\n! Enlace Localidad (Cantabria)\n! TieneInfobox\n'
tieneIB=""
pruebas=False
try:
site = wikipedia.getSite()
print u"Obteniendo datos csv . . ."
csv = wikipedia.Page(site, u"Wikiproyecto:Cantabria/Localidades")
texto = csv.get()
texto = texto[texto.find("<pre>")+6:texto.find("</pre>")] #Me quedo con el texto entre pre's
print u"Comenzando el proceso de inclusión de infobox"
primera = True
for linea in texto.splitlines():
if primera:
primera = False #La primera linea es de títulos
elif linea.lstrip()!="":
tieneIB=""
try:
l = Localidad(linea)
except:
print u"Error gestionando línea: ",linea
continue
print u"Obteniendo artículo de localidad: %s . . ." % l.Nombre
pagina = obtenerPagina(site, u"%s" % l.ArticuloWikipedia)
if pagina!=None:
codigo = pagina.get()
if not pagina.canBeEdited():
wikipedia.output(u"Tú no puedes editar la página %s" % page.aslink())
continue
if "Infobox" not in codigo: #Si contiene infobox no hago nada
if not pruebas:
print u"Incluyendo infobox"
print l.get_infobox()
pagina.put(u"%s\n%s" % (l.get_infobox(),codigo), u"Bot incluyendo infobox")
else:
tieneIB="{{listo}}"
print u"Ya contiene infobox"
else:
print u"No se ha encontrado su página"
localidades += u"|-\n| [[%s]]\n| [[%s]]\n| %s\n" % (l.Nombre,l.ArticuloWikipedia,tieneIB)
if pruebas:
localidades += u"|}"
lista = wikipedia.Page(site, u"Wikiproyecto:Cantabria/LocalidadesInfobox")
lista.put(localidades, u"Bot actualizando lista de localidades con infobox")
finally:
wikipedia.stopme()