Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
В этом документе указаны некоторые коды ошибок и сообщения о них, получаемые от API Google. В список включены те ошибки, которые относятся к глобальному (используемому по умолчанию) домену для API Google. Многие API также определяют собственные домены, в которых могут быть свои ошибки, отсутствующие в глобальном домене. У таких ошибок в ответе JSON будет указано значение свойства domain
, относящееся к конкретному API, например youtube.parameter
.
На этой странице перечислены ошибки, систематизированные по кодам статуса HTTP, определения которых приведены в спецификации RFC 7231.
Вот пример ответа JSON, передающего информацию об ошибке, относящейся к глобальному домену:
{ "error": { "errors": [ { "domain": "global", "reason": "invalidParameter", "message": "Invalid string value: 'asdf'. Allowed values: [mostpopular]", "locationType": "parameter", "location": "chart" } ], "code": 400, "message": "Invalid string value: 'asdf'. Allowed values: [mostpopular]" } }
Ошибки
- MOVED_PERMANENTLY (301)
- SEE_OTHER (303)
- NOT_MODIFIED (304)
- TEMPORARY_REDIRECT (307)
- BAD_REQUEST (400)
- UNAUTHORIZED (401)
- PAYMENT_REQUIRED (402)
- FORBIDDEN (403)
- NOT_FOUND (404)
- METHOD_NOT_ALLOWED (405)
- CONFLICT (409)
- GONE (410)
- PRECONDITION_FAILED (412)
- REQUEST_ENTITY_TOO_LARGE (413)
- REQUESTED_RANGE_NOT_SATISFIABLE (416)
- EXPECTATION_FAILED (417)
- PRECONDITION_REQUIRED (428)
- TOO_MANY_REQUESTS (429)
- INTERNAL_SERVER_ERROR (500)
- NOT_IMPLEMENTED (501)
- SERVICE_UNAVAILABLE (503)
MOVED_PERMANENTLY (301)
Код ошибки | Описание |
---|---|
movedPermanently |
Запрос был отправлен на URL, который больше нельзя использовать. Все запросы для той же операции теперь необходимо отправлять на URL, указанный в заголовке Location полученного ответа. |
SEE_OTHER (303)
Код ошибки | Описание |
---|---|
seeOther |
Запрос успешно обработан. Чтобы получить ответ, отправьте запрос GET на URL, указанный в заголовке Location . |
mediaDownloadRedirect |
Запрос успешно обработан. Чтобы получить ответ, отправьте запрос GET на URL, указанный в заголовке Location . |
NOT_MODIFIED (304)
Код ошибки | Описание |
---|---|
notModified |
Условие, заданное для заголовка If-None-Match, не было выполнено. Этот ответ означает, что запрошенный документ не был изменен и что должен быть получен кешированный ответ. Проверьте значение заголовка If-None-Match в HTTP-запросе. |
TEMPORARY_REDIRECT (307)
Код ошибки | Описание |
---|---|
temporaryRedirect |
Чтобы ваш запрос был обработан, повторно отправьте его на URL, указанный в заголовке Location этого ответа. |
BAD_REQUEST (400)
Код ошибки | Описание |
---|---|
badRequest |
Запрос к API недействителен или неправильно сформирован. Поэтому сервер API не может его распознать. |
badBinaryDomainRequest |
Двоичный запрос к домену недействителен. |
badContent |
Тип данных запроса или тип контента части пакетного запроса не поддерживается. |
badLockedDomainRequest |
Запрос к заблокированному домену недействителен. |
corsRequestWithXOrigin |
Запрос CORS содержит заголовок X-Origin XD3, то есть этот запрос составлен неправильно. |
endpointConstraintMismatch |
Обработать запрос не удалось, так как он не соответствует указанному API. Убедитесь, что вы указали правильный URL. |
invalid |
Обработать запрос не удалось, так как он содержал недопустимое значение. Это может быть значение параметра, заголовка или свойства. |
invalidAltValue |
В значении параметра alt указан неизвестный формат вывода. |
invalidHeader |
Обработать запрос не удалось, так как он содержал недопустимый заголовок. |
invalidParameter |
Обработать запрос не удалось, так как он содержал недопустимый параметр или значение параметра. Чтобы определить, какие параметры можно использовать для запроса, изучите документацию API. |
invalidQuery |
Запрос недействителен. Узнайте, какие параметры можно использовать для запроса, и убедитесь, что запрос не содержит недопустимую комбинацию параметров или недействительные значения параметров. Для этого изучите документацию API. Проверьте значение параметра q . |
keyExpired |
Срок действия ключа API, указанного в запросе, истек. Это означает, что сервер API не может проверить лимит квоты для приложения, отправляющего запрос. Чтобы узнать больше или получить новый ключ, перейдите в Google Developers Console. |
keyInvalid |
Указанный в запросе ключ API недействителен. Это означает, что сервер API не может проверить лимит квоты для приложения, отправляющего запрос. Попробуйте найти ключ с помощью Google Developers Console или получите новый. |
lockedDomainCreationFailure |
Токен OAuth был получен в строке запроса. API запрещает это для всех форматов ответа, кроме JSON и XML. Попробуйте отправить токен OAuth в заголовке Authorization. |
notDownload |
На URL типа /download/* могут быть отправлены только запросы на скачивание мультимедиа. Отправьте запрос на тот же адрес, но без префикса /download . |
notUpload |
На URI с префиксом /upload/* можно отправлять только запросы на загрузку. Ваш запрос не относится к их числу, поэтому обработать его не удалось. Отправьте запрос на тот же адрес, но без префикса /upload . |
parseError |
Сервер API не может обработать тело запроса. |
required |
В запросе отсутствует обязательная информация. Возможно, это параметр или свойство ресурса. |
tooManyParts |
Обработать пакетный запрос не удалось, так как в нем слишком много частей. |
unknownApi |
API, к которому обращается запрос, не распознан. |
unsupportedMediaProtocol |
Медиапротокол клиента не поддерживается. |
unsupportedOutputFormat |
В значении параметра alt указан формат вывода, который не поддерживается этим сервисом. Проверьте значение параметра запроса alt . |
wrongUrlForUpload |
Обработать запрос на загрузку не удалось из-за неправильного URI. Такие запросы можно отправлять только на URI с префиксом /upload/* . Отправьте запрос на тот же адрес, но с префиксом /upload . |
Код ошибки | Описание |
---|---|
unauthorized |
У пользователя нет прав для выполнения этого запроса. |
authError |
Для запроса указаны неправильные учетные данные. Проверьте значение заголовка Authorization в HTTP-запросе. |
expired |
Время сеанса истекло. Проверьте значение заголовка Authorization в HTTP-запросе. |
lockedDomainExpired |
Обработать запрос не удалось, так как истек срок действия заблокированного домена. |
required |
Для выполнения этого запроса к API пользователю необходимо войти в систему. Проверьте значение заголовка Authorization в HTTP-запросе. |
PAYMENT_REQUIRED (402)
Код ошибки | Описание |
---|---|
dailyLimitExceeded402 |
Достигнут дневной лимит бюджета, установленный разработчиком. |
quotaExceeded402 |
Для запрошенной операции необходимо больше ресурсов, чем доступно по квоте. Чтобы выполнить эту операцию, требуется платеж. |
user402 |
Чтобы выполнить запрошенную операцию, требуется платеж от аутентифицированного пользователя. |
FORBIDDEN (403)
Код ошибки | Описание |
---|---|
forbidden |
Запрошенная операция запрещена, и ее нельзя завершить. |
accessNotConfigured |
Для вашего проекта не настроен доступ к этому API. Активируйте API для проекта в Google Developers Console. |
accessNotConfigured |
Проект заблокирован из-за нарушения правил. См. http://support.google.com/code/go/developer_compliance. |
accessNotConfigured |
Проект подлежит удалению. |
accountDeleted |
Аккаунт, связанный с указанными в запросе учетными данными, был удален. Проверьте значение заголовка Authorization в HTTP-запросе. |
accountDisabled |
Аккаунт, связанный с указанными в запросе учетными данными, был отключен. Проверьте значение заголовка Authorization в HTTP-запросе. |
accountUnverified |
Адрес электронной почты пользователя, делающего запрос, не подтвержден. Проверьте значение заголовка Authorization в HTTP-запросе. |
concurrentLimitExceeded |
Обработать запрос не удалось, так как достигнут лимит параллельных соединений. |
dailyLimitExceeded |
Достигнут ежедневный лимит квоты для API. |
dailyLimitExceeded |
Достигнут ежедневный лимит квоты, и проект заблокирован из-за нарушения правил. Подробную информацию можно найти на форуме поддержки по правилам API Google. |
dailyLimitExceededUnreg |
Обработать запрос не удалось, так как достигнут предел анонимного использования API в день. Чтобы продолжить работу с API, войдите в Google Developers Console. |
downloadServiceForbidden |
API не поддерживает скачивание. |
insufficientAudience |
Запрос не может быть выполнен для этой аудитории. |
insufficientAuthorizedParty |
Запрос не может быть выполнен для этого приложения. |
insufficientPermissions |
У аутентифицированного пользователя недостаточно прав для выполнения этого запроса. |
limitExceeded |
Запрос нельзя выполнить из-за ограничений по доступу или частоте. |
lockedDomainForbidden |
API не поддерживает заблокированные домены. |
quotaExceeded |
Для запрошенной операции необходимо больше ресурсов, чем доступно по квоте. |
rateLimitExceeded |
В течение определенного промежутка времени было отправлено слишком много запросов. |
rateLimitExceededUnreg |
Превышен лимит частоты запросов. Чтобы продолжить использование API, зарегистрируйте приложение. Для этого создайте аккаунт, используя Google Developers Console. |
responseTooLarge |
Невозможно получить запрошенный ресурс, так как его размер слишком велик. |
servingLimitExceeded |
Достигнут лимит на частоту запросов для этого API. |
sslRequired |
Эта операция возможна только с применением SSL. |
unknownAuth |
Сервер API не распознает схему авторизации, используемую для запроса. Проверьте значение заголовка Authorization в HTTP-запросе. |
userRateLimitExceeded |
Обработать запрос не удалось, так как частота запросов от этого пользователя превышает допустимую. |
userRateLimitExceededUnreg |
Обработать запрос не удалось, так как достигнут предел частоты запросов от этого пользователя и в запросе не указан разработчик клиента. Создайте проект для вашего приложения в Google Developer Console (https://console.developers.google.com). |
variableTermExpiredDailyExceeded |
Обработать запрос не удалось, так как истек срок действия временной квоты и была исчерпана стандартная дневная. |
variableTermLimitExceeded |
Обработать запрос не удалось, так как была исчерпана временная квота, действующая в указанный период. |
NOT_FOUND (404)
Код ошибки | Описание |
---|---|
notFound |
Не удалось выполнить операцию, так как не найден ресурс, указанный в запросе. |
notFound |
Не найден ресурс, указанный в запросе. Если вы не пользовались этим API в последние две недели, выполните повторное развертывание приложения App Engine и попробуйте вызвать API ещё раз. |
unsupportedProtocol |
Не поддерживается протокол, используемый в запросе. |
METHOD_NOT_ALLOWED (405)
Код ошибки | Описание |
---|---|
httpMethodNotAllowed |
Не поддерживается метод HTTP, связанный с запросом. |
CONFLICT (409)
Код ошибки | Описание |
---|---|
conflict |
Не удалось выполнить запрос к API, так как запрошенная операция может вызвать конфликт с уже существующим объектом. Например, это случается, если запрашивается создание повторяющегося элемента, однако при таких конфликтах, как правило, ошибки диагностируются более конкретно. |
duplicate |
Не удалось выполнить запрошенную операцию, так как она требует создания уже существующего ресурса. |
GONE (410)
Код ошибки | Описание |
---|---|
deleted |
Обработать запрос не удалось, так как указанный в нем ресурс был удален. |
PRECONDITION_FAILED (412)
Код ошибки | Описание |
---|---|
conditionNotMet |
Не было выполнено условие, заданное для заголовка If-Match или If-None-Match в HTTP-запросе. Чтобы узнать больше, прочитайте раздел ETag спецификации HTTP. Проверьте значение заголовка If-Match . |
REQUEST_ENTITY_TOO_LARGE (413)
Код ошибки | Описание |
---|---|
backendRequestTooLarge |
Слишком большой запрос. |
batchSizeTooLarge |
Пакетный запрос содержит слишком много элементов. |
uploadTooLarge |
Обработать запрос не удалось, так как в нем слишком много данных. |
REQUESTED_RANGE_NOT_SATISFIABLE (416)
Код ошибки | Описание |
---|---|
requestedRangeNotSatisfiable |
В запросе указан недопустимый диапазон. |
EXPECTATION_FAILED (417)
Код ошибки | Описание |
---|---|
expectationFailed |
Сервер не может выполнить запрос клиента. |
PRECONDITION_REQUIRED (428)
Код ошибки | Описание |
---|---|
preconditionRequired |
Запрос должен содержать условие. Укажите в запросе заголовки If-Match или If-None-Match , чтобы он был успешно обработан. |
TOO_MANY_REQUESTS (429)
Код ошибки | Описание |
---|---|
rateLimitExceeded |
В течение определенного промежутка времени отправлено слишком много запросов. |
INTERNAL_SERVER_ERROR (500)
Код ошибки | Описание |
---|---|
internalError |
Не удалось обработать запрос из-за внутренней ошибки. |
NOT_IMPLEMENTED (501)
Код ошибки | Описание |
---|---|
notImplemented |
Запрошенная операция не была реализована. |
unsupportedMethod |
Обработать запрос не удалось, так как для этого необходимо выполнить неизвестный метод или операцию. |
SERVICE_UNAVAILABLE (503)
Код ошибки | Описание |
---|---|
backendError |
Произошла ошибка серверного кода. |
backendNotConnected |
Обработать запрос не удалось из-за ошибки подключения. |
notReady |
Сервер API не готов принимать запросы. |
Ошибки, связанные непосредственно с Indexing API
Во всех описанных ниже ситуациях запрос отклоняется, а Googlebot не сканирует соответствующий URL. То же происходит в случае основных ошибок.
BAD_REQUEST (400)
Сообщение об ошибке | Описание |
---|---|
Missing attribute. 'url' attribute is required. |
Пользователь не указал URL в запросе. |
Invalid attribute. 'url' is not in standard URL format |
Пользователь ввел некорректный URL, например «abcd». |
Unknown type. 'type' attribute is required and must be 'URL_REMOVED' or 'URL_UPDATED'. |
Пользователь не указал тип уведомления. |
Invalid value at 'url_notification.type' (TYPE_ENUM) |
Пользователь указал в типе уведомления не URL_REMOVED или URL_UPDATED , а другое значение. |
FORBIDDEN (403)
Сообщение об ошибке | Описание |
---|---|
Permission denied. Failed to verify the URL ownership. |
Пользователь не прошел процедуру подтверждения права собственности или пытается обновить URL, который ему не принадлежит. |
TOO_MANY_REQUESTS (429)
Сообщение об ошибке | Описание |
---|---|
Insufficient tokens for quota 'indexing.googleapis.com/default_requests' |
Пользователь исчерпал свою квоту Indexing API. |
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons «С указанием авторства 4.0», а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2023-02-22 UTC.
I am making a call to the google indexing API for job postings:
private $client;
private $httpClient;
public function initClient($kernel)
{
$this->client = new Google_Client();
$this->client->setAuthConfig(JSON_KEY_HERE);
$this->client->addScope('https://www.googleapis.com/auth/indexing');
$this->httpClient = $this->client->authorize();
}
public function sendJob()
{
$endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish';
$content = "{
"url": "URL_HERE",
"type": "URL_UPDATED"
}";
$response = $this->httpClient->post($endpoint, array('body' => $content));
}
When making the call to the API, the response given is ‘403 — Forbidden’
.
Any ideas what this error actually means? I have created the service account correctly but cannot replicate success from my dev enviroment.
tehhowch
9,6074 gold badges24 silver badges42 bronze badges
asked Jul 19, 2018 at 15:52
4
After couple days of headache, here is the answer. Open your Google search console.
Prerequisite: You must already have a google service account
click the tri dot button, and click manage property owners:
add google service account email as new owners:
U13-Forward
68.5k14 gold badges87 silver badges109 bronze badges
answered Feb 12, 2020 at 9:05
kopikopi
1592 silver badges4 bronze badges
«Make sure that you have added the service account as an Owner in Google Search Console»
Yep. Use the following code snippet to examine the body response for a more detailed error msg.
var body = result.Content.ReadAsStringAsync().Result;
if the error msg looks like the following, then this is the same problem.
«message»: «Permission denied. Failed to verify the URL ownership.»
Worth noting: The new version of the search console is lacking. At the bottom of the left-hand menu is a «go to the old version» link. Click this and then select «verification details» from the gear menu (upper right). Next, click on the link that says «verification details» (seriously!). Here, you will finally see a list of verified owners at the bottom of the page. You can add a new owner here, using the email address of your service account (addr can also be found in your json key file).
answered Nov 8, 2018 at 1:51
JM.JM.
67812 silver badges23 bronze badges
5
Adding to @Glennstar’s comment and @JMs reply there is no longer the old version link (perhaps I never had the old version) but if you click the 3 vertical dots to the right of user owner ‘(you)’ and select ‘manage property owners’ then on the next page click each of the ‘verification details’ links to the right of your domain variations (example.com, http://www.example.com, https://www.example.com etc or whatever you have) and add the owner ie paste in the gserviceaccount.com email address from the json it will then say ownership delegated by current owner to that email address as well.
Once status of that email address had changed from ‘full’ permission to ‘owner’ back on the search console page I could then run the call fine and the original 403 error about being unable to verify URL ownership was gone. Thanks guys, would have been clueless without this.
answered Apr 23, 2019 at 9:09
edindubaiedindubai
1511 silver badge8 bronze badges
Make sure that you have added the service account as an Owner in Google Search Console as described here: https://developers.google.com/search/apis/indexing-api/v3/prereqs#verify-site.
My problem was that we had multiple entries for the domain in the Search Console (with and without www and with and without https); after adding the service account as an owner to all 4 entries it’s working.
answered Aug 2, 2018 at 15:26
MarcGuayMarcGuay
7188 silver badges14 bronze badges
I struggled with this today the whole day… the solution was that i forgot to activate the indexer api in the google cloud console.
answered May 16, 2022 at 18:07
HackRebHackReb
1091 silver badge5 bronze badges
I’m trying to use the Google Indexing API using the PHP client library.
This is my code:
$client = new Google_Client();
//use the private key that we created for our service account.
$client->setAuthConfig(storage_path('google_auth_config.json')); //this works
$client->addScope('https://www.googleapis.com/auth/indexing');
// Get a Guzzle HTTP Client
$httpClient = $client->authorize();
$endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish';
$content = '{
"url": "https://myverifieddomain.com/url",
"type": "URL_UPDATED"
}';
$response = $httpClient->post($endpoint, [ 'body' => $content ]);
$status_code = $response->getStatusCode();
The auth part works.
However, the $status_code
I get is 403. Here’s the full $response
:
object(GuzzleHttpPsr7Response)#2233 (6) {
["reasonPhrase":"GuzzleHttpPsr7Response":private]=>
string(9) "Forbidden"
["statusCode":"GuzzleHttpPsr7Response":private]=>
int(403)
["headers":"GuzzleHttpPsr7Response":private]=>
array(11) {
["Vary"]=>
array(3) {
[0]=>
string(8) "X-Origin"
[1]=>
string(7) "Referer"
[2]=>
string(22) "Origin,Accept-Encoding"
}
["Content-Type"]=>
array(1) {
[0]=>
string(31) "application/json; charset=UTF-8"
}
["Date"]=>
array(1) {
[0]=>
string(29) "Fri, 24 Jun 2022 10:26:02 GMT"
}
["Server"]=>
array(1) {
[0]=>
string(3) "ESF"
}
["Cache-Control"]=>
array(1) {
[0]=>
string(7) "private"
}
["X-XSS-Protection"]=>
array(1) {
[0]=>
string(1) "0"
}
["X-Frame-Options"]=>
array(1) {
[0]=>
string(10) "SAMEORIGIN"
}
["X-Content-Type-Options"]=>
array(1) {
[0]=>
string(7) "nosniff"
}
["Alt-Svc"]=>
array(1) {
[0]=>
string(162) "h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43""
}
["Accept-Ranges"]=>
array(1) {
[0]=>
string(4) "none"
}
["Transfer-Encoding"]=>
array(1) {
[0]=>
string(7) "chunked"
}
}
["headerNames":"GuzzleHttpPsr7Response":private]=>
array(11) {
["vary"]=>
string(4) "Vary"
["content-type"]=>
string(12) "Content-Type"
["date"]=>
string(4) "Date"
["server"]=>
string(6) "Server"
["cache-control"]=>
string(13) "Cache-Control"
["x-xss-protection"]=>
string(16) "X-XSS-Protection"
["x-frame-options"]=>
string(15) "X-Frame-Options"
["x-content-type-options"]=>
string(22) "X-Content-Type-Options"
["alt-svc"]=>
string(7) "Alt-Svc"
["accept-ranges"]=>
string(13) "Accept-Ranges"
["transfer-encoding"]=>
string(17) "Transfer-Encoding"
}
["protocol":"GuzzleHttpPsr7Response":private]=>
string(3) "1.1"
["stream":"GuzzleHttpPsr7Response":private]=>
object(GuzzleHttpPsr7Stream)#2221 (7) {
["stream":"GuzzleHttpPsr7Stream":private]=>
resource(767) of type (stream)
["size":"GuzzleHttpPsr7Stream":private]=>
NULL
["seekable":"GuzzleHttpPsr7Stream":private]=>
bool(true)
["readable":"GuzzleHttpPsr7Stream":private]=>
bool(true)
["writable":"GuzzleHttpPsr7Stream":private]=>
bool(true)
["uri":"GuzzleHttpPsr7Stream":private]=>
string(10) "php://temp"
["customMetadata":"GuzzleHttpPsr7Stream":private]=>
array(0) {
}
}
}
I’ve enabled the API as instructed here.
The service account is added as an owner as instructed here.
I have no idea what else I can do. The error message doesn’t appear to have any additional information.
Search Console Help
Sign in
Google Help
- Help Center
- Community
- Search Console
- Privacy Policy
- Terms of Service
- Submit feedback
Send feedback on…
This help content & information
General Help Center experience
- Help Center
- Community
Search Console
Долгое время головной болью вебмастеров было уведомление Google о том, что какие-то странички на их сайте появились или исчезли. Теперь тихо и без особых фанфар появилась такая фича, как Google Indexing API. Сам Google сообщает
Цитата:
На данный момент Google Indexing API может сканировать страницы с структурированными данными JobPosting или BroadcastEvent, которые встроены в VideoObject
Фактически же это хорошая замена канувшим уже в лету и плохо работающим пингерам, которые я все равно еще не отключал… Приходит бот и ладно…
Но, вернемся к Google Indexing API.
Во-первых, подчеркну, что работает API для всех страниц. По крайней мере, у меня никаких JobPosting нет, только Article, но странички заходят влет.
Во-вторых, не ожидайте напихать в индекс мусор. Бот придет, страничку подберет, а потом может и выкинуть. Все правила, распространяющиеся на запрос индексации в консоли, распространяются и на API.
Вот основная справка:
Да, от sitemap отказываться все равно не рекомендую. Не путайтесь, что вам там рассказывают по ссылке выше.
Необходимо создать проект и сервисную учетку. Она будет конских размеров и к вашему емейлу отношения иметь не будет. Да, на учетках GSuite все тоже замечательно работает. В смысле, что авторизоваться для настройки всего этого счастья можно и из под GSuite-учетки. Я когда упирался, собирался уже найти свою старую гугловую учетку, вот это делать не надо.
Создадите учетку, главное, что нужно сделать — получить JSON-файлик этой самой учетки и, 100 раз подчеркиваю, учетку добавить в Search Console, как владельца(!) не полную, а именно владельца. Иначе Google Indexing API будет выдавать вам ошибку 403, доводя до отчаяния и матов, как меня.
Все описания, которые сейчас есть в интернете, описывают, как добавить владельца в старой версии консоли. Я решил этот квест за вас. Заходите в , но не спешите жмакать в «Добавить пользователя». У вас есть владелец уже в списке, вот тыкайте в три точки справа от надписи «Владелец»
это как раз то, что вам нужно. Вот в том разделе и добавьте делегированного владельца, ту сервисную учетку, которую вы завели раньше.
Дальше все достаточно просто, кидаете себе на хост где-то файлик (я использую PHP, соответственно, файлик брал на этом языке)
Код:
require_once 'google-api-php-client/vendor/autoload.php'; $client = new Google_Client(); // service_account_file.json is the private key that you created for your service account. $client->setAuthConfig('service_account_file.json'); $client->addScope('https://www.googleapis.com/auth/indexing'); // Get a Guzzle HTTP Client $httpClient = $client->authorize(); $endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish'; // Define contents here. The structure of the content is described in the next step. $content = '{ "url": "https://olegon.ru", "type": "URL_UPDATED" }'; $response = $httpClient->post($endpoint, [ 'body' => $content ]); $status_code = $response->getStatusCode();
Кто бы что ни придумывал, на HTTPS ресурсы работают замечательно. В setAuthConfig укажете путь к файлику, который вы получили раньше, при заведении сервисной учетки. Все, больше ничего не надо. Можете $status_code себе выводить на первое время. Никакие приседания и дополнительные авторизации не требуются, в т.ч. через Oauth2, как я сначала искал. В $status_code должно быть 200, если заявка на индексирование принята.
Некоторый геморрой я получил при попытке зацепить библиотечку на которой вышеуказанный пример работает. Дело в том, что на данный момент релизнулась версия 2.6, однако, к моему удивлению, ни git clone, ни прямое скачивание по линкам исходников версии не давали полный комплект файлов. Все время чего-то не хватало. Так вот, чтобы хватало, берите 2.5 и конкретно файл google-api-php-client-2.5.0.zip оттуда, а не исходники.
Необходимо упомянуть, что я еще включил API в консоли точно не могу сказать, что это обязательно. Однако, включил и с этим работает. Заодно и позволяет видеть, что оно работает.
Задавайте вопросы, если что-то не описал, поправляйте…