See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Utente:YuBot/Script - Wikipedia

Utente:YuBot/Script

Da Wikipedia, l'enciclopedia libera.

Indice


[modifica] monitoraggio.py

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

[modifica] manutenzioni.py

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

[modifica] aggiornaliste.py

# -*- coding: utf8 -*-
"""
Script per aggiornare liste di monitoraggio. Parametri:
 
    -stati         Aggiorna le liste degli stati
 
    -page          Aggiorna una lista specifica (inserire il nome di una pagina)
"""
import wikipedia, config
import replace, pagegenerators
import re, sys, string, catlib
import datetime
 
def lista(pagina):
    gen=pagegenerators.LinkedPageGenerator(pagina)
    punto=0
    testo=''
    tab=''
    for voce in gen:
        if voce.isRedirectPage():
            titolo = voce.getRedirectTarget()
            voce = wikipedia.Page('it', titolo)
        frase=''
        note=''
 
        if voce.namespace() == 0:
 
            titolo=voce.title()
            titolurl=voce.urlname()
 
            titolodiscu='Discussione:'+titolo
            discussione=wikipedia.Page('it', titolodiscu)
 
            if discussione.exists():
                accuratezza=''
                scrittura=''
                fonti=''
                immagini=''
                coloreaccuratezza=''
                colorescrittura=''
                colorefonti=''
                coloreimmagini=''
 
                punto=punto+1
                print punto, titolodiscu
 
                testodiscu=discussione.get()            
 
                trova= re.search(r'immagini ?= ?[^\|^\}]*', testodiscu)
                if trova:
                    stringa=trova.group()
                    immagini=re.sub(r'immagini ?= ?', '', stringa)
                    immagini = re.sub('\n', '', immagini).strip()
 
                    if re.match(' ?[Aa] ?', immagini):
                            immagini=u'\'\'\'ottima\'\'\''
                            coloreimmagini='background: rgb(102, 153, 255)'
 
                    elif re.match(' ?[Bb] ?', immagini):
                            immagini=u'\'\'\'buona\'\'\''
                            coloreimmagini='background: rgb(152, 251, 152)'
 
                    elif re.match(' ?[Dd] ?', immagini):
                            immagini=u'\'\'\'carente\'\'\''
                            coloreimmagini='background: rgb(255, 102, 102)'
 
                    elif re.match(' ?[Cc] ?', immagini):
                            immagini=u'\'\'\'sufficiente.\'\'\''
                            coloreimmagini='background: rgb(255, 170, 102)'
 
                    else:
                        immagini=u'\'\'\'n.c.\'\'\''
 
                trova= re.search(r'fonti ?= ?[^\|^\}]*', testodiscu)            
                if trova:
                    stringa=trova.group()
                    fonti=re.sub(r'fonti ?= ?', '', stringa)
                    fonti = re.sub('\n', '', fonti).strip()
 
                    if re.match(' ?[Aa] ?', fonti):
                            fonti=u'\'\'\'ottima\'\'\''
                            colorefonti='background: rgb(102, 153, 255)'
 
                    elif re.match(' ?[Bb] ?', fonti):
                            fonti=u'\'\'\'buona\'\'\''
                            colorefonti='background: rgb(152, 251, 152)'
 
                    elif re.match(' ?[Dd] ?', fonti):
                            fonti=u'\'\'\'carente\'\'\''
                            colorefonti='background: rgb(255, 102, 102)'
 
                    elif re.match(' ?[Cc] ?', fonti):
                            fonti=u'\'\'\'sufficiente.\'\'\''
                            colorefonti='background: rgb(255, 170, 102)'
 
                    else:
                        fonti=u'\'\'\'n.c.\'\'\''
 
                trova= re.search(r'accuratezza ?= ?[^\|^\}]*', testodiscu)           
                if trova:
                    stringa=trova.group()
                    accuratezza=re.sub(r'accuratezza ?= ?', '', stringa)
                    accuratezza = re.sub('\n', '', accuratezza).strip()
 
                    if re.match(' ?[Aa] ?', accuratezza):
                            accuratezza=u'\'\'\'ottima\'\'\''
                            coloreaccuratezza='background: rgb(102, 153, 255)'
 
                    elif re.match(' ?[Bb] ?', accuratezza):
                            accuratezza=u'\'\'\'buona\'\'\''
                            coloreaccuratezza='background: rgb(152, 251, 152)'
 
                    elif re.match(' ?[Dd] ?', accuratezza):
                            accuratezza=u'\'\'\'carente\'\'\''
                            coloreaccuratezza='background: rgb(255, 102, 102)'
 
                    elif re.match(' ?[Cc] ?', accuratezza):
                            accuratezza=u'\'\'\'sufficiente.\'\'\''
                            coloreaccuratezza='background: rgb(255, 170, 102)'
 
                    else:
                        accuratezza=u'\'\'\'n.c.\'\'\''
 
 
                trova= re.search(r'scrittura ?= ?[^\|^\}]*', testodiscu)
                if trova:
                    stringa=trova.group()
                    scrittura=re.sub(r'scrittura ?= ?', '', stringa)
                    scrittura = re.sub('\n', '', scrittura).strip()
 
                    if re.match(' ?[Aa] ?', scrittura):
                            scrittura=u'\'\'\'ottima\'\'\''
                            colorescrittura='background: rgb(102, 153, 255)'
 
                    elif re.match(' ?[Bb] ?', scrittura):
                            scrittura=u'\'\'\'buona\'\'\''
                            colorescrittura='background: rgb(152, 251, 152)'
 
                    elif re.match(' ?[Dd] ?', scrittura):
                            scrittura=u'\'\'\'carente\'\'\''
                            colorescrittura='background: rgb(255, 102, 102)'
 
                    elif re.match(' ?[Cc] ?', scrittura):
                            scrittura=u'\'\'\'sufficiente.\'\'\''
                            colorescrittura='background: rgb(255, 170, 102)'
 
                    else:
                        scrittura=u'\'\'\'n.c.\'\'\''
 
                trova= re.search(r'note ?= ?[^\|^\}]*', testodiscu)
                if trova:
                    stringa=trova.group()
                    note=re.sub(r'note ?= ?', '', stringa)
                    note = re.sub("\n", " ", note).strip()
                    note = re.sub("'", "\'", note)                            
 
                if fonti == '':
                    fonti = u'\'\'\'n.c.\'\'\''
                if immagini == '':
                    immagini = u'\'\'\'n.c.\'\'\''
                if accuratezza == '':
                    accuratezza = u'\'\'\'n.c.\'\'\''
                if scrittura == '':
                    scrittura = u'\'\'\'n.c.\'\'\''
                if note == '':
                        note=''
                else:
                    note = "*<small>Note: "+note+"</small>\n"
 
                print accuratezza, scrittura, fonti, immagini
                print note
 
                frase= '\n*\'\'\'[['+titolo+']]\'\'\' - <small>([['+titolodiscu+'|discussione]])</small>' + ' - accuratezza: '+ accuratezza+ ' - scrittura: '+ scrittura + ' - presenza fonti: ' + fonti + ' - presenza immagini: '+ immagini 
                testo=testo+frase
                cella= '\n\n{| class="toccolours" width=100% style="background:#FCFCFF;"\n|style="width:20em"|\'\'\'[['+titolo+']]\'\'\' - <small>([['+titolodiscu+'|discussione]]) - ([http://it.wikipedia.org/w/index.php?title=Discussione:'+titolurl+'&action=edit&section=0 edita])</small>' + '\n| style="text-align: center;"| accuratezza:\n|style="text-align: center;"| <div style="'+coloreaccuratezza+'">'+ accuratezza+ '</div>\n| style="text-align: center;"| scrittura:\n|style="text-align: center;"| <div style="'+colorescrittura+'">'+ scrittura + '</div>\n| style="text-align: center;"| presenza fonti:\n|style="text-align: center;"| <div style="'+colorefonti+'">' + fonti + '</div>\n| style="text-align: center;"| presenza immagini:\n|style="text-align: center;"| <div style="'+coloreimmagini+'">'+ immagini +'</div>\n|-\n|colspan=9|\n'+ note+'|}'
                tab=tab+cella
 
    return tab
 
