Utente:PavelBOT/bio
Bot: Aggiornamento {{Bio}} come da richiesta: rimozione |Categorie
#!/usr/bin/env python # -*- coding: utf-8 -*- import wikipedia, catlib, re, codecs, myLibs, time def writeNonCambiati(file, title, txt): wikipedia.output(txt) file.write('# [['+title+']] - '+txt+'\n') file.flush() catRemove = ['Biografie'] def main(*args): summary = u'[[WP:BOT|Bot]]: Aggiornamento {{tl|Bio}} come da [[Wikipedia:Bot/Richieste#Aggiornamento del parametro Categorie nel Template:Bio|richiesta]]: rimozione |Categorie\n' site = wikipedia.getSite() tempPage = wikipedia.Page(site, "Template:Bio") refPages = tempPage.getReferences() countEdited = 0 all = False output = codecs.open('template_bio_lista_diff.txt', encoding='utf-8', mode='w+') output.write(summary) outputNonCambiati = codecs.open('template_bio_lista_non_cambiati.txt', encoding='utf-8', mode='w+') outputNonCambiati.write(u"Lista delle voci afferenti al template {{tl|Bio}} con parametro |Categorie ma non modificate\n") for page in refPages: if page.namespace() != 0: continue wikipedia.output(u'Processing... '+page.title()) # download page while 1: try: content = page.get() break except: print "Waiting 10 seconds and retry" time.sleep(10) edited = 0 cats = page.categories() ptl = re.compile(r'\{\{([Tt]emplate:)?[Bb]io(.*?)\}\}', re.DOTALL) tl = ptl.findall(content) if len(tl) != 1: if len(tl) != 0: writeNonCambiati(outputNonCambiati, page.title(), 'ho trovato '+str(len(tl))+' template bio nella pagina') else: cont = tl[0][1] p = re.compile(r'(\||^)\s*[Cc]ategorie\s*=((\s*\[\[.*?\]\])+|.*?)\s*($|\|)', re.DOTALL) l = p.findall(cont) if len(l) != 1: if len(l) != 0: writeNonCambiati(outputNonCambiati, page.title(), 'ho trovato '+str(len(l))+' linee |Categorie') else: contenuto = l[0][1].strip() if contenuto != '' and contenuto != 'no': cont = p.sub(l[0][0]+"Categorie = no\n"+l[0][3], cont) text = ptl.sub('{{Bio'+cont+'}}', content) edited = 1 else: if contenuto == '': writeNonCambiati(outputNonCambiati, page.title(), 'parametro |Categorie esistente ma senza contenuti') if edited != 0: for catName in catRemove: cat = catlib.Category(site, catName) if cat in cats: cats.remove(cat) cats.sort() text = wikipedia.replaceCategoryLinks(text, cats, site) wikipedia.showDiff(content, text) if not all: choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N') else: choice = 'y' if choice in ['A', 'a']: all = True choice = 'y' output.write('* '+str(countEdited)+'. [['+page.title()+']]') if choice in ['Y', 'y']: countEdited += 1 #page.put_async(text, summary) output.write(' - NON EDITATA su richista manuale') output.write('\n<pre>\n'+myLibs.getDiff(content, text)+'</pre>\n\n') output.flush() output.close() outputNonCambiati.close() if __name__ == "__main__": try: main() finally: wikipedia.stopme()
la funzione myLibs.getDiff è la showDiff della libreria wikipedia modificata per ottenere il testo del diff invece di stamparlo a video, e senza la colorazione, in modo da usarlo per la scrittura del file di log del lavoro