我必须多久使用一次Gmail API登录一次?

时间:2019-03-06 03:38:50

标签: python python-3.x google-api gmail-api google-api-python-client

我有一个全天运行的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()太多,所以,我的问题是...

我必须多久登录一次才能重新装修“服务”变量?

在“ token.json”内部有两个键:“ token_expiry”和“ expires_in”。而且我认为其中有一个答案,但是我不确定,是每小时还是直到令牌到期?

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

2 个答案:

答案 0 :(得分:0)

下面的Google网址提供了您所需的答案。基本上,它将检查您是否有令牌,以及令牌是否仍然有效。如果已经过期且access_token具有refresh_token,则它将刷新令牌,如果无效,则将请求新令牌。

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

答案 1 :(得分:0)

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

返回给您的代码是访问令牌。访问令牌在一个小时后3600 Seconds = 60 Minutes过期,您只需要每55分钟刷新一次(有一种称为时钟偏斜的原因,这就是为什么我不说每60分钟刷新一次)

您可以做的另一件事是,如果遇到未授权的错误,则继续正常运行代码,然后捕获该错误并运行登录,然后重试。

您可能还想考虑检查python客户端库,看看它是否可以处理刷新令牌,这将使您的代码可以根据需要刷新访问权限,而无需担心。