Usuario:EmBOTellado/RCAD.py
Apariencia
# -*- coding: utf-8 -*-
import pywikibot,re
from datetime import datetime,date,timedelta
def obtenerplantilla():
pagina = (pywikibot.Page(pywikibot.getSite(),"Plantilla:Recordatorio CAD"))
return pagina
def retirarplantilla(textoplantilla,articulo):
print "retirando" + articulo
texto = "\{\{RCAD\|"+articulo+ ".*\}\}"
cadena = re.compile("\(")
texto = cadena.sub("\(", texto)
cadena = re.compile("\)")
texto = cadena.sub("\)",texto)
cadena = re.compile(texto)
textoplantilla = cadena.sub("",textoplantilla)
cadena = re.compile("\s+\n")
textoplantilla = cadena.sub("\n",textoplantilla)
print textoplantilla
return textoplantilla
def agregarplantilla(textoplantilla,articulo):
texto = "{{RCAD|" + articulo +"| | | }}"
cadena = re.compile("(\{\{RCAD\|.*\}\}\n)\|}")
textonuevo = "\\1{{RCAD|" + articulo + "| | | }}\n|}"
textoplantilla = cadena.sub(textonuevo,textoplantilla)
return textoplantilla
def actualizarplantilla(textoplantilla,articulo,agregadoretirado):
print "Entre con" + str(agregadoretirado)
plantilla = (pywikibot.Page(pywikibot.getSite(),u"Wikipedia:Candidatos a artículos destacados"))
plantilla = plantilla.get()
cadena=re.compile("\(")
articulo1=cadena.sub("\(",articulo)
cadena = re.compile("\)")
articulo1=cadena.sub("\)",articulo1)
reemplazo = re.search(articulo1,plantilla)
#La CAD termino
if reemplazo == None:
textoplantilla=retirarplantilla (textoplantilla,articulo)
agregadoretirado = 1
return textoplantilla, agregadoretirado
print "ACA ES" + str(agregadoretirado)
return textoplantilla, agregadoretirado
def agregararticulos(textoplantilla):
plantilla = (pywikibot.Page(pywikibot.getSite(),u"Wikipedia:Candidatos a artículos destacados"))
plantilla = plantilla.get()
articulos = re.findall(u"\{\{\/Temáticas.*\}\}",plantilla)
for art in articulos:
cadena = re.compile(u"\{\{\/Temáticas")
art = cadena.sub("",art)
cadena = re.compile("\}\}")
art = cadena.sub("",art)
cadena = re.compile("\(")
art1 = cadena.sub("\(",art)
cadena = re.compile("\)")
art1 = cadena.sub("\)",art1)
busqueda = re.search(art1,textoplantilla)
if busqueda == None:
textoplantilla = agregarplantilla(textoplantilla,art)
return textoplantilla
#def obtenerlistadearticulos(texto):
#Obtengo los articulos
#m1 = re.search("\{\{RCAD\|.*\}\}",texto)
#m2 = re.search("\}\}\n\|}",texto)
#i1= m1.start()
#i2= m2.end()
#nuevotexto = texto[i1:i2]
#nuevotexto=re.sub("\{\{RCAD\|","",nuevotexto)
#nuevotexto=re.sub("\|","",nuevotexto)
#nuevotexto=re.sub("\}*","",nuevotexto)
#Listo los articulos
#articulos=re.split("\n",nuevotexto)
#wikipedia.stopme()
#return articulos
#def obtenerlistadearticulos(texto):
# m1 = re.search("\{\{RCAD\|.*\}\}",texto)
# m2 = re.search("\}\}\n\|}",texto)
# i1= m1.start()
# i2= m2.end()
# nuevotexto = texto[i1:i2]
# m1 = re.compile("\{\{RCAD\|(.*)\|.*\|.*\|.*\}\}")
# articulos = m1.sub("\\1",nuevotexto)
# articulos = re.sub("\|}","",articulos)
# articulos = re.split("\n",articulos)
# articulos.remove(u"")
# print articulos
# return articulos
def obtenerlistadearticulos(texto):
articulos = re.findall("\{\{RCAD\|.*\}\}",texto)
listaarticulos=None
for art in articulos:
cadena = re.compile("\{\{RCAD\|")
art = re.split("\|",art)
art = art[1]
if listaarticulos == None:
listaarticulos = [art]
else:
listaarticulos.append(art)
return listaarticulos
def obtenerCAD(articulo):
#Obtengo la CAD del articulo
CAD = u"Wikipedia:Candidatos a artículos destacados/"+articulo
pagina=(pywikibot.Page(pywikibot.getSite(),CAD))
return pagina
def coeficientes(edicion):
valor = datetime.today() - datetime.strptime(edicion[1],u"%Y-%m-%dT%H:%M:%SZ")
return valor > timedelta(days=2)
def calcularparticipacion(CAD):
print CAD
ediciones = CAD.getVersionHistory(False,False,True)
print "uno"
primeraedicion = (ediciones[0])
print "dos"
ultimaedicion = (ediciones[len(ediciones)-1])
print primeraedicion[1]
#fecha1= datetime.strptime(primeraedicion[1],u"%Y-%m-%dT%H:%M:%SZ")
#fecha2= datetime.strptime(ultimaedicion[1],u"%Y-%m-%dT%H:%M:%SZ")
fecha1=primeraedicion[1]
fecha2=ultimaedicion[1]
diferenciafecha = fecha1 - fecha2
diasinparticipar = datetime.today() - fecha1
if (primeraedicion == ultimaedicion) and (diasinparticipar>timedelta(days=1)):
return 0
if (fecha1 != fecha2) or (diferenciafecha > timedelta(days=3)):
diasinparticipar = datetime.today() - fecha1
#print diasinparticipar
#print diferenciafecha
if (diasinparticipar > timedelta(days=3)):
return 0
else:
if (diasinparticipar<=timedelta(days=2)):
return 2
else:
return 1
def calcularotros(CAD):
ediciones = CAD.getVersionHistory(False,False,False)
primeraedicion = (ediciones[len(ediciones)-1])
ultimaedicion = ediciones[0]
#fecha1= datetime.strptime(primeraedicion[1],u"%Y-%m-%dT%H:%M:%SZ")
#fecha2= datetime.strptime(ultimaedicion[1],u"%Y-%m-%dT%H:%M:%SZ")
fecha1=primeraedicion[1]
fecha2=ultimaedicion[1]
texto = CAD.get()
if (re.search("\{\{Cierre ACAD.*\}\}",texto)):
return "24h"
if (fecha1==fecha2) or ((fecha2-fecha1)<=timedelta(days=3)):
return "Nueva"
else:
if (datetime.today() - fecha2)>=timedelta(days=3):
return "Emergencia"
def AgregarActividad(Estado,texto,articulo):
cadaux = re.compile("\(")
articulo1 = cadaux.sub("\(",articulo)
cadaux = re.compile("\)")
articulo1= cadaux.sub("\)",articulo1)
#print articulo1
cadenavieja="\{\{RCAD\|" + articulo1 + "\|.*\|.*\|.*\}\}"
cadaux = re.split("\|",cadenavieja)
#print cadaux
reemplazo = re.findall(cadenavieja,texto)
reemplazo = reemplazo[0]
reemplazo = re.split("\|",reemplazo)
participacion = reemplazo[2]
usuarios = reemplazo[3]
otros = reemplazo[4]
#print reemplazo
cadenanueva="{{RCAD|"+articulo+"|"+str(Estado)+"|"+usuarios+"|"+otros+"}}"
#print cadenanueva
texto = re.sub(cadenavieja,cadenanueva,texto)
#print texto
return (texto)
def AgregarOtros(Estado,texto,articulo):
#print "entre"
#print texto
cadaux = re.compile("\(")
articulo1 = cadaux.sub("\(",articulo)
cadaux = re.compile("\)")
articulo1 = cadaux.sub("\)",articulo1)
cadenavieja="\{\{RCAD\|"+ articulo1 + "\|.*\|.*\|.*\}\}"
#print cadenavieja
reemplazo = re.findall(cadenavieja,texto)
reemplazo = reemplazo[0]
reemplazo = re.split("\|",reemplazo)
participacion = reemplazo[2]
usuarios = reemplazo[3]
if Estado == None:
Estado = ""
cadenanueva="{{RCAD|"+articulo+"|"+participacion+"|"+usuarios+"|"+str(Estado)+"}}"
texto = re.sub(cadenavieja,cadenanueva,texto)
return texto
#return textonuevo
def usuariosparticipantes(CAD,articulo,texto):
ediciones = CAD.getVersionHistory(False,False,False)
#cadenavieja="\{\{RCAD\|"+articulo1+"\|.*\|.*\|.*\}\}"
cadaux=re.compile("\(")
articulo1=cadaux.sub("\(",articulo)
cadaux = re.compile("\)")
articulo1=cadaux.sub("\)",articulo1)
cadenavieja="\{\{RCAD\|"+articulo1+"\|.*\|.*\|.*\}\}"
reemplazo = re.findall(cadenavieja,texto)
#print reemplazo
reemplazo = reemplazo[0]
reemplazo = re.split("\|",reemplazo)
#print reemplazo
usuarios = None
for edicion in ediciones:
if usuarios == None:
usuarios = [edicion[2]]
else:
usuarios.append(edicion[2])
usuarios = list(set(usuarios))
participacion = reemplazo[2]
otros = reemplazo[4]
cantusuarios = len(usuarios)
#print participacion + str(usuarios) + otros
#print usuarios
cadenanueva="{{RCAD|"+articulo+"|"+participacion+"|"+str(cantusuarios)+"|"+otros
texto = re.sub(cadenavieja,cadenanueva,texto)
return texto
def firma(textoplantilla):
print "Entreee"
cadena=re.compile("Actualizado por .*\n")
textoplantilla = cadena.sub("Actualizado por ~~~~\n",textoplantilla)
#print textoplantilla
return textoplantilla
def actualizarcontador(textoplantilla):
pagina = (pywikibot.Page(pywikibot.getSite(),u"Wikipedia:Candidatos a artículos destacados/Número"))
cadena = "\{\{RCAD.*\}\}"
numero = re.findall(cadena, textoplantilla)
numero = len(numero)
texto=u"<noinclude>Pon aquí el número de [[Wikipedia:Candidatos a artículos destacados|candidaturas para artículo destacado]] que están actualmente en curso: </noinclude>"
texto= texto + str(numero)
pagina.put(texto,u"Actualizando el contador")
pagina = obtenerplantilla()
textoplantilla=pagina.get()
textoplantilla=agregararticulos(textoplantilla)
articulos = obtenerlistadearticulos(textoplantilla)
agregadoretirado = None
for articulo in articulos:
if articulo == "": break
CAD = obtenerCAD(articulo)
Estado = calcularparticipacion(CAD)
textoplantilla = AgregarActividad(Estado,textoplantilla,articulo)
textoplantilla, agregadoretirado=actualizarplantilla(textoplantilla,articulo,agregadoretirado)
if agregadoretirado != 1:
Estado = calcularotros(CAD)
textoplantilla = AgregarOtros(Estado,textoplantilla,articulo)
textoplantilla = usuariosparticipantes(CAD,articulo,textoplantilla)
agregadoretirado = 0
textoplantilla = firma(textoplantilla)
summary=u"Actualizando valores"
pagina.put(textoplantilla,summary)
actualizarcontador(textoplantilla)
#print textoplantilla