gpt4 book ai didi

python - 通过 Memcache 高效使用 Google API 特定服务对象

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:21 25 4
gpt4 key购买 nike

应用程序正在尝试在服务帐户的帮助下使用 Google Apps Directory API 获取用户信息列表(>200 个用户)。

if not memcache.get('directory_service'):
f = file(KEY_FILE, 'r')
key = f.read()
f.close()

credentials = SignedJwtAssertionCredentials(
service_email,
key,
'https://www.googleapis.com/auth/admin.directory.user',
sub=GoogleAppAdminEmail)
http_auth = credentials.authorize(Http())

directory_service = build('admin', 'directory_v1', http=http_auth)
memcache.set('directory_service', directory_service, 60 * 60 * 2)
else:
directory_service = memcache.get('directory_service')
user = directory_service.users().get(userKey=username).execute()

我认为最好将 directory_service 对象保存在内存缓存中,以减少执行时间,以便第二个请求之后的应用程序将从内存缓存中获取该对象。

但是在实现 Memcache 后我得到了 HttpError 401

File "C:\Users\test\appcode\oauth2client\util.py", line 135, in positional_wrapper

return wrapped(*args, **kwargs)

File "C:\Users\test\appcode\googleapiclient\http.py", line 723, in execute

raise HttpError(resp, content, uri=self.uri)

HttpError: <HttpError 401 when requesting https://www.googleapis.com/admin/directory/v1/users/username%40mydomain.com?alt=json returned "Login Required">

处理这种情况的有效方法是什么?

最佳答案

人们对存储 directory_service 对象没什么兴趣,因为它是在不调用外部 API 的情况下创建的。

您应该存储的是 http_auth 对象,因为生成该对象的成本可能很高。

此外,每秒只能请求服务帐户的 token 一定次数。我认为确切的限制没有记录在某处,但如果您尝试同时从同一服务帐户生成太多 token ,您将收到超出速率限制错误。

最好的做法是将 token 存储在某些共享存储服务中。它可以是内存缓存或数据存储。 Google API 客户端附带 an App Engine specific StorageByKeyName class你应该使用的。它由数据存储支持,并使用 Memcache 作为可选的缓存层。

关于python - 通过 Memcache 高效使用 Google API 特定服务对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28824968/

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