2015-01-20 2 views
2

У меня возникли трудности с созданием Google Project в качестве учетной записи службы. Я использую SDK администратора в Python, в частности API каталога. Я считаю, что я правильно аутентичности, но когда дело доходит до вызова users.list я получаю следующее сообщение об ошибке:HttpError 400 Bad Request - API-интерфейс API-интерфейса Google (Python)

Traceback (most recent call last): 
    File "googleproject.py", line 17, in <module> 
userlist = service.users().list().execute(http = http_auth) 
    File "/usr/local/lib/python2.7/dist-packages/oauth2client/util.py", line 135, in positional_wrapper 
return wrapped(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/googleapiclient/http.py", line 723, in execute 
raise HttpError(resp, content, uri=self.uri) 
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/admin/directory/v1/users?alt=json returned "Bad Request"> 

Мой код выглядит следующим образом:

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

#----AUTHORISATION----# 

client_email = '*****@developer.gserviceaccount.com' 
with open('*****.p12') as f: 
    private_key = f.read() 

credentials = SignedJwtAssertionCredentials(client_email, private_key, 'https://www.googleapis.com/auth/admin.directory.user') 
http_auth = credentials.authorize(Http()) 

#--------------------# 

service = build('admin', 'directory_v1', http = http_auth) 
userlist = service.users().list().execute(http = http_auth) 

Я пробовал и без прохождения http = http_auth как аргумент execute(). Я в основном следовал примеру, приведенному здесь: https://code.google.com/p/google-api-python-client/source/browse/samples/service_account/tasks.py

Я включил Admin SDK на консоли разработчиков, а также добавил идентификатор и область действия клиента в панели управления Google Apps.

ответ

6

Мне удалось это исправить! Проблема заключалась в том, что я не задавал домен в аргументе списка. Таким образом, новый код выглядит следующим образом:

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

#----AUTHORISATION----# 

client_email = '*****@developer.gserviceaccount.com' 
with open('*****') as f: 
    private_key = f.read() 

credentials = SignedJwtAssertionCredentials(client_email, private_key, 'https://www.googleapis.com/auth/admin.directory.user', sub = '[email protected]') 
http_auth = credentials.authorize(Http()) 

#--------------------# 

service = build('admin', 'directory_v1', http = http_auth) 
user = service.users().list(showDeleted = False, domain = 'domain.com').execute()