Usuari:PereBot/robot comprova bcin-bcil

De la Viquipèdia, l'enciclopèdia lliure

La sortida que produeix aquest programa és a Usuari:PereBot/comprovació bcin-bcil.

# -*- coding: utf-8 -*-
# A partir d'una llista de monuments o d'una categoria de llistes
# compara la protecció (BCIN o BCIL) amb la de la base Gaudí.
# Està pensat per detectar els BCIL que no estan marcats a
# les nostres llistes perquè abans la informació no sortia
# a la base Gaudí.
# Compte que aquest programa és reciclat a partir d'un que
# feia una tasca força diferent, i la major part del codi
# no fa res d'útil, però m'ha fet mandra esporgar el programa
# de les parts que tampoc hi fan cap nosa.
# Els missatges també poden ser sorprenentment inadequats.

import sys
sys.path.append('C:\compat')
sys.path.append('C:\compat\userinterfaces')
import wikipedia,catlib,urllib,urllib2
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
# NOTA: Aquesta funció no cal perquè es pot fer amb el mètode strip
def eliminaespais(text):
    text=re.sub(u"^ *","",text)
    text=re.sub(u" *$","",text)
    return text

# Crea una llista d'esborrany per editar i pujar-la amb el bot,
# o per copiar i enganxar les descripcions de la categoria.
# El paràmetre origen és el nom d'una llista de monuments.
def creallista(origen): ##,llistafotos,minfotos
    pag=wikipedia.Page(site,origen)
    tottemp=pag.templatesWithParams()
    informe=u"[[{}]]\n\n".format(origen)        
    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.
    classe=u""
    for i in range(0, len(tottemp)):
        classe0=u""
        #if tottemp[i][0]==u'Filera art públic':
        #    classe0=u"art"
        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':
            classe0=u"monument"
#            print u"MONUMENT"
        #if tottemp[i][0]==u'Filera patrimoni natural':
        #    classe0=u"natural"
        if classe0!=u"":
            classe=classe0
