GA: API списка целей: запрос webPropertyId='~all' возвращает http 400. Необходимо указать webPropertyId

Я просматриваю профили учетных записей Google Analytics, используя API management().goals() и выясняю, какие цели созданы для каждой из них, чтобы знать, для чего я могу получить данные. Получив действительный экземпляр службы, к которому я могу делать запросы, target().list() не жалуется на отсутствующий параметр webPropertyId:

# not including the ServiceAccountCredentials setup here
from apiclient.discovery import build
service = build('analytics', 'v3', http=http)
service.management().goals().list(accountId=account_id, webPropertyId='~all', profileId=profile_id)

Последняя строка завершается с ошибкой:

googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/analytics/v3/management/accounts/nnnnnnnnn/webproperties/%7Eall/profiles/nnnnnnnnn/goals?alt=json returned "webPropertyId must be specified.">

[Я заменил номера учетных записей/профилей после /accounts/ и /profiles/ на nnnnnnnn для этого поста, для конфиденциальности; у настоящей ошибки там есть номера]

Соответствующий бит: webPropertyId must be specified.

Я определенно указываю параметр webPropertyId, и если я его удалю, я получу другую ошибку:

TypeError: Missing required parameter "webPropertyId"

Я могу успешно выполнять запросы на получение других метаданных, информации о пользователях и аналитических данных из API управления. Что здесь может быть не так? Я не могу использовать здесь значение ~all и должен быть более конкретным?


person Breezer    schedule 06.07.2017    source источник
comment
Аккаунт, веб-ресурс и представление (профиль) можно рассматривать как иерархическое дерево. Аккаунт имеет много веб-ресурсов, веб-ресурс имеет много просмотров (профилей). Таким образом, имеет смысл использовать квалификатор ~all только снизу вверх по дереву. Если вы знаете идентификатор представления (профиля), вам также следует знать родительский веб-ресурс, поскольку представление имеет только одно свойство, поэтому указание ~all для определенного идентификатора представления (профиля) не работает. Было бы лучше спроектировать код с иерархическим деревом, как оно понимается, возможно, сначала вызвав analytics.accountSummaries.list()   -  person Matt    schedule 06.07.2017


Ответы (1)


Работает:

GET https://www.googleapis.com/analytics/v3/management/accounts/~all/webproperties/~all/profiles/~all/goals

Также работает

GET https://www.googleapis.com/analytics/v3/management/accounts/~all/webproperties/~all/profiles/73835159/goals

Не работает.

GET https://www.googleapis.com/analytics/v3/management/accounts/41967536/webproperties/~all/profiles/73835159/goals

Ответ:

{"error":{"errors":[{"domain":"global","reason":"badRequest","message":"webPropertyId must be specified."}],"code":400,"message":"webPropertyId must be specified."}}

Я буду называть это ошибкой. Цели с ~всеми результатами приводят к ошибке. поднимет его с командой на следующей неделе.

person DaImTo    schedule 06.07.2017
comment
Я бы не назвал это ошибкой, но работает так, как задумано. Квалификатор ~all имеет смысл использовать только снизу вверх. Если вы знаете идентификатор представления, то существует только один идентификатор веб-ресурса. ~all — это просто синтаксический сахар; Я бы посоветовал использовать accountSummaries.list в качестве первого вызова API, а затем использовать эту иерархическую структуру как известную. Это также сэкономит ваше время, так как ~all может стать дороже, если у пользователя много учетных записей с множеством свойств и множеством просмотров. - person Matt; 06.07.2017