Usuari:PereBot/robot xucla arbres
Aparença
Compte que tot i haver estat publicat més tard, aquest programa és del 2015 i funcionava amb pywikibot compat. Pot ser que li calguin modificacions per funcionar amb core. |
# -*- 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('&msa=0&ll=.*?&spn=',textarbre):
coordenades=re.findall('&msa=0&ll=(.*?)&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&vgnextchannel=0a3aed9f1a321310VgnVCM10000074fea8c0RCRD&lang=ca_ES')
urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=08faed9f1a321310VgnVCM10000074fea8c0RCRD&vgnextchannel=08faed9f1a321310VgnVCM10000074fea8c0RCRD&lang=ca_ES')
urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=7a7bed9f1a321310VgnVCM10000074fea8c0RCRD&vgnextchannel=7a7bed9f1a321310VgnVCM10000074fea8c0RCRD&lang=ca_ES')
urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=c2fbed9f1a321310VgnVCM10000074fea8c0RCRD&vgnextchannel=c2fbed9f1a321310VgnVCM10000074fea8c0RCRD&lang=ca_ES')
urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=af5ced9f1a321310VgnVCM10000074fea8c0RCRD&vgnextchannel=af5ced9f1a321310VgnVCM10000074fea8c0RCRD&lang=ca_ES')
urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=52eced9f1a321310VgnVCM10000074fea8c0RCRD&vgnextchannel=52eced9f1a321310VgnVCM10000074fea8c0RCRD&lang=ca_ES')
urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=746ded9f1a321310VgnVCM10000074fea8c0RCRD&vgnextchannel=746ded9f1a321310VgnVCM10000074fea8c0RCRD&lang=ca_ES')
urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=90fded9f1a321310VgnVCM10000074fea8c0RCRD&vgnextchannel=90fded9f1a321310VgnVCM10000074fea8c0RCRD&lang=ca_ES')
urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=f88eed9f1a321310VgnVCM10000074fea8c0RCRD&vgnextchannel=f88eed9f1a321310VgnVCM10000074fea8c0RCRD&lang=ca_ES')
urldistr.append('/portal/site/MediAmbient/menuitem.37ea1e76b6660e13e9c5e9c5a2ef8a0c/?vgnextoid=e9feed9f1a321310VgnVCM10000074fea8c0RCRD&vgnextchannel=e9feed9f1a321310VgnVCM10000074fea8c0RCRD&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