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()