Usuari:PereBot/robot posa commonscat i coord a monuments

# -*- coding: utf-8 -*-
# A partir de les llistes de monuments, posa la plantilla Commonscat i
# les coordenades als articles dels monuments.

import sys
sys.path.append('C:\pywikipedia')
import wikipedia,catlib
import re

# 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

# Funció que inserta la plantilla Coord (o un altre text) en una pàgina.
# Mira de posar-la davant de l'ORDENA i si no davant les categories.
# Els arguments són el text de la pàgina i el text a afegir
# (habitualment la plantilla amb el seus paràmetres).
# Compte que es diferent de la plantilla equivalent del copiacoord en que
# aquí el paràmetre es el text i no l'objecte pàgina.
# Retorna el text amb la plantilla (o sense, si no ha trobat on posar-la).
#
def insertacoor(text,afegit):
    if re.search(u"\{\{ORDENA",text):
        text=re.sub(u"\{\{ORDENA",afegit+u"\n\n{{ORDENA",text)
        text=re.sub(u"{{[Cc]al coor.*}}\n?",u"",text)
        text=re.sub(u"\n\n+{{coord",u"\n\n{{coord",text)
        print u"Text afegit davant de l'ORDENA"
    elif re.search(u"\[\[ ?[Cc]ategoria:",text):
        text=re.sub(u"\[\[ ?[Cc]ategoria:",afegit+u"\n\n[[Categoria:",text,count=1)
        text=re.sub(u"{{[Cc]al coor.*}}\n?",u"",text)
        text=re.sub(u"\n\n+{{coord",u"\n\n{{coord",text)
        print u"Text afegit davant de les categories"
    else:
        print u"No he trobat on afegir el text a [["+page.title()+u"]]"
    return text

# Funció que inserta la plantilla Commonscat (o un altre text) en una pàgina.
# Mira de posar-la al principi de la secció d'enllaços externs i sinó a les referències.
# Els arguments són el text de la pàgina i el text a afegir
# (habitualment la plantilla amb el seus paràmetres).
# Compte que es diferent de la plantilla equivalent del ccat en que
# aquí el paràmetre es el text i no l'objecte pàgina.
# Retorna el text amb la plantilla (o sense, si no ha trobat on posar-la).
#
def insertaccat(text,afegit):
    print u"Hi afegiré",afegit
    if re.search(u"== ?Enllaços [Ee]xterns ?==",text):
        text=re.sub(u"(== ?Enllaços [Ee]xterns ?==)",u"== Enllaços externs ==\n"+afegit,text)
        print u"Text afegit a la secció Enllaços externs"
    elif re.search(u"== ?Enllaços ?==",text):
        text=re.sub(u"(== ?Enllaços ?==)",u"== Enllaços externs ==\n"+afegit,text)
        print u"Text afegit a la secció Enllaços (externs)"
    elif re.search(u"== ?Bibliograf[ií]a ?==",text):
        text=re.sub(u"== ?Bibliograf[ií]a ?==",u"== Bibliografia ==\n"+afegit,text)
        print u"Text afegit a la secció Bibliograf[ií]a"
    elif re.search(u"== ?Vegeu també ?==",text):
        text=re.sub(u"== ?Vegeu també ?==",u"== Vegeu també ==\n"+afegit,text)
        print u"Text afegit a la secció Vegeu també"
    elif re.search(u"== ?Refer[eè]ncies ?==",text):
        text=re.sub(u"== ?Refer[eè]ncies ?==",u"== Referències ==\n"+afegit,text)
        print u"Text afegit a la secció Referències"
    elif re.search(u"\{\{[Ee]sborrany",text):
        text=re.sub(u"\{\{[Ee]sborrany",afegit+u"\n{{esborrany",text)
        print u"Text afegit davant de la plantilla esborrany"
    elif re.search(u"\{\{ORDENA",text):
        text=re.sub(u"\{\{ORDENA",afegit+u"\n\n{{ORDENA",text)
        print u"Text afegit davant de l'ORDENA"
    elif re.search(u"\[\[ ?[Cc]ategoria:",text):
        text=re.sub(u"\[\[ ?[Cc]ategoria:",afegit+u"\n\n[[Categoria:",text,count=1)
        print u"Text afegit davant de les categories"
    else:
        print u"No he trobat on afegir el text a [["+page.title()+u"]]"
    return text

