Usuari Discussió:Meldor/Ranking setmanal (Principal)
De Viquipèdia
[edita] Codi
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')