def tolkien():    
    log=wikipedia.Page('it', 'Utente:YuBot/Monitoraggio_Tolkien')
    prelista=pagegenerators.LinkedPageGenerator(log)
    for pagina in prelista:
        testo = lista(pagina)
 
        incipit=u'{{torna a|Progetto:Tolkien/Monitoraggio voci}}\nQuesta pagina riporta un quadro sinottico delle voci monitorate relative alle \'\'\'opere di J.R.R. Tolkien\'\'\'.\nL\'elenco viene creato da [[utente:YuBot|]] a partire da una lista, ed è aggiornato al {{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}. Lo scopo è sostituire alle pagine di monitoraggio non più funzionanti un log aggiornato periodocamente. Per aggiungere una voce, si può scriverne il nome in formato testo, tra doppie parentesi quadre, \'\'nella giusta posizione\'\': al prossimo aggiornamento la cella con le informazioni relative alla voce verrà aggiunte alla lista \'\'nella posizione in cui è stato inserito il link\'\'.  \n\n'
        categoria='\n[[Categoria:Pagine di monitoraggio voci|Tolkien]]'
        new=incipit+testo+categoria
 
        commento='Bot: aggiorno pagine monitoraggio Tolkien'
        pagina.put(new, comment=commento)        
 
def stati():
    log=wikipedia.Page('it', 'Utente:YuBot/Monitoraggio stati')
    prelista=pagegenerators.LinkedPageGenerator(log)
    for pagina in prelista:
        testo = lista(pagina)
 
        incipit=u'Questo è un elenco di stati  creato da [[utente:YuBot|]] a partire da una lista, aggiornato al {{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}. Lo scopo è mantenere un log aggiornato periodocamente relativo a una lista di voci da tenere sotto osservazione. Per aggiungere una voce, si può scriverne il nome in formato testo, tra doppie parentesi quadre, \'\'nella giusta posizione\'\': al prossimo aggiornamento la cella con le informazioni relative alla voce verrà aggiunta alla lista \'\'nella posizione in cui è stato inserito il link\'\'.  \n\n'
        categoria='\n[[Categoria:Pagine di monitoraggio voci|Stati]]'
        new=incipit+testo+categoria
 
        commento='Bot: aggiorno le pagine monitoraggio degli stati '
        pagina.put(new, comment=commento)
 
