- Вы не хотите запускать процесс авторизации при каждом запуске.
- Вы хотите сохранить данные авторизации в файл и использовать загрузку, загружая их.
Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
В этом ответе информация о токене, включая токен доступа, сохраняется в виде файла. Потому что срок действия токена доступа составляет 3600 секунд. Это используется.
Поток:
Последовательность ответов:
- Проверьте файл токена, включая данные авторизации.
- Если файл НЕ существует, токен доступа извлекается процессом авторизации и сохраняет информацию о токене в файле токена.
- Если файл существует и время ограничения превышает текущее время используется токен доступа, полученный из файла токена.
- Если файл существует, а время ограничения меньше текущего времени, токен доступа извлекается в процессе авторизации и сохраняет токен информация в файл токена.
- Использовать gspread с токеном доступа.
В этом потоке процесс авторизации выполняется каждые 1 час вместо каждого запустите.
Пример сценария:
Перед запуском сценария измените переменные token_file
и credential_file
.
import datetime
import gspread
import json
import os
from oauth2client.service_account import ServiceAccountCredentials
from oauth2client.client import AccessTokenCredentials
token_file = "./access_token.txt" # token file including the authorization data
credential_file = "###credential file of service account###"
now = int(datetime.datetime.now().timestamp())
def getNewAccessToken():
scope = ['https://www.googleapis.com/auth/spreadsheets']
credentials = ServiceAccountCredentials.from_json_keyfile_name(credential_file, scope)
gc = gspread.authorize(credentials)
token_response = gc.auth.token_response
token_response['limitTime'] = token_response['expires_in'] + now - 300
with open(token_file, mode='w') as f:
json.dump(token_response, f)
return token_response['access_token']
def getCredential():
access_token = ""
if os.path.exists(token_file):
with open(token_file) as f:
token = json.load(f)
access_token = token['access_token'] if token['limitTime'] > now else getNewAccessToken()
else:
access_token = getNewAccessToken()
return AccessTokenCredentials(access_token, None)
# Use gspread
credentials = getCredential()
gc = gspread.authorize(credentials)
- . В скрипте время ограничения токена доступа установлено равным
3600 - 300
секунд. Поскольку, если время ограничения установлено в 3600
секунд, во время выполнения сценария может возникнуть ошибка авторизации.
Ссылка:
Если я неправильно понял ваш вопрос, и это не то направление, которое вы хотите, прошу прощения.