Utente:Alfiobot/benvenuto.py

Da Wikipedia, l'enciclopedia libera.
######################################################
#
# benvenuto.py
#
# Bot per dare il benvenuto agli utenti (sono diventati troppi per farlo a mano...)
#
# Scarica il log dei nuovi utenti (fino ad un limite predefinito) e, per ogni utente
# che ancora non ha pagina di discussione, crea il seguente testo:
#
# {{benvenuto|nome=<nomeutente>}}
#
# Basato sulle librerie pywikipediabot.


import urllib, re
import wikipedia

# No. of users to check
limit = 250

# URL of the newuser log
url = "http://it.wikipedia.org/w/index.php?title=Speciale:Log&type=newusers&user=&page=&limit=%d" % limit

# Search regular expression to find links like this (and the class attribute is optional too)
#<a href="/w/index.php?title=Discussioni_utente:Urizon9&action=edit" class="new" title="Discussioni utente:Urizon9">Discussione</a>

regexp = '<a href="([^"]*?)"[^<]*?title="Discussioni utente:(.*?)">Discussione</a>'

# Modify user-agent string
class AppURLopener(urllib.FancyURLopener):
    version = "Alfiobot/1.0"
urllib._urlopener = AppURLopener()

# Modify summary text
wikipedia.setAction("benvenuto")

# Read newuser log
print "Getting newuser log (last %d new users)..." % limit
f = urllib.urlopen(url)
text = f.read()
f.close()

r = re.compile(regexp, re.UNICODE)

# Loop over the newuser log and put welcome messages on empty discussion pages
pos = 0
while 1:
	m = r.search(text, pos)
	if m == None:
		break
	pos = m.end()
	
	username = m.group(2)
	link = m.group(1)
	
	if link.find('/w/index.php?') == 0:
		print "User %s needs welcome" % username
		page = u'Discussioni utente:%s' % username
		
		p = wikipedia.Page(wikipedia.getSite(), page)
		
		# Additional check: make a get to prevent the rare case where a discussion page
		# is created between the newuser log download and now.
		try:
			p.get()
		except wikipedia.NoPage:
			newtext = u'{{benvenuto|nome=%s}}' % username
			p.put(newtext)
		
	else:
		print "User %s is OK" % username