def main():
 
    # Read commandline parameters.
    for arg in wikipedia.handleArgs():
        if arg == '-stati':
            stati()
        if arg == '-tolkien':
            tolkien()
        elif arg.startswith('-page'):
            if len(arg) == 5:
                pagename = wikipedia.input(u'Scrivi il nome della pagina:')
            else:
                pagename = arg[6:]
 
            pagina = wikipedia.Page( 'it', pagename)
            testo = lista(pagina)
 
            incipit=u'Questo è un elenco di voci  creato da [[utente:YuBot|]] a partire da una lista, aggiornato al {{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}. Lo scopo è mantenere un log aggiornato periodocamente relativo a una lista di voci da tenere sotto osservazione. Per aggiungere una voce, si può scriverne il nome in formato testo, tra doppie parentesi quadre, \'\'nella giusta posizione\'\': al prossimo aggiornamento la cella con le informazioni relative alla voce verrà aggiunta alla lista \'\'nella posizione in cui è stato inserito il link\'\'.  \n\n'
            categoria='\n[[Categoria:Pagine di monitoraggio voci]]'
            new=incipit+testo+categoria
 
            commento='Bot: aggiorno lista monitoraggio'
            pagina.put(new, comment=commento)
 
    if str(wikipedia.handleArgs()) == '[]':    
        print __doc__
 
