我正在通过检索一个ChromeOS设备MAC地址,使用该设备的序列号作为参考,并通过apiclient进行呼叫。
service = discovery.build('admin', 'directory_v1', developerKey=settings.API_KEY)
这里是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也不起作用,因为它仍然返回"Login“通知。
如何将上述查询压缩为apiclient-friendly格式?我通过上述调用找到的唯一选择是请求我们拥有的每一个设备(通过list),然后在大量数据中筛选匹配的序列号,这看起来既愚蠢又过分。
我确实注意到我可以调用apiclient.http.HttpRequests,但是我也找不到通过它传递API密钥的方法。有new_batch_http_request,但我无法从文档中分辨出如何简单地将一个URL传递给它。
谢谢!
发布于 2017-11-30 01:16:22
明白了!
您不能只使用一个键进行目录API查询,您需要一个服务帐户。
我使用的是google-auth (请看这里),因为不推荐oauth2client。
你还需要:
Viewer,并且可以访问https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly)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读取它。
希望它能帮到别人!
https://stackoverflow.com/questions/47559295
复制相似问题