J'essaie de récupérer le Gmail atom feed à partir d'une application python utilisant OAuth. J'ai une application de travail qui télécharge le flux Google Reader, et je pense que devrait simplement être une question de changer la portée et les URL de flux. Après avoir remplacé les URL, je peux toujours obtenir des jetons Demande et Accès, mais lorsque j'essaie de récupérer le flux à l'aide du jeton Access, j'obtiens une erreur "401 Non autorisé". Voici mon programme de test simple:Accéder au flux atomique Gmail à l'aide de OAuth
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
Vous remarquerez que j'utilise « anonyme/anonyme » comme ma clé OAuth/secret, comme mentionné dans le Google documents for unregistered applications. Cela fonctionne bien pour google reader, donc je ne vois pas pourquoi cela ne devrait pas fonctionner pour Gmail. Est-ce que quelqu'un a une idée de pourquoi cela pourrait ne pas fonctionner, ou comment je pourrais y remédier? Merci.
Y at-il une raison pour laquelle vous implémentez vous-même? Consultez http://libgmail.sourceforge.net/. De toute façon ce n'est pas une réponse à ta question alors voilà dans un commentaire! – alecwh
@alecwh: libgmail semble exiger que mon programme connaisse le nom d'utilisateur et le mot de passe de l'utilisateur. J'essaie d'éviter cela si je peux, c'est pourquoi je veux utiliser oauth. – Will