Usuario:Er Komandante/archivabot.py

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

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",
        }
base_cafe=u"Wikipedia:Café/Portal/Archivo/"
base_prueba=u"Usuario:Yrithinnd/Café/Archivo/"
cafes=[[u"Noticias",20,30],[u"Políticas",10,20],[u"Técnica",15,25],[u"Propuestas",10,20],[u"Ayuda",7,15],[u"Miscelánea",10,20]]

for wop in cafes:
        cafe=wop[0]
        p=wikipedia.Page(wikipedia.getSite(),base_cafe+cafe+"/Actual")
        texto=p.get()
        salida=texto
        it=re.finditer(ur"(?us)(?P<seccion>\s==(?P<titulo>[^=]+?)==\s(?P<texto>.*?))(?=\s==[^=]+?==)",texto)
        i=0
        for m in it:
                i+=1
                menor=2147483647
                mayor=0
                ediciones=0
                comentario=u""
                print str(i)+") Titulo:"+m.group("titulo")
                it2=re.finditer(ur"(?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
                print "PRIMER MENSAJE: " + str(menor) + " - " +time.strftime("%x-%X",time.localtime(menor))
                print "ULTIMO MENSAJE: " + 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: #10 días
                        print " # ARCHIVO # "
                        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 sección: "+m.group("titulo")+u" - Primera edición: "+time.strftime("%x-%X",time.localtime(menor))+u" - Última edición: "+time.strftime("%x-%X",time.localtime(mayor))+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=comentario)
                        else:
                                ap.put(u"{{Café frío|"+str(ano_seccion)+"|"+cafe+"}}\n"+m.group("seccion"),comment="< CREO ARCHIVO >"+comentario)
                        salida=salida.replace(m.group("seccion"),"")
                        ap=wikipedia.Page(wikipedia.getSite(),base_cafe+cafe+"/Actual")
                        ap.put(salida,comment=comentario)
                if mayor == 0:
                        print " ---> 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 (%Z)")+u" 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"Añadiendo marca de tiempo")