Usuari Discussió:Meldor/Ranking setmanal (Principal)
Aparença
Codi
[modifica]Aquest és el codi provisional per crear els rànquings setmanals, a partir de Usuari Discussió:Meldor/Ranking (Principal).
# -*- coding: utf-8 -*-
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()
m=[]
for i in range(7,0,-1):
ayer=datetime.date.today()-datetime.timedelta(days=i)
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'Usuari':{}, u'Viquipèdia':{}, u'Imatge':{}, u'Plantilla':{}, u'Ajuda':{}, u'Categoria':{}, u'Portal':{}, u'Viquiprojecte':{}}
r={'Usuari':re.compile(ur'(?m)^ca Usuari:'),
'Viquipèdia':re.compile(ur'(?m)^ca Viquipèdia:'),
'Imatge':re.compile(ur'(?m)^ca Imatge:'),
'Plantilla':re.compile(ur'(?m)^ca Plantilla:'),
'Ajuda':re.compile(ur'(?m)^ca Ajuda'),
'Categoria':re.compile(ur'(?m)^ca Categoria:'),
'Portal':re.compile(ur'(?m)^ca Portal:'),
'Viquiprojecte':re.compile(ur'(?m)^ca Viquiprojecte:'),
}
for gz in gzs:
os.system('wget http://dammit.lt/wikistats/%s' % gz)
f=gzip.open(gz, 'r')
regex=re.compile(ur'(?im)^ca (.*) (\d{1,}) (\d{1,})$')
line=f.readline()
c=0
while line:
c+=1
if c % 250000 == 0:
print "Analitzades %d linies" % 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['Usuari'], line):
nm=u'Usuari'
elif re.search(r['Viquipèdia'], line):
nm=u'Viquipèdia'
elif re.search(r['Imatge'], line):
nm=u'Imatge'
continue #saltamos
elif re.search(r['Plantilla'], line):
nm=u'Plantilla'
elif re.search(r['Ajuda'], line):
nm=u'Ajuda'
elif re.search(r['Categoria'], line):
nm=u'Categoria'
elif re.search(r['Portal'], line):
nm=u'Portal'
elif re.search(r['Viquiprojecte'], line):
nm=u'Viquiprojecte'
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'Usuari':0, u'Viquipèdia':0, u'Imatge':0, u'Plantilla':0, u'Ajuda':0, u'Categoria':0, u'Portal':0, u'Viquiprojecte':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'Imatge':
continue #saltamos
salida=u"La taula següent mostra les '''%d pàgines més visitades''' (en l'espai de noms '%s') de la [[Viquipèdia en català]] durant la setmana anterior. Hi va haver un total de %d visites per aquest espai de noms, %.1f%s del total (%d).\n<center>[[Usuari:Meldor/Ranking setmanal (Principal)|Principal]] · [[Usuari:Meldor/Ranking setmanal (Usuari)|Usuari]] · [[Usuari:Meldor/Ranking setmanal (Viquipèdia)|Viquipèdia]] · [[Usuari:Meldor/Ranking setmanal (Plantilla)|Plantilla]] · [[Usuari:Meldor/Ranking setmanal (Ajuda)|Ajuda]] · [[Usuari:Meldor/Ranking setmanal (Categoria)|Categoria]] · [[Usuari:Meldor/Ranking setmanal (Portal)|Portal]] · [[Usuari:Meldor/Ranking setmanal (Viquiprojecte)|Viquiprojecte]]</center>\n\n<center>\n{| class='wikitable sortable' style='text-align:center;'\n! #\n! Pàgina\n! Visites" % (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('ca', 'wikipedia'), k)
detalles=u''
if tmp.exists():
if tmp.isRedirectPage():
detalles+=u'(Redirecció a [[%s]])' % (tmp.getRedirectTarget())
elif tmp.isDisambig():
detalles+=u'(Desambiguació)'
else:
tmpget=tmp.get()
if re.search(ur'(?i)\{\{ *Article bo', tmpget):
detalles+=u'[[Imatge:Nuvola apps kontact.png|14px|Article bo]]'
if re.search(ur'(?i)\{\{ *(Article de qualitat|Article destacat)', tmpget):
detalles+=u'[[Imatge:Distintiu de qualitat.png|14px|Article de qualitat]]'
if re.search(ur'(?i)\{\{ *(Semiprotegida2?|Semiprotegit|Pp-semi-template)', tmpget):
detalles+=u'[[Imatge:Padlock-silver-medium.svg|20px|Semiprotegida]]'
if re.search(ur'(?i)\{\{ *(Protegida|Protegit|Pp-template)', tmpget):
detalles+=u'[[Imatge:Padlock.svg|20px|Protegida]]'
k=re.sub(ur'(?i)(Imatge?\:)', ur':\1', k)
k=re.sub(ur'(?i)(Category\:|Categoria\:)', 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 en generar item en llista de %s' % k2)
wiii=wikipedia.Page(wikipedia.Site('ca', 'wikipedia'), u'Usuari:Meldor/Ranking setmanal (%s)' % k2)
wiii.put(salida, u'BOT - Actualitzant llista de pàgines més visitades (%s)' % k2)
os.system('rm pagecounts*.gz')