#            print u"classe:",classe
    #        print tottemp[i][1]
            proposta=""
            nom=""
            nomcoor=""
            nomnet=""
            lloc=""
            municipi=""
            lat=""
            lon=""
            idd=""
            codi=""
            idprot=""
            prot=""
            idurl=""
            imatge=""
            autor=""
            data=""
            descripcio=""
            material=""
            commonscat=""
            enllac=""
            tipus=""
            dimensions=""
            coorddim=""
            coordtype=""
            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)
    #            print camp
                if re.search(u"coord-nom *?=",camp):
                    nomcoor=re.sub(u"^ *?coord-nom *?= *?","",camp)
                    nomcoor=eliminaespais(nomcoor)
    #                print nomcoor
                elif re.search(u"nom *?=",camp):
                    nom=re.sub(u" *?nom *?= *?","",camp)
                    nom=re.sub(u"<ref name.*>.*<.*>","",nom)
                    nom=re.sub(u"<ref ?>.*<.*>","",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
                elif re.search(u"idprot *?=",camp):
                    idprot=re.sub(u"^ *?idprot *?= *?","",camp)
                    idprot=idprot.replace(" ","")
                    #print u"idprot:",idprot
                elif re.search(u"prot *?=",camp):
                    prot=re.sub(u"^ *?prot *?= *?","",camp)
                    prot=prot.replace(" ","")
                    print u"prot:",prot
                elif re.search(u"nomcoor *?=",camp):
                    nomcoor=re.sub(u"^ *?nomcoor *?= *?","",camp)
                    nomcoor=eliminaespais(nomcoor)
    #                print nomcoor
                elif re.search(u"municipi *?=",camp):
                    municipi=re.sub(u"^ *?municipi *?= *?","",camp)
                    municipi=eliminaenllac(municipi)
                    municipi=municipi.strip()
    #                print municipi
                elif re.search(u"lloc *?=",camp):
                    lloc=re.sub(u"^ *?lloc *?= *?","",camp)
                    lloc=eliminaenllac(lloc)
                    lloc=lloc.strip()
    #                print lloc
                elif re.search(u"lat *?=",camp):
                    lat=re.sub(u"^ *?lat *?= *?","",camp)
                    lat=lat.replace(" ","")
    #                print lat
                elif re.search(u"lon *?=",camp):
                    lon=re.sub(u"^ *?lon *?= *?","",camp)
                    lon=lon.replace(" ","")
    #                print lon
                elif re.search(u"idurl *?=",camp):
                    idurl=re.sub(u"^ *?idurl *?= *?","",camp)
                    idurl=idurl.replace(" ","")
                    print u"idurl:",idurl
                elif re.search(u"id *?=",camp):
                    idd=re.sub(u"^ *?id *?= *?","",camp)
                    idd=idd.replace(" ","")
    #                print idd
                elif re.search(u"descripció *?=",camp):
                    descripcio=re.sub(u"^ *?descripció *?= *?","",camp)
                    descripcio=descripcio.strip()
    #                print descripcio
                elif re.search(u"codi *?=",camp):
                    codi=re.sub(u"^ *?codi *?= *?","",camp)
                    codi=codi.replace(" ","")
    #                print codi
                elif re.search(u"data *?=",camp):
                    data=re.sub(u"^ *?data *?= *?","",camp)
                    data=data.strip()
    #                print data
                elif re.search(u"material *?=",camp):
                    material=re.sub(u"^ *?material *?= *?","",camp)
                    material=eliminaenllac(material)
                    material=material.strip()
    #                print material
                elif re.search(u"autor *?=",camp):
                    autor=re.sub(u"^ *?autor *?= *?","",camp)
                    autor=eliminaenllac(autor)
                    autor=autor.strip()
    #                print autor
                elif re.search(u"imatge *?=",camp):
                    imatge=re.sub(u"^ *?imatge *?= *?","",camp)
                    if not(re.search(u"..",imatge)):
                        imatge=""
    #                print imatge
                elif re.search(u"commonscat *?=",camp):
                    commonscat=re.sub(u"^ *?commonscat *?= *?","",camp)
                    commonscat=commonscat.strip()
                    if not(re.search(u"..",commonscat)):
                        commonscat=""
    #                print commonscat
                elif re.search(u"tipus *?=",camp):
                    tipus=re.sub(u"^ *?tipus *?= *?","",camp)
                    tipus=tipus.strip()
                    if not(re.search(u"..",tipus)):
                        tipus=""
    #                print tipus
                elif re.search(u"coord-dim *?=",camp):
                    coorddim=re.sub(u"^ *?coord-dim *?= *?","",camp)
                    coorddim=coorddim.strip()
                    if not(re.search(u"..",coorddim)):
                        coorddim=""
    #                print coorddim
                elif re.search(u"coord-type *?=",camp):
                    coordtype=re.sub(u"^ *?coord-type *?= *?","",camp)
                    coordtype=coordtype.strip()
                    if not(re.search(u"..",coordtype)):
                        coordtype=""
    #                print coordtype
##            numfotos=llistafotos.count(idd)
            if idurl!=u"":
                linia=u""
                #urlbg=idprot.replace(u"-MH",u"")
                urlbg=u"http://invarquit.cultura.gencat.cat/Cerca/Fitxa?index=0&consulta=&codi={}".format(idurl)
                protbg=u""
                try:
                    pagbg=urllib.urlopen(urlbg)
                except IOError:
                    print "Error IO en obrir",urlbg
                    protbg=u"Error en obrir"
                #print "obert"
                if protbg==u"Error en obrir":
                    linia=u"*{}: Error en obrir la base Gaudí".format(nomnet)
                    pass
                else:
                    textbh=pagbg.read()
                    if "<td>BCIL</td>" in textbh:
                        protbg=u"BCIL"
                    if "<td>BCIN</td>" in textbh:
                        protbg=u"BCIN"
                    if prot==u"":
                        prottext=u"Sense protecció"
                    else:
                        prottext=prot
                    if prot!=u"" or protbg!=u"":
                        linia=u"*{}: {} segons llista, {} segons base Gaudí".format(nomnet,prottext,protbg)
                    if prot!=protbg:
                        linia=linia+u" '''DIFERENT'''"
                    if linia!=u"":
                        print linia
                        linia=linia+u"\n"
                    informe=informe+linia
    return informe

# El programa comença aquí.
#lloc=u"Llista de monuments de Rubí"
lloc=u"Llistes de monuments de l'Alt Pirineu i Aran"
fotosmin=2
paginaunica=False        #True si lloc és una llista de monuments, False si és una categoria de llistes
subs=1                   #0 per no buscar fotos a les subcategories, 1 per buscar-n'hi
site=wikipedia.getSite('ca')
sitecommons=wikipedia.getSite('commons','commons')
resumgral=""
llarg=-300
registre=wikipedia.Page(site,u"usuari:PereBot/comprovació bcin-bcil")
text0=registre.get()
if paginaunica:
    resumgral=creallista(lloc) ##,llistafotos,fotosmin
else:
    l=catlib.Category(site,lloc).articlesList(recurse=1) 
    #print l
    for pag in l:
        titol=pag.title()
        print titol
        resumgral=resumgral+creallista(titol)
        if len(resumgral)-llarg>1500: #Canviar per regular cada quant desa
            resumgraltxt=u"== "+lloc+" ==\n"+resumgral+"\n"
            registre.put(text0+u"\n"+resumgraltxt+u"Feina en curs.--~~~~",lloc)
            llarg=len(resumgral)
resumgraltxt=u"== "+lloc+" ==\n"+resumgral+"\n"
registre.put(text0+u"\n"+resumgraltxt+u"Feina acabada.--~~~~",lloc)
wikipedia.stopme()