if __name__ == "__main__":
    try:
        main()
    finally:
        wikipedia.stopme()

[modifica] opereteatrali.py

# -*- coding: utf-8 -*-
 
import wikipedia, sys, re, catlib, pagegenerators
 
#################################################
#                                               #
#        opereteatrali.py - ver. 1.1            #
#                                               #
#################################################
 
"""
Questo script raccoglie dati relativi alle opere teatrali
presenti su it.wiki, restituendo un elenco di voci
"""
 
def linguaLink(lingua):
    if re.search(r'[Ii]talian', lingua):
        lingua='{{it}}'
 
    elif re.search(r'[Ii]nglese', lingua):
        lingua='{{en}}'
    elif re.search(r'[Ll]atin', lingua):
        lingua='{{la}}'
    elif re.search(r'[Gg]rec', lingua):        
        if re.search(r'[Gg]reco [Aa]ntico', lingua):
            lingua='{{grc}}'
        else:
            lingua='{{el}}'
    elif re.search(r'[Ff]rancese', lingua):
        lingua='{{fr}}'
    elif re.search(r'[Tt]edesc', lingua):
        lingua='{{de}}'
    elif re.search(r'[Ss]pagnol', lingua):
        lingua='{{es}}'
    elif re.search(r'[Nn]orvegese', lingua):
        lingua='{{no}}'
    elif re.search(r'[Gg]iapponese', lingua):
        lingua='{{ja}}'
    elif re.search(r'[Cc]inese', lingua):
        lingua='{{zh}}'
    elif re.search(r'[Rr]uss', lingua):
        lingua='{{ru}}'
    elif re.search(r'[Ss]vedese', lingua):
        lingua='{{sv}}'
 
    #Dialetti
    elif re.search(r'[Nn]apoletan', lingua):
        lingua='{{nap}}'
    elif re.search(r'[Ll]ombard', lingua):
        lingua='{{lmo}}'
    elif re.search(r'[Ss]icilian', lingua):
        lingua='{{scn}}'
    elif re.search(r'[Vv]enet', lingua):
        lingua='{{vec}}'
    else:
        lingua='[['+lingua+']]'
 
    if lingua == '[[]]':
        lingua = ''
 
    return lingua
 
def autoreLink(nomeautore, cognomeautore):
 
    if nomeautore and cognomeautore:
        autore='[['+nomeautore+' '+cognomeautore+'|'+cognomeautore+', '+nomeautore+']]'
    elif nomeautore and not cognomeautore:
        autore='[['+nomeautore+']]'
    elif cognomeautore and not nomeautore:
        autore='[['+cognomeautore+']]'
    else:
        autore=''
 
    return autore
 
def titoloLink(titoloorig):
    articoli = ["Il ", "Lo ", "La ", "I ", "Gli ", "Le ", "L'", "'O ", "'A ", "Un ", "Uno ", "Una ", "Un'"]
    titolo=titoloorig
 
    for articolo in articoli:
        if titoloorig.startswith(articolo):
            titolosenza = titoloorig[len(articolo):]
 
            titolomaiuscolo = titolosenza[:1].upper()+titolosenza[1:]
            titolo=titolomaiuscolo +', '+articolo
    return titolo
 
