Usuari:PereBot/robot xucla arbres

De la Viquipèdia, l'enciclopèdia lliure
# -*- coding: utf-8 -*-

import sys
sys.path.append('C:\compat')
sys.path.append('C:\compat\userinterfaces')
import catlib,urllib,urllib2#,wikipedia
import re

# Convertix a unicode saltant-se les paraules que no pugui
def uniaparaula(text):
    linies=re.split(u" ",text)
    noutext=u""
    for linia in linies:
        try:
            novalinia=unicode(linia,"utf-8")
        except UnicodeDecodeError:
            print u"error a la paraula:",linia
            novalinia=u"<!-- ERROR DE CONVERSIÓ UNICODE -->"
        noutext=noutext+novalinia+u" "
    return noutext

# Convertix a unicode saltant-se les línies que no pugui
def unialinia(text):
    linies=re.split(u"\n",text)
    noutext=u""
    for linia in linies:
        try:
            novalinia=unicode(linia,"utf-8")
        except UnicodeDecodeError:
            print u"error a la línia:",linia
            novalinia=uniaparaula(linia)
        noutext=noutext+novalinia+u"\n"
    return noutext

def llegeixarbre(url):
    # Comença la part de llegir les dades del web
    url='http://w110.bcn.cat'+url
    try:
        pagarbre=urllib.urlopen(url)
    except IOError:
        print "Error IO en obrir",url
        return {}
    textarbre=pagarbre.read()
    if re.search("<h2>.*</h2>",textarbre):
        nom=re.findall("<h2>(.*)</h2>",textarbre)[0].strip()
        print "nom:",nom
    else:
        print u"no trobo el nom"
        nom=""
    if re.search('<p class="intro">.*?</p>',textarbre):
        nomcient=re.findall('<p class="intro">(.*?)</p>',textarbre)[0].strip()
        print "nom científic:",nomcient
    else:
        print u"no trobo el nom científic"
        nomcient=""
    if re.search('<strong>Situació:?</strong>:?.*?<br/>',textarbre):
        situacio=re.findall('<strong>Situació:?</strong>:?(.*?)<br/>',textarbre)[0].strip()
        print "situació:",situacio
    elif re.search('<strong>Situació:?</strong>:?.*?</p>',textarbre.replace("\n","")):
        situacio=re.findall('<strong>Situació:?</strong>:?(.*?)</p>',textarbre.replace("\n",""))[0].strip()
        print "situació:",situacio,u"trobada eliminant salts de línia i amb </p>"
    elif re.search('<strong>Situació:?</strong>:?.*?<br/>',textarbre.replace("\n","")):
        situacio=re.findall('<strong>Situació:?</strong>:?(.*?)<br/>',textarbre.replace("\n",""))[0].strip()
        print "situació:",situacio,u"trobada eliminant salts de línia"
    else:
        print u"no trobo la situació"
        situacio=""
    if re.search("<strong>|<br/>",situacio):
        situacio=re.split("<strong>|<br/>",situacio)[0]
    if re.search('&amp;msa=0&amp;ll=.*?&amp;spn=',textarbre):
        coordenades=re.findall('&amp;msa=0&amp;ll=(.*?)&amp;spn=',textarbre)[0].strip()
        print "coordenades:",coordenades
        [lat,lon]=re.split(",",coordenades)
        print "lat:",lat
        print "lon:",lon
    else:
        print u"no trobo les coordenades"
        lat=""
        lon=""
    if re.search('<strong>Núm. de catàleg:?</strong>:?.*?</p>',textarbre):
        numcat=re.findall('<strong>Núm. de catàleg:?</strong>:?(.*?)</p>',textarbre)[0].strip()
        print "num de catàleg:",numcat
    else:
        print u"no trobo el num de catàleg"
        numcat=""
    if re.search('<strong>Districte:?</strong>:?.*?</p>',textarbre):
        districte=re.findall('<strong>Districte:?</strong>:?(.*?)</p>',textarbre)[0].strip()
        print "districte:",districte
    else:
        print u"no trobo el districte"
        districte=""
    if re.search('<li>Alçària:.*?</li>',textarbre):
        alcaria=re.findall('<li>Alçària:(.*?)</li>',textarbre)[0].strip(" .")
        print u"alçària:",alcaria
    else:
        print u"no trobo l'alçària"
        alcaria="-"
    if re.search('<li>Volta de canó a 1,3 m.:.*?</li>',textarbre):
        voltacano=re.findall('<li>Volta de canó a 1,3 m.:(.*?)</li>',textarbre)[0].strip(" .")
        print u"Volta de canó a 1,3 m.:",voltacano
    else:
        print u"no trobo la volta de canó a 1,3 m."
        voltacano="-"
    if re.search('<li>Capçada \(diàmetre\):.*?</li>',textarbre):
        diamcap=re.findall('<li>Capçada \(diàmetre\):(.*?)</li>',textarbre)[0].strip(" .")
        print u"Capçada (diàmetre):",diamcap,"trobat"
    else:
        print u"no trobo el diàmetre de la capçada"
        diamcap="-"
    if diamcap=="":
        diamcap="-"
    if re.search('<li>Any de catalogació:.*?</li>',textarbre):
        anycat=re.findall('<li>Any de catalogació:(.*?)</li>',textarbre)[0].strip()
        print u"Any de catalogació:",anycat
    else:
        print u"no trobo any de catalogació"
        anycat=""
    if re.search('<li>Data aproximada de naixement:.*?</li>',textarbre):
        anyneix=re.findall('<li>Data aproximada de naixement:(.*?)</li>',textarbre)[0].strip()
        print u"Data aproximada de naixement:",anyneix
    else:
        print u"no trobo l'any naixement"
        anyneix="-"
    # Comença la part de muntar la plantilla amb les dades trobades
    plant="{{filera patrimoni natural\n"
    plant=plant+" | nom = {}\n".format(nom)
    plant=plant+" | coord-nom = {} (Barcelona)\n".format(nom)
    plant=plant+" | protecció = AL {}\n".format(anycat)
    plant=plant+" | tipus = ''[[{}]]''\n".format(nomcient)
    plant=plant+" | dimensions = {}*{}*{}".format(alcaria,voltacano,diamcap)
    if anyneix=="-" or "sense dades" in anyneix:
        plant=plant+"\n"
    else:
        plant=plant+"<br/>Nascut cap al {}\n".format(anyneix)
    plant=plant+" | municipi = Barcelona\n"
    plant=plant+" | lloc = {}<br/>{}\n".format(situacio,districte)
    plant=plant+" | lat = {}\n".format(lat)
    plant=plant+" | lon = {}\n".format(lon)
    plant=plant+" | regió = ES-CT-AT01\n"
    plant=plant+" | fitxa = {}\n".format(url)
    plant=plant+" | codi = MA-080193/{}\n".format(numcat)
    plant=plant+" | imatge =\n"
    plant=plant+" | commonscat =\n"
    plant=plant+"}}\n"
    plant=plant.replace("\n\n\n","\n").replace("\n\n","\n").replace(" = <br/>"," =")
    print plant
    return plant

def llegeixarbres():
    urldistr=[]
    urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=0a3aed9f1a321310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=0a3aed9f1a321310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES')
    urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=08faed9f1a321310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=08faed9f1a321310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES')
    urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=7a7bed9f1a321310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=7a7bed9f1a321310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES')
    urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=c2fbed9f1a321310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=c2fbed9f1a321310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES')
    urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=af5ced9f1a321310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=af5ced9f1a321310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES')
    urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=52eced9f1a321310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=52eced9f1a321310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES')
    urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=746ded9f1a321310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=746ded9f1a321310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES')
    urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=90fded9f1a321310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=90fded9f1a321310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES')
    urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=f88eed9f1a321310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=f88eed9f1a321310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES')
    urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=e9feed9f1a321310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=e9feed9f1a321310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES')
    #print urldistr
    taula=""
    for url in urldistr: #[:1]
        url='http://w110.bcn.cat'+url
        try:
            pagdistr=urllib.urlopen(url)
        except IOError:
            print "Error IO en obrir",url
            continue
        print "obert"
        textdistr=pagdistr.read()
        #trosarbres=re.findall("<h3>.*?</h3>",textdistr)
        trosarbres=re.split("<h3>",textdistr)
        print len(trosarbres)
        if "<h3>" in textdistr:
            print u"hi ha <h3>"
        for tros in trosarbres:
            if "</h3>" in tros:
                tros=re.split("</h3>",tros)[0]
                #print tros
                tros=re.findall('<a href=".*">',tros)[0]
                tros=tros.replace('<a href="',"").replace('">',"")
                print tros
                taula=taula+llegeixarbre(tros)
            else:
                print u"no hi ha </h3>"
    return taula


# El programa comença aquí.
informe="{{Capçalera patrimoni natural|tipus=Espècie / situació|dimensions=Alçària x volt del canó x capçada}}\n"
informe=informe+llegeixarbres()
informe=informe+"|}\n"
print "informe:",len(informe)
informe=unialinia(informe)
import wikipedia
site=wikipedia.getSite('ca')
desti=wikipedia.Page(site,u"usuari:PereBot/prova")
desti.put(informe,u"Arbres d'interès local de Barcelona")
#print informe