Usuari:PereBot/robot preparacat

De la Viquipèdia, l'enciclopèdia lliure
# -*- 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()