Как часто мне нужно входить через Gmail API? - PullRequest
0 голосов
/ 06 марта 2019

У меня есть скрипт на Python (и он работает), который работает весь день для поиска среди моих электронных писем с использованием Gmail API, как это

def login():
    SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
    store = file.Storage(os.path.join(script_path, 'token.json'))
    creds = store.get()
    if not creds or creds.invalid:
        flow = client.flow_from_clientsecrets(os.path.join(script_path, 'credentials.json'), SCOPES)
        creds = tools.run_flow(flow, store)
    service = build('gmail', 'v1', credentials=creds)
    return service

def search(service):
    .
    .
    .
    return data

Но я не хочу вызывать login () больше, чем нужно, поэтому мой вопрос будет ...

Как часто мне нужно войти (), чтобы обновить переменную 'service'?

Внутри 'token.json' есть 2 ключа: "token_expiry" и "expires_in". И я думаю, что у одного из них есть ответ, но я не уверен, будет ли каждый час или до истечения срока действия токена?

"token_expiry": "2019-03-04T20:00:48Z",
"token_response": {
    "expires_in": 3600

Ответы [ 2 ]

0 голосов
/ 06 марта 2019
"token_expiry": "2019-03-04T20:00:48Z",
"token_response": {
    "expires_in": 3600

Код, возвращаемый вам, является токеном доступа.Срок действия маркеров доступа истекает через один час 3600 Seconds = 60 Minutes Вам нужно будет обновлять его только один раз каждые 55 минут (есть нечто, называемое перекосом часов, поэтому я не говорю каждые 60 минут)

Еще одна вещь, которую вы можете сделать, это простопродолжайте запускать ваш код в обычном режиме, если вы получили неавторизованную ошибку, затем перехватите ее, запустите ваш логин и попробуйте снова.

Вы также можете рассмотреть возможность проверки клиентской библиотеки Python и посмотреть, может ли она обрабатывать токены обновления, это позволит вашему коду обновлять доступ по мере необходимости, не беспокоясь об этом.

0 голосов
/ 06 марта 2019

URL ниже от Google содержит ответ, который вам нужен. По сути, он проверит, есть ли у вас токен и остается ли он в силе или нет. Если срок действия уже истек, а access_token имеет refresh_token, он обновит токен, а если он недействителен, запросит новый токен.

https://developers.google.com/gmail/api/quickstart/python

...