Usuari:PereBot/robot posa viquidites

# -*- coding: utf-8 -*-
# Programa per enllaçar amb Viquidites des de la Viquipèdia.
# Es mira els articles de Viquidites que tenen una plantilla
# d'article (Tema, Persona o Autor; cal dir-li quina).
# De cada article, troba l'article a la Viquipèdia i mira
# si està enllaçat a Viquidites. Si no, posa l'enllaç a
# la plantilla projectes germans, si hi és, i si no hi és
# posa la plantilla viquidites.

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

# Funció que inserta la plantilla Commonscat (o un altre text) en una pàgina.
# Mira de posar-la davant de la plantilla Viquiespècies i si no hi és va buscant
# més llocs fins que al final la posa davant de les categories.
# Els arguments són la pàgina i el text a afegir (habitualment la plantilla amb
# el seu paràmetre.
# Retorna el text amb la plantilla (o sense, si no ha trobat on posar-la).
# És una adaptació de la del programa ccat monuments (l'argument és l'objecte pàgina i no el text).
#
def insertaccat(page, afegit):
    if page.isRedirectPage():
        page = page.getRedirectTarget()
    text = page.get()
    if re.search(u"\{\{([Vv]iquiespècies|[Ww]ikispecies)", text):
        text=re.sub(u"\{\{([Vv]iquiespècies|[Ww]ikispecies)", u"%s{{Viquiespècies" % afegit, text)
        print u"Text afegit davant de la plantilla esborrany"
    if re.search(u"\{\{[Cc]ommons", text):
        text=re.sub(u"\{\{[Cc]ommons", u"%s{{Commons" % afegit, text)
        print u"Text afegit davant de la plantilla esborrany"
    elif re.search(u"== ?Enllaços externs ?==", text):  # PER FER: POSAR LA PLANTILLA ABANS DE VIQUILLIBRES O VIQUINOTÍCIES, COM A PRIMERA OPCIÓ
        text=re.sub(u"(===? ?Enllaços externs ?===?)", u"== Enllaços externs ==\n%s" % afegit, text, count=1)
        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%s" % afegit, text, count=1)
        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%s" % afegit, text, count=1)
        print u"Text afegit a la secció Bibliograf[ií]a"
    elif re.search(u"== ?Refer[eè]ncies ?==", text):
        text=re.sub(u"== ?Refer[eè]ncies ?==", u"== Referències ==\n%s" % afegit, text, count=1)
        print u"Text afegit a la secció Referències"
    elif re.search(u"\{\{[Ee]sborrany", text):
        text=re.sub(u"\{\{[Ee]sborrany", u"%s\n{{Esborrany" % afegit, text, count=1)
        print u"Text afegit davant de la plantilla esborrany"
    elif re.search(u"\{\{ORDENA", text):
        text=re.sub(u"\{\{ORDENA", u"%s\n{{ORDENA" % afegit, text, count=1)
        print u"Text afegit davant de l'ORDENA"
    elif re.search(u"\[\[ ?[Cc]ategoria:", text):
        text=re.sub(u"\[\[ ?[Cc]ategoria:", u"%s\n[[Categoria:" % afegit, text, count=1)
        print u"Text afegit davant de les categories"
    else:
        print u"No he trobat on afegir el text a %s" % page.title(asLink=True)
    return text

