Usuari:PereBot/robot copia commonscat
Aparença
Aquest programa està aquí com a referència però és obsolet des que la plantilla Commonscat funciona amb el paràmetre a Wikidata i per tant no té sentit copiar-lo entre viquipèdies. |
# -*- 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()