Copiate gente, copiate! (Che poi va a fuoco il computer...) :-D

redirectlinks.py

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

#################################################################################################
#																								#
#	redirectlinks.py																			#
#																								#
#	This script corrects links to a redirect.													#
#																								#
#	Syntax: redirectlinks.py [options]															#
#	Options:	-dest:Destpage																	#
#				It gets all redirects which link to Destpage and corrects their references.		#
#																								#
#				-page:Redirpage																	#
#				It corrects all the references of the specified redirect.						#
#																								#
#	You must specify the -page OR the -dest option.												#
#																								#
#################################################################################################

import re, wikipedia

def main():
	args = wikipedia.handleArgs()
	for argh in args:
		if argh.startswith("-dest:"):
			destPage = wikipedia.Page(wikipedia.getSite(), argh[6:])
			redirs = destPage.getReferences(redirectsOnly = True)
		if argh.startswith("-page:"):
			redirs = [wikipedia.Page(wikipedia.getSite(), argh[6:])]
			if not redirs[0].isRedirectPage():
				raise wikipedia.IsNotRedirectPage(redirs[0])
			destPage = redirs[0].linkedPages()[0]
	wikipedia.output(destPage.title())
	for r in redirs:
		redirRefPages = r.getReferences()
		for ref in redirRefPages:
			wikipedia.output("Correcting links in page: " + ref.title())
			oldtext = ref.get()
			newtext = oldtext
			linkRegexp = "\[\[" + re.escape(r.title()) + "(\|[^]]+)?\]\]"
			ptrn = re.compile(linkRegexp, re.IGNORECASE)
			linkMatch = re.search(ptrn, newtext)
			
			while linkMatch != None:
				oldLink = newtext[linkMatch.start():linkMatch.end()]
				afterLink = linkMatch.group(1)
				if afterLink == None:
					afterLink = ""
				newLink = re.sub(linkRegexp, "[[" + destPage.title() + afterLink + "]]", oldLink)
				choice = wikipedia.inputChoice("Replacing link " + oldLink + " to " + newLink + ".\nDo you want to change the link?", ["Accept", "Change"], ['a', 'c'], 'a')
				if choice in ['C', 'c']:
					linkText = wikipedia.input("Insert link (without square brackets): [[" + destPage.title())
					newLink = "[[" + destPage.title() + linkText + "]]"
				newtext = newtext[:linkMatch.start()] + newLink + newtext[linkMatch.end():]
				linkMatch = re.search(ptrn, newtext)
				
			wikipedia.showDiff(oldtext, newtext)
			choice = wikipedia.inputChoice(u'Modifico?',  ['Yes', 'No'], ['y', 'N'], 'N')
			if choice in ['Y', 'y']:
				ref.put(newtext, unicode("Correcting links to redirect: " + r.title()))

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

lonelypages.py

Prende le pagine da Speciale:Lonelypages, verifica che siano veramente orfane e inserisce l'avviso in quelle che non lo hanno già. Script spostato qui.

proxyaperti.py

Questo script fa semplicemente un edit in una pagina. In verità serve per scovare i proxy aperti, agendo da sloggati. Occorre però crackare wikipedia.py. Utilizzabile solo da personale addestrato ;-)

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

import wikipedia

args = wikipedia.handleArgs()
pagina = wikipedia.Page(wikipedia.getSite(), args[0])
oldtxt = pagina.get()
newtxt = oldtxt + '\nSono un vandalo malvagissimo. Non bloccatemi. --~~~~'
wikipedia.showDiff(oldtxt, newtxt)
choice = wikipedia.inputChoice('Posso procedere?',  ['Yes', 'No'], ['y', 'N'], 'N')
if choice in ['Y', 'y']:
 wikipedia.setAction('Bot anonimo per individuare proxy aperti firmato Pietrodn. Non bloccare please.')
 pagina.put(newtxt)
wikipedia.stopme()

