我有一个全天运行的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
答案 0 :(得分:0)
下面的Google网址提供了您所需的答案。基本上,它将检查您是否有令牌,以及令牌是否仍然有效。如果已经过期且access_token具有refresh_token,则它将刷新令牌,如果无效,则将请求新令牌。
答案 1 :(得分:0)
"token_expiry": "2019-03-04T20:00:48Z",
"token_response": {
"expires_in": 3600
返回给您的代码是访问令牌。访问令牌在一个小时后3600 Seconds = 60 Minutes
过期,您只需要每55分钟刷新一次(有一种称为时钟偏斜的原因,这就是为什么我不说每60分钟刷新一次)
您可以做的另一件事是,如果遇到未授权的错误,则继续正常运行代码,然后捕获该错误并运行登录,然后重试。
您可能还想考虑检查python客户端库,看看它是否可以处理刷新令牌,这将使您的代码可以根据需要刷新访问权限,而无需担心。