Vés al contingut

Usuari:PereBot/robot espècies curtes

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

import sys
sys.path.append('C:\pywikipedia')
sys.path.append('C:\mwparserfromhell-0.3.3')
import mwparserfromhell
import wikipedia,catlib,pagegenerators,re

# Actualitza informe
def putinforme(pag,text0,afegit,sumari,signa=False):
    contingut=text0+afegit
    if signa:
        contingut=contingut+u"\n--~~~~\n"
    try:
        pag.put(contingut,sumari)
    except wikipedia.articleexists:
        res=pag.get()
        pag.put(contingut,sumari)
    return

# Ordena diccionari i el transforma en cadena
def dicallista(dicc):
    claus=dicc.keys()
    claus.sort()
    cadena=u""
    for clau in claus:
        cadena=cadena+dicc[clau]
    return cadena

# Neteja un article, compta els caràcters i mira si és una espècie.
def comptanet(text):
    text0=text
    #print u"longitud total",len(text)
    text=wikipedia.removeCategoryLinks(text)
    #print u"longitud",len(text)
    #print text
    #text=re.sub(u"\{\{ ?([Tt]ítol cursiva|[Rr]eferències) ?\}\}",u"",text)
    #print u"longitud",len(text)
    #print text
    #print u"longitud",len(text)
    #print text
    trossos=re.split(u"== ?Referències ?==",text)
    text=trossos[0]
    #print len(trossos)
    trossos=re.split(u"== ?Bibliograf[íi]a ?==",text)
    text=trossos[0]
    #print len(trossos)
    trossos=re.split(u"== ?Enllaços [Ee]xterns ?==",text)
    text=trossos[0]
    #print len(trossos)
    text=re.sub(u"==+.*?==+",u"",text)
    #print u"longitud",len(text)
    #print text
    text=re.sub(u"\[\[ ?[Ff]itxer ?:.*?\|",u"\|",text)
    #print u"longitud",len(text)
    #print text
    text=re.sub(u"\|(thumb|right|left|[0-9]+px)",u"",text)
    #print u"longitud",len(text)
    #print text
    #text=text.replace(u"gènere (biologia)|gènere",u"gènere")
    #text=text.replace(u"família (biologia)|família",u"família")
    #text=text.replace(u"ordre (biologia)|família",u"ordre")
    #text=re.sub(u"[\[\[\]\]]",u"",text)
    #print u"longitud",len(text)
    #print text
    text=re.sub(u"<ref name=.{1,12}/>",u"",text)
    #print u"longitud",len(text),u"<ref name=.{1,12}/>"
    #print text
    #text=re.sub(u"\{\{ ?[Mm]ida ?\|.*?\}\}",u"",text)
    #print u"longitud",len(text)
    #print text
    #text=re.sub(u"\{\{ ?[Tt]axobox colour ?\|.*?\}\}",u"",text)
    #print u"longitud",len(text)
    #print text
    #text=re.sub(u"\{\{ ?CN ?\| ?data.*?\}\}",u"",text)
    #print u"longitud",len(text)
    #print text
    #text=re.sub(u"\{\{ ?([Cc]lade|[Tt]axobox_norank_entry|[Ee]ntrada de taxocaixa sense rang) ?\|.*?\}\}",u"",text)
    #print u"longitud",len(text)
    #print text
    #text=re.sub(u"\{\{(.*?\|)*?.+?\}\}",u"",text)
    #print u"longitud",len(text)
    #print text
    #print u"longitud",len(text)
    #print text
    text=re.sub(u"<ref name=.*?>.*?</ref>",u"",text)
    #print u"longitud",len(text)
    #print text
    text=re.sub(u"<ref>.*?</ref>",u"",text)
    codi=mwparserfromhell.parse(text)
    text=codi.strip_code(normalize=True,collapse=True)
    text=text.replace(u"\n",u"") #Elimina salts de línia
    #print u"longitud",len(text)
    #print text
    #print u"longitud",len(text)
    #print text
    #text=re.sub(u"'''",u"",text)
    #print u"longitud",len(text)
    #print text
    #text=re.sub(u"''",u"",text)  
    #print u"longitud final",len(text)
    #print text
    #text=re.sub(u"<references />",u"",text)  
    #print u"longitud final",len(text)
    #print text
    text=re.sub(u"<!--ORDENA generat per bot-->",u"",text)  
    text=re.sub(u"\{\{(en|es|ca|fr|eu|cn|de|it|Autoritat|Bases de dades taxonòmiques|CN)\}\}",u"",text)
    text=re.sub(u"\{\{.*?\}\}",u"",text)
    #print u"longitud final",len(text)
    #print text
    if re.search(u"\|\n* *binomial *\=",text0) or u"és una [[espècie]] d" in text0:
        especie=True
        print u"És espècie"
    else:
        especie=False
        print u"No és espècie"
    return len(text),especie,text

