首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过apiclient发送查询

通过apiclient发送查询
EN

Stack Overflow用户
提问于 2017-11-29 18:19:39
回答 1查看 227关注 0票数 0

我正在通过检索一个ChromeOS设备MAC地址,使用该设备的序列号作为参考,并通过apiclient进行呼叫。

service = discovery.build('admin', 'directory_v1', developerKey=settings.API_KEY)

这里是ChromeOS设备可用的调用;我的问题是,为了执行以下操作,我需要一个设备ID:

代码语言:javascript
复制
service.chromeosdevices().get(customerId=settings.CID, deviceId=obtained_id, projection=None).execute()

我可以通过以下格式发送GET查询:

代码语言:javascript
复制
https://www.googleapis.com/admin/directory/v1/customer/my_customer/devices/chromeos?projection=full&query=id:" + serial + "&orderBy=status&sortOrder=ascending&maxResults=10", "GET")

..。但是我试图避免使用OAuth2,只使用我的API密钥。在key请求中传递GET也不起作用,因为它仍然返回"Login“通知。

如何将上述查询压缩为apiclient-friendly格式?我通过上述调用找到的唯一选择是请求我们拥有的每一个设备(通过list),然后在大量数据中筛选匹配的序列号,这看起来既愚蠢又过分。

我确实注意到我可以调用apiclient.http.HttpRequests,但是我也找不到通过它传递API密钥的方法。有new_batch_http_request,但我无法从文档中分辨出如何简单地将一个URL传递给它。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-11-30 01:16:22

明白了!

您不能只使用一个键进行目录API查询,您需要一个服务帐户。

我使用的是google-auth (请看这里),因为不推荐oauth2client

你还需要:

获得这样的证书:

代码语言:javascript
复制
credentials = service_account.Credentials.from_service_account_file(
    settings.CLIENT_KEY,
    scopes=settings.SCOPES,
    subject=settings.ADMIN_USER)

其中ADMIN_USER是授权域管理员的电子邮件地址。

然后发送GET请求,如下所示:

代码语言:javascript
复制
authed_session = AuthorizedSession(credentials)
response = authed_session.get(request_id_url)

这将返回一个请求对象,您可以通过response.content读取它。

希望它能帮到别人!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47559295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档