Usuari:PereBot/robot posa plantilla autoritat
Aparença
El programa Usuari:PereBot/robot posa plantilles variades és una versió millorada d'aquest que fa més coses, aprofitant que ha de llegir l'article i la pàgina de dades. |
# -*- 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()