######################################################
#
# 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