Usuari:PereBot/robot descripció monuments

# -*- 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()