Apri il menu principale


Cellistbot this user is a Bot
Cellistbot (Talk · Contribs)
Botanist bot.png
Cellistbot al lavoro
Operatore:Nickanc ♪♫@
Approvato:Si
Flag:22:33, 9 apr 2011 (CEST) da Roberto Segnali all'Indiano
Compito/i:Richieste
Edit rate:Non definito, tendente a zero
Edit period/s:Periodico
Automatico o manuale?Automatico
Linguaggio di programmazione/i:framework pywikipediabot
{{bots}} e {{nobots}} compatibile?Si
Codice sorgente pubblicato?Si (usa pywikipediabot e tanta fantasia!)
Gira su toolserver?

Sono un bot controllato da Nickanc (discussioni · contributi). Ho mosso i primi passi col mio papà con l'aiuto di Gnumarcoo (discussioni · contributi). :)

Cycadophyta.png Questo bot partecipa alla operazione Cycadales. Il suo lavoro a Utente:Cellistbot/cycadeles.


Alcuni comandi per eseguire richiesteModifica

  • Spostamento Wikilink : Sostituisci XXXX con il nome della pagina da cambiare, YYYY quella che la sostituisce, ZZZ il nome sezione di Wp:BOT/R:
    • Quando il nome precedente della voce deve rimanere nel testo (es. spostare da scarpe a scarpa)

python replace.py -regex '\[\[XXXX\|([^\|\]]*)\]\]' '[[YYYY|\1]]' '\[\[(XXXX)\]\]' '[[YYYY|\1]]' '\[\[YYYY\|([Yy]YYY)\]\]' '[[\1]]' -nocase -summary:"[[Wp:Bot|Bot]]: spostamento wikilink come [[Wikipedia:Bot/Richieste#ZZZ|richiesto]]" -ref:"XXXX" -pt:00

    • quando il nome precedente della voce non deve rimanere nel testo

python replace.py -regex "\[\[XXXX(\||\]\])" "[[YYYY\1" -nocase -summary:"[[Wp:Bot|Bot]]: spostamento wikilink - [[Wikipedia:Bot/Richieste#ZZZ|richiesta]]" -ref:"XXXX"

  • PosteBot (termine coniato da Gnumarcoo (discussioni · contributi)): aggiunge un certo tmp substato in fondo alle pagine in un certo elenco: XXXX pagina elenco link YYYY pagina testo, ZZZ parte significativa del testo che lo qualifica inequivocabilmente

python add_text.py -links:"XXXX" -ns: -text:"{{subst:YYYY}}" -summary:"[[Wp:Bot|PosteBot]]: avviso" -except:"ZZZ" -noreorder -pt:00

Archiviazione semiautomaticaModifica

L'archiviazione semiautomatica consiste in:

  1. Un bot cancella dalla prima voce le sezioni da archiviare
  2. Un umano (di solito il botolatore) guarda il diff e copia le sezioni nell'archivio

Si tratta di insegnare al bot come riconoscere correttamente le sezioni da archiviare. Qui alcuni esempi per pagine molto specifiche:

python replace.py -regex '==[^=\n]+==\s*\{\{\s*RichiestaBot([^{}]*\{\{[^{}]*([^{}]*\{\{[^{}]*([^{}]*\{\{[^{}]*([^{}]*\{\{[^{}]*([^{}]*\{\{[^{}]*\}\})*\}\})*\}\})*\}\})*\}\})*[^{}]*\|\s*stato\s*=\s*(\[\[[^\]]*\]\] \S{0,3}(Non )?Fatto\S{0,3}|(\{\{\s*)*(non )?fatto(\s*\}\})*).*?\r\n==' '==' -dotall -recursive -nocase -summary:"[[Wp:Bot|Bot]]: [[Utente:Cellistbot#Archiviazione semiautomatica|archiviazione semiautomatica]]" -page:"Wikipedia:Bot/Richieste" -pt:00

L'immensa struttura ([^{}]*\{\{[^{}]*([^{}]*\{\{[^{}]*([^{}]*\{\{[^{}]*([^{}]*\{\{[^{}]*([^{}]*\{\{[^{}]*\}\})*\}\})*\}\})*\}\})*\}\})* serve a prevenire che il bot vada in errore incontrando template annidati e template annidati negli annidati (e così via fino a 5 tmp annidati l'uno dentro l'altro).

python replace.py -regex '♠' '' '==([^=\n]+)==' '♠==\1==' '♠[^♠]*(\[\[[^\]]*\]\] \S{0,3}(Non )?Fatto\S{0,3}|\{\{\s*(non )?fatto\s*\}\})[^♠]*' '' '♠' '' -dotall -nocase -summary:"[[Wp:Bot|Bot]]: [[Utente:Cellistbot#Archiviazione semiautomatica|archiviazione semiautomatica]]" -page:"Progetto:Coordinamento/Accoglienza/Richieste" -pt:00

spiego brevemente la regex:

  1. siccome la struttura che determina l'archiviazione (il tmp fatto/non fatto) non si trova in una struttura fissa (come il template dell'esempio precedente), devo trovare un modo di delimitare le parti di testo entro cui cercare il template, per evitare che il bot peschi parti di testo troppo larghe o troppo piccole, archiviando così a metà. Uso un carattere inutilizzato (♠) come marcatore (si chiama \x{2406}), quindi per primo ripulisco da esso: '♠' ''
  2. marco con esso le fine di sezione: '==([^=\n]+)==' '♠==\1=='
  3. Ora posso usarlo con strutture del tipo [^....]* per trovare effettivamente le sezioni da abolire: '♠[^♠]*(\[\[[^\]]*\]\] \S{0,3}(Non )?Fatto\S{0,3}|\{\{\s*(non )?fatto\s*\}\})[^♠]*'
  4. di nuovo ripulisco dal marcatore utilizzato '♠' ''