Usuari:PereBot/robot xucla minerals

# -*- 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('C:\core')
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=""
    # 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+"}}\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:PereBot/prova")
desti.put(informe,u"Infotaules de minerals amb dades de mindat.org")
pywikibot.stopme()
#print informe