Использование Google API Refken Token в Python
Я создал приложение для личного пользования, которое просто запрашивает мою почту для определенного типа электронной почты. Приложение успешно работает в режиме пи и днем и ночью, отправляя запросы в службу Gmail каждые тридцать секунд.
Однако каждую неделю или около того я получаю эту ошибку:
messages = gmail.users().messages().list(userId='me').execute() #
q='is:unread'
File "C:\Users\rexma\Anaconda3\envs\stan_env\lib\site-
packages\oauth2client\_helpers.py", line 133, in positional_wrapper
return wrapped(*args, **kwargs)
File "C:\Users\rexma\Anaconda3\envs\stan_env\lib\site-
packages\googleapiclient\http.py", line 839, in execute
method=str(self.method), body=self.body, headers=self.headers)
File "C:\Users\rexma\Anaconda3\envs\stan_env\lib\site-
packages\googleapiclient\http.py", line 166, in _retry_request
resp, content = http.request(uri, method, *args, **kwargs)
File "C:\Users\rexma\Anaconda3\envs\stan_env\lib\site-
packages\oauth2client\transport.py", line 186, in new_request
credentials._refresh(orig_request_method)
File "C:\Users\rexma\Anaconda3\envs\stan_env\lib\site-
packages\oauth2client\client.py", line 761, in _refresh
self._do_refresh_request(http)
File "C:\Users\rexma\Anaconda3\envs\stan_env\lib\site-
packages\oauth2client\client.py", line 819, in _do_refresh_request
raise HttpAccessTokenRefreshError(error_msg, status=resp.status)
oauth2client.client.HttpAccessTokenRefreshError: invalid_grant: Token has
been expired or revoked.
Что заставляет меня вернуться, удалить мои старые учетные данные и повторно выполнить авторизацию. Я пытался сделать другие исправления онлайн, как установка
flow.authorization_url(access_type = 'offline', approval_prompt='force')
Но объект OAuth2WebServerFlow не имеет атрибута authorization_url.
Вот мой полный код авторизации:
def authenticate(CLIENT_SECRET_FILE, APPLICATION_NAME, SCOPE, credential_name):
home_dir = os.path.expanduser('~')
credential_dir = os.path.join(home_dir, '.credentials')
if not os.path.exists(credential_dir):
os.makedirs(credential_dir)
credential_path = os.path.join(credential_dir, credential_name)
store = Storage(credential_path)
credentials = store.get()
if not credentials or credentials.invalid:
flow = flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPE)
flow.user_agent = APPLICATION_NAME
# flow.authorization_url(access_type='offline', approval_prompt='force')
credentials = run_flow(flow, store)
return credentials
Я определенно все еще работаю с OAuth2, даже прочитав это. Я просто хочу знать, как я могу использовать в своем приложении токен обновления в учетных данных json, чтобы он продолжал работать без истечения срока действия.
Буду признателен за любую оказанную помощь.