Power Query позвоните на google.webmaster.api, Post, запрос проблемы - PullRequest
1 голос
/ 11 апреля 2019

Я позвонил на google.webmasters.api через Power-Query (M), мне удалось настроить oath2 и я сделал первый успешный вызов get & list. Теперь я пытаюсь вызвать / searchAnalytics / query? который работает только с Post. Это всегда отвечает 400 ошибкой. Форматирование запроса или URL не работает правильно.

Вот некоторые дополнительные сведения:

Power Query - Ссылка

API для веб-мастеров Google - Ссылка

Сообщество PowerBi

Формат даты отличается:

body = "{ ""startDate"": ""2019-01-01"", ""endDate"": ""2019-02-02"" }",

до

body = "{ ""startDate"": ""2019/01/01"", ""endDate"": ""2019/02/02"" }",

let
    body = "{ ""startDate"": ""2019-01-01"", ""endDate"": ""2019-02-02"" }",
    AccessTokenList = List.Buffer(api_token),
    access_token = AccessTokenList{0},
    AuthKey = "Bearer " & access_token,
    url = "https://www.googleapis.com/webmasters/v3/sites/https%3A%2F%2Fxxxxxxxxx.xxx/searchAnalytics/query?",
    Response = Web.Contents(url, [Headers=[Authorization=AuthKey, ContentType="application/json", Accept="application/json"], Content=Text.ToBinary(body) ]),
    JsonResponse = Json.Document(Response)
in
    Response

получение 400 и показывается как 400 в Gooogle-Api Overview

Есть идеи, что не так?

Thx

1 Ответ

0 голосов
/ 13 апреля 2019

Убедитесь, что заголовки запроса верны.Сервер ожидает заголовок Content-Type, а не ContentType.

Документация (https://developers.google.com/webmaster-tools/search-console-api-original/v3/searchanalytics/query#try-it) предполагает, что запросы должны выглядеть примерно так:

POST https://www.googleapis.com/webmasters/v3/sites/[SITEURL]/searchAnalytics/query HTTP/1.1

Authorization: Bearer [YOUR_ACCESS_TOKEN]
Accept: application/json
Content-Type: application/json

{}

Итак, основные выводы:

  1. Необходимо использовать метод HTTP POST
  2. URL должен быть действительным
    • Вы не указали свой фактический URL, поэтому вам придется проверить его для себяЯ бы избавился от конечного ? в вашем url (поскольку вы не включаете строку запроса - и даже если бы вы это сделали, вы должны передать их в поле Query записи optionsвместо построения строки запроса самостоятельно).
  3. Заголовки (Authorization, Accept, Content-Type) должны быть действительными / присутствующими.
    • Построить свои заголовкив разделительном выражении. Затем передайте это выражение в поле Headers записи options. Это дает вам возможность просматривать / проверятьваши заголовки (чтобы убедиться, что они такие, как задумано).
  4. Тело должно содержать действительный JSON для передачи в метод API.
    • Создание допустимого JSON с помощью ручной конкатенации строк может привести к ошибке.Использование Json.FromValue (https://docs.microsoft.com/en-us/powerquery-m/json-fromvalue) кажется лучшим подходом.

В целом ваш код M может выглядеть примерно так:

let
    // Some other code is needed here, in which you define the expression api_token
    AccessTokenList = List.Buffer(api_token),
    access_token = AccessTokenList{0},
    AuthKey = "Bearer " & access_token,
    requestHeaders = [Authorization = AuthKey, #"Content-Type" = "application/json", Accept = "application/json"],
    parametersToPost = [startDate = "2019-01-01", endDate = "2019-02-02"], // Can include other parameters here e.g. dimensions, as mentioned in Search Console API documentaton.
    jsonToPost = Json.FromValue(parametersToPost, TextEncoding.Utf8), // Second argument not required (as is default), but just be explicit until you've got everything working.
    url = "https://www.googleapis.com/webmasters/v3/sites/https%3A%2F%2Fxxxxxxxxx.xxx/searchAnalytics/query", // Uri.EscapeDataString function can be use for URL encoding
    response = Web.Contents(url, [Headers=requestHeaders, Content=jsonToPost])
in
    response

Не проверено (поскольку у меня нет учетной записи или учетных данных API).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...