Usuari:PereBot/robot orfe al final

# -*- coding: utf-8 -*-
# Programa per moure al final algunes plantilles que sovint
# són incorrectament al principi de l'article
# (orfe, cal taxocaixa, massa curt, cal geo...)

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

# Actualitza informe
def putinforme(pag,text0,afegit,sumari,signa=False):
    contingut=text0+afegit
    if signa:
        contingut=contingut+u"\n--~~~~\n"
    try:
        pag.put(contingut,sumari)
    except articleexists:
        res=pag.get()
        pag.put(contingut,sumari)
    return

# Endreça una mica les plantilles.
def poleix(text):
    text=text.replace(u"{{Projectes germans}}",u"{{Commonscat}}")
    text=re.sub(u"\[\[ ?[Cc]ategoria ?\:",u"[[Categoria:",text)
    if re.search(u"\{\{ ?[Pp]rojectes germans\|commonscat=.*\}\}",text):
        if not re.search(u"\{\{ ?[Pp]rojectes germans\|commonscat=.*\|.*=.*\}\}",text):
            text=re.sub(u"\{\{ ?[Pp]rojectes germans\|commonscat=",u"{{Commonscat|",text)
    for i in range(1,10):
        text=text.replace(u"\n\n{{Autoritat}}",u"\n{{Autoritat}}")
        text=text.replace(u"\n\n{{Commonscat",u"\n{{Commonscat")
        text=text.replace(u"\n\n{{Projectes germans",u"\n{{Projectes germans")
        text=re.sub(u"(\{\{ORDENA\:.*\}\}|\{\{Enllaç A[BD]\|.*\}\})\n*(\{\{Bases de dades taxonòmiques\}\}|\{\{Autoritat\}\})",ur"\2\n\1",text)
        text=re.sub(u"(\[\[ ?[Cc]ategoria ?\:.*\|?.*?\]\])\n*(\{\{Bases de dades taxonòmiques\}\}|\{\{Autoritat\}\})",ur"\2\n\1",text)
        text=re.sub(u"(\{\{ ?[Mm]assa curt ?\|?.*?\}\})\n*(\{\{Bases de dades taxonòmiques\}\}|\{\{Autoritat\}\})",ur"\2\n\1",text)
        text=re.sub(u"(\{\{ ?[Oo]rfe ?\|?.*?\}\})\n*(\{\{Bases de dades taxonòmiques\}\}|\{\{Autoritat\}\})",ur"\2\n\1",text)
        text=re.sub(u"(\{\{ ?[Ee]sborrany.*?\}\})\n*(\{\{Bases de dades taxonòmiques\}\}|\{\{Autoritat\}\})",ur"\2\n\1",text)
        text=text.replace(u"\n\n\n{{ORDENA",u"\n\n{{ORDENA")
    text=text.replace(u"{{Autoritat}}\n{{ORDENA",u"{{Autoritat}}\n\n{{ORDENA")
    text=text.replace(u"{{Autoritat}}\n[[Categoria:",u"{{Autoritat}}\n\n[[Categoria:")
    text=text.replace(u"{{Bases de dades taxonòmiques}}\n{{ORDENA",u"{{Bases de dades taxonòmiques}}\n\n{{ORDENA")
    text=text.replace(u"{{Bases de dades taxonòmiques}}\n[[Categoria:",u"{{Bases de dades taxonòmiques}}\n\n[[Categoria:")
    if text[0]==u"\n":
        text=text[1:]
    return text