#El programa comença aquí
site=wikipedia.getSite('ca')
#catbuscar=u"Vulpes" #Posar aquí la categoria que es revisarà
#asc=pagegenerators.PreloadingGenerator(pagegenerators.CategorizedPageGenerator(catlib.Category(site,catbuscar),recurse=True))
taxocaixes=[u"Plantilla:Taxocaixa",u"Plantilla:Taxocaixa amfibi",u"Plantilla:Taxocaixa animal",u"Plantilla:Taxocaixa arqueobacteri",u"Plantilla:Taxocaixa artròpode",u"Plantilla:Taxocaixa dinosaure",u"Plantilla:Taxocaixa eucariota",u"Plantilla:Taxocaixa fong",u"Plantilla:Taxocaixa mamífer",u"Plantilla:Taxocaixa mol·lusc",u"Plantilla:Taxocaixa ocell",u"Plantilla:Taxocaixa peix",u"Plantilla:Taxocaixa planta",u"Plantilla:Taxocaixa rèptil",u"Plantilla:Taxocaixa sinàpsid",u"Plantilla:Taxocaixa virus",]
vistos=[]
comptador=0
comptabloc=800
# Inicialitza informe
paginforme=wikipedia.Page(site,u"Usuari:PereBot/tàxons per longitud")
if paginforme.exists():
    textinforme0=paginforme.get()
else:
    textinforme0=u""
sumarinforme=u"Robot buscant articles curts d'espècies"
#catnom=u"[[:categoria:"+catbuscar+"]]"
catnom=u"Taxocaixes" #u"[["+titplantbuscar+"]]"
capinforme=u"\n\n=="+catnom+"==\n"
capinformeesp=u"\n===Espècies===\n\n"
capinformeno=u"\n===Altres tàxons===\n\n"
cosinforme=u""
dicesp={}
dicno={}
if paginforme.exists():
    textinforme0=paginforme.get()
else:
    textinforme0=u""
for titplantbuscar in taxocaixes:
    plantbuscar=wikipedia.Page(site,titplantbuscar)
    asc=pagegenerators.PreloadingGenerator(pagegenerators.ReferringPageGenerator(plantbuscar,withTemplateInclusion=True,onlyTemplateInclusion=True))
    for article in asc:
        if article in vistos:
            print article,u"ja vist"
            continue
        elif article.namespace()!=0:
            continue
        else:
            vistos.append(article)
        comptador=comptador+1
        comptabloc=comptabloc+1
        print comptador,article
        textvell=article.get()
        llarg,esp,textnou=comptanet(textvell)
        linia=u"#[["+article.title()+u"]] "+'{:}'.format(llarg)+u"\n"
        print llarg,esp
        #print textnou
        if esp:
            dicesp[llarg]=dicesp.setdefault(llarg,u"")+linia
        else:
            dicno[llarg]=dicno.setdefault(llarg,u"")+linia
        if comptabloc>1000:
            #print dicesp
            llistaesp=dicallista(dicesp)
            #print dicno
            llistano=dicallista(dicno)
            contingut=capinforme+capinformeesp+llistaesp+capinformeno+llistano
            putinforme(paginforme,textinforme0,contingut,sumarinforme)
            comptabloc=0
#print dicesp
llistaesp=dicallista(dicesp)
#print dicno
llistano=dicallista(dicno)
contingut=capinforme+capinformeesp+llistaesp+capinformeno+llistano
putinforme(paginforme,textinforme0,contingut,sumarinforme,signa=True)
comptabloc=0
wikipedia.stopme()