#El programa comença aquí
def principal():
    nomplantilla = u'Autor'      #Posar-hi una de les plantilles d'article o les seves redireccions: Tema, Persona i Autor
    nom = u"Plantilla:%s" % nomplantilla
    plantw = wikipedia.Page(dites, nom)
    print plantw.title()
    llista = plantw.getReferences(onlyTemplateInclusion=True)
    print llista
    comptacanvio = comptamirats = 0
    pagprova = wikipedia.Page(site, u"User:PereBot/prova")
    for pag in llista:
        comptamirats += 1
        print comptamirats, pag
        totplant = pag.templatesWithParams()  # Comença a buscar la plantilla w i el seu paràmetre
        posar = False
        redir2 = False # Flag doble redirecció
        jaente = False # Flag ja té el paràmetre viquidites a la plantilla projectes germans
        vg = False # Flag posem paràmetre viquidites a la plantilla projectes germans
        for plant in totplant:
    #        print plant
            if plant[0] == nomplantilla:
                print plant[0]
                if plant[1] == [] or len(plant[1][0]) < 2:
                    print u"Sense paràmetre"
                elif posar == False:
                    for par in plant[1]:
                        if re.search(u"(?:Viquipèdia|Wikipedia) *=",par):
                            nomarticle = re.split(u"=",par)[1]
                            nomarticle = nomarticle.strip()
                            if nomarticle == "{{PAGENAME}}":
                                nomarticle = pag.title()
                            print nomarticle
                            if "#" in nomarticle or len(nomarticle) < 1:
                                print u"Nom no vàlid"
                                posar = False
                            else:
                                article = wikipedia.Page(site, nomarticle)
                                print article
                                if article.isRedirectPage():
                                    article = article.getRedirectTarget()
                                    print "Redirecciona a", article
                                    if article.isRedirectPage():
                                        print "Doble redirecció"
                                        posar = False
                                        redir2 = True
                                if redir2:
                                    print"Ho deixem córrer per doble redirecció"
                                else:
                                    titdites = pag.title()
                                    posar = True
                else:
                    print u"Més d'una plantilla {}: no sé quina agafar" % nomplantilla
                    posar=False
                    break
        if posar:
            plantarticle = article.templates()
            if u'Projectes germans' in plantarticle or u'Wikimedia' in plantarticle or u'Sisterlinks' in plantarticle:
                print article, u"té la plantilla projectes germans o similar"
                totplanta = article.templatesWithParams()  # Comença a buscar la plantilla w i el seu paràmetre
                for planta in totplanta:
    #                print planta
                    if re.search(u'(?:[Pp]rojectes germans|[Ww]ikimedia|[Ss]isterlinks)', planta[0]):
                        print planta[0]
                        if planta[1] == [] or len(planta[1][0]) < 2:
                            print u"Sense paràmetre"
                        else:
                            for par in planta[1]:
                                if re.search(u"([Vv]iquidites|q) *=",par):
                                    nomdites = re.split(u"=",par)[1]
                                    nomdites = nomarticle.strip()
                                    if len(nomdites) > 2:
                                        posar = False
                                        jaente = True
                                        print u"Ja té viquidites a projectes germans",par
                                    else:
                                        textvell = article.get()
                                        noutext = re.sub(ur"([Vv]iquidites|q) *=", u"Viquidites = %s" % titdites, textvell)
                                        vg = True
                                        print u"Omplo el camp viquidites de projectes germans, que era en blanc"
                                    break
                            if vg == False and jaente == False:  # Hi ha la plantilla projecte sense viquidites
                                textvell = article.get()
                                noutext = re.sub(u'([Pp]rojectes germans|[Ww]ikimedia|[Ss]isterlinks)',u"Projectes germans|Viquidites = "+titdites,textvell)
                                vg = True
                                print u"Poso viquidites a projectes germans"                                                    
                            if vg:
                                ccattxtmsg = u"Viquidites=[[:q:"+titdites+"|"+titdites+"]]}}"
                                try:
                                    #per proves posar pagprova en comptes d'article
                                    article.put(
                                        noutext,
                                        u"Robot afegint %s a la plantilla {{Projectes germans}}" % ccattxtmsg
                                    ) 
                                except wikipedia.LockedPage:
                                    print u"Error: Pàgina blocada"
                                except wikipedia.MaxTriesExceededError:
                                    print u"Error: Temps excedit"
                                comptacanvio += 1
            elif u'Viquidites' in plantarticle or u'Wikiquote' in plantarticle or u'Quote' in plantarticle:
                print article, u"té la plantilla Viquidites o similar"
            else:
                print article, u"no té la plantilla i s'hi ha de posar"
                ccattxt = u"{{Viquidites|%s}}\n" % titdites
                ccattxtmsg = u"{{Viquidites|[[:q:{0}|{0}]]}}".format(titdites)
                try:
                    noutext = insertaccat(article, ccattxt)
                    #per proves posar pagprova en comptes d'article
                    article.put(noutext, u"Robot afegint %s" %ccattxtmsg) 
                except wikipedia.NoPage:
                    print u"L'article no existeix"
                except wikipedia.LockedPage:
                    print u"Error: Pàgina blocada"
                except wikipedia.MaxTriesExceededError:
                    print u"Error: Temps excedit"
                comptacanvio=comptacanvio+1
        else:
            print "No posar (no trobat article)"
    #    if comptamirats>120 or comptacanvio>5: break  #límits per fer proves amb tirades curtes

if __name__ == '__main__':
    dites = wikipedia.getSite('ca','wikiquote') #Viquidites
    site = wikipedia.getSite('ca') #Viquipèdia
    principal()
    wikipedia.stopme()