2009-11-21 7 views
10

Gmail hat diese süße, was los ist, ein Atom-Feed zu erhalten:Wie kann ich mich mit Python automatisch in Google Mail Atom Feed einloggen?

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

Nun, wenn Sie diese in einem Browser zu tun, authentifiziert es und Sie vorwärts. Aber in Python funktioniert zumindest das, was ich versuche, nicht richtig.

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

Statt richtig weiterzuleiten, tut es dies:

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

Das ist schlecht! Ich sollte den Benutzernamen und das Passwort nicht mehr eingeben müssen !! Wie kann ich es einfach in Python automatisch weiterleiten, wie es in meinem Webbrowser tut, damit ich den Feed-Inhalt ohne alle BS erhalten kann?

Antwort

13

Sie die HTTPBasicAuthHandler verwenden können, habe ich versucht, die folgende und es funktionierte:

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

Ich erhalte ‚urllib2.HTTPError: HTTP-Fehler 401: Grund Auth nicht bestanden‘, obwohl ich positiv bin habe ich die Benutzername und Passwort korrekt. Hat jemand anderes dieses Problem? –

+0

Vergesst nicht. Es ist nur ein Problem, wenn ich versuche, den Code von meinem Server auszuführen. Wenn es auf meinem lokalen Rechner funktioniert, funktioniert es gut. –