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