Utente:IPork/Sandbox/2/script

# -*- coding: utf-8 -*-

"""
Questo programma deriva da category.py presente nel bundle pywikipedia.
Lo si utilizza per generare le liste dei testi che seguono il percorso di qualità di it.wikisource.org
e relative tabelle delle statistiche.

Per lanciarlo basta digitare:
python gestione_elenchi_SAL.py progetto

Per sapere quali progetti sono conosciuti dal bot:
python gestione_elenchi_SAL.py listaProgetti

Ogni suggerimento o modifica è benvenuta!

iPork
http://it.wikisource.org/wiki/Utente:IPork
Qualc1
http://it.wikisource.org/wiki/Utente:Qualc1
"""

#*************** INIZIO: PARAMETRI PER PROGETTI  ***************
# per aggiungere un nuovo progetto basta aggiungerlo nella sezione qui sotto.

parametri = {
  'canti': 
    {
    'bot1': ['Elenchi dei canti per genere', 'Canti d\'amore', 'Template:Elenco dei canti d\'amore'],
    'bot2': ['Elenchi dei canti per genere', 'Canti anarchici', 'Template:Elenco dei canti anarchici'],
    'bot3': ['Elenchi dei canti per genere', 'Canti contro la guerra', 'Template:Elenco dei canti contro la guerra'],
    'bot4': ['Elenchi dei canti per genere', 'Canti dell\'emigrazione', 'Template:Elenco dei canti dell\'emigrazione'],
    'bot5': ['Elenchi dei canti per genere', 'Canti dell\'infanzia', 'Template:Elenco dei canti dell\'infanzia'],
    'bot6': ['Elenchi dei canti per genere', 'Canti del lavoro', 'Template:Elenco dei canti del lavoro'],
    'bot7': ['Elenchi dei canti per genere', 'Canti della malavita', 'Template:Elenco dei canti della malavita'],
    'bot8': ['Elenchi dei canti per genere', 'Canti di montagna', 'Template:Elenco dei canti di montagna'],
    'bot9': ['Elenchi dei canti per genere', 'Canti narrativi', 'Template:Elenco dei canti narrativi'],
    'bot10': ['Elenchi dei canti per genere', 'Canti natalizi', 'Template:Elenco dei canti natalizi'],
    'bot11': ['Elenchi dei canti per genere', 'Canti d\'osteria', 'Template:Elenco dei canti d\'osteria'],
    'bot12': ['Elenchi dei canti per genere', 'Canti rituali', 'Template:Elenco dei canti rituali'],
    'bot13': ['Elenchi dei canti per genere', 'Canti socialisti e comunisti', 'Template:Elenco dei canti socialisti e comunisti'],
    'bot14': ['Elenchi dei canti per genere', 'Canti dei soldati', 'Template:Elenco dei canti dei soldati'],
    'bot15': ['Elenchi dei canti per genere', 'Canti degli Alpini', 'Template:Elenco dei canti degli Alpini'],
    'bot16': ['Elenchi dei canti per genere', 'Canti del Corpo dei Bersaglieri', 'Template:Elenco dei canti del Corpo dei Bersaglieri'],
    'bot17': ['Elenchi dei canti per genere', 'Canti della Brigata Paracadutisti Folgore', 'Template:Elenco dei canti della Brigata Paracadutisti Folgore'],
    'bot18': ['Elenchi dei canti per genere', 'Canti storici', 'Template:Elenco dei canti storici'],
    'bot19': ['Elenchi dei canti per genere', 'Canti universitari', 'Template:Elenco dei canti universitari'],
    }
}

#*************** FINE: PARAMETRI PER PROGETTI  ***************


#
# (C) Rob W.W. Hooft, 2004
# (C) Daniel Herding, 2004
#
__version__ = '$Id: category.py 3998 2007-08-07 20:28:27Z wikipedian $'
#
# Distributed under the terms of the MIT license.
#

import wikipedia, catlib
import datetime


