如何在Python中自动刷新过期的Google Calendar API令牌?

ivqmmu1c  于 2023-06-04  发布在  Python
关注(0)|答案(1)|浏览(580)

我用google calendar API在python中编写程序。所以我从google API dashboard中创建了json文件。一个星期后,令牌过期了,所以我谷歌了一下。我发现

SCOPES = ['https://www.googleapis.com/auth/calendar']

def get_credentials():
    creds = None
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)
        else:
            flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)
    return creds

这段代码来自google,所以我用它。但它不起作用。从google API dashboard下载新的json或者做一些不起作用的事情。

raise exceptions.RefreshError(
google.auth.exceptions.RefreshError: ('invalid_grant: Bad Request', {'error': 'invalid_grant', 'error_description': 'Bad Request'})

我该如何解决这个问题?我想用代码来自动实现。
我在谷歌搜索了这个问题,找到了关于这个问题的代码,但它不起作用。

ddrv8njm

ddrv8njm1#

对不起,如果我没有在这里回答你的问题,但使用服务帐户会更简单。在应用这个建议之前,你应该考虑你的程序的用例。
请务必然后给予服务帐户适当的访问您的谷歌日历通过转到您的谷歌日历在您的计算机---->设置---->设置为我的日历(主要在左边)---->(选择您想要的日历)---->与特定人员或组共享---->添加您的服务帐户电子邮件(在创建服务帐户时,您将在creds json文件中找到它)
还请确保在所需参数中填写日历ID。
继续编码!
Sample Code

相关问题