python - ietf - Acceda al feed de átomos de Gmail utilizando OAuth
python oauth2 client (1)
Es posible que desee intentar acceder a los servidores IMAP de Google con OAuth en lugar de utilizar el feed ATOM. Después de un poco de google, encontré esto :
"Gmail admite OAuth sobre IMAP y SMTP a través de un estándar que llaman XOAUTH. Esto le permite autenticarse contra los servidores IMAP y SMTP de Gmail utilizando un token y secreto OAuth. También tiene el beneficio adicional de permitirle usar bibliotecas vaniat SMTP e IMAP. El paquete python-oauth2 proporciona bibliotecas IMAP y SMTP que implementan XOAUTH y envuelven imaplib.IMAP4_SSL y smtplib.SMTP. Esto le permite conectarse a Gmail con credenciales de OAuth usando bibliotecas estándar de Python.
Estoy tratando de tomar el feed de átomos de Gmail desde una aplicación de Python usando OAuth. Tengo una aplicación que funciona y que descarga el feed de Google Reader, y creo que debería ser simplemente una cuestión de cambiar el alcance y las URL de los feeds. 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 de prueba simple:
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
Notará que estoy usando ''anónimo / anónimo'' como mi clave / secreto OAuth, como se menciona en los documentos de Google para aplicaciones no registradas . 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.