Usuari:PereBot/robot copia coordenades de monuments fr
Aparença
# -*- coding: utf-8 -*-
# Copia coordenades de les llistes de monuments franceses
import sys
sys.path.append('C:\compat')
sys.path.append('C:\compat\userinterfaces')
import wikipedia,catlib,pagegenerators,pickle
import re
# Completa les coordenades d'una llista en català a partir del diccionari de coordenades
def completa(pag,dicc):
font=u""
n=0
text=pag.get()
textnou=text
#files=re.findall(u"\{\{filera MH.*?(\n.*?\|.*?)*?\}\}",text)
files=re.split(u"\{\{filera MH",text)
#print files
for fila in files:
#print fila
#idd=re.findall(u"\| *id *=.*?\|",fila)
camps=re.split(u"\|",fila)
lat=u""
lon=u""
idd=u""
for camp in camps:
if u"=" in camp:
trossos=re.split(u"=",camp)
nomcamp=re.sub(u"\||\n",u"",trossos[0]).strip()
if len(trossos)>1:
contingut=re.sub(u"\||\n",u"",trossos[1]).strip()
if nomcamp==u"id":
idd=contingut
#print contingut
if nomcamp==u"lat":
lat=contingut
if nomcamp==u"lon":
lon=contingut
print idd,lat,lon
if len(idd)>1 and len(lat)<2 and len(lon)<2:
if idd in dicc.keys():
print fila
print u"sí que és a llista"
filanova=fila
txtlat=u"lat = {}".format(dicc[idd]["lat"])
filanova=re.sub(u"lat ?=",txtlat,filanova)
txtlon=u"lon = {}".format(dicc[idd]["lon"])
filanova=re.sub(u"lon ?=",txtlon,filanova)
if not dicc[idd]["pag"] in font:
font=font+u" i "+dicc[idd]["pag"]
print filanova
textnou=textnou.replace(fila,filanova)
n=n+1
else:
print fila
print u"no és a la llista"
if textnou!=text:
font=font[3:]
sumari=u"Robot copiant {} coordenades de {}".format(n,font)
print sumari
pag.put(textnou,sumari)
return
# Crea diccionari amb les coordenades d'una categoria de llistes
def coorcat(cat):
dicc={}
llistes=cat.articlesList(recurse=1)
print len(llistes),u"llistes per llegir"
for pag in pagegenerators.PreloadingGenerator(llistes):
print pag
nmon=0
ncoor=0
tottemp=pag.templatesWithParams()
for i in range(0, len(tottemp)):
if tottemp[i][0]==u'Ligne de tableau MH':
lat=""
lon=""
idd=""
nmon=nmon+1
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","")
camp=re.sub(u"<ref name.*>.*<.*>","",camp)
camp=re.sub(u"<ref ?>.*<.*>","",camp)
camp=re.sub(u"<.*>","",camp)
if re.search(u"latitude *?=",camp):
lat=re.sub(u"^ *?latitude *?= *?","",camp)
lat=lat.replace(" ","")
#print lat
elif re.search(u"longitude *?=",camp):
lon=re.sub(u"^ *?longitude *?= *?","",camp)
lon=lon.replace(" ","")
#print lon
elif re.search(u"notice *?=",camp):
idd=re.sub(u"^ *?notice *?= *?","",camp)
idd=idd.replace(" ","")
#print idd
if len(lat)>2 and len(lon)>2:
if idd!="":
dicc[idd]={"lat":lat,"lon":lon,"pag":u"[[:fr:{}]]".format(pag.title())}
#print dicc[idd]
ncoor=ncoor+1
else:
print u"latitud i longitud sense notice"
print u"{} monuments, {} coordenades".format(nmon,ncoor)
return dicc
# El programa comença aquí.
cawiki=wikipedia.getSite('ca')
frwiki=wikipedia.getSite('fr')
dicccoor={}#no cal (només per proves)
site=cawiki
llocfr=u"Catégorie:Liste en rapport avec les monuments historiques français"
catfr=catlib.Category(frwiki,llocfr)
actualitza=False #True per llegir frwiki, False per llegir del disc dur
if actualitza==True:
dicccoor=coorcat(catfr)
fitx=open("coordfrwiki.txt",'w')
pickle.dump(dicccoor,fitx)
fitx.close()
else:
fitx=open("coordfrwiki.txt",'r')
dicccoor=pickle.load(fitx)
fitx.close()
print len(dicccoor),"monuments a les llistes de frwiki"
llocca=u"Categoria:Llistes de monuments de França"
catca=catlib.Category(cawiki,llocca)
pagsca=catca.articlesList(recurse=1)
for pag in pagegenerators.PreloadingGenerator(pagsca):
print pag
completa(pag,dicccoor)
wikipedia.stopme()