Vés al contingut

Usuari:PereBot/robot copia coordenades de monuments fr

De la Viquipèdia, l'enciclopèdia lliure
# -*- 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()