class CategoryListifyRobot:
    '''
    Creates a list containing all of the members in a category.
    '''
    listify_msg={
        'en':u'Robot: Listifying from %s (%d entries)',
        'it':u'Generazione elenco testi %s (%d testi)',
    }

    def __init__(self, infoPagine, editSummary, overwrite = True, subCats = False, talkPages = True):
        textTitle, catTitle, listTitle = infoPagine
        self.textTitle = textTitle
        self.editSummary = editSummary
        self.overwrite = overwrite
        self.cat = catlib.Category(wikipedia.getSite(), 'Category:' + catTitle)
        self.list = wikipedia.Page(wikipedia.getSite(), listTitle)
        self.subCats = subCats
        self.talkPages = talkPages

    def run(self):
        testoCat = self.textTitle
        listOfArticles = self.cat.articlesList()
        count = 0
        if self.subCats:
            listOfArticles += self.cat.subcategoriesList()
        if self.editSummary:
            wikipedia.setAction(self.editSummary)
        else:
            wikipedia.setAction(wikipedia.translate(wikipedia.getSite(), self.listify_msg) % (self.cat.title(), len(listOfArticles)))

        listString = "<noinclude>{{Lista Bot}}\n\nElenco generato il giorno %s\n\n</noinclude>" % (datetime.datetime.now().strftime("%d.%m.%Y, %H:%M"))
        for article in listOfArticles:
            count = count + 1
            if not article.isImage() and not article.isCategory():
                if self.talkPages and not article.isTalkPage():
                    listString = listString + "''[[%s]]'' {{SAL icona|%s}} <br />\n" % (article.title(),article.title())
                else:
                    listString = listString + "''[[%s]]'' {{SAL icona|%s}} <br />\n" % (article.title(),article.title())
            else:
                if self.talkPages and not article.isTalkPage():
                    listString = listString + "''[[%s]]'' {{SAL icona|%s}} <br />\n" % (article.title(),article.title())
                else:
                    listString = listString + "''[[%s]]'' {{SAL icona|%s}} <br />\n" % (article.title(),article.title())
        listString = listString + "<!-- \nElenco dei testi formattato per il bot. \n\n"
        for article in listOfArticles:
            count = count + 1
            if not article.isImage() and not article.isCategory():
                if self.talkPages and not article.isTalkPage():
                    listString = listString + "[[%s]]\n" % article.title()
                else:
                    listString = listString + "[[%s]]\n" % article.title()
            else:
                if self.talkPages and not article.isTalkPage():
                    listString = listString + "[[%s]]\n" % article.title()
                else:
                    listString = listString + "[[%s]]\n" % article.title()
        listString = listString + "\n -->\n\n<noinclude>[[Categoria:%s|{{PAGENAME}}]]</noinclude>" % testoCat
        if self.list.exists() and not self.overwrite:
            wikipedia.output(u'Page %s already exists, aborting.' % self.list.title())
        else:
            self.list.put(listString)


def listaProgetti():
    """Visualizza la lista dei progetti conosciuti dal bot"""

    print "\n\nDi seguito sono elencati i parametri da aggiungere per generare le statistiche dei testi dei diversi progetti:\n"
    for progetto in sorted(parametri.keys()):
        print "   " + progetto
    print "\nPer generare le statistiche usare la forma \"python gestione_elenchi_SAL.py PARAMETRO\"\n"


def helpExit(avviso = ""):
	print "** " + avviso + " **"
	#wikipedia.showHelp('gestione_elenchi_SAL')
	print __doc__
	import sys
	sys.exit(1)


def main():
    editSummary = ''
    overwrite = True
    talkPages = True

    action = None
    for arg in wikipedia.handleArgs():
        if arg in parametri:
            action = arg
        elif arg == 'listaProgetti':
            listaProgetti()
            import sys
            sys.exit()
        elif arg.startswith('-summary:'):
            editSummary = arg[len('-summary:'):]
        else:
            helpExit("Non conosco il progetto " + arg)
    if action is None:
        helpExit(u"Non c'è il parametro che indica il progetto")

    nomi_bots = parametri[action].keys()
    nomi_bots.sort()

    for nome_bot in nomi_bots:
        un_bot = CategoryListifyRobot(parametri[action][nome_bot], editSummary, overwrite, subCats = False, talkPages = talkPages)
        un_bot.run()


if __name__ == "__main__":
    main()