# Funció que inserta la plantilla Orfe (o un altre text) en una pàgina.
# Els arguments són el text de la pàgina i el text a afegir (habitualment la plantilla amb
# el seus paràmetres).
# Retorna el text amb la plantilla (o sense, si no ha trobat on posar-la).
#
def insertaorfe(text,afegit):
    if re.search(u"\{\{ORDENA",text):
        text=re.sub(u"\{\{ORDENA",afegit+u"\n{{ORDENA",text,count=1)
        print afegit+u" afegit davant de l'ORDENA"
    elif re.search(u"\[\[ ?[Cc]ategoria:",text):
        text=re.sub(u"\[\[ ?[Cc]ategoria:",afegit+u"\n[[Categoria:",text,count=1)
        print afegit+u" afegit davant de les categories"
    elif re.search(u"\{\{[Ee]sborrany",text):
        text=re.sub(u"\{\{[Ee]sborrany",afegit+u"\n{{Esborrany",text,count=1)
        print afegit+u" afegit davant de la plantilla esborrany"
    elif re.search(u"\{\{[Cc]al coor",text):
        text=re.sub(u"\{\{[Cc]al coor",afegit+u"\n{{Cal coor",text,count=1)
        print afegit+u" afegit davant de la plantilla cal coor"
    elif re.search(u"\{\{[Cc]al foto",text) and not re.search(u"Foto *= *\n* *\{\{[Cc]al foto",text):
        text=re.sub(u"\{\{[Cc]al foto",afegit+u"\n{{Cal foto",text,count=1)
        print afegit+u" afegit davant de la plantilla cal foto"
    else:
        print u"No he trobat on afegir el text"
    return text

#El programa comença aquí
site=wikipedia.getSite('ca')
catbuscar=u"Articles sense taula taxonòmica" #Posar aquí la categoria que es revisarà
asc=pagegenerators.PreloadingGenerator(pagegenerators.CategorizedPageGenerator(catlib.Category(site,catbuscar),recurse=True))
comptador=0
# Inicialitza informe ORDENA
informeordena=False # True per que el programa faci una llista dels articles amb ORDENA posats per bot
if informeordena:
    paginforme=wikipedia.Page(site,u"Usuari:PereBot/ordena posat per bot/arxiu2")
    capinforme=u"\n==Pàgines amb ORDENA posat per bot recollides tot movent etiquetes==\n\n"
    cosinforme=u""
    if paginforme.exists():
        textinforme0=paginforme.get()
    else:
        textinforme0=u""
    cblocinforme=0
    sumarinforme=u"Robot llistant pàgines amb <!--ORDENA generat per bot-->"
for pag in asc:
    comptador=comptador+1
    print comptador,pag
    if pag.isRedirectPage():
        pag=pag.getRedirectTarget()
        print u"Redirecció:",pag
    textplantsumari=u""
    text=pag.get()
    noutext=text
    textvell=text
    principi=text[0:100]
    # Orfe
    if re.search(u"\{\{[Oo]rfe ?\}\}",principi):
        text=re.sub(u"\{\{[Oo]rfe ?\}\}\n","",text)
        text=re.sub(u"\{\{[Oo]rfe ?\}\}","",text)
        noutext=insertaorfe(text,u"{{Orfe}}")
        if noutext!=text:
            textplantsumari=textplantsumari+u" {{Orfe}}"
    trossos=re.split(u"\n",principi)
    textplant=u""
    for tros in trossos:
        if re.search(u"\{\{[Oo]rfe ?\| ?data=.*\}\}",tros):
            textplant=re.sub(u".*(\{\{[Oo]rfe ?\| ?data=.*\}\}).*\n?",r"\1",tros)
    print textplant
    if textplant!=u"":
        text=text.replace(textplant+u"\n",u"")
        text=text.replace(textplant,u"")
        noutext=insertaorfe(text,textplant)
        textplantsumari=textplantsumari+textplant
    text=noutext
    # Massa curt
    if re.search(u"\{\{[Mm]assa ?curt ?\}\}",principi):
        text=re.sub(u"\{\{[Mm]assa ?curt ?\}\}\n","",text)
        text=re.sub(u"\{\{[Mm]assa ?curt ?\}\}","",text)
        noutext=insertaorfe(text,u"{{Massa curt}}")
        if noutext!=text:
            textplantsumari=textplantsumari+u" {{Massa curt}}"
    trossos=re.split(u"\n",principi)
    textplant=u""
    for tros in trossos:
        if re.search(u"\{\{[Mm]assa ?curt ?\| ?data=.*\}\}",tros):
            textplant=re.sub(u".*(\{\{[Mm]assa ?curt ?\| ?data=.*\}\}).*\n?",r"\1",tros)
    print textplant
    if textplant!=u"":
        text=text.replace(textplant+u"\n",u"")
        text=text.replace(textplant,u"")
        noutext=insertaorfe(text,textplant)
        textplantsumari=textplantsumari+textplant
    text=noutext
    # Cal geo
    if re.search(u"\{\{[Cc]al geo ?\}\}",principi):
        text=re.sub(u"\{\{[Cc]al geo ?\}\}\n","",text)
        text=re.sub(u"\{\{[Cc]al geo ?\}\}","",text)
        noutext=insertaorfe(text,u"{{Cal geo}}")
        if noutext!=text:
            textplantsumari=textplantsumari+u" {{Cal geo}}"
    trossos=re.split(u"\n",principi)
    textplant=u""
    for tros in trossos:
        if re.search(u"\{\{[Cc]al geo ?\| ?data=.*\}\}",tros):
            textplant=re.sub(u".*(\{\{[Cc]al geo ?\| ?data=.*\}\}).*\n?",r"\1",tros)
    print textplant
    if textplant!=u"":
        text=text.replace(textplant+u"\n",u"")
        text=text.replace(textplant,u"")
        noutext=insertaorfe(text,textplant)
        textplantsumari=textplantsumari+textplant
    # Falta taxobox
    if re.search(u"\{\{(([Mm]anca|[Cc]al|[Ff]alta) (taula taxonòmica|taxobox|taxocaixa)|[Mm]ancaTaxocaixa|MTT) ?\}\}",principi):
        text=re.sub(u"\{\{(([Mm]anca|[Cc]al|[Ff]alta) (taula taxonòmica|taxobox|taxocaixa)|[Mm]ancaTaxocaixa|MTT) ?\}\}\n","",text)
        text=re.sub(u"\{\{(([Mm]anca|[Cc]al|[Ff]alta) (taula taxonòmica|taxobox|taxocaixa)|[Mm]ancaTaxocaixa|MTT) ?\}\}","",text)
        noutext=insertaorfe(text,u"{{MancaTaxocaixa}}")
        if noutext!=text:
            textplantsumari=textplantsumari+u" {{MancaTaxocaixa}}"
    trossos=re.split(u"\n",principi)
    textplant=u""
    for tros in trossos:
        if re.search(u"\{\{(([Mm]anca|[Cc]al|[Ff]alta) (taula taxonòmica|taxobox|taxocaixa)|[Mm]ancaTaxocaixa|MTT) ?\| ?data=.*\}\}",tros):
            textplant=re.sub(u"(.*(\{\{(([Mm]anca|[Cc]al|[Ff]alta) (taula taxonòmica|taxobox|taxocaixa)|[Mm]ancaTaxocaixa|MTT) ?\| ?data=.*\}\}).*\n?)",r"\1",tros)
    print textplant
    if textplant!=u"":
        text=text.replace(textplant+u"\n",u"")
        text=text.replace(textplant,u"")
        noutext=insertaorfe(text,textplant)
        textplantsumari=textplantsumari+textplant
    # Puja resultat
    if noutext!=textvell:
        noutext=poleix(noutext)
        pag.put(noutext,u"Robot mou "+textplantsumari+" al final")
#    if comptador>20: break # Per proves
    # Informe ORDENA
    if informeordena:
        if u"<!--ORDENA generat per bot-->" in textvell:
            ordena=re.findall(u"\{\{ORDENA:.*\}\}",textvell)[0]
            print cblocinforme,ordena
            liniainf=u"#[["+pag.title()+u"]] <nowiki>"+ordena+u"</nowiki>\n"
            cosinforme=cosinforme+liniainf
            cblocinforme=cblocinforme+1
            if cblocinforme>1000:
                putinforme(paginforme,textinforme0,capinforme+cosinforme,sumarinforme)
                cblocinforme=0
# Penja informe ORDENA
if informeordena:
    if cosinforme!=u"":
        putinforme(paginforme,textinforme0,capinforme+cosinforme,sumarinforme,signa=True)
wikipedia.stopme()