# -*- 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/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=""

    #Traduïm el nom
    nomcat = nom
    t = nomcat[-4:]
    if t == 'aite' or t == 'eite' or t == 'iite' or t == 'oite' or t == 'uite':
        nomcat = nomcat[0:-3] + 'ïta'
        
    if nomcat[-3:] == 'ite':
        nomcat = nomcat[0:-3] + 'ita'

    if 'Phyllo' in nomcat:
        nomcat = 'Fil·lo' + nomcat[6:]
        
    if '-(' in nomcat:
        nomtros = nomcat.split('-(')
        nomtrosprimerapart = nomtros[0]
        if nomtrosprimerapart[-3:] == 'ite':
            nomcat = nomtrosprimerapart[0:-3] + 'ita-(' + nomtros[1]
            t = nomtrosprimerapart[-4:]
            if t == 'aite' or t == 'eite' or t == 'iite' or t == 'oite' or t == 'uite':
                nomcat = nomtrosprimerapart[0:-3] + 'ïta-(' + nomtros[1]

    nomcatmini = nomcat[0:1].lower() + nomcat[1:]

    nickelstrunz = ''       
    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()

    categoria = {'1':'[[elements natius]]', '2':'[[minerals sulfurs|sulfurs]]', '3':'[[minerals halurs|halurs]]',
                 '4':'[[minerals òxids|òxids]]', '5':'[[minerals carbonats|carbonats]]', '6':'[[minerals borats|borats]]',
                 '7':'[[minerals sulfats|sulfats]]', '8':'[[minerals fosfats|fosfats]]', '9':'[[minerals silicats|silicats]]',
                 '10':'[[compostos orgànics|substàncies orgàniques]]'}
    primer = nickelstrunz.split('.')
    categoriaF = categoria.get(primer[0],'!!!')

    if '|' in categoriaF:
        catA = categoriaF.split('|')
        catB = catA[1].split(']')
        catC = catB[0]
        categoriaG = catC[:-1]
    else:
        categoriaG = 'element químic'

    dana = '' 
    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()

    heys = ''
    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()

    descobriment = ''
    if re.search('Year of Discovery:</div><div class="mindatam2">....</div>',textarbre):
        descobriment=re.findall('Year of Discovery:</div><div class="mindatam2">(....)</div>',textarbre)[0].strip()

    tipus = ''
    if re.search('<a href="/glossary/type_locality">Type Locality:</a></div><div class="mindatam2"><a href="loc-.*?.html">.*?</a>',textarbre):
        tipus=re.findall('<a href="/glossary/type_locality">Type Locality:</a></div><div class="mindatam2"><a href="loc-.*?.html">(.*?)</a>',textarbre)[0].strip()

    lluentorF = ''
    if re.search('<a href="/glossary/lustre">Lustre:</a></div><div class="mindatam2">.*?</div>',textarbre):
        lluentor=re.findall('<a href="/glossary/lustre">Lustre:</a></div><div class="mindatam2">(.*?)</div>',textarbre)[0].strip().lower()
        diccionari = {'vitreous':'vítria', 'earthy':'terrosa', 'dull':'mat', 'waxy':'cerosa', 'metallic':'metàl·lica', 'adamantine':'adamantina', 'pearly':'nacrada', 'resinous':'resinosa', 'sub-adamantine':'subadamantina'}
        lluentors = lluentor.split(', ')
        for x in lluentors:
            lluentorF = lluentorF + diccionari.get(x,x+'*') + ', '

    diafanitatF = ''
    if re.search('Diaphaneity \(Transparency\):</div><div class="mindatam2">.*?</div>',textarbre):
        diafanitat=re.findall('Diaphaneity \(Transparency\):</div><div class="mindatam2">(.*?)</div>',textarbre)[0].strip().lower()
        diccionari = {'translucent':'translúcida', 'transparent':'transparent', 'opaque':'opaca'}
        diafanitats = diafanitat.split(', ')
        for x in diafanitats:
            diafanitatF = diafanitatF + diccionari.get(x,'!!!') + ', '

    colorF = ''
    if re.search('Colour:</div><div class="mindatam2">.*?<',textarbre):
        color=re.findall('Colour:</div><div class="mindatam2">(.*?)<',textarbre)[0].strip().lower().rstrip('.')
        diccionari = {'red':'vermell', 'pale red':'vermell clar', 'light red':'vermell clar', 'dark red':'vermell fosc',
                      'pinky-red':'vermell rosat', 'blue':'blau', 'light blue':'blau clar', 'pale blue': 'blau clar',
                      'dark blue':'blau fosc', 'greenish-blue':'blau verdós', 'navy blue':'blau marí', 'cerulean':'ceruli',
                      'sky blue':'blau cel', 'turquoise blue':'blau turquesa', 'turquoise':'blau turquesa', 'blue-green':'blau verd',
                      'teal':'xarxet', 'teal blue':'blau xarxet', 'cyan':'cian', 'green':'verd', 'light green':'verd clar',
                      'pale green': 'verd clar', 'dark green':'verd fosc', 'bluish-green':'verd blavós', 'lime':'llima',
                      'green lime':'verd llima', 'chartreuse': 'color de chartreuse', 'olive':'oliva', 'olive green':'verd oliva',
                      'greenish':'verdós', 'greenish-black':'negre verdós', 'apple-green':'verd poma', 'grass green':'verd herba',
                      'emerald green':'verd maragda', 'greenish yellow':'groc verdós', 'pink':'rosa', 'pale pink':'rosa clar',
                      'light pink':'rosa clar', 'dark pink':'rosa fosc', 'reddish-pink':'rosa vermellós', 'red pink':'rosa vermell',
                      'red violet':'vermell violaci', 'rose':'rosa fort', 'magenta':'magenta', 'purple':'porpra',
                      'bluish-purple':'porpra blavós', 'reddish-purple':'porpra vermellós', 'indigo':'color indi/anyil',
                      'violet':'violat', 'yellow':'groc', 'pale yellow':'groc clar', 'light yellow':'groc clar', 'dark yellow':'groc fosc',
                      'orange-yellow':'taronja-groc',  'reddish-yellow':'groc vermellós', 'greenish-yellow':'groc verdós',
                      'bluish-yellow':'groc blavós', 'gold':'daurat', 'lemon-yellow':'groc llimona',
                      'pale brass-yellow':'groc llautó clar', 'brass yellow':'groc llautó', 'brass':'llautó',
                      'cadmium-yellow':'groc cadmi', 'cream-yellow':'groc crema', 'orange':'taronja', 'pale orange':'taronja clar',
                      'light orange':'taronja clar', 'dark orange':'taronja fosc',  'cream':'color crema', 'white':'blanc',
                      'yellowish-white':'blanc groguenc', 'bluish-white':'blanc blavós', 'reddish-white':'blanc vermellós',
                      'greenish-white':'blanc verdós', 'creamy-white':'blanc cremós', 'ivory':'color d’ivori', 'snow white':'blanc neu',
                      'silver':'platejat', 'tin':'color d’estany', 'lead':'color de plom', 'black':'negre', 'bluish-black':'negre blavós',
                      'greenish-black':'negre verdós', 'grey':'gris', 'pale grey':'gris clar', 'light grey':'gris clar', 'dark grey':'gris fosc',
                      'yellowish-grey':'gris groguenc',  'reddish-grey':'gris vermellós', 'greenish-grey':'gris verdós', 'bluish-grey':'gris blavós',
                      'brown':'marró', 'pale brown':'marró clar', 'light brown':'marró clar', 'dark brown':'marró fosc', 'yellowish-brown':'marró groguenc',
                      'orange-brown':'marró ataronjat', 'reddish-brown':'marró vermellós', 'greenish-brown':'marró verdós', 'earthy-brown':'color terra',
                      'pale':'clar', 'light':'clar', 'dark':'fosc', 'intense':'intens', 'reddish brown':'marró vermellós',
                      'yellowish gray':'gris groguenc', 'smoky-gray':'gris fumat', 'gray-brown':'gris-marró', 'tan':'bronze',
                      'golden-yellow':'groc daurat','colourless':'incolor', 'olive-green':'verd oliva', 'pistachio-green':'verd festuc',
                      'grayish-white':'blanc grisenc', 'straw-yellow':'groc palla'}
        colors = color.split(', ')
        for x in colors:
            colorF = colorF + diccionari.get(x,x+'*') + ', '

    ratllaF = ''
    if re.search('Streak:</div><div class="mindatam2">.*?<',textarbre):
        ratlla=re.findall('Streak:</div><div class="mindatam2">(.*?)<',textarbre)[0].strip().lower()
        diccionari = {'red':'vermella', 'pale red':'vermell clar', 'light red':'vermell clar', 'dark red':'vermell fosc',
                      'pinky-red':'vermell rosat', 'blue':'blava', 'light blue':'blau clar', 'pale blue': 'blau clar',
                      'dark blue':'blau fosc', 'greenish-blue':'blau verdós', 'navy blue':'blau marí', 'cerulean':'ceruli',
                      'sky blue':'blau cel', 'turquoise blue':'blau turquesa', 'turquoise':'blau turquesa', 'blue-green':'blau verd',
                      'teal':'xarxet', 'teal blue':'blau xarxet', 'cyan':'cian', 'green':'verd', 'light green':'verd clar',
                      'pale green': 'verd clar', 'dark green':'verd fosc', 'bluish-green':'verd blavós', 'lime':'llima',
                      'green lime':'verd llima', 'chartreuse': 'color de chartreuse', 'olive':'oliva', 'olive green':'verd oliva',
                      'greenish':'verdós', 'greenish-black':'negre verdós', 'apple-green':'verd poma', 'grass green':'verd herba',
                      'emerald green':'verd maragda', 'greenish yellow':'groc verdós', 'pink':'rosa', 'pale pink':'rosa clar',
                      'light pink':'rosa clar', 'dark pink':'rosa fosc', 'reddish-pink':'rosa vermellós', 'red pink':'rosa vermell',
                      'red violet':'vermell violaci', 'rose':'rosa fort', 'magenta':'magenta', 'purple':'porpra',
                      'bluish-purple':'porpra blavós', 'reddish-purple':'porpra vermellós', 'indigo':'color indi/anyil',
                      'violet':'violat', 'yellow':'groc', 'pale yellow':'groc clar', 'light yellow':'groc clar', 'dark yellow':'groc fosc',
                      'orange-yellow':'taronja-groc',  'reddish-yellow':'groc vermellós', 'greenish-yellow':'groc verdós',
                      'bluish-yellow':'groc blavós', 'gold':'daurat', 'lemon-yellow':'groc llimona',
                      'pale brass-yellow':'groc llautó clar', 'brass yellow':'groc llautó', 'brass':'llautó',
                      'cadmium-yellow':'groc cadmi', 'cream-yellow':'groc crema', 'orange':'taronja', 'pale orange':'taronja clar',
                      'light orange':'taronja clar', 'dark orange':'taronja fosc',  'cream':'color crema', 'white':'blanc',
                      'yellowish-white':'blanc groguenc', 'bluish-white':'blanc blavós', 'reddish-white':'blanc vermellós',
                      'greenish-white':'blanc verdós', 'creamy-white':'blanc cremós', 'ivory':'color d’ivori', 'snow white':'blanc neu',
                      'silver':'platejat', 'tin':'color d’estany', 'lead':'color de plom', 'black':'negre', 'bluish-black':'negre blavós',
                      'greenish-black':'negre verdós', 'grey':'gris', 'pale grey':'gris clar', 'light grey':'gris clar', 'dark grey':'gris fosc',
                      'yellowish-grey':'gris groguenc',  'reddish-grey':'gris vermellós', 'greenish-grey':'gris verdós', 'bluish-grey':'gris blavós',
                      'brown':'marró', 'pale brown':'marró clar', 'light brown':'marró clar', 'dark brown':'marró fosc', 'yellowish-brown':'marró groguenc',
                      'orange-brown':'marró ataronjat', 'reddish-brown':'marró vermellós', 'greenish-brown':'marró verdós', 'earthy-brown':'color terra',
                      'pale':'clar', 'light':'clar', 'dark':'fosc', 'intense':'intens', 'reddish brown':'marró vermellós',
                      'yellowish gray':'gris groguenc', 'smoky-gray':'gris fumat', 'gray-brown':'gris-marró', 'tan':'bronze',
                      'golden-yellow':'groc daurat','colourless':'incolor', 'olive-green':'verd oliva', 'pistachio-green':'verd festuc',
                      'grayish-white':'blanc grisenc', 'straw-yellow':'groc palla'}
        ratlles = ratlla.split(', ')
        for x in ratlles:
            ratllaF = ratllaF + diccionari.get(x,x+'*') + ', '

    tenacitatF = ''
    if re.search('Tenacity:</div><div class="mindatam2">.*?<',textarbre):
        tenacitat=re.findall('Tenacity:</div><div class="mindatam2">(.*?)<',textarbre)[0].strip().lower()
        diccionari = {'brittle':'fràgil','malleable':'mal·leable'}
        tenacitats = tenacitat.split(' ,')
        for x in tenacitats:
            tenacitatF = tenacitatF + diccionari.get(x,x+'*') + ', '

    exfoliacio = ''
    if re.search('Cleavage:</div><div class="mindatam2">.*?</',textarbre):
        exfoliacio=re.findall('Cleavage:</div><div class="mindatam2">(.*?)</',textarbre)[0].strip().lower()
        exfoliacio = exfoliacio.replace('<br>', ' - ') + '*'

    fracturaF = ''
    if re.search('Fracture:</div><div class="mindatam2">.*?<',textarbre):
        fractura=re.findall('Fracture:</div><div class="mindatam2">(.*?)<',textarbre)[0].strip().lower()
        diccionari = {'conchoidal':'concoïdal', 'irregular':'irregular', 'uneven':'desigual', 'sub-conchoidal':'subconcoïdal',
                      'hackly':'aspre'}
        fractures = re.split(', |/', fractura)
        for x in fractures:
            fracturaF = fracturaF + diccionari.get(x,x+'*') + ', '

    densitat = ''
    if re.search('Density:</div><div class="mindatam2">.*?</d',textarbre):
        densitat=re.findall('Density:</div><div class="mindatam2">(.*?)</d',textarbre)[0].strip().lower()
        densitat = densitat.replace('measured', 'mesurada').replace('calculated', 'calculada').replace('.', ',').replace(' &nbsp;&nbsp;&nbsp;', '; ').replace('-', 'a')

    sistema = ''
    if re.search('Crystal System:</div><div class="mindatam2">.*?<',textarbre):
        sistema=re.findall('Crystal System:</div><div class="mindatam2">(.*?)<',textarbre)[0].strip().lower()
        diccionari = {'tetragonal':'[[sistema tetragonal|tetragonal]]', 'orthorhombic':'[[sistema ortoròmbic|ortoròmbic]]',
                      'hexagonal':'[[sistema hexagonal|hexagonal]]', 'triclinic':'[[sistema triclínic|triclínic]]',
                      'monoclinic':'[[sistema monoclínic|monoclínic]]', 'isometric':'[[sistema isomètric|isomètric]]'}
        sistema = diccionari.get(sistema, sistema+'*')
    sistA = sistema.split('|')
    sistemaLlarg = sistA[0]+']]' 

    simetria = ''
    if re.search('Class \(H-M\):</div><div class="mindatam2">.*?</d',textarbre):
        simetria=re.findall('Class \(H-M\):</div><div class="mindatam2">(.*?)</d',textarbre)[0].strip().lower()
        diccionari = {'dipyramidal':'dipiramidal', 'prismatic':'prismàtica', 'dihexagonal dipyramidal':'dihexagonal dipiramidal',
                      'trapezohedral':'trapezohedral', 'pinacoidal':'pinacoide'}
        simetries = simetria.split(' - ')
        simetria = simetries[0] + ' - ' + diccionari.get(simetries[1],simetries[1]+'*')
        simetria = simetria.replace('</i><i>', '').replace('<i>', '\'\'').replace('</i>', '\'\'')

    estructura = ''
    if re.search('Cell Parameters:</div><div class="mindatam2">.*?</',textarbre):
        estructura=re.findall('Cell Parameters:</div><div class="mindatam2">(.*?)</',textarbre)[0].strip().lower()
        estructura = estructura.replace(',', ';').replace('.', ',').replace('Å', 'Å').replace('<br>', '; ').replace('α', 'α').replace('°', '°').replace('β', 'β').replace('γ', 'γ')

    propoptiques = ''
    if re.search('Type:</div><div class="mindatam2">.*?</',textarbre):
        propoptiques=re.findall('Type:</div><div class="mindatam2">(.*?)</',textarbre)[0].strip().lower()
        propoptiques = propoptiques+'*'

    refraccio = ''
    if re.search('RI values:</div><div class="mindatam2">.*?</d',textarbre):
        refraccio=re.findall('RI values:</div><div class="mindatam2">(.*?)</d',textarbre)[0].strip().lower()
        refraccio = refraccio.replace('<i>', '\'\'').replace('</i>', '\'\'').replace('.', ',').replace('α', 'α').replace('β', 'β').replace('γ', 'γ').replace('ω', 'ω').replace('ε', 'ε').replace('-', 'a')

    birefringencia = ''
    if re.search('Max Birefringence:</div><div class="mindatam2">.*?<',textarbre):
        birefringencia=re.findall('Max Birefringence:</div><div class="mindatam2">(.*?)<',textarbre)[0].strip().lower()
        birefringencia = birefringencia.replace('.', ',').replace('δ', 'δ').replace('-', 'a')

    formula = ''
    if re.search('Formula:</div><div class="mindatam2"><span class="newformula">.*?</span>',textarbre):
        formula=re.findall('Formula:</div><div class="mindatam2"><span class="newformula">(.*?)</span>',textarbre)[0].strip()
        formula = formula.replace(" class='newformsub'", "").replace(" class='newformsup'", "").replace('·','·')

    impureses = ''
    if re.search('Common Impurities:</div><div class="mindatam2">.*?<',textarbre):
        impureses=re.findall('Common Impurities:</div><div class="mindatam2">(.*?)<',textarbre)[0].strip()
        impureses = impureses.replace(',', ', ')

    fluorescencia = ''
    if re.search('<a href="/glossary/fluorescence">Fluorescence in UV light:</a></div><div class="mindatam2">.*?</d',textarbre):
        fluorescencia=re.findall('<a href="/glossary/fluorescence">Fluorescence in UV light:</a></div><div class="mindatam2">(.*?)</d',textarbre)[0].strip()
        fluorescencia = fluorescencia + '*'

    macles = ''
    if re.search('Twinning:</div><div class="mindatam2">.*?</d',textarbre):
        macles=re.findall('Twinning:</div><div class="mindatam2">(.*?)</d',textarbre)[0].strip().lower()
        macles = macles.replace('none observed', 'no observades') + '*'

    duresa = ''
    if re.search('Hardness \(Mohs\):</div><div class="mindatam2">.*?</d',textarbre):
        duresa=re.findall('Hardness \(Mohs\):</div><div class="mindatam2">(.*?)</d',textarbre)[0].strip().lower()
        duresa = duresa.replace('&frac12;', ',5').replace('-', 'a')

    angle = ''
    if re.search('2V:</div><div class="mindatam2">.*?</d',textarbre):
        angle=re.findall('2V:</div><div class="mindatam2">(.*?)</d',textarbre)[0].strip().lower()
        angle = angle.replace('measured', 'mesurat').replace('calculated', 'calculat').replace('.', ',').replace(' ,', ',').replace('°', '°')

    pleocr = ''
    if re.search('Pleochroism:</div><div class="mindatam2">.*?</d',textarbre):
        pleocr=re.findall('Pleochroism:</div><div class="mindatam2">(.*?)</d',textarbre)[0].strip().lower()
        pleocr = pleocr.replace('weak', 'feble')

    dispersio = ''
    if re.search('Dispersion:</div><div class="mindatam2">.*?</',textarbre):
        dispersio=re.findall('Dispersion:</div><div class="mindatam2">(.*?)</',textarbre)[0].strip().lower()
        diccionari = {'relatively weak':'relativament feble', 'weak':'feble', 'strong':'forta', 'r > v moderate':'r > v moderada',
                      'r < v moderate':'r < v moderada', 'r > v weak':'r > v feble', 'r < v weak':'r < v feble',
                      'r > v strong':'r > v forta', 'r < v strong':'r < v forta'}
        dispersio = diccionari.get(dispersio, dispersio+'*')

    ima = ''
    if re.search('<a href="min-.*?.html">IMA....-.*?</a>',textarbre):
        ima=re.findall('<a href="min-.*?.html">(IMA....-.*?)</a>',textarbre)[0].strip()

    magnetisme = ''
    if re.search('Magnetism:</div><div class="mindatam2">.*?</',textarbre):
        magnetisme=re.findall('Magnetism:</div><div class="mindatam2">(.*?)</',textarbre)[0].strip().lower()
        magnetisme = magnetisme + '*'

    import time
    dia = time.strftime('%d')
    mes = time.strftime('%m')
    anyy = time.strftime('%Y')
    diccionari = {'1':'gener', '2':'febrer', '3':'març', '4':'abril', '5':'maig', '6':'juny', '7':'juliol', '8':'agost',
                  '9':'setembre', '10':'octubre', '11':'novembre', '12':'desembre'}
    referencia = '<ref>{{ref-web|url='+url+'|consulta='+dia+' '+mes+' '+anyy+'|títol='+nom+'|obra=Mindat|llengua=anglès}}</ref>'

    estatNum = ''
    if re.search('<a href="/glossary/IMA_status">IMA status:</a></div><div class="mindatam2">.*?</d',textarbre):
        estat=re.findall('<a href="/glossary/IMA_status">IMA status:</a></div><div class="mindatam2">(.*?)</d',textarbre)[0].strip().lower()
        if 'not approved' in estat:
            estatNum = 2
        else:
            estatNum = 1

    grup = ''
    if re.search('<span>Member of:</span><div><a href="min-.*?.html">.*?</a>',textarbre):
        grup=re.findall('<span>Member of:</span><div><a href="min-.*?.html">(.*?)</a>',textarbre)[0].strip().lower()

   
    # Comença la part de muntar la plantilla amb les dades trobades
    plant = '= [[{}]] =\n'.format(nomcat)
    plant = plant + "{{infotaula de mineral\n"
    plant=plant+"| nom = {}\n".format(nomcat)
    plant=plant+"| fórmula = {}\n".format(formula)
    plant=plant+"| categoria = {}\n".format(categoriaF)
    plant=plant+"| imatge = \n"
    plant=plant+"| peu d'imatge = \n"
    plant=plant+"| estat IMA = {}\n".format(estatNum)
    if nickelstrunz != '':
        plant=plant+"| strunz = {}\n".format(nickelstrunz)
    if dana != '':
        plant=plant+"| dana = {}\n".format(dana)
    if heys != '':
        plant=plant+"| heys = {}\n".format(heys)
    if descobriment != '':
        plant=plant+"| any = {}\n".format(descobriment)
    if tipus != '':
        plant=plant+"| localitat = {}\n".format(tipus)
    if lluentorF != '':
        plant=plant+"| lluentor = {}\n".format(lluentorF.rstrip(', '))
    if diafanitatF != '':
        plant=plant+"| diafanitat = {}\n".format(diafanitatF.rstrip(', '))
    if colorF != '':
        plant=plant+"| color = {}\n".format(colorF.rstrip(', '))
    if ratllaF != '':
        plant=plant+"| ratlla = {}\n".format(ratllaF.rstrip(', '))
    if tenacitatF != '':
        plant=plant+"| tenacitat = {}\n".format(tenacitatF.rstrip(', '))
    if exfoliacio != '':
        plant=plant+"| exfoliació = {}\n".format(exfoliacio)
    if fracturaF != '':
        plant=plant+"| fractura = {}\n".format(fracturaF.rstrip(', '))
    if densitat != '':
        plant=plant+"| densitat = {}\n".format(densitat)
    if sistema != '':
        plant=plant+"| sistema = {}\n".format(sistema)
    if simetria != '':
        plant=plant+"| simetria = {}\n".format(simetria)
    if estructura != '':
        plant=plant+"| estructura cristal·lina = {}\n".format(estructura)
    if propoptiques != '':
        plant=plant+"| prop òptiques = {}\n".format(propoptiques)
    if refraccio != '':
        plant=plant+"| refracció = {}\n".format(refraccio)
    if birefringencia != '':
        plant=plant+"| birefringència = {}\n".format(birefringencia)
    if impureses != '':
        plant=plant+"| impureses = {}\n".format(impureses)
    if fluorescencia != '':
        plant=plant+"| fluorescència = {}\n".format(fluorescencia.rstrip('.'))
    if macles != '':
        plant=plant+"| macles = {}\n".format(macles.rstrip('.'))
    if duresa != '':
        plant=plant+"| mohs = {}\n".format(duresa)
    if angle != '':
        plant=plant+"| 2V = {}\n".format(angle)
    if pleocr != '':
        plant=plant+"| pleocroisme = {}\n".format(pleocr)
    if dispersio != '':
        plant=plant+"| dispersió = {}\n".format(dispersio)
    if ima != '':
        plant=plant+"| IMA = {}\n".format(ima)
    if magnetisme != '':
        plant=plant+"| magnetisme = {}\n".format(magnetisme)
    plant=plant+"| referències = {}\n".format(referencia)
    plant=plant+"}}\n"

    # Text
    plant = plant + "La '''" + nomcatmini + "''' és un [[mineral]] de la classe dels " + categoriaF
    if grup != '':
        plant = plant + ', que pertany al grup de la ('+ grup +')*'
    plant = plant + '.\n\n== Característiques ==\n'
    plant = plant + 'La '+ nomcatmini +' és un [['+categoriaG+']] de [[fórmula química]] '+formula+'. '
    plant = plant + 'Cristal·litza en el '+sistemaLlarg+'. '
    if duresa != '':
        plant = plant + 'La seva [[duresa]] a l\'[[escala de Mohs]] és '+duresa+'. '
    plant = plant + '\n\n== Formació i jaciments =='
    plant = plant + '\n\n== Referències ==\n{{referències}}\n\n'
    plant = plant + '{{-}}'
    print plant
    return plant

def llegeixarbres():
    urldistr=[]
    urldistr.append('https://ca.wikipedia.org/wiki/Usuari:MineralBot/Proves')
    #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('href="http://www.mindat.org/(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-'

        # Buscarem:
        contador = 0
        minim = 1
        maxim = 50
        
        for tros in trosarbres:
            if "min" in tros:
                contador = contador + 1
                if contador >= minim and contador <= maxim:
                    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:MineralBot/Proves")
desti.put(informe,u"Infotaules de minerals amb dades de mindat.org")
pywikibot.stopme()
#print informe