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

sistemaredirect.py v. 3.0

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

################################################################
# Questo bot permette di modificare i link ad un redirect      #
# perche' puntino direttamente alla pagina giusta.             #
# Usa il framework pywikipedia.                                #
################################################################

import urllib, re
import wikipedia

def main():
	args = wikipedia.handleArgs()
	while 1:
		redirectLinks = dict()
		all = 0;
		ic = inputchoice()
		if ic == u'.':
			break
		if ic == u'P':
			name = wikipedia.input(u'Inserisci il nome della pagina da cui ricavare i redirect [punto per terminare]:')
			if name == u'.':
				break
			page = wikipedia.Page(wikipedia.getSite(), name)
			redirectLinks = getlinkstoredirectstopage(page)
		else:
			name = wikipedia.input(u'Inserisci il nome del redirect [punto per terminare]:')
			if name == u'.':
				break
			page = wikipedia.Page(wikipedia.getSite(), name)
			redirectLinks[page.title()] = page.getReferences()
		for i in redirectLinks:
			print i
			page = wikipedia.Page(wikipedia.getSite(), i)
			dest = page.getRedirectTarget()
			ref = redirectLinks[i]
			for j in ref:
				oldtext = j.get()
				print j
				lnks = sgamalink(i, oldtext)
				for k in lnks:
					if u'|' in k:
						regex = u"\[\[%s\|(.*?)\]\]" % i
						p = re.compile(regex, re.IGNORECASE)
						lst = re.findall(p, oldtext)
						choice = u"[[" + dest.title() + u"|" + lst[0] + u"]]"
					else:
						choice = linkchoice(dest.title(), i)
						if choice == u'.':
							exit()
					newtext = sistema(oldtext, page.title(), choice)
					wikipedia.showDiff(oldtext, newtext)
					choice = wikipedia.inputChoice(u'Posso procedere?',  ['Yes', 'No'], ['y', 'N'], 'N')
					if choice in ['Y', 'y']:
						wikipedia.setAction(u'Correggo i link che puntano al redirect "%s"' % page.title())
						j.put(newtext)
	wikipedia.stopme();

def getlinkstoredirectstopage(page):
	try:
		redirectLinks = dict()
		ref = page.getReferences()
		redirectList=list()
		for i in ref:
			if i.isRedirectPage():
				redirectLinks[i.title()] = i.getReferences()
		return redirectLinks;
	except wikipedia.IsNotRedirectPage:
		print page.isRedirectPage()
		print u"Non e' un redirect!"
		return 0
	except wikipedia.NoPage:
		print u'La pagina non esiste!'
		return 0	

def inputchoice():
	choice = wikipedia.inputChoice(u"Vuoi inserire il nome di un redirect o di una pagina a cui linkano dei redirect? [punto per terminare]",  [u'Redirect', u'Page', u'.'], [u'R', u'p', u'.'], u'R')
	if choice == u'.':
		return u'.'
	elif choice in [u'P', u'p']:
		return u'P'
	else:
		return u'R'

def linkchoice(newpage, oldpage):
	scelte = [u"[[" + newpage + u"]]", u"[[" + newpage + u"|" + newpage[0].lower() + newpage[1:] + u"]]", u"[[" + newpage + u"|" + oldpage + u"]]", u"[[" + newpage + u"|" + oldpage[0].lower() + oldpage[1:] + u"]]", u'.']
	sceltecopy = scelte
 	choice = wikipedia.inputChoice(u"Scegli una delle seguenti alternative per il link: [punto per terminare]", sceltecopy, [u'1', u'2', u'3', u'4', u'.'], u'1')
 	if choice == u'.':
 		return u'.'
	return scelte[int(choice)-1][:len(scelte[int(choice)-1])-4]

def sgamalink(oldtitle, oldtext):
 	regex = u"\[\[%s(.*?)\]\]" % oldtitle
	p = re.compile(regex, re.IGNORECASE)
	lst = re.findall(p, oldtext)
	return lst

def sistema(text, oldtitle, choice):
 	regex = u"\[\[%s.*?\]\]" % oldtitle
	p = re.compile(regex, re.IGNORECASE)
	text = re.sub(p, text, choice)
	
	return text

if __name__==u"__main__":
	main()