使用OAuth访问Gmail原子源

6 投票
1 回答
3153 浏览
提问于 2025-04-16 00:46

我正在尝试通过一个Python应用程序使用OAuth来获取Gmail的原子订阅源。我已经有一个可以下载Google Reader订阅源的应用程序,我觉得这应该只是换一下权限和订阅源的地址就行。替换了地址后,我仍然可以成功获取请求和访问令牌,但当我尝试用访问令牌获取订阅源时,却出现了“401 Unauthorized”(未授权)的错误。下面是我的简单测试程序:

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

你会注意到我使用的是'anonymous/anonymous'作为我的OAuth密钥和秘密,这在Google关于未注册应用程序的文档中提到过。这在Google Reader上运行得很好,所以我不明白为什么在Gmail上就不行。有没有人知道这可能是什么原因,或者我该如何进行故障排除?谢谢。

1 个回答

3

你可以试着用OAuth来访问谷歌的IMAP服务器,而不是使用ATOM提要。稍微查了一下,我发现了这个链接

“Gmail支持通过一种叫做XOAUTH的标准来使用OAuth进行IMAP和SMTP的认证。这让你可以用OAuth的令牌和密钥来验证你对Gmail的IMAP和SMTP服务器的访问。它还有一个额外的好处,就是你可以使用普通的SMTP和IMAP库。python-oauth2这个包提供了实现XOAUTH的IMAP和SMTP库,并且封装了imaplib.IMAP4_SSL和smtplib.SMTP。这让你可以用标准的Python库,使用OAuth凭证连接到Gmail。”

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

撰写回答