A volte capita di dover popolare con dei dati una serie di voci. Essendo questi parametri diversi da voce a voce, una classica sostituzione con replace.py è impossibile. Si usa allora uno script ad hoc che verifica il nome della voce in una collezione di dati e inserisce i valori corrispondenti. Il primo passo è trasformare mediante semplici sostituzioni di testo i dati forniti (di solito in [[comma-separated values|CSV]]) in un array bidimensionale. Poi si crea un ciclo for che confronta il nome della voce con il corrispondente campo nell'array. Se viene trovata la corrispondenza si valorizzano le variabili e quindi si procede all'aggiornamento della voce.
;Esempi
Esempio dello script utilizzato per [[Wikipedia:Bot/Richieste#Inserimento del .7B.7BNavbox comuni italiani per provincia.7C.7C|questa richiesta]].
*Script utilizzato per [[Wikipedia:Bot/Richieste#Inserimento del .7B.7BNavbox comuni italiani per provincia.7C.7C|Inserimento del Navbox comuni italiani per provincia]]:
<pre><nowiki>
#!/usr/bin/python
dati = [
[u"Template:Provincia di Agrigento", u"33439066", u"2010-07-09T20:28:05Z", u"", u"", u"Sicilia", u"", u"Agrigento", u"Provincia di Agrigento-Stemma.png", u"[[Agrigento]] · [[Alessandria della Rocca]] · [[Aragona (Italia)|Aragona]] · [[Bivona]] · [[Burgio]] · [[Calamonaci]] · [[Caltabellotta]] · [[Camastra]] · [[Cammarata]] · [[Campobello di Licata]] · [[Canicattì]] · [[Casteltermini]] · [[Castrofilippo]] · [[Cattolica Eraclea]] · [[Cianciana]] · [[Comitini]] · [[Favara]] · [[Grotte]] · [[Joppolo Giancaxio]] · [[Lampedusa e Linosa]] · [[Licata]] · [[Lucca Sicula]] · [[Menfi]] · [[Montallegro]] · [[Montevago]] · [[Naro]] · [[Palma di Montechiaro]] · [[Porto Empedocle]] · [[Racalmuto]] · [[Raffadali]] · [[Ravanusa]] · [[Realmonte]] · [[Ribera]] · [[Sambuca di Sicilia]] · [[San Biagio Platani]] · [[San Giovanni Gemini]] · [[Sant'Angelo Muxaro]] · [[Santa Elisabetta (Italia)|Santa Elisabetta]] · [[Santa Margherita di Belice]] · [[Santo Stefano Quisquina]] · [[Sciacca]] · [[Siculiana]] · [[Villafranca Sicula]]"],
[u"Template:Provincia di Alessandria", u"33439090", u"2010-07-09T20:28:55Z", u"", u"", u"Piemonte", u"", u"Alessandria", u"Provincia di Alessandria-Stemma.png", u"[[Acqui Terme]] · [[Albera Ligure]] · [[Alessandria]] · [[Alfiano Natta]] · [[Alice Bel Colle]] · [[Alluvioni Cambiò]] · [[Altavilla Monferrato]] · [[Alzano Scrivia]] · [[Arquata Scrivia]] · [[Avolasca]] · [[Balzola]] · [[Basaluzzo]] · [[Bassignana]] · [[Belforte Monferrato]] · [[Bergamasco (Italia)|Bergamasco]] · [[Berzano di Tortona]] · [[Bistagno]] · [[Borghetto di Borbera]] · [[Borgo San Martino]] · [[Borgoratto Alessandrino]] · [[Bosco Marengo]] · [[Bosio]] · [[Bozzole]] · [[Brignano-Frascata]] · [[Cabella Ligure]] · [[Camagna Monferrato]] · [[Camino (Italia)|Camino]] · [[Cantalupo Ligure]] · [[Capriata d'Orba]] · [[Carbonara Scrivia]] · [[Carentino]] · [[Carezzano]] · [[Carpeneto]] · [[Carrega Ligure]] · [[Carrosio]] · [[Cartosio]] · [[Casal Cermelli]] · [[Casale Monferrato]] · [[Casaleggio Boiro]] · [[Casalnoceto]] · [[Casasco]] · [[Cassano Spinola]] · [[Cassine]] · [[Cassinelle]] · [[Castellania]] · [[Castellar Guidobono]] · [[Castellazzo Bormida]] · [[Castelletto Merli]] · [[Castelletto Monferrato]] · [[Castelletto d'Erro]] · [[Castelletto d'Orba]] · [[Castelnuovo Bormida]] · [[Castelnuovo Scrivia]] · [[Castelspina]] · [[Cavatore]] · [[Cella Monte]] · [[Cereseto]] · [[Cerreto Grue]] · [[Cerrina Monferrato]] · [[Coniolo]] · [[Conzano]] · [[Costa Vescovato]] · [[Cremolino]] · [[Cuccaro Monferrato]] · [[Denice]] · [[Dernice]] · [[Fabbrica Curone]] · [[Felizzano]] · [[Fraconalto]] · [[Francavilla Bisio]] · [[Frascaro]] · [[Frassinello Monferrato]] · [[Frassineto Po]] · [[Fresonara]] · [[Frugarolo]] · [[Fubine]] · [[Gabiano]] · [[Gamalero]] · [[Garbagna]] · [[Gavazzana]] · [[Gavi]] · [[Giarole]] · [[Gremiasco]] · [[Grognardo]] · [[Grondona]] · [[Guazzora]] · [[Isola Sant'Antonio]] · [[Lerma]] · [[Lu (Italia)|Lu]] · [[Malvicino]] · [[Masio]] · [[Melazzo]] · [[Merana]] · [[Mirabello Monferrato]] · [[Molare (Italia)|Molare]] · [[Molino dei Torti]] · [[Mombello Monferrato]] · [[Momperone]] · [[Moncestino]] · [[Mongiardino Ligure]] · [[Monleale]] · [[Montacuto]] · [[Montaldeo]] · [[Montaldo Bormida]] · [[Montecastello]] · [[Montechiaro d'Acqui]] · [[Montegioco]] · [[Montemarzino]] · [[Morano sul Po]] · [[Morbello]] · [[Mornese]] · [[Morsasco]] · [[Murisengo]] · [[Novi Ligure]] · [[Occimiano]] · [[Odalengo Grande]] · [[Odalengo Piccolo]] · [[Olivola]] · [[Orsara Bormida]] · [[Ottiglio]] · [[Ovada]] · [[Oviglio]] · [[Ozzano Monferrato]] · [[Paderna]] · [[Pareto]] · [[Parodi Ligure]] · [[Pasturana]] · [[Pecetto di Valenza]] · [[Pietra Marazzi]] · [[Piovera]] · [[Pomaro Monferrato]] · [[Pontecurone]] · [[Pontestura]] · [[Ponti (Italia)|Ponti]] · [[Ponzano Monferrato]] · [[Ponzone]] · [[Pozzol Groppo]] · [[Pozzolo Formigaro]] · [[Prasco]] · [[Predosa]] · [[Quargnento]] · [[Quattordio]] · [[Ricaldone]] · [[Rivalta Bormida]] · [[Rivarone]] · [[Rocca Grimalda]] · [[Roccaforte Ligure]] · [[Rocchetta Ligure]] · [[Rosignano Monferrato]] · [[Sala Monferrato]] · [[Sale (Italia)|Sale]] · [[San Cristoforo (Italia)|San Cristoforo]] · [[San Giorgio Monferrato]] · [[San Salvatore Monferrato]] · [[San Sebastiano Curone]] · [[Sant'Agata Fossili]] · [[Sardigliano]] · [[Sarezzano]] · [[Serralunga di Crea]] · [[Serravalle Scrivia]] · [[Sezzadio]] · [[Silvano d'Orba]] · [[Solero]] · [[Solonghello]] · [[Spigno Monferrato]] · [[Spineto Scrivia]] · [[Stazzano]] · [[Strevi]] · [[Tagliolo Monferrato]] · [[Tassarolo]] · [[Terruggia]] · [[Terzo (Italia)|Terzo]] · [[Ticineto]] · [[Tortona]] · [[Treville]] · [[Trisobbio]] · [[Valenza (Italia)|Valenza]] · [[Valmacca]] · [[Vignale Monferrato]] · [[Vignole Borbera]] · [[Viguzzolo]] · [[Villadeati]] · [[Villalvernia]] · [[Villamiroglio]] · [[Villanova Monferrato]] · [[Villaromagnano]] · [[Visone (Italia)|Visone]] · [[Volpedo]] · [[Volpeglino]] · [[Voltaggio (Italia)|Voltaggio]]"],
# [ omessa lista abbastanza lunga ]
[u"Template:Provincia di Ancona", u"33439093", u"2010-07-09T20:29:05Z", u"", u"", u"Marche", u"", u"Ancona", u"Provincia di Ancona-Stemma.png", u"[[Agugliano]] · [[Ancona]] · [[Arcevia]] · [[Barbara (Italia)|Barbara]] · [[Belvedere Ostrense]] · [[Camerano]] · [[Camerata Picena]] · [[Castel Colonna]] · [[Castelbellino]] · [[Castelfidardo]] · [[Castelleone di Suasa]] · [[Castelplanio]] · [[Cerreto d'Esi]] · [[Chiaravalle]] · [[Corinaldo]] · [[Cupramontana]] · [[Fabriano]] · [[Falconara Marittima]] · [[Filottrano]] · [[Genga]] · [[Jesi]] · [[Loreto]] · [[Maiolati Spontini]] · [[Mergo]] · [[Monsano]] · [[Monte Roberto]] · [[Monte San Vito]] · [[Montecarotto]] · [[Montemarciano]] · [[Monterado]] · [[Morro d'Alba]] · [[Numana]] · [[Offagna]] · [[Osimo]] · [[Ostra (Italia)|Ostra]] · [[Ostra Vetere]] · [[Poggio San Marcello]] · [[Polverigi]] · [[Ripe (Italia)|Ripe]] · [[Rosora]] · [[San Marcello (Italia)|San Marcello]] · [[San Paolo di Jesi]] · [[Santa Maria Nuova]] · [[Sassoferrato]] · [[Senigallia]] · [[Serra de' Conti]] · [[Serra San Quirico]] · [[Sirolo]] · [[Staffolo]]"],
[u"Template:Regione autonoma Valle d'Aosta", u"33593702", u"2010-07-16T12:37:01Z", u"Regione autonoma Valle d'Aosta", u"Comuni della [[Valle d'Aosta]]", u"", u"", u"", u"Valle d'Aosta-Stemma_it.svg", u"[[Allein]] · [[Antey-Saint-André]] · [[Aosta]] · [[Arnad]] · [[Arvier]] · [[Avise]] · [[Ayas]] · [[Aymavilles]] · [[Bard (Italia)|Bard]] · [[Bionaz]] · [[Brissogne]] · [[Brusson (Italia)|Brusson]] · [[Challand-Saint-Anselme]] · [[Challand-Saint-Victor]] · [[Chambave]] · [[Chamois]] · [[Champdepraz]] · [[Champorcher]] · [[Charvensod]] · [[Châtillon (Italia)|Châtillon]] · [[Cogne]] · [[Courmayeur]] · [[Donnas]] · [[Doues]] · [[Emarèse]] · [[Étroubles]] · [[Fénis]] · [[Fontainemore]] · [[Gaby]] · [[Gignod]] · [[Gressan]] · [[Gressoney-La-Trinité]] · [[Gressoney-Saint-Jean]] · [[Hône]] · [[Introd]] · [[Issime]] · [[Issogne]] · [[Jovençan]] · [[La Magdeleine (Italia)|La Magdeleine]] · [[La Salle (Italia)|La Salle]] · [[La Thuile (Italia)|La Thuile]] · [[Lillianes]] · [[Montjovet]] · [[Morgex]] · [[Nus]] · [[Ollomont]] · [[Oyace]] · [[Perloz]] · [[Pollein]] · [[Pont-Saint-Martin (Italia)|Pont-Saint-Martin]] · [[Pontboset]] · [[Pontey]] · [[Pré-Saint-Didier]] · [[Quart (Italia)|Quart]] · [[Rhêmes-Notre-Dame]] · [[Rhêmes-Saint-Georges]] · [[Roisan]] · [[Saint-Christophe (Italia)|Saint-Christophe]] · [[Saint-Denis (Italia)|Saint-Denis]] · [[Saint-Marcel (Italia)|Saint-Marcel]] · [[Saint-Nicolas (Italia)|Saint-Nicolas]] · [[Saint-Oyen (Italia)|Saint-Oyen]] · [[Saint-Pierre (Italia)|Saint-Pierre]] · [[Saint-Rhémy-en-Bosses]] · [[Saint-Vincent (Italia)|Saint-Vincent]] · [[Sarre]] · [[Torgnon]] · [[Valgrisenche]] · [[Valpelline]] · [[Valsavarenche]] · [[Valtournenche]] · [[Verrayes]] · [[Verrès]] · [[Villeneuve (Italia)|Villeneuve]]"],
[u"Template:Provincia dell'Aquiladi Viterbo", u"3343904333448500", u"2010-07-09T2010T08:2735:25Z54Z", u"", u"", u"AbruzzoLazio", u"dell'", u"AquilaViterbo", u"Provincia dell'Aquiladi Viterbo-Stemma.png", u"[[AccianoAcquapendente]] · [[Aielli]]Arlena ·di [[AlfedenaCastro]] · [[Anversa degli AbruzziBagnoregio]] · [[Ateleta]]Barbarano · [[AvezzanoRomano]] · [[Balsorano]]Bassano · [[BareteRomano]] · [[Barisciano]]Bassano ·in [[BarreaTeverina]] · [[BisegnaBlera]] · [[BugnaraBolsena]] · [[Cagnano AmiternoBomarzo]] · [[CalascioCalcata]] · [[Campo di GioveCanepina]] · [[CampotostoCanino]] · [[CanistroCapodimonte]] · [[CansanoCapranica]] · [[CapestranoCaprarola]] · [[Capistrello]] · [[Capitignano]] · [[Caporciano]] · [[Cappadocia (Italia)|Cappadocia]] · [[Carapelle Calvisio]] · [[CarsoliCarbognano]] · [[Castel del Monte (comune)|Castel del MonteSant'Elia]] · [[CastelCastiglione diin IeriTeverina]] · [[Castel di SangroCelleno]] · [[CastellafiumeCellere]] · [[CastelvecchioCivita CalvisioCastellana]] · [[Castelvecchio Subequo]] · [[Celano]] · [[Cerchio (Italia)|Cerchio]] · [[CivitaCivitella d'AntinoAgliano]] · [[Civitella AlfedenaCorchiano]] · [[CivitellaFabrica Roveto]]di · [[CoculloRoma]] · [[CollarmeleFaleria]] · [[CollelongoFarnese]] · [[Collepietro]] · [[Corfinio]] · [[Fagnano Alto]] · [[Fontecchio]] · [[FossaGallese (Italia)|FossaGallese]] · [[Gagliano AternoGradoli]] · [[Gioia dei MarsiGraffignano]] · [[GorianoGrotte Sicoli]]di · [[IntrodacquaCastro]] · [[L'Aquila]]Ischia ·di [[Lecce nei Marsi]] · [[Luco dei Marsi]] · [[Lucoli]] · [[Magliano de' Marsi]] · [[Massa d'Albe]] · [[Molina Aterno]] · [[Montereale]] · [[Morino]] · [[NavelliCastro]] · [[OcreLatera]] · [[OfenaLubriano]] · [[OpiMarta (Italia)|OpiMarta]] · [[Oricola]]Montalto · [[Ortona deidi MarsiCastro]] · [[Ortucchio]]Monte · [[OvindoliRomano]] · [[PacentroMontefiascone]] · [[PeretoMonterosi]] · [[PescasseroliNepi]] · [[PescinaOnano]] · [[Pescocostanzo]] · [[Pettorano sulOriolo GizioRomano]] · [[PizzoliOrte]] · [[Poggio PicenzePiansano]] · [[Prata d'AnsidoniaProceno]] · [[Pratola Peligna]] · [[Prezza]] · [[Raiano]] · [[Rivisondoli]] · [[Rocca Pia]] · [[Rocca di Botte]] · [[Rocca di Cambio]] · [[Rocca di Mezzo]] · [[Roccacasale]] · [[RoccarasoRonciglione]] · [[San BenedettoLorenzo dei MarsiNuovo]] · [[SanSoriano Benedetto innel PerillisCimino]] · [[San Demetrio ne' VestiniSutri]] · [[San Pio delle CamereTarquinia]] · [[San Vincenzo Valle RovetoTessennano]] · [[Sant'Eusanio ForconeseTuscania]] · [[Sante MarieValentano]] · [[Santo Stefano di SessanioVallerano]] · [[ScannoVasanello]] · [[ScontroneVejano]] · [[ScoppitoVetralla]] · [[Scurcola Marsicana]] · [[Secinaro]] · [[Sulmona]] · [[Tagliacozzo]] · [[Tione degli Abruzzi]] · [[Tornimparte]] · [[TrasaccoVignanello]] · [[Villa Sant'Angelo]]San ·Giovanni [[Villa Santa Lucia degliin AbruzziTuscia]] · [[VillalagoViterbo]] · [[VillavallelongaVitorchiano]] · [[Villetta Barrea"]] · [[Vittorito]]"],
# [...]
[u"Template:Provincia di Vicenza", u"33448491", u"2010-07-10T08:35:44Z", u"", u"", u"Veneto", u"", u"Vicenza", u"Provincia di Vicenza-Stemma.png", u"[[Agugliaro]] · [[Albettone]] · [[Alonte]] · [[Altavilla Vicentina]] · [[Altissimo]] · [[Arcugnano]] · [[Arsiero]] · [[Arzignano]] · [[Asiago]] · [[Asigliano Veneto]] · [[Barbarano Vicentino]] · [[Bassano del Grappa]] · [[Bolzano Vicentino]] · [[Breganze]] · [[Brendola]] · [[Bressanvido]] · [[Brogliano]] · [[Caldogno]] · [[Caltrano]] · [[Calvene]] · [[Camisano Vicentino]] · [[Campiglia dei Berici]] · [[Campolongo sul Brenta]] · [[Carrè]] · [[Cartigliano]] · [[Cassola]] · [[Castegnero]] · [[Castelgomberto]] · [[Chiampo]] · [[Chiuppano]] · [[Cismon del Grappa]] · [[Cogollo del Cengio]] · [[Conco]] · [[Cornedo Vicentino]] · [[Costabissara]] · [[Creazzo]] · [[Crespadoro]] · [[Dueville]] · [[Enego]] · [[Fara Vicentino]] · [[Foza]] · [[Gallio (Italia)|Gallio]] · [[Gambellara]] · [[Gambugliano]] · [[Grancona]] · [[Grisignano di Zocco]] · [[Grumolo delle Abbadesse]] · [[Isola Vicentina]] · [[Laghi (Italia)|Laghi]] · [[Lastebasse]] · [[Longare]] · [[Lonigo]] · [[Lugo di Vicenza]] · [[Lusiana]] · [[Malo]] · [[Marano Vicentino]] · [[Marostica]] · [[Mason Vicentino]] · [[Molvena]] · [[Monte di Malo]] · [[Montebello Vicentino]] · [[Montecchio Maggiore]] · [[Montecchio Precalcino]] · [[Montegalda]] · [[Montegaldella]] · [[Monteviale]] · [[Monticello Conte Otto]] · [[Montorso Vicentino]] · [[Mossano]] · [[Mussolente]] · [[Nanto]] · [[Nogarole Vicentino]] · [[Nove (Italia)|Nove]] · [[Noventa Vicentina]] · [[Orgiano]] · [[Pedemonte]] · [[Pianezze]] · [[Piovene Rocchette]] · [[Pojana Maggiore]] · [[Posina]] · [[Pove del Grappa]] · [[Pozzoleone]] · [[Quinto Vicentino]] · [[Recoaro Terme]] · [[Roana]] · [[Romano d'Ezzelino]] · [[Rosà]] · [[Rossano Veneto]] · [[Rotzo]] · [[Salcedo (Italia)|Salcedo]] · [[San Germano dei Berici]] · [[San Nazario (Italia)|San Nazario]] · [[San Pietro Mussolino]] · [[San Vito di Leguzzano]] · [[Sandrigo]] · [[Santorso]] · [[Sarcedo]] · [[Sarego]] · [[Schiavon]] · [[Schio]] · [[Solagna]] · [[Sossano]] · [[Sovizzo]] · [[Tezze sul Brenta]] · [[Thiene]] · [[Tonezza del Cimone]] · [[Torrebelvicino]] · [[Torri di Quartesolo]] · [[Trissino]] · [[Valdagno]] · [[Valdastico]] · [[Valli del Pasubio]] · [[Valstagna]] · [[Velo d'Astico]] · [[Vicenza]] · [[Villaga]] · [[Villaverla]] · [[Zanè]] · [[Zermeghedo]] · [[Zovencedo]] · [[Zugliano]]"],
[u"Template:Provincia di Viterbo", u"33448500", u"2010-07-10T08:35:54Z", u"", u"", u"Lazio", u"", u"Viterbo", u"Provincia di Viterbo-Stemma.png", u"[[Acquapendente]] · [[Arlena di Castro]] · [[Bagnoregio]] · [[Barbarano Romano]] · [[Bassano Romano]] · [[Bassano in Teverina]] · [[Blera]] · [[Bolsena]] · [[Bomarzo]] · [[Calcata]] · [[Canepina]] · [[Canino]] · [[Capodimonte]] · [[Capranica]] · [[Caprarola]] · [[Carbognano]] · [[Castel Sant'Elia]] · [[Castiglione in Teverina]] · [[Celleno]] · [[Cellere]] · [[Civita Castellana]] · [[Civitella d'Agliano]] · [[Corchiano]] · [[Fabrica di Roma]] · [[Faleria]] · [[Farnese]] · [[Gallese (Italia)|Gallese]] · [[Gradoli]] · [[Graffignano]] · [[Grotte di Castro]] · [[Ischia di Castro]] · [[Latera]] · [[Lubriano]] · [[Marta (Italia)|Marta]] · [[Montalto di Castro]] · [[Monte Romano]] · [[Montefiascone]] · [[Monterosi]] · [[Nepi]] · [[Onano]] · [[Oriolo Romano]] · [[Orte]] · [[Piansano]] · [[Proceno]] · [[Ronciglione]] · [[San Lorenzo Nuovo]] · [[Soriano nel Cimino]] · [[Sutri]] · [[Tarquinia]] · [[Tessennano]] · [[Tuscania]] · [[Valentano]] · [[Vallerano]] · [[Vasanello]] · [[Vejano]] · [[Vetralla]] · [[Vignanello]] · [[Villa San Giovanni in Tuscia]] · [[Viterbo]] · [[Vitorchiano]]"],
[u"Template:Provincia di Massa e Carrara", u"33448060", u"2010-07-10T08:22:23Z", u"", u"", u"Toscana", u"", u"Massa e Carrara", u"Provincia di Massa-Carrara-Stemma.png", u"[[Aulla]] · [[Bagnone]] · [[Carrara]] · [[Casola in Lunigiana]] · [[Comano (Italia)|Comano]] · [[Filattiera]] · [[Fivizzano]] · [[Fosdinovo]] · [[Licciana Nardi]] · [[Massa (Italia)|Massa]] · [[Montignoso]] · [[Mulazzo]] · [[Podenzana]] · [[Pontremoli]] · [[Tresana]] · [[Villafranca in Lunigiana]] · [[Zeri]]"]]
# "template", "revisionId", "revisionTimestamp", "pagina", "titolo", "regione", "preposizioneProvincia", "provincia", "stemma", "lista"
def main():
# This factory is responsible for processing command line arguments
# that are also used by other scripts and that determine on which pages
# to work on.
genFactory = pagegenerators.GeneratorFactory()
# The generator gives the pages that should be worked upon.
gen = None
# This temporary array is used to read the page title if one single
# page to work on is specified by the arguments.
pageTitleParts = []
# If dry is True, doesn't do any real changes, but only show
# what would have been changed.
dry = False
# Parse command line arguments
for arg in pywikibot.handleArgs():
if arg.startswith("-dry"):
else:
pywikibot.showHelp()
##
if __name__ == "__main__":
annotare_pag = False
try:
annotare_sez = False
main()
finally:
pywikibot.stopme()
</nowiki></pre>
*Script utilizzato per [[Wikipedia:Bot/Richieste#Parametro di Tisserand]]:
<pre><nowiki>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
The following parameters are supported:
¶ms;
-dry If given, doesn't do any real changes, but only shows
what would have been changed.
All other parameters will be regarded as part of the title of a single page,
and the bot will only work on that single page.
"""
__version__ = '$Id: basic.py 7845 2009-12-30 17:02:05Z xqt $'
import wikipedia as pywikibot
import wikipedia, time
import pagegenerators
import re
import string
# This is required for the text that is shown when you run this script
# with the parameter -help.
docuReplacements = {
'¶ms;': pagegenerators.parameterHelp
}
def annotaproblema(pag, errore=""):
try:
log = open("log_roids.txt", 'a')
except:
print "qualche problema ad annotare il problema"
return -1
messaggio = u"* "+pag+" "+errore+u"\r\n"
log.write(messaggio.encode('utf-8'))
log.close()
print "problema annotato"
class BasicBot:
msg = { # oggetto della modifica
'it': u"Bot: inserimento parametro par_Tisserand_J",
'en': u"Bot: test",
}
def __init__(self, generator, dry):
"""
Constructor. Parameters:
* generator - The page generator that determines on which pages
to work on.
* dry - If True, doesn't do any real changes, but only shows
what would have been changed.
"""
self.generator = generator
self.dry = dry
# Set the edit summary /*message
self.summary = pywikibot.translate(pywikibot.getSite(), self.msg)
def run(self):
for page in self.generator:
self.treat(page)
def treat(self, page):
print ""
confirmation = True
try:
text = page.get()
except pywikibot.NoPage:
pywikibot.output(u"Page %s does not exist; skipping." % page.aslink())
return
except pywikibot.IsRedirectPage:
pywikibot.output(u"%s e' un redirect" % page.aslink())
## text = page.get(get_redirect=True)
redirect = True
annotaproblema(page.aslink(), "redirect")
return
dati = [
[u"1 Ceres",
u"|par_Tisserand_J = 3,310"],
[u"2 Pallas",
u"|par_Tisserand_J = 3,043"],
[u"3 Juno",
u"|par_Tisserand_J = 3,299"],
[u"4 Vesta",
u"|par_Tisserand_J = 3,535"],
# [ omessa lista infinita ]
u"|par_Tisserand_J = 3,537"],
[u"64974 Savaria",
u"|par_Tisserand_J = 3,179"],
[u"64975 Gianrix",
u"|par_Tisserand_J = 3,217"]
]
trovata_corrispondenza = False
for i in (range (len(dati))):
if page.title() == dati[i][0]:
pywikibot.output(page.title())
par_Tisserand_J = dati[i][1]
trovata_corrispondenza = True
if not trovata_corrispondenza:
return
m = re.search('\| *par_Tisserand_J *=[^\n\r\|]+', text)
if m:
print "c'e' gia' par_Tisserand_J"
if m.group(0) != par_Tisserand_J:
annotaproblema(page.aslink(), "par_Tisserand_J diverso")
print "e tra l'altro e' diverso!"
else:
return
m = re.search('\| *magn_ass *=', text)
if m:
text = re.sub(ur'(\| *magn_ass *=)', par_Tisserand_J + ur'\n\1', text)
else:
print "non c'è magn_ass"
text = re.sub(ur'({{ *[cC]orpo[ _]+celeste[^{}])}}', ur'\1' + par_Tisserand_J + ur'\n}}', text)
if text != page.get():
pywikibot.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title())
pywikibot.showDiff(page.get(), text)
if not self.dry:
if not confirmation:
choice = 's' ## AUTO!!
else:
choice = pywikibot.inputChoice(u'Applicare i cambiamenti?', ['Si', 'No'], ['s', 'N'], 'N')
if choice == 's':
try:
esito = page.put(text, comment=self.summary)
if esito[2]['result'] == 'Success':
print "OK"
else:
print esito
annotaproblema(page.aslink(), "failure")
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))
except:
print "spam?"
annotaproblema(page.aslink(), "failure (spam?)")
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:
|