Nonciclopedia:Bot/Makelist2

Vai alla navigazione Vai alla ricerca

Siccome fatto da me è meglio, perché quello di Sanjilops fa cagare e perché non ho un cazzo da fare, sono fiero[citazione necessaria] di presentare il secondo[1], l'imitabile[2], lo scadente[3] makelist.py!

Installazione

Non si installa, idiota. Se non hai pywikipediabot però non lo puoi eseguire. E se non sai cos'è forse è meglio che tu non lo sappia mai. Il codice è a fondo pagina.


Avvio

Lancia makelist.py ha solo un parametro:

-start:

Che indica al programma da dove partire a generare la lista. Per generare una lista controllando tutte le pagine, mettilo in questo modo:

-start:!

Esecuzione

Appena avviato, makelist.py vi chiederà una regex da applicare. Se non sai cosa sono le regex, cerca un po' su google. In futuro forse farò una miniguida. Dopo aver inserito la prima regex, il programma ci chiederà di inserirne un'altra. In questo modo, troverà sia le pagine che contengono la prima regex che quelle che contengono la seconda. Puoi continuare a inserire quante regex vuoi. Se invece non vuoi inserire altre regex, lascia vuoto e premi invio.

Fine

Quando makelist.py ha finito di cercare, ti chiederà una pagina dove salvare il risultato. Semplicemente inseriscila e premi invio[4]. Esempio:

Utente:Genuzzo/Makelist/1

Se makelist ha trovato un alto numero di pagine, e soprattutto se la tua linea è poco veloce, il salvataggio potrebbe richiedere molto tempo. Alla fine, nella pagina specificata, troverai la lista con tutte le occorrenze della regex.

Codice

Al momento makelist.py è in Alpha 0.1. Sei pregato di segnalarmi i bug, se ne trovi.

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


__version__ = '$Id$'
testodamettere = "Lista generata con Makelist.\n"

import wikipedia as pywikibot
import pagegenerators
import sys
import urllib
import re

class AppURLopener(urllib.FancyURLopener):
	#User-Agent	
	version = "GenuzzuMakelistBot"




docuReplacements = {
    '&params;': pagegenerators.parameterHelp
}

class BasicBot:
    #Ciò che scriverà il bot per ogetto delle modifiche.
    msg = {
        'it': u'Bot: Makelist',
    }

    def __init__(self, generator, dry):
        self.generator = generator
        self.dry = dry
        self.summary = pywikibot.translate(pywikibot.getSite(), self.msg)
        i = 0;
        self.pattern = []
        regexInput = raw_input("Cosa vuoi cercare? [Attenzione, usa le regex!]\n")
        self.pattern.append(re.compile("(" + regexInput + ")"))
        while(regexInput != ""):
           i = i + 1;
           regexInput = raw_input("Vuoi inserire un'altra regex? [Lascia vuoto per proseguire.]\n")
           self.pattern.append(re.compile("(" + regexInput + ")"))

        del self.pattern[i]

    def run(self):
        for page in self.generator:
            try:
              paginagiatrovata = 0
              for pattern in self.pattern:
                localMatch = pattern.findall(self.load(page))
                if localMatch:
                  if not paginagiatrovata:
                    print('Trovato in ' + str(page))
                    titolo = str(page).replace("[[", "")
                    titolo = titolo.replace("]]", "").decode("utf-8")
                    globals()["testodamettere"] = globals()["testodamettere"] + "# '''[[:" + titolo + "]]''' ([{{fullurl:" + titolo + "|action=edit}} modifica])\n"
                  paginagiatrovata = 1
                  i = 0
                  for match in localMatch:
                      i = i + 1
                      if type(match) is list or type(match) is tuple:
                          risultato = match[0].replace("<nowiki>", "").replace("", "")
                        
                      else:
                          risultato = match.replace("", "").replace("", "")
                    
                      globals()["testodamettere"] = globals()["testodamettere"] + "#*" + str(i) + ": ''" + risultato + "''\n"               
            finally:
                pass


    def treat(self, page, text):
        if not self.save(text, page, self.summary):
            pywikibot.output(u'Page %s not saved.' % page.aslink())

    def load(self, page):
        try:
            text = page.get()
        except pywikibot.NoPage:
            pywikibot.output(u"Page %s does not exist; skipping."
                             % page.aslink())
        except pywikibot.IsRedirectPage:
            pywikibot.output(u"Page %s is a redirect; skipping."
                             % page.aslink())
        else:
            return text
        return None

    def save(self, text, page, comment, minorEdit=True, botflag=True):
        if text != page.get():
            pywikibot.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<"
                             % page.title())
            pywikibot.showDiff(page.get(), text)
            pywikibot.output(u'Comment: %s' %comment)
            if not self.dry:
                choice = pywikibot.inputChoice(
                    u'Do you want to accept these changes?',
                    ['Yes', 'No'], ['y', 'N'], 'N')
                if choice == 'y':
                    try:
                        page.put(text, comment=comment,
                                 minorEdit=minorEdit, botflag=botflag)
                    except pywikibot.LockedPage:
                        pywikibot.output(u"Page %s is locked; skipping."
                                         % page.aslink())
                    except pywikibot.EditConflict:
                        pywikibot.output(
                            u'Skipping %s because of edit conflict'
                            % (page.title()))
                    except pywikibot.SpamfilterError, error:
                        pywikibot.output(
u'Cannot change %s because of spam blacklist entry %s'
                            % (page.title(), error.url))
                    else:
                        return True
        return False

def main():
    genFactory = pagegenerators.GeneratorFactory()
    gen = None
    pageTitleParts = []
    dry = False

    for arg in pywikibot.handleArgs():
        if arg.startswith("-dry"):
            dry = True
        else:
            if not genFactory.handleArg(arg):
                pageTitleParts.append(arg)

    if pageTitleParts != []:
        pageTitle = ' '.join(pageTitleParts)
        page = pywikibot.Page(pywikibot.getSite(), pageTitle)
        gen = iter([page])

    if not gen:
        gen = genFactory.getCombinedGenerator()
    if gen:
        gen = pagegenerators.PreloadingGenerator(gen)
        bot = BasicBot(gen, dry)
        bot.run()
    else:
        pywikibot.showHelp()

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


page = pywikibot.Page(pywikibot.getSite(), str(raw_input("\nDove vuoi salvare?\n")))
page.put(testodamettere, "Bot: genero lista", 1, 1)
</nowiki>


Note

  1. ^ Non l'unico, non siamo tanto prestigiosi.
  2. ^ Embè? In cina ormai ci copiano tutto, 'sti musi gialli!
  3. ^ No, per questo non ho scuse.
  4. ^ Ovvio, ma lo scrivo, non si sa mai...