我正在尝试使用OAuth从python应用程序中获取Gmail atom feed。我有一个可以下载Google阅读器供稿的工作应用程序,我认为 只需更改范围和供稿网址即可。替换URL后,我仍然可以成功获取请求和访问令牌,但是当我尝试使用访问令牌获取源时,我收到“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
你会注意到我使用'匿名/匿名'作为我的OAuth密钥/秘密,如Google documents for unregistered applications中所述。这适用于谷歌阅读器,所以我没有看到任何理由为什么它不适用于Gmail。有没有人知道为什么这可能不起作用,或者我怎么去解决它?感谢。
答案 0 :(得分:3)
您可能想尝试使用OAuth访问Google的IMAP服务器,而不是使用ATOM Feed。经过一番谷歌搜索后,我找到了this:
“Gmail通过IMAP支持OAuth SMTP通过他们称之为XOAUTH的标准。 这允许您进行身份验证 针对Gmail的IMAP和SMTP服务器 使用OAuth令牌和秘密。它 也有允许的额外好处 你使用vanilla SMTP和IMAP 库。 python-oauth2包 提供IMAP和SMTP库 实现XOAUTH并包装 imaplib.IMAP4_SSL和smtplib.SMTP。 这允许您连接到Gmail 使用标准的OAuth凭证 Python库。“