def main():
    template=wikipedia.Page('it', 'Template:Dramma')
    gen = pagegenerators.ReferringPageGenerator(template)    
    voci=[]   
    newtext=''
    listone={}
    articoli = ["Il ", "Lo ", "La ", "I ", "Gli ", "Le ", "L'", "'O ", "'A ", "Un ", "Uno ", "Una ", "Un'"]
 
 
    for page in gen:
        if not page in voci:
            if page.namespace() == 0:
                titolo=titoloLink(page.title())
                listone[page.title()]=titolo
 
    items=listone.items()
    backitems=[ [v[1],v[0]] for v in items]
    backitems.sort()
    voci=[ backitems[i][1] for i in range(0,len(backitems))]
 
    count=0
 
    for voce in voci:
        pagina=wikipedia.Page('it', voce)        
 
        titor=False
        titoloorig=''
 
        diz = {'Titoloitaliano':'',
               'Titolooriginale':'',
               'Nome':'',
               'Cognome':'',
               'Linguaoriginale':'',
               'Epocacomposizione':''
               }
 
        if re.search(r'Elenco', str(pagina)):
            continue
        else:
            count=count+1
 
        wikipedia.output(u'\n>>> %s <<<' % pagina.title())
        testo=pagina.get() 
        listaparametri=pagina.templatesWithParams()
 
        if re.search(r'\{\{[Dd]ramma', testo): 
 
            for parametro in listaparametri:
 
                for p in parametro[1]:
                    if re.search(r'[Pp]olytonic', p):
                        titor=True
                        continue
                    if titor==True:
                        p = re.sub('\n', '', p).strip()
                        print diz['Titolooriginale']
                        diz['Titolooriginale']='{{polytonic|'+p+'}}'
                        titor=False
 
                    for k in diz.keys():
                        lun = len(k)+1
 
                        if re.search(k, p):
                            n=p[lun:]
                            if n.startswith(' '):
                                n=n[1:]
                            diz[k] = n
        else:
            continue
 
        for k in diz.keys():
            n=diz[k]
            if n.startswith(' '):
                n=n[1:]
 
            n = re.sub('\[', '', n).strip()
            n = re.sub('\]', '', n).strip()
            n = re.sub('\n', '', n).strip()
            diz[k] = n
 
        print diz
 
        nomepagina = pagina.title() 
 
        if titoloLink(diz['Titoloitaliano']):
            titolo = '|'+titoloLink(diz['Titoloitaliano'])
        else:
            if nomepagina.endswith(')'):
                titolo='|'
            else:
                titolo=''
 
        if  titoloorig :
            titoloorig="''"+titoloorig+"''"
        else:
            titoloorig=''
 
 
        autore = autoreLink(diz['Nome'], diz['Cognome'])
        lingua = linguaLink(diz['Linguaoriginale'])
        titoloorig = diz['Titolooriginale']
        epoca = diz['Epocacomposizione']        
 
        testo= '|-\n'+'|'+'\'\'[['+nomepagina+titolo+']]\'\' || '+autore+' || '+lingua+' || '+titoloorig+' || '+epoca+'\n'
        newtext=newtext+testo
 
        wikipedia.output(testo)
 
    inizio='{| class="wikitable sortable"\n|+ Elenco di opere teatrali\n! Titolo !! Autore !! Lingua<br/>originale !! Titolo<br/>originale !! Anno<br/>composizione\n'
    fine='|}'
    lista=wikipedia.Page('it', 'Utente:Yuma/Sandbox/5')
    vecchiotesto=lista.get()
    nuovotesto = inizio + newtext + fine
 
    wikipedia.showDiff(vecchiotesto, nuovotesto)
    choice = wikipedia.inputChoice(u"Aggiorno?",  ['Yes', 'No'], ['y', 'N'], 'N')
    if choice in ['Y', 'y']:
        wikipedia.setAction(u'Bot: Compilo elenco opere teatrali')
        lista.put(nuovotesto)
if __name__ == "__main__":
        try:
                main()
        finally:
                wikipedia.stopme()

[modifica] monitinsert.py

# -*- coding: utf-8 -*-
 
"""
Questo script serve per inserire il template monitoraggio.
Si richiede di specificare un parametro di progetto.
 
***ATTENZIONE**** Sarebbe bene evitare l'inserimento automatico
del monitoraggio nel caso in cui la cosa comporti la creazione
massiccia di pagine di discussione senza info rilevanti (meglio
inserirne poche alla volta e compilare i template).
"""
 
import wikipedia, sys, re, catlib
 
