Vés al contingut

Usuari:PereBot/robot posa plantilla autoritat

De la Viquipèdia, l'enciclopèdia lliure
# -*- coding: utf-8 -*-
# Posa la plantilla Autoritat als articles que tenen registre CANTIC a Wikidata.
# Aprofita per posar-hi també la plantilla Commonscat si cal.

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

def iwcaccat(data):
    """
    Retorna el títol de l'article i la categoria de Commons
    a partir de l'item de Wikidata. Si no hi ha propietat
    Commonscat retorna u""
    """
    try:
        iw = u""
        ccat = u""
        cont = data.get()
        iws = cont[u'links']
        iw = iws[u'cawiki'][u'name']
        claims = cont[u'claims']
        for el in claims:
            m = el[u'm']
            num = m[1]
            if num == 373:
                ccat = m[3]
    except IndexError:
        display(u"Error: paràmetre sense contingut a wikidata")
        ccat=u""
    except wikipedia.NoPage:
        display(u"Error: no hi ha pàgina a wikidata")
    except wikipedia.MaxTriesExceededError:
        display(u"Error: Temps excedit")
    except urllib2.HTTPError:
        display(u"Error HTTP (no deu funcionar el web)")
    except TypeError:
        display("TypeError")
    return iw, ccat

def insertaccattxt(text,afegit):
    """
    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 el text de 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).
    L'argument és el text i no l'objecte pàgina.
    """
    if re.search(u"\{\{([Vv]iquiespècies|[Ww]ikispecies)", text):
        text = re.sub(u"\{\{([Vv]iquiespècies|[Ww]ikispecies)", u"%s\n{{Viquiespècies" % afegit, text)
        display(u"Text afegit davant de la plantilla esborrany")
    elif re.search(u"== ?Enllaços externs ?==", text):  # PER FER: POSAR LA PLANTILLA ABANS DE VIQUIDITES, VIQUITEXTS, 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)
        display(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)
        display(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)
        display(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)
        display(u"Text afegit a la secció Referències")
    elif re.search(u"\{\{[Ee]sborrany", text):
        text=re.sub(u"\{\{[Ee]sborrany", u"\n{{Esborrany" % afegit, text, count=1)
        display(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)
        display(u"Text afegit davant de l'ORDENA")
    elif re.search(u"\[\[ ?[Cc]ategoria:", text):
        text=re.sub(u"\[\[ ?[Cc]ategoria:", u"\n[[Categoria:%s" % afegit, text, count=1)
        display(u"Text afegit davant de les categories")
    else:
        display(u"No he trobat on afegir el text a %s." % page.title(asLink=True))
    return text

def insertaut(page, afegit):
    """
    Funció que inserta la plantilla Autoritat (o un altre text) en una pàgina.
    Mira de posar-la davant de la plantilla Esborrarny o les categories.
    Els arguments són 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).
    És una adaptació de la del programa ccat monuments (l'argument és l'objecte pàgina i no el text).
    """
    if page.isRedirectPage():
        page=page.getRedirectTarget()
    text = page.get()
    if re.search(u"\{\{[Ee]sborrany", text):
        text=re.sub(u"\{\{[Ee]sborrany", u"%s\n{{Esborrany" % afegit, text, count=1)
        display(u"Text afegit davant de la plantilla esborrany") 
    elif re.search(u"\{\{1000 Biografies", text):
        text=re.sub(u"\{\{1000 Biografies", u"%s\n{{1000 Biografies" % afegit, text, count=1)
        display(u"Text afegit davant de la plantilla 1000 Biografies")
    elif re.search(u"\{\{[Ee]nllaç AD", text):
        text=re.sub(u"\{\{[Ee]nllaç AD", u"%s\n{{Enllaç AD" % afegit, text, count=1)
        display(u"Text afegit davant de la plantilla Enllaç AD")
    elif re.search(u"\{\{[Ee]nllaç AB", text):
        text=re.sub(u"\{\{[Ee]nllaç AB", u"%s\n{{Enllaç AB" % afegit, text, count=1)
        display(u"Text afegit davant de la plantilla Enllaç AB")
    elif re.search(u"\{\{ORDENA",text):
        text=re.sub(u"\{\{ORDENA", u"%s\n{{ORDENA" % afegit, text, count=1)
        display(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)
        display(u"Text afegit davant de les categories")
    else:
        display(u"No he trobat on afegir el text a %s." % page.title(asLink=True))
    return text

# El programa comença aquí
def principal():
    pllista=urllib.urlopen(
        "https://tools.wmflabs.org/wikidata-todo/autolist2.php?language=ca&"
        "project=wikipedia&category=Authority%20control%20usage&depth=12&"
        "wdq=CLAIM%5B1273%5D%20AND%20link%5Bcawiki%5D&mode=wdq_no_cat&"
        "statementlist=&run=Run&label_contains=&label_contains_not=&"
        "chunk_size=10000&download=1"
    )
    print "obert"
    n=1
    linia=u"alguna cosa"
    #Bucle per saltar-se els primers
    #Posar comptador<0 per evitar-lo
    comptador = comptabloc = 0
    while linia != "" and comptador < 0:
        linia=pllista.readline()
        comptador += 1
        comptabloc += 1
        if comptabloc > 99:
            display(comptador, linia) 
            comptabloc = 0
    n=comptador
    while linia!="":
        linia = pllista.readline()
        linia = linia.replace(u"\n",u"")
        n += 1
        display("{} {}".format(n, linia)) 
    #    print pagdata
        try:
            pagdata = wikipedia.DataPage(sitedata, title=linia)
            artca, ccat = iwcaccat(pagdata)
            display(u"{}, {}".format(artca, ccat))
            pag = wikipedia.Page(site, artca)
            textvell = pag.get()
            plantilles = pag.templates()
            # Comença la part de posar plantilla Autoritat
            if u'Autoritat' not in plantilles and \
                u"Registre d'autoritats" not in plantilles:
                textnou = insertaut(pag, u"{{Autoritat}}")
                sumari = u"Robot inserta {{Autoritat}}"
            else:
                display(u"Ja hi ha la plantilla Autoritat")
                textnou = textvell
            # Comença a posar plantilla Commonscat
            plantarticle = plantilles
            if ccat != "" and not (
                    u'Commonscat' in plantarticle or
                    u'Commons cat' in plantarticle or
                    u'Projectes germans' in plantarticle or
                    u'Commons category' in plantarticle or
                    u'Commons' in plantarticle or
                    u'Commonscat-inline' in plantarticle or
                    u'Commons cat' in plantarticle or
                    u'Wikimedia' in plantarticle
                ):
                textnou = insertaccattxt(textnou, u"{{Commonscat}}")
                sumari = u"Robot inserta {{Autoritat}} i {{Commonscat}}"
            if textnou != textvell:
                pag.put(textnou, sumari)
        except KeyError:
            display(u"No hi ha iw català") 
        except wikipedia.IsRedirectPage:
            display(u"%s és una redirecció" % pag.title())
        except wikipedia.InvalidTitle:
            display(u"%s és un títol no vàlid" % artca)
    print "llegit"

if __name__ == '__main__':
    display = wikipedia.output #aliasing
    sitedata=wikipedia.getSite('wikidata', 'wikidata')
    site=wikipedia.getSite('ca')
    principal()
    wikipedia.stopme()