Wenn ich es richtig sollte dies verstehen werden, was Sie suchen:
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run_flow
from oauth2client.file import Storage
import requests
import os
CLIENT_ID = '9453asfasfaksdfh860b1osoiveogstt.apps.googleusercontent.com'
CLIENT_SECRET = '6gRid8wF7TW8asdfasdftX'
def get_new_token():
flow = OAuth2WebServerFlow(client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
scope='https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.user.readonly',
redirect_uri='http://example.com/auth_return')
storage = Storage('creds.data') #token details stored here
credentials = run_flow(flow, storage)
tokenhere=credentials.access_token #tokens generated
return tokenhere
def retrieve_saved_token():
if os.path.exists('creds.data'):
with open('creds.data') as creds:
tokenhere = creds.read() # Change to reflect how the token data is reflected in your 'creds.data' file
return tokenhere
def request_page(tokenhere):
r = requests.get("https://www.googleapis.com/admin/directory/v1/users?domain=mydomain.com",
headers={'Authorization': 'Bearer {token}'.format(token=tokenhere)})
result = r.json()
try:
tokenhere = retrieve_saved_token()
request_page(tokenhere)
except:
tokenhere = get_new_token()
request_page(tokenhere)
Gegliedert hier sind alle Komponenten von dem, was getan
einfach mehr Objekt ausgerichtet werden, ich Ihre Logik in Funkt bewegt Ionen:
def get_new_token():
flow = OAuth2WebServerFlow(client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
scope='https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.user.readonly',
redirect_uri='http://example.com/auth_return')
storage = Storage('creds.data') #token details stored here
credentials = run_flow(flow, storage)
tokenhere=credentials.access_token #tokens generated
return tokenhere
def request_page(tokenhere):
r = requests.get("https://www.googleapis.com/admin/directory/v1/users?domain=mydomain.com",
headers={'Authorization': 'Bearer {token}'.format(token=tokenhere)})
result = r.json()
Ich habe auch eine neue Funktion eine gespeicherte Token, wenn der Token-Datei existiert abzurufen:
def retrieve_saved_token():
if os.path.exists('creds.data'):
with open('creds.data') as creds:
tokenhere = creds.read() # Change to reflect how the token data is reflected in your 'creds.data' file
return tokenhere
Schließlich bekommen wir zu dem Teil, wo die Logik tatsächlich läuft.
Zuerst versucht es, das Token aus der Datei abzurufen. Wenn die Datei nicht existiert, wird eine Exception ausgelöst und Sie gelangen zur Ausnahmelogik. Die Art und Weise, wie die try-Logik geschrieben wird, fängt auch an, wenn ein Token erfolgreich abgerufen werden kann, aber wenn dieses Token abgelaufen ist, sollte die Anforderungslogik eine Ausnahme auslösen.
in der Ausnahmelogik es tut Ihre ursprüngliche Logik ein neues Token bekommen und die Seite mit dem Token
try:
tokenhere = retrieve_saved_token()
request_page(tokenhere)
except:
tokenhere = get_new_token()
request_page(tokenhere)
EDIT 1
anfordernden
ich, dass Sie einfach nicht wollen, gehe davon aus um die Seite anzufordern, aber auch die Daten auf der Seite zu manipulieren. Dazu müssten Sie eine andere Funktion verwenden, die Daten von der Seite abruft, indem Sie im von Ihnen erstellten json-Objekt 'result' nach Tags suchen. Ich rufe diese Funktion 'do_something_with_request_function()' im folgenden Code auf.
Das erste Try/Except überprüft, ob eine Token-Datei existiert, wenn es dann dieses Token ergreift und es benutzt, wenn es das nicht tut, wird es ein neues Token erzeugen.
Der zweite Versuch hat eine Chance, einen abgelaufenen Token zu übergeben. Nehmen wir zwei Szenarien an.
Szenario 1: Sie übergeben ein gültiges Token, Sie erhalten die Seite, die Sie in der Anfrage benötigen.Ihre Methode, die Sie verwenden, um die Daten auf der Seite zu analysieren, sucht nach bestimmten Feldern, die auf dieser Seite vorhanden sind, alles funktioniert einwandfrei.
Szenario 2: Sie übergeben ein ungültiges Token, Sie erhalten eine Fehlerseite für abgelaufenes/ungültiges Token. Ihre Methode, die diese Seite nach json analysiert und versucht, die Daten zu manipulieren, würde Fehler ausgeben, wenn sie keinen Wert findet, der normalerweise auf der tatsächlichen Seite vorhanden wäre, zu der Sie gelangen möchten. Dies würde den Code zwingen, zu dem Ausnahmeblock zu springen.
Der Block except generiert ein neues Token, übergibt es, um die Seite erneut anzufordern, und verarbeitet Ihre Daten ordnungsgemäß.
try:
tokenhere = retrieve_saved_token()
except:
tokenhere = get_new_token()
try:
request_page(tokenhere)
do_something_with_request_function(result)
except:
tokenhere = get_new_token()
request_page(tokenhere)
do_something_with_request_function(result)
so alles über das Abrufen des Tokens aus dem gespeicherten Speicherort. Aber was ist mit dem Token abläuft wie man damit umgeht, was man dafür machen kann –
Ich habe die Logik mit Kommentaren geändert. Der neue Code ist unter ** EDIT 1 ** aufgeführt. Dies sollte Ihr Szenario behandeln, wenn ein Token abläuft. – HackerShark
Mit diesem müssen wir reauthorized, Wenn wir nicht die Aktualisierung toke verwenden, bedeutet das Generieren neuer Token bedeutet, den Benutzer erneut autorisiert, was er einmal getan hat. Richtig –