def workon(lista, varp):
    template= '{{Monitoraggio\n|progetto= '+varp+'\n|progetto2= '+'\n|accuratezza= ' +  '\n|scrittura= ' + '\n|fonti= ' + '\n|immagini= ' + '\n|note= ' + '\n|utente= ' + '\n|data= ' + '\n}}\n'
 
    for voce in lista:
        oldtext=''
        print voce.namespace()
        if voce.namespace() == 0:
            nomediscu='Discussione:'+voce.title()
            discussione=wikipedia.Page('it', nomediscu)       
 
            wikipedia.output(u'\n>>> %s <<<' % discussione.title())
 
            if discussione.exists():
                try:
                    oldtext=discussione.get()
                except discussione.isRedirectPage() or discussione.isDisambig():
                    wikipedia.output(u'Redirect o disambigua.')
                    continue
 
                else:
                    wikipedia.output(u'La pagina %s esiste.' %discussione.title())
 
                    if re.search(r'\{\{[Mm]onitoraggio', oldtext):
                            wikipedia.output(u'Monitoraggio presente, proseguo.')
                    else:
                        newtext= template + oldtext
                        wikipedia.showDiff(oldtext, newtext)
                        choice = wikipedia.inputChoice(u"Conferma la modifica" ,  ['Si', 'No'], ['s', 'N'], 'N')
                        if choice in ['S', 's']:
                            wikipedia.output (u'Inserisco il template monitoraggio.')
                            wikipedia.setAction(u'Bot: monitoraggio %s' % varp)
                            discussione.put(newtext)
 
            else:
                wikipedia.output(u'Non esiste una pagina di discussione per la voce %s' % voce.title())
                choice = wikipedia.inputChoice(u"Vuoi creare la pagina (sconsigliato)?" ,  ['Si', 'No'], ['s', 'N'], 'N')
                if choice in ['S', 's']:
                    newtext= template + oldtext
                    wikipedia.showDiff(oldtext, newtext)
                    choice = wikipedia.inputChoice(u"Conferma la modifica" ,  ['Si', 'No'], ['s', 'N'], 'N')
                    if choice in ['S', 's']:
                        wikipedia.output (u'Inserisco il template monitoraggio.')
                        wikipedia.setAction(u'Bot: monitoraggio %s' % varp)
                        discussione.put(newtext)        
def main():
 
    lista=[]
    varp=''
 
 
    varp=wikipedia.input(u'Mi serve la variabile \'progetto\' da inserire:')
    if varp:
        choice = wikipedia.inputChoice(u"Scegli il metodo di creazione dell'elenco di voci: 'categoria' o 'puntanoQui?",  ['categoria', 'puntanoQui'], ['c', 'p'], '')
        if choice in ['C', 'c']:
            nomecat=wikipedia.input(u"Specifica una categoria")
            cat=catlib.Category('it', 'Categoria:'+nomecat)
            lista=[page for page in cat.articlesList()]
 
        if choice in ['P', 'p']:
            portale=wikipedia.Page('it', 'Portale:'+varp)
            if portale.exists():
                choice = wikipedia.inputChoice(u"Cerco i collegamenti a %s?"  % portale.title(),  ['Si', 'No per inserire un\'altra pagina'], ['s', 'N'], 'N')
                if choice in ['S', 's']:
                    lista=[page for page in portale.getReferences()]
                elif choice in ['N', 'n']:
                    nomepagina=wikipedia.input(u'Inserire il nome completo della pagina o del template: ')
                    pagina=wikipedia.Page('it', nomepagina)                    
                    lista=[page for page in pagina.getReferences()]
    if lista:
        workon(lista, varp)
    else:
        choice = wikipedia.inputChoice(u"Termino il programma?",  ['Si', 'No'], ['s', 'N'], 'S')
        if choice in ['N', 'n']:
            main()
 
 
if __name__ == "__main__":
 
    print __doc__
 
    try:
        main()
    finally:
        wikipedia.stopme()


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -