Убедитесь, что заголовки запроса верны.Сервер ожидает заголовок 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
{}
Итак, основные выводы:
- Необходимо использовать метод HTTP
POST
- URL должен быть действительным
- Вы не указали свой фактический URL, поэтому вам придется проверить его для себяЯ бы избавился от конечного
?
в вашем url
(поскольку вы не включаете строку запроса - и даже если бы вы это сделали, вы должны передать их в поле Query
записи options
вместо построения строки запроса самостоятельно).
- Заголовки (
Authorization
, Accept
, Content-Type
) должны быть действительными / присутствующими. - Построить свои заголовкив разделительном выражении. Затем передайте это выражение в поле
Headers
записи options
. Это дает вам возможность просматривать / проверятьваши заголовки (чтобы убедиться, что они такие, как задумано).
- Тело должно содержать действительный JSON для передачи в метод API.
В целом ваш код 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).