Hotmail, MSN and live.com contacts grabber

Currently most of the contacts grabbers (such as Plaxo widget, Open Inviter etc.) do not support or have broken support for Hotmail, live.com or MSN. Hotmail has over 270 million users worldwide so it's a pretty important service to support.

In hope to spark some interest in improving python contacts grabbers I share my hack to grab contacts from Hotmail, MSN and live.com:

import urllib
import urllib2
import re

def get_live_contacts(email, password):
    for i in xrange(0, 3):
        try:
            return _get_live_contacts(email, password)
        except urllib2.URLError:
            pass
    raise Exception('Invalid login')


#--- Private ----------------------------------------------
RE_EMAILS = re.compile('\(([^\s]+@[^\s]+)\)')
LOGIN_HOST = 'https://mid.live.com/si/'
CONTACTS_URL = 'http://mobile.live.com/hm/contacts.aspx?bf=0&ts=1&c=to'
LOGIN_ASPX = 'login.aspx?lc=1033&id=71570&'\
             'ru=http%3a%2f%2fmobile.live.com%2fwml%2'\
             'fmigrate.aspx%3freturl%3dhttp%253a%252f%252f'\
             'mobile.live.com%252fhm%252ffolder.aspx%'\
             '253fmkt%253den-US%26fti%3dy&mlc=en-US&ms'\
             'psty=302&mspto=1&tw=14400&kv=2'

def _get_live_contacts(email, password):
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())

    login_form_seq = urllib.urlencode([
        ('__ET', ''),
        ('LoginTextBox', email),
        ('PasswordTextBox', password),
        ('SavePasswordCheckBox', '0'),
        ('PasswordSubmit', 'Sign in')
        ])

    html = opener.open('%s/%s' % (LOGIN_HOST, LOGIN_ASPX), login_form_seq).read()

    if 'LoginTextBox' in html:
        raise Exception('Invalid login')

    html = opener.open(CONTACTS_URL).read()
    emails = RE_EMAILS.findall(html)
    return emails
Code · Python · Stuff · Tips 27. Mar 2009
© Amir Salihefendic. Powered by Skeletonz.