Usuari:Yuanga/mineralbot
Aparença
# -*- coding: utf-8 -*-
# Programa per xuclar dades de mindat per muntar les
# infotaules de minerals.
# El programa és una adaptació d'un de similar que copiava
# les dades dels arbres d'interès local de Barcelona i
# alguns missatges i noms de variables poden ser
# poc adients pels minerals.
import sys
sys.path.append('/Users/Yuanga/Wiki')
import pywikibot
#from pywikibot import pagegenerators
from pywikibot.compat import catlib
import urllib,urllib2
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://www.mindat.org/'+url
try:
pagarbre=urllib.urlopen(url)
except IOError:
print "Error IO en obrir",url
return ""
textarbre=pagarbre.read()
if re.search('<h1>.*</h1>',textarbre):
nom=re.findall('<h1>(.*)</h1>',textarbre)[0].strip()
print "nom:",nom
else:
print u"no trobo el nom"
nom=""
if re.search('<a href="strunz.php">Nickel-Strunz 10th \(pending\) ed\.:</a></div><div class="mindatam2">..?\...\...<br>',textarbre):
nickelstrunz=re.findall('<a href="strunz.php">Nickel-Strunz 10th \(pending\) ed\.:</a></div><div class="mindatam2">(..?\...\...)<br>',textarbre)[0].strip()
print "nickelstrunz:",nickelstrunz
else:
print u"no trobo el nickel-strunz"
nickelstrunz=""
if re.search('<a href="dana.php">Dana 8th ed.:</a></div><div class="mindatam2">..?\..?.\..?.\..?.<br>',textarbre):
dana=re.findall('<a href="dana.php">Dana 8th ed.:</a></div><div class="mindatam2">(..?\..?.\..?.\..?.)<br>',textarbre)[0].strip()
print "dana:",dana
else:
print u"no trobo el dana"
dana=""
if re.search('<a href="cim.php">Hey\'s CIM Ref.:</a></div><div class="mindatam2">..?\...?\...?<br>',textarbre):
heys=re.findall('<a href="cim.php">Hey\'s CIM Ref.:</a></div><div class="mindatam2">(..?\...?\...?)<br>',textarbre)[0].strip()
print "heys:",heys
else:
print u"no trobo el heys"
heys=""
# Comença la part de muntar la plantilla amb les dades trobades
plant="{{infotaula de mineral\n"
plant=plant+" | nom = {}\n".format(nom)
plant=plant+" | strunz = {}\n".format(nickelstrunz)
plant=plant+" | dana = {}\n".format(dana)
plant=plant+" | heys = {}\n".format(heys)
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('http://www.mindat.org/chemsearch.php?inc=Dy%2CO%2C&exc=&ima=0&sub=Search+for+Minerals')
urldistr.append('http://www.mindat.org/chemsearch.php?inc=W%2C&exc=&ima=0&essential=0&class=7&sub=Search+for+Minerals')
#print urldistr
taula=""
for url in urldistr: #[:1]
url=''+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.findall('<a href="(min-[0-9]+.html)">',textdistr)
print len(trosarbres),u"minerals per llegir"
if '<a href="min-' in textdistr:
print u'hi ha <a href="min-'
for tros in trosarbres:
if "min" in tros:
print tros
llegit=llegeixarbre(tros)
print u"llegit",llegit
try:
taula=taula+llegit+"\n"
except UnicodeDecodeError:
print u"Error unicode. Saltant mineral."
continue
else:
print u'no hi ha <a href="min-'
print u"taula",taula
return taula
# El programa comença aquí.
informe=""
informe=informe+llegeixarbres()
print "informe:",len(informe)
informe=unialinia(informe)
site=pywikibot.getSite('ca')
desti=pywikibot.Page(site,u"usuari:Yuanga/minerals")
desti.put(informe,u"Infotaules de minerals amb dades de mindat.org")
pywikibot.stopme()
#print informe