2009-11-21 6 views
10

GmailはAtomフィードを取得するために起こって、この甘いものがあります:あなたは、ブラウザでこれを行うときPythonでgmail atomフィードに自動ログインするには?

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

は今、それが認証し、転送します。しかし、Pythonでは、少なくとも私が試していることは正しく動作していません。

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

代わりに正しく転送するのではなく、これをやっている:

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

これは悪いです!私は再びユーザー名とパスワードを入力する必要はありません!私はどのようにそれを私のWebブラウザと同じようにPythonで自動転送することができるので、BSなしでフィードの内容を得ることができますか?

答えて

13

あなたはHTTPBasicAuthHandlerを使用することができ、私は次のことを試してみました、それが働いた:

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

を私は「urllib2.HTTPErrorを:HTTPエラー401:ベーシック認証に失敗しました。」そうだ、私は肯定的だにもかかわらず、私が持っていますユーザー名とパスワードが正しい。他の誰かがこの問題を抱えていますか? –

+0

Nevermind。私のサーバーからコードを実行しようとすると唯一の問題です。私のローカルマシンでそれを行うとき、それは正常に動作します。 –