Utente:YuBot/Monitoraggiofonti.py

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

import config, wikipedia, catlib, pagegenerators
import time

#Categoria, nome utente e data (vedi più giù) devono essere inserite nello script prima di farlo girare#

def main():

    #categoria su cui lavorare:#
    categoryname = u'Voci monitorate - non compilate'

    cat = catlib.Category(wikipedia.getSite(), 'Categoria:%s' % categoryname)
    gen1 = pagegenerators.CategorizedPageGenerator(cat, start="Discussione:Af")

    
    for discussione in gen1:
        titolodiscussione=discussione.title()
        
        
        titolovoce=discussione.titleWithoutNamespace()
        voce=wikipedia.Page("it", titolovoce)
        if voce.exists():
            try:
                testodiscussione=discussione.get()
                testovoce=voce.get()
            except wikipedia.IsRedirectPage:
                continue
            wikipedia.output(titolovoce)
            wikipedia.output(titolodiscussione)

            
        else:
            print "non esiste la voce ", titolovoce
            continue

        rx1 = re.compile(r"== ?[Nn]ote ?==")
        rx2 = re.compile(r"== ?[Bb]ibliografia ?==")

        ricerca1 = re.search(rx1, testovoce)
        ricerca2 = re.search(rx2, testovoce)

        #cerco note utente e data nella discussione
        rx3 = re.compile(r"(note ?= ?.*)\}?")
        rx4 = re.compile(r"(data ?= ?.*)(\}?\}?)")
        rx5 = re.compile(r"(utente ?= ?.*)\}?")
        ricerca3 = re.search(rx3, testodiscussione)
        ricerca4 = re.search(rx4, testodiscussione)
        ricerca5 = re.search(rx5, testodiscussione)
        if ricerca3 and ricerca4 and ricerca5:
            stringanote=ricerca3.group(1)
            stringadata=ricerca4.group(1)
            stringautente=ricerca5.group(1)

            #DATA E UTENTE DA INSERIRE PRIMA DI FAR GIRARE LO SCRIPT#
            nuovastringadata = "data= MESE ANNO"
            nuovastringautente = "utente= UTENTE"
        else:
            continue
            

        

        cx1 = re.compile(r"< ?ref ?.*>.*</ ?ref ?>")
        controllo1 = re.search(cx1, testovoce)
        cx2 = re.compile(r"< ?references ?/>")
        controllo2 = re.search(cx2, testovoce)
        cx3 = re.compile(r"\{\{[Rr]eferences")
        controllo3 = re.search(cx3, testovoce)

        note=""
        nb =""

        if controllo1:
            if controllo2 or controllo3:
                if ricerca1:
                    note="SI"
                    nb =""
                else:
                    note="SI"
                    nb= " - manca sezione note corretta"
        
                
            
        bib=""
        if ricerca2:
            bib="SI"

        if not bib and not note:
            print "biblio e note assenti"

            fonti=re.compile(r"fonti ?= ?.*")
            rxfonti=re.search(fonti, testodiscussione)
            stringa=rxfonti.group(0)
            nuovastringa="fonti= x"
            nuovastringanote="note= Mancano note e bibliografia"

            azione='bot: segnalo assenza di note e bibliografia'
            

        elif not bib and note:
            print "biblio assente"

            fonti=re.compile(r"fonti ?= ?.*")
            rxfonti=re.search(fonti, testodiscussione)
            stringa=rxfonti.group(0)
            nuovastringa="fonti= d"
            nuovastringanote="note= Manca una [[Aiuto:Bibliografia|bibliografia]]"

            azione='bot: segnalo assenza di bibliografia'
            

        elif bib and not note:
            print "note assenti"

            fonti=re.compile(r"fonti ?= ?.*")
            rxfonti=re.search(fonti, testodiscussione)
            stringa=rxfonti.group(0)
            nuovastringa="fonti= d"

            nuovastringanote="note= Mancano [[Aiuto:Note|note]] e riferimenti puntuali"

            azione='bot: segnalo assenza di note'

        else:
            continue

            
        newtext=testodiscussione.replace(stringa, nuovastringa, 1)
        newtext=newtext.replace(stringadata, nuovastringadata, 1)
        newtext=newtext.replace(stringautente, nuovastringautente, 1)
        newtext=newtext.replace(stringanote, nuovastringanote, 1)
        
        wikipedia.showDiff(testodiscussione, newtext)

        choice = wikipedia.inputChoice(u"Premi invio per confermare", "", "")

        wikipedia.setAction(azione)
        discussione.put(newtext)

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