Usuari:PereBot/robot converteix plantilles
Aparença
# -*- coding: utf-8 -*-
"""
Descripció:
migrar_variant fa una llista de cada paràmetre que no es troba (un sol cop)
aquest fa per cada article, els paràmetres que no s'han trobat
"""
#
# (C) Arnaugir 2014
#
# Distributed under the terms of the MIT license.
#
# Modificacions Pere prlpz
#
import os, sys, re, codecs, time
sys.path.append('C:\core')
sys.path.append('C:\wikitools')
#import pywikibot
import wiki
import api
import page
import category
import pagelist
#from wikitools import wiki
#from wikitools import api
#from wikitools import page
#from wikitools import category
#from wikitools import pagelist
import mwparserfromhell
from datetime import datetime
from datetime import timedelta
import json
from pprint import pprint
def divideix(txt):
if u"\u2013" in txt:
trosss=re.split(u"\u2013",txt)
elif u"<br/>" in txt:
trosss=re.split(u"<br/>",txt)
elif u"<br>" in txt:
trosss=re.split(u"<br>",txt)
elif u" - " in txt:
trosss=re.split(u" - ",txt)
elif u"-" in txt:
trosss=re.split(u"-",txt)
else:
trosss=[txt]
#print u"trosss:",trosss
noutrossos=[]
for tros in trosss:
noutrossos.append(tros.strip())
#print u"noutrossos:",noutrossos
return noutrossos
# El programa comença aquí
site = wiki.Wiki("http://ca.wikipedia.org/w/api.php")
site.login("PereBot",password="...",remember=True)
params = {
'action' :'query',
'list' :'categorymembers',
'cmtype' :'page',
'cmtitle' :u'Categoria:Articles que utilitzen la plantilla obsoleta Infotaula Monarca',
'rawcontinue':'1'
}
request = api.APIRequest(site, params)
data = pagelist.listFromQuery(site,request.query()['query']['categorymembers'])
l=""
dictParams = {u"name":u"nom","nom complet":"nom de naixement","sobrenom":"altres noms","alias":"altres noms",
u"altres_noms":"altres noms",
"honorific prefix":u"prefix honorífic","honorifix-prefix":"tractament",
"honorific_prefix":u"prefix honorífic","tractament":u"prefix honorífic",
"honorifix suffix":u"sufix honorífic","honorific_suffix":u"sufix honorífic",
u"encapçalat":u"sufix honorífic","residence":u"residència",
"children":"fills","alma_mater":"alma mater",
"data_de_naixement":"data de naixement","birth_date":"data de naixement",
"lloc_de_naixement":"lloc de naixement","birth_place":"lloc de naixement",
u"data de defunció":u"data de mort",u"data_de_defunció":u"data de mort",u"death_date":u"data de mort",
u"lloc de defunció":u"lloc de mort",u"lloc_de_defunció":u"lloc de mort","death_place":"lloc de mort",
u"death_cause":"causa de mort",u"causa defunció":"causa de mort",u"causa_defuncio":"causa de mort",
"nationality":"nacionalitat","citizenship":"ciutadania","ethnicity":u"ètnia",
"image":"imatge","imagesize":"mida","text imatge":"peu","caption":"peu",
"burial":"sepultura","burial_place":"sepultura","enterrament":"sepultura",
u"resting_place_coordinates":"coordenades lloc sepultura",u"coordenades_lloc_enterrat":"coordenades lloc sepultura",
"spouse":u"cònjuge","relations":"pares","party":"partit","profession":u"professió",
"religion":u"religió","education":u"educació",
u"conegut_per":"conegut per",u"known":"conegut per",u"known_for":"conegut per",u"known for":"conegut per",
"occupation":u"ocupació",u"professió":u"ocupació",u"profession":u"ocupació",
u"etiqueta ocupació":u"etiqueta ocupació",
u"years active":u"període en actiu",u"years_active":u"període en actiu",u"anys en actiu":u"període en actiu",
u"anys_en_actiu":u"període en actiu",u"organization":u"organització",u"organizations":u"organització",
u"organitzacions":u"organització","employer":"ocupador","empleat":"ocupador",
u"altrestítols":u"títol",u"altres títols":u"títol",
u"notable works":"obres notables",u"notable_works":"obres notables",u"obres destacades":"obres notables",
u"height":u"alçada",u"weight":u"pes",u"color d'ulls":u"ulls",u"Color de cabell":u"cabell"
,u"genre":u"gènere",u"genere":u"gènere",u"movement":u"moviment",u"style":u"estil",
u"salary":u"sou",u"salari":u"sou",u"net worth":u"valor net",u"net_worth":u"valor net",
u"networth":u"valor net",u"valor_net":u"valor net","casa reiale":"casa reial","dinastia":"dinastia",
"signature":"signatura","amplada signatura":"signatura_mida","footnotes":"notes",
"website":"lloc_web","web":"lloc_web","office":u"càrrec","order":u"càrrec",
"term_start":"inici","term_end":"final","president":"a_nom","monarca":"a_nom","monarch":"a_nom",
"primeminister":"b_nom","prime_minister":"b_nom","vicepresident":"e_nom","deputy":"f_nom","constituency":"k_nom",
"office2":u"càrrec2","order2":u"càrrec2","term_start2":"inici2","term_end2":"final2","president2":"a_nom2",
"monarca2":"a_nom2","monarch2":"a_nom2","primeminister2":"b_nom2","prime_minister2":"b_nom2","vicepresident2":"e_nom2",
"deputy2":"f_nom2","constituency2":"k_nom2",
"office3":u"càrrec3","order3":u"càrrec3","term_start3":"inici3","term_end3":"final3","president3":"a_nom3",
"monarca3":"a_nom3","monarch3":"a_nom3","primeminister3":"b_nom3","prime_minister3":"b_nom3","vicepresident3":"e_nom3",
"deputy3":"f_nom3","constituency3":"k_nom3",
"office4":u"càrrec4","order4":u"càrrec4","term_start4":"inici4","term_end4":"final4","president4":"a_nom4",
"monarca4":"a_nom4","monarch4":"a_nom4","primeminister4":"b_nom4","prime_minister4":"b_nom4","vicepresident4":"e_nom4",
"deputy4":"f_nom4","constituency4":"k_nom4",
"office5":u"càrrec5","order5":u"càrrec5","term_start5":"inici5","term_end5":"final5","president5":"a_nom5",
"monarca5":"a_nom5","monarch5":"a_nom5","primeminister5":"b_nom5","prime_minister5":"b_nom5","vicepresident5":"e_nom5",
"deputy5":"f_nom5","constituency5":"k_nom5",
"office6":u"càrrec6","order6":u"càrrec6","term_start6":"inici6","term_end6":"final6","president6":"a_nom6",
"monarca6":"a_nom6","monarch6":"a_nom6","primeminister6":"b_nom6","prime_minister6":"b_nom6","vicepresident6":"e_nom6",
"deputy6":"f_nom6","constituency6":"k_nom6",
"office7":u"càrrec7","order7":u"càrrec7","term_start7":"inici7","term_end7":"final7","president7":"a_nom7","monarca7":"a_nom7",
"monarch7":"a_nom7","primeminister7":"b_nom7","prime_minister7":"b_nom7","vicepresident7":"e_nom7",
"deputy7":"f_nom7","constituency7":"k_nom7",
"office8":u"càrrec8","order8":u"càrrec8","term_start8":"inici8","term_end8":"final8","president8":"a_nom8",
"monarca8":"a_nom8","monarch8":"a_nom8","primeminister8":"b_nom8","prime_minister8":"b_nom8","vicepresident8":"e_nom8",
"deputy8":"f_nom8","constituency8":"k_nom8",
"office9":u"càrrec9","order9":u"càrrec9","term_start9":"inici9","term_end9":"final9","president9":"a_nom9",
"monarca9":"a_nom9","monarch9":"a_nom9","primeminister9":"b_nom9","prime_minister9":"b_nom9","vicepresident9":"e_nom9",
"deputy9":"f_nom9","constituency9":"k_nom9",
"successor":"successor","predecessor":"predecessor","predecessor2":"predecessor2","successor2":"successor2",
"predecessor3":"predecessor3","successor3":"successor3","predecessor4":"predecessor4","successor4":"successor4",
"predecessor5":"predecessor5","successor5":"successor5","predecessor6":"predecessor6","successor6":"successor6",
"predecessor7":"predecessor7","successor7":"successor7","predecessor8":"predecessor8","successor8":"successor8",
"predecessor9":"predecessor9","successor9":"successor9",
u"escut càrrec":u"escut càrrec",u"escut càrrec2":u"escut càrrec2", u"escut càrrec3":u"escut càrrec3",
u"escut càrrec4":u"escut càrrec4", u"escut càrrec5":u"escut càrrec5", u"escut càrrec6":u"escut càrrec6",
u"escut càrrec7":u"escut càrrec7", u"escut càrrec8":u"escut càrrec8", u"escut càrrec9":u"escut càrrec9",
u"escut":u"escutpeu", u"escutpeu":u"escutpeu",
u"descendència":u"fills", u"Descendència":u"fills", u"descendencia":u"fills", u"fills":u"fills",
u"coronació":u"k_nom",u"k_nom":u"k_nom",u"k_etiqueta":u"k_etiqueta",
u"títol":u"càrrec", u"títol1":u"càrrec1", u"títol2":u"càrrec2", u"títol3":u"càrrec3", u"títol4":u"càrrec4",
u"títol5":u"càrrec5", u"títol6":u"càrrec6",
u"hereu":u"l_nom",u"l_nom":u"l_nom",
u"coronació2":u"k_nom2",u"k_nom2":u"k_nom2",u"k_etiqueta2":u"k_etiqueta2",
u"coronació3":u"k_nom3",u"k_nom3":u"k_nom3",u"k_etiqueta3":u"k_etiqueta3",
u"nom original":u"nom original",u"llengua nom original":u"llengua nom original",
}
dictParamsBr = {u"cònjuge":u"cònjuge",u"consort":u"cònjuge",u"spouse":u"cònjuge",u"reina":u"cònjuge",u"consortreign":u"cònjuge",
u"esposa 1":u"cònjuge",u"esposa 2":u"cònjuge",u"esposa 3":u"cònjuge",u"esposa 4":u"cònjuge",
u"pare":u"pares",u"mare":u"pares",u"padre":u"pares",u"madre":u"pares",
}
dictParamsDividir = {u"regne":[u"inici",u"final"],u"regne1":[u"inici1",u"final1"],u"regne2":[u"inici2",u"final2"],
u"regne3":[u"inici3",u"final3"],u"regne4":[u"inici4",u"final4"],u"regne5":[u"inici5",u"final5"],
u"regne6":[u"inici6",u"final6"],
u"regnat":[u"inici",u"final"],
}
#falta: etiqueta_dinastia
# si hi ha parametres que vulguem mantenir encara que estiguin buits, cal afegirlos, encara que siguin ells mateixos (ex "successor":"successor")
i=0;
prova=False #canviar
desar=True #canviar
wikipageprova = page.Page(site, title="Usuari:PereBot/prova")
for item in data: #interval per proves
i=i+1;
wikipage = item
print item
nodesar=False
notarticle=u""
if (wikipage.exists):
text0=wikipage.getWikiText()
text = wikipage.getWikiText().decode('utf-8', 'replace')
if prova and desar:
wikipageprova.edit(text=text0,bot="yes",summary=u"Robot copiant [[{}]] per fer proves".format(wikipage.title))
#except HTTPError:
# print u"Salto article per HTTPError:"
# l=l+"# [["+item.title+"]]: HTTPError (article no llegit)\n"
# continue
wikipage=wikipageprova
code = mwparserfromhell.parse(text)
t=code.filter_templates();
l=l+"# [["+item.title+"]]: "
llistaManquen=[]
for template in t:
llistaRemove=[]
llistaAdd=[]
if template.name.matches((u"Monarca",u"Infotaula Monarca", u"Infotaula_Monarca", u"Infotaula de noble", u"Infotaula_de_noble")):
paramsBr={}
for param in template.params:
p=param.name.strip()
#print p
if p in dictParams:
param.name.replace(p, dictParams[p])
if p=="dinastia":
llistaAdd.append(("etiqueta_dinastia","Dinastia","dinastia")) #nom paràmetre, contingut, before
if p=="casa reial":
llistaAdd.append(("etiqueta_dinastia","Casa reial","casa reial"))
if p==u"coronació":
llistaAdd.append(("k_etiqueta",u"Coronació",u"k_nom"))
if p==u"coronació2":
llistaAdd.append(("k_etiqueta2",u"Coronació",u"k_nom2"))
if p==u"coronació3":
llistaAdd.append(("k_etiqueta3",u"Coronació",u"k_nom3"))
if p==u"hereu":
llistaAdd.append(("l_etiqueta",u"Hereu",u"l_nom"))
elif p in dictParamsBr:
pnou=dictParamsBr[p]
if pnou in paramsBr.keys():
llistaRemove.append(p)
if param.value.strip()<>"":
if paramsBr[pnou]["valor"].strip()<>"":
paramsBr[pnou]["valor"]=paramsBr[pnou]["valor"].replace(u"\n",u"")+u"<br/>"+unicode(param.value)
else:
paramsBr[pnou]["valor"]=unicode(param.value)
else:
paramsBr[pnou]={"subst":param,"valor":""}
paramsBr[pnou]["valor"]=unicode(param.value)
elif p in dictParamsDividir:
#print "p:",p
nomobjectius=dictParamsDividir[p]
valorcamp=unicode(param.value)
#print u"valor a dividir:",valorcamp
trossos=divideix(valorcamp.strip())
if len(trossos)>len(nomobjectius):
notarticle=u"Excés de paràmetres en dividir "+p+u":"+unicode(param.value).strip()
print notarticle
continue
for index in range(0,len(trossos)):
llistaAdd.append((nomobjectius[index],trossos[index]+u"\n",p))
llistaRemove.append(param)
else:
if (p not in dictParams) and (p not in dictParams.values()):
if unicode(param.value).strip() == "": #si no té valor el paràmetre, ens el carreguem directament (aixi ho demana amador) i no el llistem pas
llistaRemove.append(param)
else:
if unicode(p) not in llistaManquen:
llistaManquen.append(p)
for par in paramsBr.keys():
subst=paramsBr[par]["subst"]
subst.name.replace(subst.name,par)
valor=paramsBr[par]["valor"]
subst.value.replace(subst.value,valor)
template.name.replace(template.name.strip(), u"Infotaula de polític")
template.add("colorprofessio","monarca",before=template.params[0]) #afegir al principi
for tupla in llistaAdd:
#print tupla
nomparam,contingut,abans=tupla
if not u"\n" in contingut:
contingut=contingut+u"\n"
template.add(nomparam,contingut,before=abans)
try:
for k in range(0,len(llistaRemove)): #cal ferho aqui pq si no funciona malament el mwpfh
if llistaRemove[k]<>u"":
template.remove(llistaRemove[k])
except ValueError:
print u"Error value: Plantilla desorganitzada mentre treballa?"
print u"llistaRemove:",llistaRemove
print u"k:",k
print u"llistaRemove[k]:",llistaRemove[k]
l=l+" Value Error. Comprovar. "
#nodesar=True
continue
if template.has("1"): template.remove("1")
if template.has("dead"): template.remove("dead")
if template.has("width"): template.remove("width")
if template.has("height"): template.remove("height")
if template.has("mida d'imatge"): template.remove("mida d'imatge")
if template.has(u"tamaño de imagen"): template.remove(u"tamaño de imagen")
for j in range(0,len(llistaManquen)):
l=l+"<tt>"+llistaManquen[j]+"</tt>, "
l=l+notarticle+"\n"
textmodif = unicode(code)
if nodesar==False and desar==True:
try: #fem try-except per si la pàgina està protegida, llavors s'ho salta
wikipage.edit(text=textmodif,bot="yes",summary=u"Robot migra infotaula Monarca a infotaula Polític. Vegeu [[Viquiprojecte:Adaptació de plantilles a Wikidata/infotaules biogràfiques|VP:Adaptació plantilles]]",skipmd5=True)
time.sleep(3)
except:
time.sleep(1)
if i==10000:
break;
text="Per cada article, s'han trobat aquests parametres que no tenia contemplats:\n\n"+l
wikipage = page.Page(site, title="Usuari:PereBot/convertir infotaules/Infotaula Monarca")
textmodif = unicode(text)
wikipage.edit(text=textmodif,bot="yes",summary=u"Robot actualitza amb informació per l'amadalvarez",skipmd5=True)