Google管理员目录API - 通过apiclient

时间:2017-11-29 18:19:39

标签: python google-api apiclient

我正在使用设备的序列号作为参考,通过Google管理员目录API检索ChromeOS设备的MAC地址,我正在通过 apiclient

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

Here是适用于ChromeOS设备的电话;我的问题是我需要一个设备ID才能执行以下操作:

service.chromeosdevices().get(customerId=settings.CID, deviceId=obtained_id, projection=None).execute()

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

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也不起作用,因为它仍然会返回"需要登录" 通知。

如何将上述查询压缩为apiclient友好格式?我通过上述调用找到的唯一选项是请求我们拥有的每个设备(通过list),然后筛选匹配序列号的大量数据,这看似愚蠢和过度

我注意到我可以致电apiclient.http.HttpRequests,但我也找不到通过它传递API密钥的方法。有new_batch_http_request,但我无法从文档中看出如何简单地将URL传递给它。

谢谢!

1 个答案:

答案 0 :(得分:0)

知道了!

您不能只使用目录API查询的密钥,而是需要服务帐户。

我使用google-authsee here),因为oauth2client已被弃用。

您还需要:

  • 为您的服务帐户委派必要的权限(我的角色为Viewer,并且可以访问https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly

  • 在管理控制台中单独委派API访问权限(安全性 - >高级设置 - >身份验证)

  • 获取json客户端密钥并将其与您的应用放在一起(不要将其包含在您的VCS中)

获取您的凭据:

credentials = service_account.Credentials.from_service_account_file(
    settings.CLIENT_KEY,
    scopes=settings.SCOPES,
    subject=settings.ADMIN_USER)

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

然后你发送一个GET请求:

authed_session = AuthorizedSession(credentials)
response = authed_session.get(request_id_url)

这会返回您可以通过response.content阅读的请求对象。

希望它可以帮助别人!