Wie vermeide ich 'Fehler beim Abrufen des Zugriffstokens: {“error”: “invalid_grant”}' in Offline-GAE-Cron-Tasks?

Dieser Beitrag ist eine Fortsetzung vonVorgehensweise zum Ausführen von 'access_type = offline' / server-only OAuth2-Vorgängen auf GAE / Python. Dashttp = credentials.authorize(httplib2.Http()) Teil schlägt nicht mehr beim Testen fehl, aber es scheint immer noch, wenn es von GAEs Cron ausgeführt wird, wo es nicht in der Lage ist, meine zu aktualisierenaccess_token :

Ich kann meinen Job manuell ausführen, indem ich anrufe/fetchsagen wir um 11:45.Sofort einplanen a/cronfetch job um 11:55 klappt dann, ohne irgendetwasaccess_token Problem.

Aber dann bin ich heute Morgen aufgewacht und habe gesehen, dass dergleich /cronfetch Die Aufgabe (mit Ausnahme des Zeitplans um 01:00 Uhr für meine tägliche Nicht-Test-Aufgabe) ist fehlgeschlagen:

I 2013-06-10 05:53:51.324 make: Got type <class 'google.appengine.api.datastore_types.Blob'>
I 2013-06-10 05:53:51.325 validate: Got type <class 'oauth2client.client.OAuth2Credentials'>
I 2013-06-10 05:53:51.327 URL being requested: https://www.googleapis.com/youtube/v3/playlists?alt=json&part=snippet%2Cstatus
I 2013-06-10 05:53:51.397 Refreshing due to a 401
I 2013-06-10 05:53:51.420 make: Got type <class 'google.appengine.api.datastore_types.Blob'>
I 2013-06-10 05:53:51.421 validate: Got type <class 'oauth2client.client.OAuth2Credentials'>
I 2013-06-10 05:53:51.421 Refreshing access_token
I 2013-06-10 05:53:51.458 Failed to retrieve access token: { "error" : "invalid_grant" }
I 2013-06-10 05:53:51.468 make: Got type <class 'google.appengine.api.datastore_types.Blob'>
I 2013-06-10 05:53:51.468 validate: Got type <class 'oauth2client.client.OAuth2Credentials'>
I 2013-06-10 05:53:51.471 validate: Got type <class 'oauth2client.client.OAuth2Credentials'>
I 2013-06-10 05:53:51.471 get: Got type <class 'oauth2client.appengine.CredentialsModel'>
E 2013-06-10 05:53:51.480 invalid_grant Traceback (most recent call last): File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in

DieseBeim Aktualisieren des Tokens wird der Fehler "invalid_grant" angezeigt Mailinglistennachricht (+SO post 1, SO nach 2, SO nach 3Ich sehe meinem Problem ähnlich, aber es scheint mit einem Problem zu geschehenaccess_type=online Zeichen. In meinem Fall verwende ich nur die Standardeinstellungaccess_type=offlineund ich sehe die"Führen Sie diese Vorgänge aus, wenn ich die Anwendung nicht verwende." Erwähnen Sie in der ersten Zugriffsanforderung.

Ich habe gerade einen Cron-Lauf um 08:25 Uhr neu geplant (wobei darauf geachtet wurde, keinen manuellen zu starten), mit Debug-Druckanweisungen, die ich für Sie bei GitHub festgelegt habe. Hier ist, was ich bekomme, es ist ähnlich, aber nicht identisch (Beachten Sie, dass die paar letzten Zeilen falsch angeordnet zu sein scheinen, ich mache definitiv keine OAuth2-Sachen increate_playlist bis alle Quellen gelesen sind). Ignorieren Sie also die verzerrte Reihenfolge (GAE-Protokollierungsartefakt?)meinehttp = credentials.authorize(Http()) anrufencreate_playlist(self), derzeit in Zeile 144 ist falsch:

    ...
    E 2013-06-10 08:26:12.817 http://www.onedayonemusic.com/page/2/ : found embeds ['80wWl_s-HuQ', 'kb1Nu75l1vA', 'kb1Nu75l1vA', 'RTWcNRQtkwE', 'RTWcNRQtkwE', 'ZtDXezAhes8', 'ZtDXezAhes8', 'cFGxNJhKK9c', 'cFGxNJhKK9c'
    I 2013-06-10 08:26:14.019 make: Got type <class 'google.appengine.api.datastore_types.Blob'>
    I 2013-06-10 08:26:14.020 validate: Got type <class 'oauth2client.client.OAuth2Credentials'>
    I 2013-06-10 08:26:14.022 URL being requested: https://www.googleapis.com/youtube/v3/playlists?alt=json&part=snippet%2Cstatus
    I 2013-06-10 08:26:14.100 Refreshing due to a 401
    I 2013-06-10 08:26:14.105 make: Got type <class 'google.appengine.api.datastore_types.Blob'>
    I 2013-06-10 08:26:14.106 validate: Got type <class 'oauth2client.client.OAuth2Credentials'>
    I 2013-06-10 08:26:14.106 Refreshing access_token
    E 2013-06-10 08:26:18.994 Deadline exceeded while waiting for HTTP response from URL: https://accounts.google.com/o/oauth2/token Traceback (most recent call last): File "/pyt
    E 2013-06-10 08:26:18.996 http://www.onedayonemusic.com/page/3/ : found embeds ['80wWl_s-HuQ', '6VNu2MLdE0c', '6VNu2MLdE0c', 'YwQilKbK9Mk', 'YwQilKbK9Mk', 'KYdB3rectmc', 'KYdB3
    E 2013-06-10 08:26:18.996 crawl_videos end
    E 2013-06-10 08:26:18.996 create_playlist start
    E 2013-06-10 08:26:18.996 create_playlist got creds
    E 2013-06-10 08:26:18.996 create_playlist authorized creds

→ Warum funktioniert der Cron-Job 5 Minuten nach einem manuellen Lauf, schlägt aber 6 Stunden später fehl? Ich dachte, das Aktualisierungstoken ist nie abgelaufen. Was mache ich falsch?

Beachten Sie, dass dies meine erste GAE-Arbeit und mein zweites Python-Programm ist. Allgemeine Codeüberprüfung / Ratschläge sind sehr willkommen, aber seien Sie bitte vorsichtig :)

Der Code ist aktiviertGitHub und meine Instanz ist erreichbar unterdailygrooves.org. Danke für Ihre Hilfe!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage