gpt4 book ai didi

python - Google Calendar API - 通过服务帐户访问自己的日历

转载 作者:太空狗 更新时间:2023-10-29 21:58:53 28 4
gpt4 key购买 nike

我想访问 Google Calendar API 以使用 Python 插入条目。我在 Google API 控制台上创建了一个服务帐户,添加了一个私钥,并下载了它。

但是当我尝试修改我的日历的任何内容时,它是在同一个帐户上,我收到以下错误消息。阅读作品。

代码是

import httplib2

from oauth2client.client import SignedJwtAssertionCredentials
from apiclient.discovery import build

event = {
'summary' : 'Appointment',
'location' : 'Somewhere',
'start' : {
'dateTime' : '2012-09-03T10:00:00.000-07:00'
},
'end' : {
'dateTime' : '2012-09-03T10:25:00.000-07:00'
}
}


f = file("key.p12", "rb")
key = f.read()
f.close()

credentials = SignedJwtAssertionCredentials(
service_account_name='423291807109-XXXXXXXXXXXXXXXXxx@developer.gserviceaccount.com',
private_key=key,

scope='https://www.googleapis.com/auth/calendar'
)

http = httplib2.Http()
http = credentials.authorize(http)

service = build('calendar', 'v3', http=http)
request = service.events().insert(calendarId='XXXXXXXXXXXXXXXXXX@group.calendar.google.com', body=event)

response = request.execute()

print(response)

错误信息是:

apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/XXXXXXXXXXXXXXXXXXX@group.calendar.google.com/events?alt=json returned "Forbidden">

我本以为我可以使用此服务帐户访问我自己的数据,但似乎不是。

谷歌声称

After the Service Account has been created, you will also have access to the client ID associated with the private key. You will need both when coding your application. - https://developers.google.com/accounts/docs/OAuth2?hl=de#scenarios

我在谷歌上搜索了大约 2 个小时,但似乎记录得很糟糕。有没有一种方法可以在没有用户交互的情况下通过 Google Calendar API 插入新事件(又名三足 OAuth),或者有什么方法可以解决这个问题?

我刚刚发现已弃用的 ClientLoging。为什么 Google 让它变得如此困难?

亲切的问候

最佳答案

我意识到,如果将生成的凭据转储到 JSON 并在您每次需要它们时读取它们,那么三步 OAuth 就可以工作。

所以流程是:按照 Google API 中的说明添加您的 client_secrets.json在与此脚本相同的文件夹中。从提示中给出的 url 中获取 key 。根据提示输入它。党! 11。我希望这些凭据永远存在。

from oauth2client.client import flow_from_clientsecrets

flow = flow_from_clientsecrets('client_secrets.json',
scope='https://www.googleapis.com/auth/calendar',
redirect_uri='urn:ietf:wg:oauth:2.0:oob')

auth_uri = flow.step1_get_authorize_url()
print('Visit this site!')
print(auth_uri)
code = raw_input('Insert the given code!')
credentials = flow.step2_exchange(code)
print(credentials)

with open('credentials', 'wr') as f:
f.write(credentials.to_json())

现在,在应用程序本身中:

def __create_service():
with open('credentials', 'rw') as f:
credentials = Credentials.new_from_json(f.read())

http = httplib2.Http()
http = credentials.authorize(http)

return build('calendar', 'v3', http=http)

要获取服务对象,现在可以调用

service = __create_service()

并在其上使用 API。

关于python - Google Calendar API - 通过服务帐户访问自己的日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12252644/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com