Usuario:Muro Bot/Scripts/archiva cafe

De Wikipedia, la enciclopedia libre
# -*- coding: utf-8  -*-
import wikipedia, re, time

excepciones_titulos = (u'Política de desbibliotecarización (Tablón)')# secciones que no se han de archivar
base_cafe=u"Wikipedia:Café/Portal/Archivo/"
cafes = [[u"Noticias", 9, 14, 25000],# título, días mínimo, .., tamaño mínimo para poder archivar
         [u"Políticas", 5, 8, 40000],
         [u"Técnica", 5, 8, 15000],
         [u"Propuestas", 5, 8, 40000],
         [u"Ayuda", 3, 4, 20000],
         [u"Miscelánea", 6, 9, 25000]]

mes={
        "ene":1,
        "feb":2,
        "mar":3,
        "abr":4,
        "may":5,
        "jun":6,
        "jul":7,
        "ago":8,
        "sep":9,
        "oct":10,
        "nov":11,
        "dic":12,
}
i_mes={
        1:"ene",
        2:"feb",
        3:"mar",
        4:"abr",
        5:"may",
        6:"jun",
        7:"jul",
        8:"ago",
        9:"sep",
        10:"oct",
        11:"nov",
        12:"dic",
}

for wop in cafes:
        cafe=wop[0]
        p=wikipedia.Page(wikipedia.getSite(),base_cafe+cafe+"/Actual")
        texto=p.get()

        if len(texto)<wop[3]:
                wikipedia.output(u'\03{lightgreen}Ignorando café %s, por tener un tamaño de %s kB.\03{default}\n' % (cafe, len(texto)/1024))
                continue
        else:
                wikipedia.output(u'  *** \03{lightgreen}%s\03{default} ***' % wop[0])
        
        salida=texto
        it=re.finditer(u"(?us)(?P<seccion>\s==(?P<titulo>[^=]+?)==\s(?P<texto>.*?))(?=\s==[^=]+?==)",texto)
        i=0
        
        for m in it:
                i+=1
                
                if m.group("titulo") in excepciones_titulos:# excepciones
                        wikipedia.output(u'Ignorar sección ' + m.group("titulo"))
                        continue

                menor=2147483647
                mayor=0
                ediciones=0
                comentario=u''
                wikipedia.output(str(i)+u') \03{lightred}Título: \03{default}'+m.group('titulo'))
                it2=re.finditer(u'(?P<hor>\d{2}):(?P<min>\d{2}) (?P<dia>\d{1,2}) (?P<mes>ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic) (?P<ano>20\d\d) \((?:CES?T|UTC)\)',m.group('texto'))
                
                for m2 in it2:
                        #print m2.group("dia")+"-"+m2.group("mes")+"-"+m2.group("ano")+"  "+m2.group("hor")+":"+m2.group("min")
                        epo_time=int(time.mktime((int(m2.group('ano')),int(mes[m2.group('mes')]),int(m2.group('dia')),int(m2.group('hor')),int(m2.group('min')),0,0,0,1)))
                        if mayor<epo_time:
                                mayor=epo_time
                        if menor>epo_time:
                                menor=epo_time
                        ediciones+=1
                
                wikipedia.output(u'   \03{lightblue}PRIMER MENSAJE:\03{default} ' + str(menor) + ' - ' +time.strftime("%x-%X",time.localtime(menor)))
                wikipedia.output(u'   \03{lightblue}ÚLTIMO MENSAJE:\03{default} ' + str(mayor) + ' - ' +time.strftime("%x-%X",time.localtime(mayor)))
                
                if ediciones <wop[1]:
                        dias=wop[1]
                elif ediciones>wop[2]:
                        dias=wop[2]
                else:
                        dias=ediciones
                
                if mayor<int(time.time())-(86400*dias) and mayor>0:
                        wikipedia.output(u'\03{lightred} ##### ARCHIVO ##### \03{default}')
                        ano_seccion=time.strftime("%Y",time.localtime(menor))
                        mes_seccion=time.strftime("%m",time.localtime(menor))
                        ap=wikipedia.Page(wikipedia.getSite(),base_cafe+cafe+"/"+ano_seccion+"/"+mes_seccion)
                        comentario=u"Archivando /*"+m.group("titulo")+u"*/ Archivado por cumplir "+str(dias)+u" días de inactividad"
                        if ap.exists():
                                tmp=ap.get()
                                ap.put(tmp+"\n"+m.group("seccion"),comment='Bot: '+comentario)
                        else:
                                ap.put(u"{{Café frío|"+str(ano_seccion)+"|"+cafe+"}}\n"+m.group("seccion"),comment="Bot: Creando archivo nuevo. "+comentario)
                        salida=salida.replace(m.group("seccion"),"")
                        ap=wikipedia.Page(wikipedia.getSite(),base_cafe+cafe+"/Actual")
                        ap.put(salida,comment=comentario)
                
                if mayor == 0:
                        wikipedia.output(u'  -----------------> Marca de agua')
                        salida=salida.replace(m.group("seccion"),m.group("seccion")+u"\n<!-- "+time.strftime("%H:%M %d ")+i_mes[int(time.strftime("%m"))]+time.strftime(" %Y")+u" (UTC) Marca de tiempo para esta sección. NO ELIMINE ESTA LÍNEA-->\n")
                        ap=wikipedia.Page(wikipedia.getSite(),base_cafe+cafe+"/Actual")
                        ap.put(salida,comment=u"Bot: Añadiendo marca de tiempo")
                        ap_error=wikipedia.Page(wikipedia.getSite(),u"User:Muro Bot/Errores/Café")
                        ap_error.put('Error en ' + cafe + u'. ~~~~', comment=u"Bot: Nuevo error en el café")
                
        wikipedia.output('\n')