2009-11-21 6 views
10

Gmail a cette douce chose se passe pour obtenir un flux d'atomes:Comment se connecter automatiquement au flux atomique gmail avec Python?

def gmail_url(user, pwd): 
    return "https://"+str(user)+":"+str(pwd)+"@gmail.google.com/gmail/feed/atom" 

Maintenant, quand vous faites cela dans un navigateur, il authentifie et vers l'avant vous. Mais en Python, au moins ce que j'essaie, ne fonctionne pas correctement.

url = gmail_url(settings.USER, settings.PASS) 
print url 
opener = urllib.FancyURLopener() 
f = opener.open(url) 
print f.read() 

lieu de le transmettre correctement, il fait cela:

>>> 
https://user:[email protected]/gmail/feed/atom 
Enter username for New mail feed at mail.google.com: 

Ce qui est mauvais! Je ne devrais pas avoir à taper le nom d'utilisateur et le mot de passe à nouveau !! Comment puis-je faire un transfert automatique en python comme dans mon navigateur web, donc je peux obtenir le contenu du flux sans toutes les BS?

Répondre

13

Vous pouvez utiliser le HTTPBasicAuthHandler, j'ai essayé ce qui suit et cela a fonctionné:

import urllib2 

def get_unread_msgs(user, passwd): 
    auth_handler = urllib2.HTTPBasicAuthHandler() 
    auth_handler.add_password(
     realm='New mail feed', 
     uri='https://mail.google.com', 
     user='%[email protected]' % user, 
     passwd=passwd 
    ) 
    opener = urllib2.build_opener(auth_handler) 
    urllib2.install_opener(opener) 
    feed = urllib2.urlopen('https://mail.google.com/mail/feed/atom') 
    return feed.read() 
+2

Je reçois « urllib2.HTTPError: Erreur HTTP 401: auth de base échoué », même si je suis certain que j'ai la nom d'utilisateur et mot de passe corrects. Est-ce que quelqu'un d'autre a ce problème? –

+0

Nevermind. C'est seulement un problème quand j'essaye d'exécuter le code de mon serveur. Quand je le fais sur ma machine locale, cela fonctionne très bien. –

Questions connexes