Utente:CandalBot/aaa categorieAutori.py

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

import wikipedia, re, pagegenerators, catlib, string, random, touch

sito=wikipedia.getSite("it")

def crea(catname, catsopra, nomecognome, cognomenome):

        cat = catlib.Category(site=sito, title=catname)

        if not cat.isEmptyCategory() and not cat.exists():

                cat.put(u"{{Vedi anche autore|"+nomecognome+"}}\n\n[[Categoria:"+catsopra+"|"+cognomenome+"]]", "Bot: creazione categoria")
                return True
        return False

def esegui(gen, titoloPrefix):

        for page in gen:
                titolo = page.title()
                # esci dal ciclo quando non siamo piu' su Wikisource:Autore citato/
                #if titolo.find(titoloPrefix) == -1:
                #        break

                titolo = titolo.replace(titoloPrefix, "")
                testo = page.get()
                m = re.search("<section begin=\"Nome\"/>(.*?)<section end=\"Nome\"/>", testo)
                if m:
                        nome = m.group(1)
                else:
                        nome = ""
                m = re.search("<section begin=\"Cognome\"/>(.*?)<section end=\"Cognome\"/>", testo)
                if m:
                        cognome = m.group(1)
                else:
                        cognome = nome
                        nome = ""

                if nome != "":
                        cognomenome = cognome + ", " + nome
                        nomecognome = nome+" "+cognome
                else:
                        cognomenome = cognome
                        nomecognome = cognome

                creata = crea(u"Testi di "+titolo, "Testi per autore", nomecognome, cognomenome)
                creata = creata or crea(u"Testi musicati da "+titolo, "Testi per compositore", nomecognome, cognomenome)
                creata = creata or crea(u"Traduzioni di "+titolo, "Testi per traduttore", nomecognome, cognomenome)
                creata = creata or crea(u"Testi in cui è citato "+titolo, "Testi per autore citato", nomecognome, cognomenome)
                creata = creata or crea(u"Pagine in cui è citato "+titolo, "Pagine per autore citato", nomecognome, cognomenome)
                creata = creata or crea(u"Libri di "+titolo, "Libri per autore", nomecognome, cognomenome)
                creata = creata or crea(u"Opere di "+titolo, "Opere per autore", nomecognome, cognomenome)

                #touch della pagina per forzare il refresh delle categorie
                if creata:
                        page.put(testo, "Pywikibot touch script")

def main():

        #inizia da un punto casuale
        begin = 'A'
        if random.random() < 0.5:
                begin = random.choice(string.ascii_lowercase) + random.choice(string.ascii_lowercase);
        gen = pagegenerators.AllpagesPageGenerator(begin, namespace=102, includeredirects=False, site=sito)
        gen = pagegenerators.PreloadingGenerator(gen)

        esegui(gen, "Autore:")

        #gen2 = pagegenerators.AllpagesPageGenerator("Autore citato/A", namespace=4, includeredirects=False, site=sito)
        #gen2 = pagegenerators.PreloadingGenerator(gen2)
        #esegui(gen2, "Wikisource:Autore citato/")


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