2010-07-03 55 views
6

我试图从使用OAuth的python应用程序中获取Gmail atom feed。我有一个可以下载谷歌阅读器提要的工作应用程序,我认为应该是只是一个改变范围和提要URL的问题。替换URL后,我仍然可以成功获取请求和访问令牌,但是当我尝试使用Access令牌获取Feed时,出现“401未授权”错误。这是我简单的测试程序:使用OAuth访问Gmail原子提要

import urlparse 
import oauth2 as oauth 

scope = "https://mail.google.com/mail/feed/atom/" 
sub_url = scope + "unread" 

request_token_url = "https://www.google.com/accounts/OAuthGetRequestToken?scope=%s&xoauth_displayname=%s" % (scope, "Test Application") 
authorize_url = 'https://www.google.com/accounts/OAuthAuthorizeToken' 
access_token_url = 'https://www.google.com/accounts/OAuthGetAccessToken' 

oauth_key = "anonymous" 
oauth_secret = "anonymous" 

consumer = oauth.Consumer(oauth_key, oauth_secret) 
client = oauth.Client(consumer) 

# Get a request token. 
resp, content = client.request(request_token_url, "GET") 
request_token = dict(urlparse.parse_qsl(content)) 

print "Request Token:" 
print " - oauth_token  = %s" % request_token['oauth_token'] 
print " - oauth_token_secret = %s" % request_token['oauth_token_secret'] 
print 

# Step 2: Link to web page where the user can approve the request token. 
print "Go to the following link in your browser:" 
print "%s?oauth_token=%s" % (authorize_url, request_token['oauth_token']) 
print 

raw_input('Press enter after authorizing.') 

# Step 3: Get access token using approved request token 
token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret']) 
client = oauth.Client(consumer, token) 

resp, content = client.request(access_token_url, "POST") 
access_token = dict(urlparse.parse_qsl(content)) 

print "Access Token:" 
print " - oauth_token  = %s" % access_token['oauth_token'] 
print " - oauth_token_secret = %s" % access_token['oauth_token_secret'] 
print 

# Access content using access token 
token = oauth.Token(access_token['oauth_token'], access_token['oauth_token_secret']) 
client = oauth.Client(consumer, token) 

resp, content = client.request(sub_url, 'GET') 
print content 

你会发现,我使用“匿名/匿名”作为我的OAuth密钥/秘密,如Google documents for unregistered applications提及。这适用于谷歌阅读器,所以我没有看到任何理由不适用于Gmail。有没有人有任何想法,为什么这可能无法正常工作,或者我怎么能解决它?谢谢。

+0

有你这个实现自己一个理由?查看http://libgmail.sourceforge.net/。无论如何,这不是你的问题的答案,所以这里是在评论! – alecwh 2010-07-03 06:51:59

+1

@alecwh:libgmail似乎要求我的程序知道用户的用户名和密码。如果可以,我试图避免这种情况,这就是为什么我想使用oauth。 – Will 2010-07-03 18:56:59

回答

3

您可能想尝试使用OAuth访问Google的IMAP服务器,而不是使用ATOM供稿。通过他们呼吁XOAUTH标准

“Gmail支持的OAuth在IMAP和 SMTP 这允许您使用OAuth凭证,并秘密进行身份验证 对Gmail的IMAP和SMTP服务器 :有点谷歌搜索后,我发现this。它 也可使 您使用香草SMTP和IMAP 库的额外好处。蟒蛇-的oauth2包 提供IMAP和SMTP库 实现XOAUTH,敷 imaplib.IMAP4_SSL和smtplib.SMTP。 这允许您使用标准的 Python库连接到带有OAuth凭证的Gmail 。“

http://github.com/simplegeo/python-oauth2

+0

谢谢。这看起来像我所需要的。我不确定Gmail为什么不能正常工作,但它确实是gdata API中的二等公民。 – Will 2010-07-03 23:51:09

+0

没问题!乐于帮助。 – alecwh 2010-07-05 01:51:07