Usuari:PereBot/robot descripció monuments
Aparença
# -*- coding: utf-8 -*-
# A partir d'una llista de monuments o d'una categoria de llistes
# prepara una descripció per les imatges o les categories de les
# obres de la llista, incloent la plantilla d'art públic.
# Compte que aquest programa és reciclat a partir d'un que
# feia una tasca força diferent, i la major part del codi
# no fa res d'útil, però m'ha fet mandra esporgar el programa
# de les parts que tampoc hi fan cap nosa.
# Els missatges també poden ser sorprenentment inadequats.
import sys
sys.path.append('C:\pywikipedia')
import wikipedia,catlib
import re
# Busca el paràmetre de la plantilla Commonscat
# L'argument és la llista obtinguda amb Page.templatesWithParams()
def treuccat(tempParam):
for i in range(0, len(tempParam)):
if tempParam[i][0]==u"Commonscat":
if len(tempParam[i][1])==0:
param=""
print u"Destí tret del nom de la pàgina"
else:
param=tempParam[i][1][0]
print u"Destí tret de la plantilla"
print param
return param
# Busca el paràmetre de la plantilla Commonscat
# L'argument és el títol de la pàgina que té la plantilla
def treuccattit(titol):
pag=wikipedia.Page(site,titol)
tottemp=pag.templatesWithParams()
return treuccat(tottemp)
# Busca la categoria de Commons que correspon a una categoria de llistes
def trobaccat(lloc):
lloccat=u"Categoria:"+lloc
pag=wikipedia.Page(site,lloccat)
temp=pag.templates()
if u'Commonscat' in temp:
ccat=treuccattit(lloccat)
else: # Falta afegir-hi buscar a partir de la plantilla infocat
llistapral=re.sub(u"Llistes de",u"Llista de",lloc)
ccat=treuccattit(llistapral)
return ccat
# Fa una llista dels id de les fotos d'una categoria de Commons.
# Per cada plantilla un element (els id poden repetir-se).
# Està pensada per poder comptar les fotos de cada monument.
# El paràmetre catcom és el nom de la categoria.
def llistaids(catcom,subs=1):
fotos=catlib.Category(sitecommons,catcom).articlesList(recurse=subs)
totfotos=len(fotos)
comptador=0
llistaid=[]
for imatge in fotos:
tottemp=imatge.templatesWithParams()
comptador=comptador+1
# print tottemp
for i in range(0, len(tottemp)):
nomplant=tottemp[i][0]
if nomplant==u'BIC' or nomplant==u'Bien Catalogado' or nomplant==u'Mérimée':
try:
ident=tottemp[i][1][0]
except:
print u"Plantilla errònia:"
print imatge
print tottemp[i]
else:
print comptador,"/",totfotos,ident
llistaid.append(ident)
return llistaid
# Elimina l'enllaç d'un text. Funciona bé si hi ha un sol enllaç.
# Deixa el text que mostra l'enllaç (no on apunta)
def eliminaenllac(nom):
nom=re.sub(u"\[\[.*\|","",nom)
nom=nom.replace("[[","")
nom=nom.replace("]]","")
return nom
# Elimina els espais del principi i el final d'una cadena
def eliminaespais(text):
text=re.sub(u"^ *","",text)
text=re.sub(u" *$","",text)
return text
# Crea una llista d'esborrany per editar i pujar-la amb el bot,
# o per copiar i enganxar les descripcions de la categoria.
# El paràmetre origen és el nom d'una llista de monuments.
def creallista(origen): ##,llistafotos,minfotos
pag=wikipedia.Page(site,origen)
tottemp=pag.templatesWithParams()
informe=u"" # Descripcions de les categories a crear.
resumllista=u"" # Resum estadístic de les categories a crear per una llista.
numcats=0 # Comptador pel nombre de categories en una llista.
ccatllista=u"" # Categoria de Commons que correspon a la llista d'acord amb la plantilla Commonscat.
for i in range(0, len(tottemp)):
if tottemp[i][0]==u'Filera art públic' or tottemp[i][0]==u'Filera IPA' or tottemp[i][0]==u'Filera MH' or tottemp[i][0]==u'Filera BIC' or tottemp[i][0]==u'Filera BIC Val' or tottemp[i][0]==u'Filera BIC And' or tottemp[i][0]==u'filera BC Sard' or tottemp[i][0]==u'filera BIC-ZA':
# print tottemp[i][1]
proposta=""
nom=""
nomcoor=""
nomnet=""
lloc=""
municipi=""
lat=""
lon=""
idd=""
codi=""
idurl=""
imatge=""
autor=""
data=""
descripcio=""
material=""
commonscat=""
enllac=""
for j in range(0,len(tottemp[i][1])): # llegeix la taula i n'extreu els camps
camp=tottemp[i][1][j].replace(u"\n","")
# print camp
if re.search(u"nom *?=",camp):
nom=re.sub(u" *?nom *?= *?","",camp)
nom=re.sub(u"<ref name.*>.*<.*>","",nom)
nom=re.sub(u"<.*>","",nom)
nom=eliminaespais(nom)
print nom
if re.search(u"\[\[.*\]\]",nom):
enllac=re.sub(u"^.*?\[\[","",nom)
enllac=re.sub(u"\]\].*?$","",enllac)
enllac=re.sub(u"\|.*?$","",enllac)
nomnet=eliminaenllac(nom)
# print enllac
else:
nomnet=nom
if re.search(u"nomcoor *?=",camp):
nomcoor=re.sub(u"^ *?nomcoor *?= *?","",camp)
nomcoor=eliminaespais(nomcoor)
# print nomcoor
if re.search(u"municipi *?=",camp):
municipi=re.sub(u"^ *?municipi *?= *?","",camp)
municipi=eliminaenllac(municipi)
municipi=municipi.strip()
# print municipi
if re.search(u"lloc *?=",camp):
lloc=re.sub(u"^ *?lloc *?= *?","",camp)
lloc=eliminaenllac(lloc)
lloc=lloc.strip()
# print lloc
if re.search(u"lat *?=",camp):
lat=re.sub(u"^ *?lat *?= *?","",camp)
lat=lat.replace(" ","")
# print lat
if re.search(u"lon *?=",camp):
lon=re.sub(u"^ *?lon *?= *?","",camp)
lon=lon.replace(" ","")
# print lon
if re.search(u"idurl *?=",camp):
idurl=re.sub(u"^ *?idurl *?= *?","",camp)
idurl=idurl.replace(" ","")
# print idurl
if re.search(u"id *?=",camp):
idd=re.sub(u"^ *?id *?= *?","",camp)
idd=idd.replace(" ","")
# print idd
if re.search(u"descripció *?=",camp):
descripcio=re.sub(u"^ *?descripció *?= *?","",camp)
descripcio=descripcio.strip()
# print descripcio
if re.search(u"codi *?=",camp):
codi=re.sub(u"^ *?codi *?= *?","",camp)
codi=codi.replace(" ","")
# print codi
if re.search(u"data *?=",camp):
data=re.sub(u"^ *?data *?= *?","",camp)
data=data.strip()
# print data
if re.search(u"material *?=",camp):
material=re.sub(u"^ *?material *?= *?","",camp)
material=eliminaenllac(material)
material=material.strip()
# print material
if re.search(u"autor *?=",camp):
autor=re.sub(u"^ *?autor *?= *?","",camp)
autor=eliminaenllac(autor)
autor=autor.strip()
# print autor
if re.search(u"imatge *?=",camp):
imatge=re.sub(u"^ *?imatge *?= *?","",camp)
if not(re.search(u"..",imatge)):
imatge=""
# print imatge
if re.search(u"commonscat *?=",camp):
commonscat=re.sub(u"^ *?commonscat *?= *?","",camp)
if not(re.search(u"..",commonscat)):
commonscat=""
# print commonscat
## numfotos=llistafotos.count(idd)
print nomcoor ##+": "+'{:}'.format(numfotos)+" fotos"
if True: ##commonscat =="" and numfotos>=minfotos:
## print "CAL CATEGORIA"
if enllac !="":
article=wikipedia.Page(site,enllac)
if article.exists():
nom=re.sub(u"\[\[","[[:ca:",nom)
if not re.search(u"\|",nom):
nom=re.sub(u"\]\]","|]]",nom)
else:
nom=nomnet
enllac=""
propcatd="[[:commons:category:"+nomcoor+"]]"
propcat="[[:commons:category:"+nomnet+"]]"
if enllac !="":
propcate="[[:commons:category:"+enllac+"]]"
prop2cats=propcat+" o "+propcatd+" o "+propcate
else:
prop2cats=propcat+" o "+propcatd
if autor!=u"":
autor=" "+autor+"."
if descripcio!=u"":
descripcio=" "+descripcio+"."
if material!=u"":
material=" Material: "+material+"."
if data!=u"":
data=data[0].capitalize()+data[1:]
data=" "+data+"."
# print prop2cats
proposta1=u"{{ca|"+nom+". "+lloc+" ("+municipi+u")."+autor+material+descripcio+data+"}}\n"
proposta1=proposta1.replace("<br />",". ")
proposta=proposta+proposta1
idlink=idurl.replace("bcn/","")
# proposta1=u"{{Art públic Barcelona|"+codi+"|"+idlink+"}}\n" # Per llistes d'art públic
# proposta1=u"{{Bien Catalogado|"+idd+"|link=ct|idurl="+idurl+"}}\n" # Per llistes de monuments
proposta1=u"{{BIC|"+idd+"}}\n" # Per llistes de monuments
proposta=proposta+proposta1
if lat !="" and lon !="":
proposta1=u"{{Object location dec|"+lat+"|"+lon+"|region:ES-CT_type:landmark_source:cawiki}}\n"
proposta=proposta+proposta1
if ccatllista==u"":
ccatllista=treuccat(tottemp)
if commonscat==u"":
ccatposo=ccatllista
else:
ccatposo=commonscat
proposta1=u"\n[[Categoria:"+ccatposo+"]]\n"
proposta=proposta+proposta1
if enllac !="":
proposta1=u"\n[["+enllac+"]]\n"
proposta=proposta+proposta1
# print proposta
informe=informe+prop2cats+u"\n<pre>"+proposta+u"</pre>\n\n"
numcats=numcats+1
resumllista=resumllista+u" "+nom ##+": "+'{:}'.format(numfotos)+"\n"
else:
print "NO CAL CATEGORIA"
## if numfotos>=1 and imatge =="":
## avisnofoto="Hi ha "+'{:}'.format(numfotos)+" fotos per posar a "+nomnet+" ("+idd+") a la [["+origen+"]]"
## print avisnofoto
## resumllista=resumllista+u" "+avisnofoto+"\n"
# else:
# print tottemp[i][0]
#print informe
#informe=informe+u"\n\nMissatge tonto per editar alguna cosa i saber que el bot ha funcionat"
titolinf=u"usuari:PereBot/monuments/"+origen
# titolinf=u"usuari:PereBot/art/"+origen # Per art públic
paginf=wikipedia.Page(site, titolinf)
if len(informe)<2:
informe=informe+u"No hi ha categories per crear a Commons partir de la [["+origen+"]]"
print informe
if paginf.exists():
paginf.put(informe,informe)
resumllista=u"[["+origen+u"]]: No hi ha categories per crear\n\n"
else:
paginf.put(informe,u"Descripció dels elements de la [["+origen+"]]")
resumllista=u"[["+origen+u"]]: "+'{:}'.format(numcats)+u" categories per crear a [["+titolinf+"]]\n"+resumllista+u"\n"
return resumllista
# El programa comença aquí.
#lloc=u"Llistes de monuments de la Baronia de Rialb"
lloc=u"Llista de monuments d'Isona i Conca Dellà"
fotosmin=2
paginaunica=True #True si lloc és una llista de monuments, False si és una categoria de llistes
subs=1 #0 per no buscar fotos a les subcategories, 1 per buscar-n'hi
site=wikipedia.getSite('ca')
sitecommons=wikipedia.getSite('commons','commons')
resumgral=""
if paginaunica:
## ccat=treuccattit(lloc) #Normalment deixar funcionant i anul·lar línia següent
# ccat=u"Cultural heritage monuments in the Balearic Islands" #Posar aquí una categoria de Commons si es vol forçar; si no, anul·lar com a comentari
## llistafotos=llistaids(ccat,subs)
resumgral=creallista(lloc) ##,llistafotos,fotosmin
else:
## ccat=trobaccat(lloc)
## ccat=u"Cultural heritage monuments in the Balearic Islands" #Posar aquí una categoria de Commons si es vol forçar; si no, anul·lar com a comentari
## llistafotos=llistaids(ccat,subs)
l=catlib.Category(site,lloc).articlesList(recurse=1)
#print l
for pag in l:
titol=pag.title()
print titol
resumgral=resumgral+creallista(titol) ##,llistafotos,fotosmin
resumgral=u"== "+lloc+" ==\n"+resumgral+"\n"
registre=wikipedia.Page(site,"usuari:PereBot/commonscat")
##registre.put(registre.get()+u"\n"+resumgral+u"--~~~~",lloc)
wikipedia.stopme()