Progetto:Bot/Programmi in Python per i bot/CategorieAutoriPer.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pywikibot as wikipedia, re
from pywikibot import pagegenerators
import catlib

site = wikipedia.getSite("it")
auto = True

def maiusc(stringa):
        return stringa[0].capitalize() + stringa[1:]

def cong(secolo):
        if secolo == u'Antichità':
                return u" dell'"
        return u' del '

def crea(catname, testo):
        cat = catlib.Category(site, title=catname)
        if cat.isEmptyCategory():
                return False
        if not cat.exists():
                #print u'creo categoria: ' + catname + '_______' + testo
                cat.put(testo, comment=u'Bot - CategorieAutoriPer.py: creo categoria')
        else:
                if not auto:
                        testoPre = cat.get()
                        if testoPre != testo:
                                wikipedia.showDiff(testoPre, testo)
                                choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No'], ['y', 'N'], 'y')
                                if choice == 'y':
                                        cat.put(testo, comment=u'Bot - CategorieAutoriPer.py (manual mode): aggiorno categoria')
        return True

def main():

        #attivita'
        templateAttivita = wikipedia.Page(site,u"Template:Autore/PluraleAttività").get()
        attivita = templateAttivita.split('=')
        del attivita[0]
        for index, a in enumerate(attivita):
                attivita[index] = a[0:a.find('\n')].strip()

        #nazionalita'
        templateNazionalita = wikipedia.Page(site,u"Template:Autore/PluraleNazionalità").get()
        nazionalita = templateNazionalita.split('=')
        del nazionalita[0]
        for index, a in enumerate(nazionalita):
                nazionalita[index] = a[0:a.find('\n')].strip()

        #secoli
        secoli = ["XXI secolo", "XX secolo", "XIX secolo", "XVIII secolo", "XVII secolo", "XVI secolo",
"XV secolo", "XIV secolo", "XIII secolo", "XII secolo", "XI secolo",
"X secolo", "IX secolo", "VIII secolo", "VII secolo", "VI secolo",
"V secolo", "IV secolo", "III secolo", "II secolo", "I secolo",
"I secolo a.C.", "II secolo a.C.", "III secolo a.C.", "IV secolo a.C.", "V secolo a.C.",
"VI secolo a.C.", "VII secolo a.C.", "VIII secolo a.C.", u"Antichità"]

        #creo le categorie
        for a in attivita:
                if crea(maiusc(a), u'[[Categoria:Autori per attività]]'):

                        for index, s in enumerate(secoli):
                                ord = 31 - index
                                testo  =   u'[[Categoria:Autori' + cong(s) + s + u' per attività|' + maiusc(a) + u']]'
                                testo += u'\n[[Categoria:' + maiusc(a) + u' per periodo storico| ' + format(ord, '02') + u']]'
                                crea(maiusc(a) + cong(s) + s, testo)

                        crea(maiusc(a) + u' per periodo storico', u'[[Categoria:' + maiusc(a) + u'| ]]')
                        crea(maiusc(a) + u' per nazionalità', u'[[Categoria:' + maiusc(a) + u'| ]]')

        for n in nazionalita:
                if crea(u'Autori ' + n, u'[[Categoria:Autori per nazionalità|' + maiusc(n) + ']]'):

                        for index, s in enumerate(secoli):
                                ord = 31 - index
                                testo  =   u'[[Categoria:Autori' + cong(s) + s + u' per nazionalità|' + maiusc(n) + u']]'
                                testo += u'\n[[Categoria:Autori ' + n + u' per periodo storico| ' + format(ord, '02') + u']]'
                                crea(u'Autori ' + n + cong(s) + s, testo)

                        for a in attivita:
                                testo  =   u'[[Categoria:' + maiusc(a) + u' per nazionalità|' + maiusc(n) + u']]'
                                testo += u'\n[[Categoria:Autori ' + n + u' per attività|' + maiusc(a) + ']]'
                                crea(maiusc(a) + u' ' + n, testo)

                        crea(u'Autori ' + n + u' per attività', u'[[Categoria:Autori ' + n + u'| ]]')
                        crea(u'Autori ' + n + u' per periodo storico', u'[[Categoria:Autori ' + n + u'| ]]')

        for s in secoli:
                crea(u'Autori' + cong(s) + s + u' per nazionalità', u'[[Categoria:' + u'Autori' + cong(s) + s + u'| ]]')
                crea(u'Autori' + cong(s) + s + u' per attività', u'[[Categoria:' + u'Autori' + cong(s) + s + u'| ]]')

if __name__ == "__main__":
        try:
                main()
        finally:
                wikipedia.stopme()