Получите доступ к каналу атома Gmail, используя OAuth - PullRequest
6 голосов
/ 03 июля 2010

Я пытаюсь получить фид атомов Gmail из приложения Python, использующего OAuth. У меня есть работающее приложение, которое загружает фид Google Reader, и я думаю, что должно быть просто вопросом изменения области действия и URL фида. После замены 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 для незарегистрированных приложений . Это хорошо работает для Google Reader, поэтому я не вижу причин, почему он не должен работать для Gmail. Кто-нибудь имеет какие-либо идеи о том, почему это не может работать, или как я мог бы устранить неполадки? Благодаря.

1 Ответ

3 голосов
/ 03 июля 2010

Возможно, вы захотите попытаться получить доступ к серверам Google IMAP с помощью OAuth вместо использования канала ATOM.После небольшого поиска я нашел this :

"Gmail поддерживает OAuth через IMAP и SMTP через стандарт, который они называют XOAUTH. Это позволяет вам проходить аутентификацию на серверах Gmail IMAP и SMTP с использованиемOAuth-токен и секрет. Он также имеет дополнительное преимущество, позволяя вам использовать ванильные библиотеки SMTP и IMAP. Пакет python-oauth2 предоставляет библиотеки как IMAP, так и SMTP, которые реализуют XOAUTH и wrap imaplib.IMAP4_SSL и smtplib.SMTP.для подключения к Gmail с учетными данными OAuth с использованием стандартных библиотек Python. "

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

...