# Posa les plantilles commonscat i coordenades a un article
# Els arguments són l'objecte article i el text de les plantilles
# Accepta una cadena buida en comptes de les plantilles
# que no calgui posar
def posaplant(article,plantccat,plantcoor):
    if article.isRedirectPage():
        article=article.getRedirectTarget()
    if article.exists():
#                        print u"ARTICLE "+nom+u" EXISTEIX"
        plantarticle=article.templates()
        text0=u""
        text1=u""
        text2=u""
#                        print plantarticle
        if u'Commonscat' in plantarticle or u'Projectes germans' in plantarticle or u'Commons' in plantarticle or u'Commonscat-inline' in plantarticle or u'Commons cat' in plantarticle:
            print article, u"ja té la plantilla Commonscat"
        elif plantccat==u"":
            print u"No tinc Commonscat per posar a",article
        else:
            text0=article.get()
            text1=insertaccat(text0,plantccat)
        if u'Coord' in plantarticle:
            print article, u"ja té la plantilla Coord"
        elif plantcoor==u"":
            print u"No tinc coordenades per posar a",article
        else:
            if u"//toolserver.org/~geohack/geohack.php" in article.get(expandtemplates=True):
                print article, u"ja té coordenades però sense la plantilla coord"
            else:
                if text1==u"":
                    text0=article.get()
                    text1=text0
                text2=insertacoor(text1,plantcoor)
        if text2 != u"":
            textfinal=text2
            print u"Posarem coordenades i potser ccat a", article
        elif text1 != u"":
            textfinal=text1
            print u"Posarem ccat però no coordenades a", article
        else:
            textfinal=text0
        if textfinal !=text0:
            article.put(textfinal, u"Bot posa coordenades i/o Commonscat a partir les llistes de monuments")
    return


# Ha de buscar i posar el paràmetre Commonscat i les coordenades
# L'argument és la pàgina d'una llista de monuments
# Basada en la funció creallista del preparacats16za
def cercacc(pag):
    origen=pag.title()  # POTSER NO CAL
    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' 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=""
            idurl=""
            imatge=""
            commonscat=""
            enllac=""
            txtccat=u""
            txtcoord=u""
            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):           # POTSER NO CAL
                    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
            if commonscat !="":
                txtccat=u"{{commonscat|"+commonscat+u"}}"
            if lat !="" and lon !="":
                txtcoord=u"{{coord|"+lat+"|"+lon+"|type:landmark_source:cawiki|display=title}}"
            if enllac !="" and (txtccat!=u"" or txtcoord!=u""):
                article=wikipedia.Page(site,enllac)
                if article.exists():
                    posaplant(article,txtccat,txtcoord)
                else:
                    print article, u"no existeix"
    return informe


# Aquí comença el programa
lloc=u"Llistes de monuments de les Comarques Gironines"
site=wikipedia.getSite('ca')
l=catlib.Category(site,lloc).articlesList(recurse=True) #En condicions normals, posar recurse=True
#print l
informe=u""
for pag in l:
    titol=pag.title()
    print titol
    pag=wikipedia.Page(site, titol)
    informe=informe+cercacc(pag)
print u"RESUM:"
print informe
registre=wikipedia.Page(site,"usuari:PereBot/commonscat")
#registre.put(registre.get()+u"\n=="+lloc+u"==\n"+lloc+"\n\n"+informe+u"--~~~~",u"Resum edicions a partir de "+lloc)
wikipedia.stopme()