Utente:YuBot/Script obsoleti
Archivio qui alcuni script resi obsoleti da cambiamenti del software mediawiki.
monitoraggio.py modifica
# -*- coding: utf-8 -*-
import fileinput, os, time, stat, re
import wikipedia, pagegenerators, catlib
#########################################################################
# #
# monitoraggio.py - ver 3.5 - basato su pywikipedia #
# #
#########################################################################
"""
Questo è un bot che gestisce l'aggiornamento del monitoraggio voci sulla Wikipedia italiana.
"""
def listeParametro(valore):
"""
Trova le discussioni che contengono un determinato template di valutazione
"""
pagine=[]
#Cerca le voci per ogni parametro
template = wikipedia.Page('it', 'Template:'+valore)
gen = pagegenerators.ReferringPageGenerator(template)
count=0
for page in gen:
if page.namespace() == 1:
count=count+1
titolo=page.titleWithoutNamespace()
titolo = titolo.encode('utf-8')
pagine.append(titolo)
pagine.sort()
return pagine
def listeMonitoraggioProgetto(progetto):
"""
Trova le voci monitorate di un singolo progetto
"""
lettera ='!'
categoryname = (u'Voci monitorate Progetto '+progetto)
cat = catlib.Category('it', 'Categoria:%s' % categoryname)
gen = pagegenerators.CategorizedPageGenerator(cat, recurse = False, start=lettera)
count=0
voci=[]
for page in gen:
if page.namespace() == 1:
count=count+1
titolo=page.titleWithoutNamespace()
titolo = titolo.encode('utf8')
voci.append(titolo)
if count == 0:
print 'non ci sono voci monitorate per questo progetto'
else:
print 'voci monitorate:' + str(count)
voci.sort()
return voci
def progettiMonitoraggio():
"""
Ottiene l'elenco dei progetti in cui è attivo il monitoraggio voci
"""
titoliprogetti=[]
categoria=catlib.Category('it', 'Categoria:Voci monitorate per progetto')
categorie = categoria.subcategoriesList()
for categoria in categorie:
titolo=categoria.aslink()
titolo=titolo.encode('utf-8')
titolo=titolo.replace('[[Categoria:Voci monitorate Progetto ', '')
titolo=titolo.replace(']]', '')
titoliprogetti.append(titolo)
titoliprogetti.sort()
return titoliprogetti
def aggiorna_riepilogo(param, lista):
#Aggiorna la tabella di riepilogo generale, modificando ogni specifica pagina-dati
number=len(lista)
cifra=str(number)
commriep='Monitoraggio voci: aggiorno i dati del riepilogo generale'
paginadati=wikipedia.Page('it', 'Progetto:Qualit%C3%A0/Monitoraggio_voci/Tabella/'+param)
paginadati.put(cifra, comment=commriep)
paginadati=''
def main():
# definisco e carico le liste, una per parametro
accuratezza_a=listeParametro('Accuratezza-a')
accuratezza_b=listeParametro('Accuratezza-b')
accuratezza_c=listeParametro('Accuratezza-c')
accuratezza_d=listeParametro('Accuratezza-d')
scrittura_a=listeParametro('Scrittura-a')
scrittura_b=listeParametro('Scrittura-b')
scrittura_c=listeParametro('Scrittura-c')
scrittura_d=listeParametro('Scrittura-d')
fonti_a=listeParametro('Fonti-a')
fonti_b=listeParametro('Fonti-b')
fonti_c=listeParametro('Fonti-c')
fonti_d=listeParametro('Fonti-d')
immagini_a=listeParametro('Immagini-a')
immagini_b=listeParametro('Immagini-b')
immagini_c=listeParametro('Immagini-c')
immagini_d=listeParametro('Immagini-d')
accuratezza_nc=listeParametro('Accuratezza-nc')
scrittura_nc=listeParametro('Scrittura-nc')
fonti_nc=listeParametro('Fonti-nc')
immagini_nc=listeParametro('Immagini-nc')
parametri = { 'acc-A': accuratezza_a,
'acc-B': accuratezza_b,
'acc-C': accuratezza_c,
'acc-D': accuratezza_d,
'acc-NC': accuratezza_nc,
'scr-A': scrittura_a,
'scr-B': scrittura_b,
'scr-C': scrittura_c,
'scr-D': scrittura_d,
'scr-NC': scrittura_nc,
'fon-A': fonti_a,
'fon-B': fonti_b,
'fon-C': fonti_c,
'fon-D': fonti_d,
'fon-NC': fonti_nc,
'imm-A': immagini_a,
'imm-B': immagini_b,
'imm-C': immagini_c,
'imm-D': immagini_d,
'imm-NC': immagini_nc,
}
### definizione altre liste, serviranno in seguito ##
acca = []
accb = []
accc = []
accd = []
fona = []
fonb = []
fonc = []
fond = []
imma = []
immb = []
immc = []
immd = []
scra = []
scrb = []
scrc = []
scrd = []
accnc = []
scrnc = []
immnc = []
fonnc = []
###### AGGIORNO IL RIEPILOGO ######
for p in parametri.keys():
aggiorna_riepilogo(p, parametri[p])
####################################
progetti = progettiMonitoraggio()
for progetto in progetti:
progetto=progetto.decode('utf-8')
## carico le liste di voci monitorate dal progetto ##
voci = listeMonitoraggioProgetto(progetto)
acca = [val for val in voci if val in accuratezza_a]
accb = [val for val in voci if val in accuratezza_b]
accc = [val for val in voci if val in accuratezza_c]
accd = [val for val in voci if val in accuratezza_d]
accnc = [val for val in voci if val in accuratezza_nc]
scra = [val for val in voci if val in scrittura_a]
scrb = [val for val in voci if val in scrittura_b]
scrc = [val for val in voci if val in scrittura_c]
scrd = [val for val in voci if val in scrittura_d]
scrnc = [val for val in voci if val in scrittura_nc]
fona = [val for val in voci if val in fonti_a]
fonb = [val for val in voci if val in fonti_b]
fonc = [val for val in voci if val in fonti_c]
fond = [val for val in voci if val in fonti_d]
fonnc = [val for val in voci if val in fonti_nc]
imma = [val for val in voci if val in immagini_a]
immb = [val for val in voci if val in immagini_b]
immc = [val for val in voci if val in immagini_c]
immd = [val for val in voci if val in immagini_d]
immnc = [val for val in voci if val in immagini_nc]
### conto gli elementi nelle liste ##
numeroaccuratezzaa = str(len(acca))
numeroaccuratezzab = str(len(accb))
numeroaccuratezzac = str(len(accc))
numeroaccuratezzad = str(len(accd))
numeroaccuratezzanc = str(len(accnc))
numeroscritturaa = str(len(scra))
numeroscritturab = str(len(scrb))
numeroscritturac = str(len(scrc))
numeroscritturad = str(len(scrd))
numeroscritturanc = str(len(scrnc))
numeroimmaginia = str(len(imma))
numeroimmaginib = str(len(immb))
numeroimmaginic = str(len(immc))
numeroimmaginid = str(len(immd))
numeroimmagininc = str(len(immnc))
numerofontia = str(len(fona))
numerofontib = str(len(fonb))
numerofontic = str(len(fonc))
numerofontid = str(len(fond))
numerofontinc = str(len(fonnc))
#####vado ad aggiornare la tabella del progetto#####
Progetto = wikipedia.Page('it', 'Progetto:%s' % progetto)
NomeProgetto=Progetto.titleWithoutNamespace()
tabella=wikipedia.Page('it', 'Progetto:'+NomeProgetto+ '/Monitoraggio voci/Tabella monitoraggio automatico')
## Testo della tabella, con tutte le variabili
incipit=u'<noinclude>{{AvvisoTabella|' + NomeProgetto + '}}</noinclude>'
tabellaprog='\n{{Tabella monitoraggio\n|progetto=' + NomeProgetto + '\n|data={{Utente:YuBot/Monitoraggio/data}}'
tabellaacc='\n|Acc-a='+numeroaccuratezzaa+'\n|Acc-b='+numeroaccuratezzab+'\n|Acc-c='+numeroaccuratezzac+'\n|Acc-d='+numeroaccuratezzad+'\n|Acc-nc='+numeroaccuratezzanc
tabellascr='\n|Scr-a='+numeroscritturaa+'\n|Scr-b='+numeroscritturab+'\n|Scr-c='+numeroscritturac+'\n|Scr-d='+numeroscritturad+'\n|Scr-nc='+numeroscritturanc
tabellafon='\n|Fon-a='+numerofontia+'\n|Fon-b='+numerofontib+'\n|Fon-c='+numerofontic+'\n|Fon-d='+numerofontid+'\n|Fon-nc='+numerofontinc
tabellaimm='\n|Imm-a='+numeroimmaginia+'\n|Imm-b='+numeroimmaginib+'\n|Imm-c='+numeroimmaginic+'\n|Imm-d='+numeroimmaginid+'\n|Imm-nc='+numeroimmagininc+'\n}}'
footer=u'<noinclude>[[Categoria:Tabelle di monitoraggio|' + NomeProgetto + ']]</noinclude>\n<!-- Il codice qui sotto serve alla disorfanizzazione delle categorie necessarie al monitoraggio. Si prega di non rimuovere. -->\n<noinclude>[[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_accuratezza_a| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_accuratezza_b| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_accuratezza_c| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_accuratezza_d| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_accuratezza_nc| !]]\n[[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_scrittura_a| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_scrittura_b| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_scrittura_c| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_scrittura_d| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_scrittura_nc| !]]\n[[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_fonti_a| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_fonti_b| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_fonti_c| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_fonti_d| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_fonti_nc| !]]\n[[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_immagini_a| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_immagini_b| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_immagini_c| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_immagini_d| !]] [[Categoria:Progetto:' + NomeProgetto + '/Tabella_monitoraggio_automatico_-_immagini_nc| !]]</noinclude>'
testo=incipit+tabellaprog+tabellaacc+tabellascr+tabellafon+tabellaimm+footer
commento='Bot:Aggiorno la tabella'
if tabella.exists():
tabella.put(testo, comment=commento)
progetto=progetto.encode('utf-8')
print 'Tabella del Progetto %s aggiornata.' % progetto
#aggiorno la data#
commend='Aggiornamento monitoraggio in data odierna'
paginadati=wikipedia.Page('it', 'Utente:YuBot/Monitoraggio/data')
data='{{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}'
paginadati.put(data, comment=commend)
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
manutenzioni.py modifica
# -*- coding: utf-8 -*-
######################################################################
# manutenzione.py ver. 2.0 #
# Bot per le statistiche del lavoro sporco #
# basato su lavorosporco.py e statistichemanutenzioni.py di Pietrodn.#
######################################################################
"""
Bot che gestisce l'aggiornamento delle statistiche manutenzioni
sulla Wikipedia italiana.
Parametri:
-riepilogo aggiorna il riepilogo generale
-progetti aggiorna i dati per tutti i progetti
-progetto aggiorna i dati per un singolo progetto (indicare quale)
-auto non chiede prima di modificare le tabelle
"""
import wikipedia, pagegenerators, catlib
import os, re
templates = { 'A': 'Aiutare',
'C': 'Controllare',
'Categorizzare': 'Categorizzare',
'Controlcopy': 'Controlcopy',
'E': 'Ency',
'O': 'Orfane',
'P': 'NPOV',
'F': 'Senza fonti',
'S': 'Stub',
'T': 'Tradurre',
'U': 'Unire',
'W': 'Wikificare',
'Tmp': 'Templatizzare'
}
def projects():
"""
Cerca i progetti in cui sono presenti le statistiche manutenzioni.
"""
progetti=[]
lettera=''
categoryname = (u'Statistiche manutenzioni')
cat = catlib.Category('it', 'Categoria:%s' % categoryname)
gen = pagegenerators.CategorizedPageGenerator(cat, recurse = False, start=lettera)
for pagina in gen:
titolo=pagina.title()
titolo=titolo.encode('utf-8')
titolo=titolo.replace('Progetto:', '')
titolo=titolo.replace('/Statistiche manutenzioni', '')
progetti.append(titolo)
progetti.remove('Coordinamento')
return progetti
def listaVoci(categoryname):
"""
Crea la lista delle voci contenute in una categoria
"""
cat = catlib.Category('it', 'Categoria:%s' % categoryname)
if cat.exists() == False:
cat = catlib.Category('it', 'Categoria:%s' % categoryname.lower())
listavoci = cat.articlesList(recurse = 1)
return listavoci
def main():
# Imposto tutti parametri come falsi
singleproject=False
allprojects=False
riepilogo=False
auto=False
# Leggo i parametri inseriti da linea di comando
for arg in wikipedia.handleArgs():
if arg == '-auto':
auto = True
elif arg == '-riepilogo':
riepilogo = True
elif arg == '-progetti':
allprojects = True
elif arg == '-auto':
auto = True
elif arg.startswith('-progetto'):
singleproject = True
if len(arg) == 9:
progetto = wikipedia.input(u'Inserisci il nome del progetto:')
else:
progetto = arg[10:]
if progetto.startswith('Progetto:'):
progetto = arg[19:]
# Se non ci sono parametri, mostro docstring
if str(wikipedia.handleArgs()) == '[]':
print __doc__
# RIEPILOGO MANUTENZIONI
if riepilogo == True:
from templatecount import TemplateCountRobot
counter = TemplateCountRobot()
pagina = wikipedia.Page('it', 'Progetto:Coordinamento/Statistiche manutenzioni')
vecchieStatistiche = pagina.get()
templateCountDict = counter.countTemplates(templates.keys(), None)
for k in templateCountDict:
sottopagina = wikipedia.Page('it', 'Progetto:Coordinamento/Statistiche manutenzioni/' + templates[k])
oldtxt = sottopagina.get()
newtxt = re.sub("</noinclude>.*", "</noinclude>" + str(templateCountDict[k]), oldtxt)
if auto == True:
if sottopagina.exists():
wikipedia.setAction(u'Bot: Conto lavoro sporco')
sottopagina.put(newtxt)
else:
wikipedia.showDiff(oldtxt, newtxt)
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No'], ['y', 'N'], 'N')
if choice in ['Y', 'y']:
wikipedia.setAction(u'Bot:Conto lavoro sporco')
sottopagina.put(newtxt)
findRegexp = "\d+:\d+, \d+ .{3} \d+ \(.*?\)"
replaceRegexp = "~~~~~"
nuoveStatistiche = re.sub(findRegexp, replaceRegexp, vecchieStatistiche)
if auto == True:
if pagina.exists():
wikipedia.setAction(u'Bot: Aggiorno le date del conto')
pagina.put(nuoveStatistiche)
else:
wikipedia.showDiff(vecchieStatistiche, nuoveStatistiche)
choice = wikipedia.inputChoice(u"Aggiorno le date?", ['Yes', 'No'], ['y', 'N'], 'N')
if choice in ['Y', 'y']:
wikipedia.setAction(u'Aggiorno le date del conto')
pagina.put(nuoveStatistiche)
# STATISTICHE MANUTENZIONI NEI PROGETTI
progetti=[]
if allprojects == True:
progetti = projects()
elif singleproject == True:
progetti.append(progetto)
for progetto in progetti:
categories = { u'Da controllare per copyright - ' + progetto: 'Controlcopy',
u'Da verificare per enciclopedicità - ' + progetto: 'Ency',
u'Da aiutare ' + progetto: 'Aiutare',
u'Pagine orfane - ' + progetto: 'Orfane',
u'Da controllare ' + progetto: 'Controllare',
u'Segnalazioni NPOV ' + progetto: 'NPOV',
u'Voci mancanti di fonti - ' + progetto: 'Senza fonti',
u'Stub ' + progetto: 'Stub',
u'Da tradurre - ' + progetto: 'Tradurre',
u'Da unire - ' + progetto: 'Unire',
u'Da wikificare ' + progetto: 'Wikificare',
}
pagina = wikipedia.Page('it', 'Progetto:'+progetto+'/Statistiche manutenzioni')
if pagina.exists():
vecchieStatistiche = pagina.get()
for k in categories:
listavoci=listaVoci(k)
categoryCount = len(listavoci)
sottopagina = wikipedia.Page('it', 'Progetto:'+progetto+'/Statistiche manutenzioni/' + categories[k])
oldtxt = sottopagina.get()
newtxt = str(categoryCount)
if auto == True:
if sottopagina.exists():
wikipedia.setAction(u'Bot: Aggiorno statistiche manutenzioni del progetto %s' % progetto)
sottopagina.put(newtxt)
else:
wikipedia.showDiff(oldtxt, newtxt)
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No'], ['y', 'N'], 'N')
if choice in ['Y', 'y']:
wikipedia.setAction(u'Bot: Aggiorno statistiche del progetto %s' % progetto)
sottopagina.put(newtxt)
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()