Ich versuche, die Gmail atom feed aus einer Python-Anwendung mit OAuth greifen. Ich habe eine funktionierende Anwendung, die den Google Reader-Feed herunterlädt, und ich denke, dass einfach eine Frage der Änderung des Umfangs und Feed-URLs sein sollte. Nach dem Ersetzen der URLs kann ich noch immer Request- und Access-Token erhalten, aber wenn ich versuche, den Feed mit dem Access-Token zu greifen, erhalte ich den Fehler "401 Unauthorized". Hier ist mein einfaches Testprogramm:Zugriff auf Gmail-Atom-Feed mit 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
Sie werden bemerken, dass ich ‚anonym/anonymous‘ als meine OAuth Schlüssel/geheimen bin mit, wie in den Google documents for unregistered applications erwähnt. Das funktioniert gut für Google Reader, daher sehe ich keinen Grund, warum es nicht für Google Mail funktionieren sollte. Hat jemand eine Idee, warum das nicht funktionieren könnte oder wie ich es beheben könnte? Vielen Dank.
Gibt es einen Grund, warum Sie diese selbst implementieren? Schauen Sie sich http://libgmail.sourceforge.net/ an. Wie auch immer, dies ist keine Antwort auf Ihre Frage, also hier ist es in einem Kommentar! – alecwh
@alecwh: libgmail scheint zu erfordern, dass mein Programm den Benutzernamen und das Passwort des Benutzers kennt. Ich versuche das zu vermeiden, wenn ich kann, weshalb ich oauth benutzen möchte. – Will