# -*- coding: utf-8 -*-
# A partir de les llistes de monuments, posa la plantilla Commonscat i
# les coordenades als articles dels monuments.
import sys
sys.path.append('C:\pywikipedia')
import wikipedia,catlib
import re
# Elimina l'enllaç d'un text. Funciona bé si hi ha un sol enllaç.
# Deixa el text que mostra l'enllaç (no on apunta)
def eliminaenllac(nom):
nom=re.sub(u"\[\[.*\|","",nom)
nom=nom.replace("[[","")
nom=nom.replace("]]","")
return nom
# Elimina els espais del principi i el final d'una cadena
def eliminaespais(text):
text=re.sub(u"^ *","",text)
text=re.sub(u" *$","",text)
return text
# Funció que inserta la plantilla Coord (o un altre text) en una pàgina.
# Mira de posar-la davant de l'ORDENA i si no davant les categories.
# Els arguments són el text de la pàgina i el text a afegir
# (habitualment la plantilla amb el seus paràmetres).
# Compte que es diferent de la plantilla equivalent del copiacoord en que
# aquí el paràmetre es el text i no l'objecte pàgina.
# Retorna el text amb la plantilla (o sense, si no ha trobat on posar-la).
#
def insertacoor(text,afegit):
if re.search(u"\{\{ORDENA",text):
text=re.sub(u"\{\{ORDENA",afegit+u"\n\n{{ORDENA",text)
text=re.sub(u"{{[Cc]al coor.*}}\n?",u"",text)
text=re.sub(u"\n\n+{{coord",u"\n\n{{coord",text)
print u"Text afegit davant de l'ORDENA"
elif re.search(u"\[\[ ?[Cc]ategoria:",text):
text=re.sub(u"\[\[ ?[Cc]ategoria:",afegit+u"\n\n[[Categoria:",text,count=1)
text=re.sub(u"{{[Cc]al coor.*}}\n?",u"",text)
text=re.sub(u"\n\n+{{coord",u"\n\n{{coord",text)
print u"Text afegit davant de les categories"
else:
print u"No he trobat on afegir el text a [["+page.title()+u"]]"
return text
# Funció que inserta la plantilla Commonscat (o un altre text) en una pàgina.
# Mira de posar-la al principi de la secció d'enllaços externs i sinó a les referències.
# Els arguments són el text de la pàgina i el text a afegir
# (habitualment la plantilla amb el seus paràmetres).
# Compte que es diferent de la plantilla equivalent del ccat en que
# aquí el paràmetre es el text i no l'objecte pàgina.
# Retorna el text amb la plantilla (o sense, si no ha trobat on posar-la).
#
def insertaccat(text,afegit):
print u"Hi afegiré",afegit
if re.search(u"== ?Enllaços [Ee]xterns ?==",text):
text=re.sub(u"(== ?Enllaços [Ee]xterns ?==)",u"== Enllaços externs ==\n"+afegit,text)
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"+afegit,text)
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"+afegit,text)
print u"Text afegit a la secció Bibliograf[ií]a"
elif re.search(u"== ?Vegeu també ?==",text):
text=re.sub(u"== ?Vegeu també ?==",u"== Vegeu també ==\n"+afegit,text)
print u"Text afegit a la secció Vegeu també"
elif re.search(u"== ?Refer[eè]ncies ?==",text):
text=re.sub(u"== ?Refer[eè]ncies ?==",u"== Referències ==\n"+afegit,text)
print u"Text afegit a la secció Referències"
elif re.search(u"\{\{[Ee]sborrany",text):
text=re.sub(u"\{\{[Ee]sborrany",afegit+u"\n{{esborrany",text)
print u"Text afegit davant de la plantilla esborrany"
elif re.search(u"\{\{ORDENA",text):
text=re.sub(u"\{\{ORDENA",afegit+u"\n\n{{ORDENA",text)
print u"Text afegit davant de l'ORDENA"
elif re.search(u"\[\[ ?[Cc]ategoria:",text):
text=re.sub(u"\[\[ ?[Cc]ategoria:",afegit+u"\n\n[[Categoria:",text,count=1)
print u"Text afegit davant de les categories"
else:
print u"No he trobat on afegir el text a [["+page.title()+u"]]"
return text
# Posa les plantilles commonscat i coordenades a un article
# Els arguments són l'objecte article i el text de les plantilles
# Accepta una cadena buida en comptes de les plantilles
# que no calgui posar
def posaplant(article,plantccat,plantcoor):
if article.isRedirectPage():
article=article.getRedirectTarget()
if article.exists():
# print u"ARTICLE "+nom+u" EXISTEIX"
plantarticle=article.templates()
text0=u""
text1=u""
text2=u""
# print plantarticle
if u'Commonscat' in plantarticle or u'Projectes germans' in plantarticle or u'Commons' in plantarticle or u'Commonscat-inline' in plantarticle or u'Commons cat' in plantarticle:
print article, u"ja té la plantilla Commonscat"
elif plantccat==u"":
print u"No tinc Commonscat per posar a",article
else:
text0=article.get()
text1=insertaccat(text0,plantccat)
if u'Coord' in plantarticle:
print article, u"ja té la plantilla Coord"
elif plantcoor==u"":
print u"No tinc coordenades per posar a",article
else:
if u"//toolserver.org/~geohack/geohack.php" in article.get(expandtemplates=True):
print article, u"ja té coordenades però sense la plantilla coord"
else:
if text1==u"":
text0=article.get()
text1=text0
text2=insertacoor(text1,plantcoor)
if text2 != u"":
textfinal=text2
print u"Posarem coordenades i potser ccat a", article
elif text1 != u"":
textfinal=text1
print u"Posarem ccat però no coordenades a", article
else:
textfinal=text0
if textfinal !=text0:
article.put(textfinal, u"Bot posa coordenades i/o Commonscat a partir les llistes de monuments")
return
# Ha de buscar i posar el paràmetre Commonscat i les coordenades
# L'argument és la pàgina d'una llista de monuments
# Basada en la funció creallista del preparacats16za
def cercacc(pag):
origen=pag.title() # POTSER NO CAL
tottemp=pag.templatesWithParams()
informe=u"" # Descripcions de les categories a crear.
resumllista=u"" # Resum estadístic de les categories a crear per una llista.
numcats=0 # Comptador pel nombre de categories en una llista.
ccatllista=u"" # Categoria de Commons que correspon a la llista d'acord amb la plantilla Commonscat.
for i in range(0, len(tottemp)):
if tottemp[i][0]==u'Filera IPA' or tottemp[i][0]==u'Filera MH' or tottemp[i][0]==u'Filera BIC' or tottemp[i][0]==u'Filera BIC Val' or tottemp[i][0]==u'Filera BIC And' or tottemp[i][0]==u'filera BC Sard' or tottemp[i][0]==u'filera BIC-ZA':
# print tottemp[i][1]
proposta=""
nom=""
nomcoor=""
nomnet=""
lloc=""
municipi=""
lat=""
lon=""
idd=""
idurl=""
imatge=""
commonscat=""
enllac=""
txtccat=u""
txtcoord=u""
for j in range(0,len(tottemp[i][1])): # llegeix la taula i n'extreu els camps
camp=tottemp[i][1][j].replace(u"\n","")
# print camp
if re.search(u"nom *?=",camp):
nom=re.sub(u" *?nom *?= *?","",camp)
nom=re.sub(u"<ref name.*>.*<.*>","",nom)
nom=re.sub(u"<.*>","",nom)
nom=eliminaespais(nom)
# print nom
if re.search(u"\[\[.*\]\]",nom):
enllac=re.sub(u"^.*?\[\[","",nom)
enllac=re.sub(u"\]\].*?$","",enllac)
enllac=re.sub(u"\|.*?$","",enllac)
nomnet=eliminaenllac(nom)
# print enllac
else:
nomnet=nom
if re.search(u"nomcoor *?=",camp):
nomcoor=re.sub(u"^ *?nomcoor *?= *?","",camp)
nomcoor=eliminaespais(nomcoor)
# print nomcoor
if re.search(u"municipi *?=",camp):
municipi=re.sub(u"^ *?municipi *?= *?","",camp)
municipi=eliminaenllac(municipi)
municipi=eliminaespais(municipi)
# print municipi
if re.search(u"lloc *?=",camp):
lloc=re.sub(u"^ *?lloc *?= *?","",camp)
lloc=eliminaenllac(lloc)
lloc=eliminaespais(lloc)
# print lloc
if re.search(u"lat *?=",camp):
lat=re.sub(u"^ *?lat *?= *?","",camp)
lat=lat.replace(" ","")
# print lat
if re.search(u"lon *?=",camp):
lon=re.sub(u"^ *?lon *?= *?","",camp)
lon=lon.replace(" ","")
# print lon
if re.search(u"idurl *?=",camp):
idurl=re.sub(u"^ *?idurl *?= *?","",camp)
idurl=idurl.replace(" ","")
# print idurl
if re.search(u"id *?=",camp): # POTSER NO CAL
idd=re.sub(u"^ *?id *?= *?","",camp)
idd=idd.replace(" ","")
# print idd
if re.search(u"imatge *?=",camp):
imatge=re.sub(u"^ *?imatge *?= *?","",camp)
if not(re.search(u"..",imatge)):
imatge=""
# print imatge
if re.search(u"commonscat *?=",camp):
commonscat=re.sub(u"^ *?commonscat *?= *?","",camp)
if not(re.search(u"..",commonscat)):
commonscat=""
# print commonscat
if commonscat !="":
txtccat=u"{{commonscat|"+commonscat+u"}}"
if lat !="" and lon !="":
txtcoord=u"{{coord|"+lat+"|"+lon+"|type:landmark_source:cawiki|display=title}}"
if enllac !="" and (txtccat!=u"" or txtcoord!=u""):
article=wikipedia.Page(site,enllac)
if article.exists():
posaplant(article,txtccat,txtcoord)
else:
print article, u"no existeix"
return informe
# Aquí comença el programa
lloc=u"Llistes de monuments de les Comarques Gironines"
site=wikipedia.getSite('ca')
l=catlib.Category(site,lloc).articlesList(recurse=True) #En condicions normals, posar recurse=True
#print l
informe=u""
for pag in l:
titol=pag.title()
print titol
pag=wikipedia.Page(site, titol)
informe=informe+cercacc(pag)
print u"RESUM:"
print informe
registre=wikipedia.Page(site,"usuari:PereBot/commonscat")
#registre.put(registre.get()+u"\n=="+lloc+u"==\n"+lloc+"\n\n"+informe+u"--~~~~",u"Resum edicions a partir de "+lloc)
wikipedia.stopme()