lavorosporco.py

Questo script serve per aggiornare le statistiche del lavoro sporco.

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

import re, wikipedia
from templatecount import TemplateCountRobot

def main():
	args = wikipedia.handleArgs()
	
	wikiSite = wikipedia.getSite()
	counter = TemplateCountRobot()
	templates = {	'A': 'Aiutare',
					'C': 'Controllare',
					'Categorizzare': 'Da categorizzare',
					'Controlcopy': 'Controlcopy',
					'E': 'Ency',
					'O': 'Orfane',
					'P': 'NPOV',
					'Senzafonti': 'Senza fonti',
					'S': 'Stub',
					'T': 'Tradurre',
					'U': 'Unire',		
					'W': 'Wikificare',	
	}
	
	pagina = wikipedia.Page(wikiSite, 'Progetto:Coordinamento/Statistiche manutenzioni')
	vecchieStatistiche = pagina.get()
	
	templateCountDict = counter.countTemplates(templates.keys(), None)
	
	for k in templateCountDict:
		sottopagina = wikipedia.Page(wikiSite, 'Progetto:Coordinamento/Statistiche manutenzioni/' + templates[k])
		oldtxt = sottopagina.get()
		newtxt = re.sub("</noinclude>.*", "</noinclude>" + str(templateCountDict[k]), oldtxt)
		wikipedia.showDiff(oldtxt, newtxt)
		choice = wikipedia.inputChoice(u"Modificare?",  ['Yes', 'No'], ['y', 'N'], 'N')
		if choice in ['Y', 'y']:
			wikipedia.setAction(u'Conto lavoro sporco')
			sottopagina.put(newtxt)
			
	findRegexp = "\d+:\d+, \d+ .{3} \d+ \(.*?\)"
	replaceRegexp = "~~~~~"
	nuoveStatistiche = re.sub(findRegexp, replaceRegexp, vecchieStatistiche)
	wikipedia.showDiff(vecchieStatistiche, nuoveStatistiche)
	choice = wikipedia.inputChoice(u"Aggiorno le date?",  ['Yes', 'No'], ['y', 'N'], 'N')
	if choice in ['Y', 'y']:
		wikipedia.setAction(u'Aggiorno le date del conto')
		pagina.put(nuoveStatistiche)
	

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

frazioni.py

Questo script serve per aggiungere {{Tmp|Frazione}} a tutte le frazioni che non contengono il template {{Frazione}}.

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

import re, wikipedia, catlib

def main():
	args = wikipedia.handleArgs()
	all = False
	frazTemplateRegexp = re.compile("\{\{ *([Tt]emplate: *)?[Ff]razione")
	tmpTemplateRegexp = re.compile("\{\{ *([Tt]emplate: *)?[Tt]mp *\| *[Ff]razione")
	frazCat = catlib.Category(wikipedia.getSite(), "Categoria:Frazioni comunali italiane")
	frazList = frazCat.articles(recurse=True)
	for currentFraz in frazList:
		try:
			oldtxt = currentFraz.get()
		except wikipedia.IsRedirectPage:
			continue
		if (re.search(frazTemplateRegexp, oldtxt) != None) or (re.search(tmpTemplateRegexp, oldtxt) != None):
			continue
		wikipedia.output(">>>>> " + currentFraz.title() + " <<<<<")
		newtxt = "{{Tmp|Frazione}}\n" + oldtxt
		wikipedia.showDiff(oldtxt, newtxt)
		if not all:
			choice = wikipedia.inputChoice(u'Aggiungo la segnalazione di template mancante?',  ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
		if choice in ['A', 'a']:
			all = True
		if (choice in ['Y', 'y']) or all:
			currentFraz.put(newtxt, unicode("Template Frazione mancante: aggiungo {{Tmp|Frazione}}"))
		
if __name__ == "__main__":
	try:
		main()
	finally:
		wikipedia.stopme()