import wikipedia, gzip, os, re, datetime
os.system('rm pagecounts*.gz') #limpiamos antes de empezar
os.system('wget http://dammit.lt/wikistats/ -O tmpweb.html')
file=open('tmpweb.html', 'r')
wget=file.read()
ayer=datetime.date.today()-datetime.timedelta(days=1)
ayerano=str(ayer.year)
ayermes=str(ayer.month)
if len(ayermes)==1:
ayermes='0%s' % ayermes
ayerdia=str(ayer.day)
if len(ayerdia)==1:
ayerdia='0%s' % ayerdia
m=re.compile(ur'(?i)\"(pagecounts\-%s%s%s\-\d{6}\.gz)\"' % (ayerano, ayermes, ayerdia)).finditer(wget)
gzs=[]
for i in m:
print i.group(1)
gzs.append(i.group(1))
pagesdic={u'Principal':{}, u'Usuario':{}, u'Wikipedia':{}, u'Imagen':{}, u'Plantilla':{}, u'Ayuda':{}, u'Categoría':{}, u'Portal':{}, u'Wikiproyecto':{}, u'Anexo':{}}
r={'Usuario':re.compile(ur'(?m)^es Usuario:'),
'Wikipedia':re.compile(ur'(?m)^es Wikipedia:'),
'Imagen':re.compile(ur'(?m)^es Imagen:'),
'Plantilla':re.compile(ur'(?m)^es Plantilla:'),
'Ayuda':re.compile(ur'(?m)^es Ayuda'),
'Categoría':re.compile(ur'(?m)^es Categor%C3%ADa:'),
'Portal':re.compile(ur'(?m)^es Portal:'),
'Wikiproyecto':re.compile(ur'(?m)^es Wikiproyecto:'),
'Anexo':re.compile(ur'(?m)^es Anexo:'),
}
for gz in gzs:
os.system('wget http://dammit.lt/wikistats/%s' % gz)
f=gzip.open(gz, 'r')
regex=re.compile(ur'(?im)^es (.*) (\d{1,}) (\d{1,})$')
line=f.readline()
c=0
while line:
c+=1
if c % 250000 == 0:
print "Analizadas %d de lineas" % c
m=regex.finditer(line)
for i in m:
page=i.group(1)
times=int(i.group(2))
nm=u'Principal'
if re.search(r['Usuario'], line):
nm=u'Usuario'
elif re.search(r['Wikipedia'], line):
nm=u'Wikipedia'
elif re.search(r['Imagen'], line):
nm=u'Imagen'
continue #saltamos
elif re.search(r['Plantilla'], line):
nm=u'Plantilla'
elif re.search(r['Ayuda'], line):
nm=u'Ayuda'
elif re.search(r['Categoría'], line):
nm=u'Categoría'
elif re.search(r['Portal'], line):
nm=u'Portal'
elif re.search(r['Wikiproyecto'], line):
nm=u'Wikiproyecto'
elif re.search(r['Anexo'], line):
nm=u'Anexo'
if pagesdic[nm].has_key(page):
pagesdic[nm][page]+=times
else:
pagesdic[nm][page]=times
line=f.readline()
f.close()
pageslist={}
for k, v in pagesdic.items():
pageslist[k] = [(v2, k2) for k2, v2 in v.items()]
pageslist[k].sort()
pageslist[k].reverse()
pageslist[k] = [(k2, v2) for v2, k2 in pageslist[k]]
visitas={u'Total':0, u'Principal':0, u'Usuario':0, u'Wikipedia':0, u'Imagen':0, u'Plantilla':0, u'Ayuda':0, u'Categoría':0, u'Portal':0, u'Wikiproyecto':0, u'Anexo':0}
for k, v in pageslist.items():
for k2, v2 in v:
visitas[k]+=v2
visitas[u'Total']+=v2
limite=100
for k2, v2 in pageslist.items():
if k2==u'Imagen':
continue #saltamos
salida=u"La siguiente tabla muestra las '''%d páginas más visitadas''' (en el espacio de nombres '%s') de [[Wikipedia en español]] en el día de ayer (de 00:00 UTC a 23:59 UTC). Ayer hubo un total de {{subst:formatnum:%d}} visitas para este espacio de nombres, %.1f%s del total ({{subst:formatnum:%d}}).\n<center>[[Wikipedia:Ranking de visitas (Principal)|Principal]] · [[Wikipedia:Ranking de visitas (Usuario)|Usuario]] · [[Wikipedia:Ranking de visitas (Wikipedia)|Wikipedia]] · [[Wikipedia:Ranking de visitas (Plantilla)|Plantilla]] · [[Wikipedia:Ranking de visitas (Ayuda)|Ayuda]] · [[Wikipedia:Ranking de visitas (Categoría)|Categoría]] · [[Wikipedia:Ranking de visitas (Portal)|Portal]] · [[Wikipedia:Ranking de visitas (Wikiproyecto)|Wikiproyecto]] · [[Wikipedia:Ranking de visitas (Anexo)|Anexo]]</center>\n\n<center>\n{| class='wikitable sortable' style='text-align:center;'\n! #\n! Página\n! Visitas" % (limite, k2, visitas[k2], visitas[k2]/(visitas[u'Total']/100.0), u'%', visitas[u'Total'])
c=0
for k, v in pageslist[k2]:
try:
if re.search(ur'Especial\:|Special\:|sort_down\.gif|sort_up\.gif|sort_none\.gif', k):
continue
tmp=wikipedia.Page(wikipedia.Site('es', 'wikipedia'), k)
detalles=u''
if tmp.exists():
if tmp.isRedirectPage():
detalles+=u'(Redirección a [[%s]])' % (tmp.getRedirectTarget())
elif tmp.isDisambig():
detalles+=u'(Desambiguación)'
else:
tmpget=tmp.get()
if re.search(ur'(?i)\{\{ *Artículo bueno', tmpget):
detalles+=u'[[Imagen:Artículo bueno.svg|14px|Artículo bueno]]'
if re.search(ur'(?i)\{\{ *Artículo destacado', tmpget):
detalles+=u'[[Imagen:Cscr-featured.svg|14px|Artículo destacado]]'
if re.search(ur'(?i)\{\{ *(Semiprotegida2?|Semiprotegido|Pp-semi-template)', tmpget):
detalles+=u'[[Imagen:Padlock-silver-medium.svg|20px|Semiprotegida]]'
if re.search(ur'(?i)\{\{ *(Protegida|Protegido|Pp-template)', tmpget):
detalles+=u'[[Imagen:Padlock.svg|20px|Protegida]]'
k=re.sub(ur'(?i)(Imagen?\:)', ur':\1', k)
k=re.sub(ur'(?i)(Category\:|Categor%C3%ADa\:)', ur':\1', k)
k=re.sub('_', ' ', k)
c+=1
salida+=u"\n|-\n| %d || [[%s]] %s || %s " % (c, k, detalles, v)
if c>=limite:
break
except:
wikipedia.output(u'Error al generar item en lista de %s' % k2)
salida+=u"\n|}\n</center>\n\n== Véase también ==\n*[[Wikipedia:Ranking de ediciones]]\n*[[Wikipedia:Ranking de ediciones (incluye bots)]]\n*[[Wikipedia:Ranking de ediciones anónimas por país]]\n*[[Wikipedia:Ranking de wikiproyectos]]\n\n[[Categoría:Wikipedia:Estadísticas|Ranking]]"
wiii=wikipedia.Page(wikipedia.Site('es', 'wikipedia'), u'Wikipedia:Ranking de visitas (%s)' % k2)
wiii.put(salida, u'BOT - Actualizando lista de páginas más visitadas (%s)' % k2)
os.system('rm pagecounts*.gz')