Урок 10. Как использовать API эффективно: ограничения и рекомендации

В этом уроке вы узнаете:

  1. Как узнать, сколько баллов израсходовано и сколько осталось
  2. Как оптимизировать расход баллов
  3. Как отслеживать изменения с помощью сервиса Changes
  4. Задание
  5. Полезные ссылки
  6. Вопросы

В этом уроке мы расскажем, какие ограничения применяются в API Директа и как рационально организовать работу приложения с учетом этих ограничений.

Чтобы регулировать нагрузку на сервер API, применяются различные виды ограничений. От имени одного рекламодателя можно выполнить не более 5 запросов одновременно. В каждом методе предусмотрены лимиты на количество объектов в одном запросе. Кроме того, в API действует система баллов.

Каждому рекламодателю (и агентству) предоставляется индивидуальный суточный лимит баллов. Начисление баллов происходит равномерно в течение суток. Баллы списываются за вызов метода, за изменение или получение каждого объекта, за ошибку в запросе. Нехватка баллов не позволяет выполнять запросы к API.



Как узнать, сколько баллов израсходовано и сколько осталось

В ответе на каждый запрос сервер API передает HTTP-заголовок Units, в котором указано количество баллов:

Units: израсходовано при выполнении запроса/доступный остаток/суточный лимит

Пример ответа
HTTP/1.1 200 OK
Connection:close
Content-Type:application/json
Date:Fri, 28 Jun 2018 17:07:02 GMT
RequestId: 1111111111111111112
Units: 10/20828/64000
Server:nginx
Transfer-Encoding:chunked

{
  "result": {
    ...
  }
}
  • RequestId — идентификатор запроса.
  • Units — количество баллов.
Примечание. Если запрос к API выполняется от имени агентства, по умолчанию расходуются баллы рекламодателя. Однако агентство имеет возможность вместо баллов рекламодателя расходовать собственные баллы.

Как оптимизировать расход баллов

Мы рекомендуем все данные, с которыми работает приложение, хранить в кэше — например, в локальной базе данных. Получив с сервера параметры кампаний, групп, объявлений, ключевых фраз, а также справочники регионов и часовых поясов, вы можете отслеживать их актуальность с помощью методов сервиса Changes. Перед тем как обновлять данные в кэше, следует проверить наличие изменений. Заново получать с сервера нужно только фактически изменившиеся объекты. Таким образом вы сможете уменьшить объем передаваемых данных, ускорить работу приложения и снизить расход баллов.

Как отслеживать изменения с помощью сервиса Changes

1. При первом запуске приложения вызовите в сервисе Changes метод checkDictionaries без параметров. В ответе вы получите параметр Timestamp — текущее время на сервере по UTC.

cURL
curl -k -H "Authorization: Bearer ТОКЕН" -d '{"method":"checkDictionaries","params":{}}' https://api.direct.yandex.com/json/v5/changes
cURL для Windows
curl -k -H "Authorization: Bearer ТОКЕН" -d "{\"method\":\"checkDictionaries\",\"params\":{}}" https://api.direct.yandex.com/json/v5/changes
Запрос
{
  "method": "checkDictionaries",
  "params": { }
}
Ответ
{
  "result": {
    "Timestamp": "2018-06-03T12:48:27Z"
  } 
}

2. Чтобы получить список кампаний, в которых произошли изменения, вызовите метод checkCampaigns. При каждом последующем вызове указывайте значение параметра Timestamp, полученное при предыдущем вызове: это гарантирует непрерывность интервалов для проверки изменений.

cURL
curl -k -H "Authorization: Bearer ТОКЕН" -d '{"method":"checkCampaigns","params":{"Timestamp":"2018-06-03T12:48:27Z"}}' https://api.direct.yandex.com/json/v5/changes
cURL для Windows
curl -k -H "Authorization: Bearer ТОКЕН" -d "{\"method\":\"checkCampaigns\",\"params\":{\"Timestamp\":\"2018-06-03T12:48:27Z\"}}" https://api.direct.yandex.com/json/v5/changes
Запрос
{
  "method": "checkCampaigns",
  "params": {
    "Timestamp": "2018-06-03T12:48:27Z"
  }
}
Ответ
{
  "result": {
    "Timestamp": "2018-07-01T13:11:27Z",
    "Campaigns": [{
      "CampaignId": 136200,
      "ChangesIn": [ "SELF", "CHILDREN" ]
    }, {
      "CampaignId": 136201,
      "ChangesIn": [ "STAT" ]
    }]
  }
}

Метод возвращает идентификаторы кампаний, в которых произошли изменения. В параметре ChangesIn указывается, где произошли изменения:

  • SELF — в параметрах кампании;
  • CHILDREN — в дочерних объектах (группах, объявлениях, фразах);
  • STAT — корректировка статистики кампании (как правило, в связи с фильтрацией недобросовестных кликов).

3. Если метод checkCampaigns показал наличие изменений в дочерних объектах, получите более подробную информацию об изменениях с помощью метода check.

cURL
curl -k -H "Authorization: Bearer ТОКЕН" -d '{"method":"check","params": {"Timestamp":"2018-06-03T12:48:27Z","CampaignIds": [136200],"FieldNames": ["AdGroupIds","AdIds"]}}'  https://api.direct.yandex.com/json/v5/changes
cURL для Windows
curl -k -H "Authorization: Bearer ТОКЕН" -d "{\"method\":\"check\",\"params\": {\"Timestamp\":\"2018-06-03T12:48:27Z\",\"CampaignIds\": [136200],\"FieldNames\": [\"AdGroupIds\",\"AdIds\"]}}" https://api.direct.yandex.com/json/v5/changes
Запрос
{
  "method": "check",
  "params": {
    "CampaignIds": [136200],
    "FieldNames": ["AdGroupIds","AdIds"],
    "Timestamp": "2018-06-03T12:48:27Z"
  }
}
Ответ
{
  "result": {
    "Timestamp": "2018-07-01T13:12:22Z",
    "Modified": {
      "AdGroupIds": [22222222],
      "AdIds": [33333333,33333334]      
    }
  }
}
Внимание. Если метод check показал наличие изменений в группе объявлений (идентификатор группы указан в массиве AdGroupIds), это может означать изменение в параметрах самой группы или в ключевых фразах.

Получите с сервера изменившиеся объекты с помощью методов get соответствующих сервисов — Campaigns, AdGroups, Ads или Keywords.

Задание

  1. Создайте в Песочнице новую кампанию, группу и объявление.
  2. Отправьте объявление на модерацию с помощью метода moderate сервиса Ads.
  3. Получите данные по всем кампаниям.
  4. Получите данные об изменениях по всем кампаниям.
  5. Узнайте с помощью метода check, в каких объявлениях произошли изменения (должен измениться статус объявления, отправленного на модерацию).
  6. Получите заголовки и тексты принятых на модерации объявлений.
  7. Посмотрите, сколько баллов вы потратили на эти запросы.

Все аспекты работы с API Директа подробно описаны в документации.

Желаем успеха!

Вопросы

  1. Сколько одновременных запросов может выполнять приложение от имени одного рекламодателя?
    Неверно.
    Верно!
    Неверно.
    Неверно.
  2. Должно ли приложение учитывать, сколько баллов доступно для пользователя?
    Неверно.
    Верно!
    Неверно.
  3. Какими способами можно оптимизировать расход баллов приложением?
    Неверно.
    Верно!
    Неверно.