Usuario:Muro Bot/Scripts/archiva cafe
Apariencia
# -*- 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')