Vés al contingut

Usuari:PereBot/robot copia commonscat

De la Viquipèdia, l'enciclopèdia lliure
# -*- coding: utf-8 -*-
# Posa la plantilla Commonscat a partir d'una consulta Autolist.
# Tot i que fa servir la categoria de manteniment de la plantilla Commonscat,
# comprova també la inclusió de la plantilla carregant la llista de totes les pàgines
# que la tenen inclosa. Quan estigui actualitzada la categoria de manteniment
# aquest pas es podrà saltar.

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

# 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.
#
def insertaccattxt(text, afegit, espai=0):
    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)
        print u"Text afegit davant de la plantilla Viquiespècies"
    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)
        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 espai==14:
        text = u"%s\n%s" % (afegit,text)
        print u"Text afegit al principi (en categoria)"
    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"
    return text

# 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""
def iwcaccat(data):
    try:
        iw = 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:
        print u"Error: paràmetre sense contingut a wikidata"
        ccat=u""
    except wikipedia.NoPage:
        print u"Error: no hi ha pàgina a wikidata"
    except wikipedia.MaxTriesExceededError:
        print u"Error: Temps excedit"
    except urllib2.HTTPError:
        print u"Error HTTP (no deu funcionar el web)"
    except TypeError:
        print "TypeError"
    return iw,ccat

# Retorna els articles enllaçats a una plantilla
def refplant(tplant):
    plantccat=wikipedia.Page(site, tplant)
    print plantccat
    jatenenccatg = plantccat.getReferences(onlyTemplateInclusion=True)
    print jatenenccatg
    jatenenccat = []
    comptador = comptabloc = 0
    for pag in jatenenccatg:
        comptador += 1
        comptabloc += 1
        if comptabloc > 199:
            print comptador, pag
            comptabloc = 0
        jatenenccat.append(pag)
    #    else:
    #        print pag,u"no és un article"
        if comptador>1000000: # Només per proves (posar 1000000 si no és una prova)
            break # Només per proves
    try:
        print comptador,pag
    except UnboundLocalError:
        print u"Error: probablement plantilla no usada o nom mal escrit"
    return jatenenccat
    

# El programa comença aquí
def principal():
    jatenenccat = refplant(u"Plantilla:Commonscat")
    jatenenccat = jatenenccat+refplant(u"Plantilla:Commons")
    jatenenccat = jatenenccat+refplant(u"Plantilla:Projectes germans")
    pllista = urllib.urlopen(
        "https://tools.wmflabs.org/wikidata-todo/autolist2.php?language=ca&"
        "project=wikipedia&category=Manteniment%20plantilla%20commonscat&"
        "depth=2&wdq=CLAIM%5B373%5D%20AND%20link%5Bcawiki%5D&mode=wdq_no_cat&"
        "statementlist=&run=Run&label_contains=&label_contains_not=&"
        "chunk_size=10000&download=1"
    )
    print "consulta oberta"
    comptador = comptabloc = 0
    linia = u"alguna cosa"
    #Bucle per saltar-se els primers
    #Posar comptador<0 per evitar-lo
    while linia != "" and comptador < 20200:
        linia = pllista.readline()
        comptador += 1
        comptabloc += 1
        if comptabloc > 99:
            print comptador,linia
            comptabloc = 0
    
    while linia != "":
        comptador += 1
        linia = pllista.readline()
        linia = linia.replace(u"\n",u"")
        print comptador,linia
        try:
            pagdata = wikipedia.DataPage(sitedata, title=linia)
            tpag, ccat = iwcaccat(pagdata)
            print tpag
            pag = wikipedia.Page(site, tpag)
            if pag not in jatenenccat:
                print pag, u"no té commonscat"
                plantarticle = pag.templates()
                if 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
                ):
                    textvell=pag.get()
                    textnou = insertaccattxt(
                        textvell, u"{{Commonscat}}", pag.namespace()
                    )
                    sumari = u"Robot inserta {{Commonscat}} que enllaça amb [[commons:category:%s]]" % ccat
                    if textnou != textvell:
                        pag.put(textnou, sumari)
                else:
                    print u"Ja té una plantilla"
        except KeyError:
            print u"No hi ha iw català"
        except wikipedia.IsRedirectPage:
            print pag,u"és una redirecció"
        except wikipedia.InvalidTitle:
            print tpag,u"o",linia,u"és un títol no vàlid"
        except wikipedia.LockedPage:
            print tpag,u"està blocada"

if __name__ == '__main__':
    defsitedata = wikipedia.getSite('wikidata', 'wikidata')
    site = wikipedia.getSite('ca')
    principal()
    wikipedia.stopme()