Usuari:PereBot/robot preparacat
Aparença
# -*- coding: utf-8 -*-
# A partir d'una llista de monuments o d'una categoria de llistes
# busca els monuments que tinguin dues o més fotos a Commons i
# proposa la descripció de la categoria per crar-la.
# Identifica les fotos pel codi de monument.
# Cal que la llista o categoria de llistes tingui una categoria
# equivalent a Commons, indicada amb la plantilla Commonscat.
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àginaque 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 foto 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):
fotos=catlib.Category(sitecommons,catcom).articlesList(recurse=1)
llistaid=[]
for imatge in fotos:
tottemp=imatge.templatesWithParams()
# print tottemp
for i in range(0, len(tottemp)):
nomplant=tottemp[i][0]
if nomplant==u'BIC' or nomplant==u'Bien Catalogado':
ident=tottemp[i][1][0]
print 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 IPA':
# print tottemp[i][1]
proposta=""
nom=""
nomcoor=""
nomnet=""
lloc=""
municipi=""
lat=""
lon=""
idd=""
idurl=""
imatge=""
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=eliminaespais(municipi)
# print municipi
if re.search(u"lloc *?=",camp):
lloc=re.sub(u"^ *?lloc *?= *?","",camp)
lloc=eliminaenllac(lloc)
lloc=eliminaespais(lloc)
# 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"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 commonscat =="" and imatge !="" 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
# print prop2cats
proposta1=u"{{ca|"+nom+". "+lloc+" ("+municipi+")}}\n"
proposta=proposta+proposta1
proposta1=u"{{Bien Catalogado|"+idd+"|link=ct|idurl="+idurl+"}}\n"
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)
proposta1=u"\n[[Categoria:"+ccatllista+"]]\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"
# 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/"+origen
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"Categories per crear a Commons partir 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 del Vallès Occidental"
fotosmin=2
paginaunica=False #True si lloc és una llista de monuments, False si és una categoria de llistes
site=wikipedia.getSite('ca')
sitecommons=wikipedia.getSite('commons','commons')
resumgral=""
if paginaunica:
ccat=treuccattit(lloc)
llistafotos=llistaids(ccat)
resumgral=creallista(lloc,llistafotos,fotosmin)
else:
ccat=trobaccat(lloc)
llistafotos=llistaids(ccat)
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()