Estoy tratando de tomar el Gmail atom feed desde una aplicación de Python usando OAuth. Tengo una aplicación que funciona que descarga el feed de Google Reader, y creo que debería ser simplemente una cuestión de cambiar el alcance y alimentar las URL. Después de reemplazar las URL, todavía puedo obtener tokens de solicitud y acceso con éxito, pero cuando intento capturar la fuente con el token de acceso, aparece un error "401 no autorizado". Aquí está mi programa simple prueba:Acceso a la alimentación de atom de Gmail usando 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
Se dará cuenta de que estoy usando 'anónimo/anónima' como mi clave OAuth/secreta, como se mencionó en el Google documents for unregistered applications. Esto funciona bien para Google Reader, por lo que no veo ningún motivo por el que no debería funcionar para Gmail. ¿Alguien tiene alguna idea sobre por qué esto podría no funcionar, o cómo podría solucionarlo? Gracias.
¿Existe una razón por la que está implementando esto por sí mismo? Consulte http://libgmail.sourceforge.net/. De todos modos, esta no es una respuesta a tu pregunta, ¡aquí está en un comentario! – alecwh
@alecwh: libgmail parece requerir que mi programa conozca el nombre de usuario y la contraseña del usuario. Estoy tratando de evitar eso si puedo, y es por eso que quiero usar oauth. – Will