我试图从谷歌日历中获取事件,而不向用户提示同意页面。 我为此使用了一个服务帐户(包含所有数据的json文件)
但是当我运行脚本时,我得到了这个
from google.oauth2 import service_account
import googleapiclient.discovery
import time
import jwt
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
SERVICE_ACCOUNT_FILE = '/Users/user/Downloads/XXXXXXXX.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = googleapiclient.discovery.build('calendar', 'v3', credentials=credentials)
page_token = None
calendar_list_entry = service.calendarList().get(calendarId='XXXXXXXXXXX@group.calendar.google.com').execute()
Traceback (most recent call last): File "/Users/user/Downloads/blender.py", line 16, in calendar_list_entry = service.calendarList().get(calendarId='XXXXXXX@group.calendar.google.com').execute() File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/googleapiclient/_helpers.py", line 131, in positional_wrapper return wrapped(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/googleapiclient/http.py", line 937, in execute raise HttpError(resp, content, uri=self.uri) googleapiclient.errors.HttpError: <HttpError 404 when requesting https://www.googleapis.com/calendar/v3/users/me/calendarList/XXXXXXXX%40group.calendar.google.com?alt=json returned "Not Found". Details: "[{'domain': 'global', 'reason': 'notFound', 'message': 'Not Found'}]">`
为了将Google Calendar与服务帐户一起使用,您必须对您的workspace account设置域范围的权限
请求错误消息时,您将收到一条HttpError 404,因为您没有正确地将服务帐户委派给您域中有权访问该日历的用户,因此该服务帐户没有访问权限
在下面的代码示例中,仔细查看第
credentials = credentials.create_delegated(user_email)
行,这是您希望将服务帐户权限委托给的域上的用户Json密钥文件。有一个使用json密钥文件here的库示例,它不包括您需要添加该行的委托
请记住,服务帐户仅适用于google workspace域。它不适用于标准的谷歌日历帐户
相关问题 更多 >
编程相关推荐