Usuari:PereBot/robot orfe al final
Aparença
Una versió anterior d'aquest programa amb el format del codi arreglat per en Coet és a https://ca.wikipedia.org/w/index.php?title=Usuari:PereBot/robot_orfe_al_final&oldid=13920542 |
# -*- 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()