Урок 7. Как получать данные через API

В этом уроке мы расскажем о структуре API и рассмотрим несколько примеров получения данных.

Напомним схему взаимосвязи объектов в API Директа, которую мы показывали в первом уроке:

Для каждого класса объектов в API предусмотрен соответствующий сервис: Campaigns — для управления кампаниями, AdGroups — для управления группами объявлений, Ads — для управления объявлениями и т. д. Полный список сервисов приведен в документации.

Логика работы с объектами в API унифицирована, и методы всех сервисов имеют стандартные названия. Как правило, сервис включает следующие методы:

  • add — добавление объектов;
  • update — изменение параметров объектов;
  • delete — удаление объектов;
  • get — получение объектов.

В сервисе могут быть и другие методы. Например, в сервисе Campaigns доступны следующие методы:

Как получать объекты

Давайте рассмотрим, как получить параметры рекламной кампании, используя метод get.

Метод get разработан так, чтобы можно было запрашивать только нужные данные. Например, можно получить только идентификаторы и названия кампаний, а не все их параметры. Имена нужных вам параметров необходимо перечислить во входном параметре FieldNames.

Критерии отбора объектов нужно указать во входной структуре SelectionCriteria. Если критериев отбора несколько, то сервер будет искать объекты, подходящие сразу под все критерии. Некоторые сервисы позволяют указывать пустую структуру SelectionCriteria — в этом случае возвращаются все объекты.

Тренировка в Песочнице

Напомним пример запроса из предыдущего урока. В этом примере мы получили весь список кампаний, указав пустую структуру SelectionCriteria, и для каждой кампании получили только идентификатор и название, указав соответствующие параметры в FieldNames.

Внимание

Не забудьте изменить токен и идентификаторы в примерах на ваши данные.

cURL

    curl -k -H "Authorization: Bearer ТОКЕН" -d '{"method":"get","params":{"SelectionCriteria":{},"FieldNames":["Id","Name"]}}' https://api-sandbox.direct.yandex.com/json/v5/campaigns

cURL для Windows

    curl -k -H "Authorization: Bearer ТОКЕН" -d "{\"method\":\"get\",\"params\":{\"SelectionCriteria\":{},\"FieldNames\":[\"Id\",\"Name\"]}}" https://api-sandbox.direct.yandex.com/json/v5/campaigns

Запрос

    {
      "method": "get",
      "params": {
        "SelectionCriteria": {},
        "FieldNames": ["Id", "Name"]
      }
    }

Ответ

    {
      "result": {
        "Campaigns": [{
          "Name": "Test API Sandbox campaign 1",
          "Id": 1234567
        }, {
          "Name": "Test API Sandbox campaign 2",
          "Id": 1234578
        }, {
          "Name": "Test API Sandbox campaign 3",
          "Id": 1234589
        }]
      }
    }

Некоторые параметры кампании (такие как название и идентификатор) являются общими для всех типов кампаний, а некоторые (например, стратегии показа) зависят от типа кампании. В следующем примере мы получим только кампании с типом “Текстово-графические объявления”. Чтобы получить для таких кампаний стратегии показа, укажем имя соответствующего параметра во входном параметре TextCampaignFieldNames.

cURL

    curl -k -H "Authorization: Bearer ТОКЕН" -d '{"method":"get","params":{"SelectionCriteria":{ "Types": ["TEXT_CAMPAIGN"]},"FieldNames":["Id","Name"],"TextCampaignFieldNames":["BiddingStrategy"]}}' https://api-sandbox.direct.yandex.com/json/v5/campaigns

cURL для Windows

    curl -k -H "Authorization: Bearer ТОКЕН" -d "{\"method\":\"get\",\"params\":{\"SelectionCriteria\":{ \"Types\": [\"TEXT_CAMPAIGN\"]},\"FieldNames\":[\"Id\",\"Name\"],\"TextCampaignFieldNames\":[\"BiddingStrategy\"]}}" https://api-sandbox.direct.yandex.com/json/v5/campaigns

Запрос

    {
      "method": "get",
      "params": {
        "SelectionCriteria": {
          "Types": ["TEXT_CAMPAIGN"]
        },
        "FieldNames": ["Id", "Name"],
        "TextCampaignFieldNames": ["BiddingStrategy"]
      }
    }

Ответ

    {
      "result": {
        "Campaigns": [{
          "Id": 1234567,
          "Name": "Test API Sandbox campaign 1",
          "TextCampaign": {
            "BiddingStrategy": {
              "Search": {
                "BiddingStrategyType": "HIGHEST_POSITION"
              }, 
              "Network": {
                "BiddingStrategyType":"NETWORK_DEFAULT",
                "NetworkDefault": {
                  "LimitPercent": 100
                }
              } 
            }
          }
        }]
      }
    }

Постраничная выборка

Если вы работаете с большими массивами данных, все объекты могут не уместиться в ответе на один запрос, так как метод get возвращает не более 10 000 объектов. В этом случае метод get возвращает параметр LimitedBy — порядковый номер последнего возвращенного объекта. Наличие этого параметра указывает, что не все объекты получены.

Настроить параметры постраничной выборки можно с помощью входной структуры Page. Укажите количество нужных объектов — например, 10 — и количество объектов, которое должно быть пропущено при выборке, — например, 20, — и вы получите порцию данных: 10 объектов с 21-го по 30-й.

Задание

Мы подготовили несколько примеров и для других сервисов. Попробуйте воспроизвести эти запросы в Песочнице.

Сервис AdGroups

Получение списка групп объявлений кампании.

{% cut "cURL" %}
    curl -k -H "Authorization: Bearer ТОКЕН" -d '{"method":"get","params":{"SelectionCriteria":{"CampaignIds":[ИДЕНТИФИКАТОР_КАМПАНИИ]},"FieldNames":["Id","Name","Status","Type"]}}' https://api-sandbox.direct.yandex.com/json/v5/adgroups
{% endcut %}

{% cut "cURL для Windows" %}
    curl -k -H "Authorization: Bearer ТОКЕН" -d "{\"method\":\"get\",\"params\":{\"SelectionCriteria\":{\"CampaignIds\":[ИДЕНТИФИКАТОР_КАМПАНИИ]},\"FieldNames\":[\"Id\",\"Name\",\"Status\",\"Type\"]}}" https://api-sandbox.direct.yandex.com/json/v5/adgroups
{% endcut %}

{% cut "Запрос" %}
    {
      "method": "get",
      "params": {
        "SelectionCriteria": {
          "CampaignIds": [ИДЕНТИФИКАТОР_КАМПАНИИ]
        },
        "FieldNames": ["Id", "Name", "Status", "Type"]
      }
    }
{% endcut %}

{% cut "Ответ" %}
    {
      "result": {
        "AdGroups": [{
          "Status": "ACCEPTED",
          "Name": "Группа №1296502",
          "Id": 1296502,
          "Type": "TEXT_AD_GROUP"
        }, {
          "Name": "Группа №1296517",
          "Status": "DRAFT",
          "Id": 1296517,
          "Type": "TEXT_AD_GROUP"
        }]
      }
    }
{% endcut %}

Сервис Ads

Получение списка объявлений группы.

{% cut "cURL" %}
    curl -k -H "Authorization: Bearer ТОКЕН" -d '{"method":"get","params":{"SelectionCriteria":{"AdGroupIds":[ИДЕНТИФИКАТОР_ГРУППЫ]},"FieldNames":["Id","State","Status","Type"]}}'  https://api-sandbox.direct.yandex.com/json/v5/ads
{% endcut %}

{% cut "cURL для Windows" %}
    curl -k -H "Authorization: Bearer ТОКЕН" -d "{\"method\":\"get\",\"params\":{\"SelectionCriteria\":{\"AdGroupIds\":[ИДЕНТИФИКАТОР_ГРУППЫ]},\"FieldNames\":[\"Id\",\"State\",\"Status\",\"Type\"]}}" https://api-sandbox.direct.yandex.com/json/v5/ads
{% endcut %}

{% cut "Запрос" %}
    {
      "method": "get",
      "params": {
        "SelectionCriteria": {
          "AdGroupIds": [ИДЕНТИФИКАТОР_ГРУППЫ]
        },
        "FieldNames": ["Id", "State", "Status", "Type"]
      }
    }
{% endcut %}

{% cut "Ответ" %}
    {
      "result": {
        "Ads": [{
          "State": "ON",
          "Id": 1381459,
          "Status": "ACCEPTED",
          "Type": "TEXT_AD"
        }, {
          "Type": "TEXT_AD",
          "Status": "DRAFT",
          "Id": 1381470,
          "State": "OFF"
        }]
      }
    }
{% endcut %}



Получение параметров одного объявления.



{% cut "cURL" %}
    curl -k -H "Authorization: Bearer ТОКЕН" -d '{"method":"get","params":{"SelectionCriteria":{"Ids":[ИДЕНТИФИКАТОР_ОБЪЯВЛЕНИЯ]},"FieldNames":["Id"],"TextAdFieldNames":["Text","Title","Href","VCardId"]}}' https://api-sandbox.direct.yandex.com/json/v5/ads
{% endcut %}

{% cut "cURL для Windows" %}
    curl -k -H "Authorization: Bearer ТОКЕН" -d "{\"method\":\"get\",\"params\":{\"SelectionCriteria\":{\"Ids\":[ИДЕНТИФИКАТОР_ОБЪЯВЛЕНИЯ]},\"FieldNames\":[\"Id\"],\"TextAdFieldNames\":[\"Text\",\"Title\",\"Href\",\"VCardId\"]}}" https://api-sandbox.direct.yandex.com/json/v5/ads
{% endcut %}

{% cut "Запрос" %}
    {
      "method": "get",
      "params": {
        "SelectionCriteria": {
          "Ids": [1381459]
        },
        "FieldNames": ["Id"],
        "TextAdFieldNames": ["Text", "Title", "Href", "VCardId"]
      }
    }
{% endcut %}

{% cut "Ответ" %}
    {
      "result": {
        "Ads": [{
          "Id": 1381459,
          "TextAd": {
            "Title": "Test sandbox banner 5",
            "Href": "http://www.yandex.ru",
            "VCardId": 171518,
            "Text": "Test sandbox banner 5 text"
          }
        }]
      }
    }
{% endcut %}

Сервис Keywords

Получение ключевых фраз группы объявлений.

{% cut "cURL" %}
    curl -k -H "Authorization: Bearer ТОКЕН" -d '{"method":"get","params":{"SelectionCriteria":{"AdGroupIds":[ИДЕНТИФИКАТОР_ГРУППЫ]},"FieldNames":["Id","Keyword","Bid","State","Status"]}}' https://api-sandbox.direct.yandex.com/json/v5/keywords
{% endcut %}

{% cut "cURL для Windows" %}
    curl -k -H "Authorization: Bearer ТОКЕН" -d "{\"method\":\"get\",\"params\":{\"SelectionCriteria\":{\"AdGroupIds\":[ИДЕНТИФИКАТОР_ГРУППЫ]},\"FieldNames\":[\"Id\",\"Keyword\",\"Bid\",\"State\",\"Status\"]}}" https://api-sandbox.direct.yandex.com/json/v5/keywords
{% endcut %}

{% cut "Запрос" %}
    {
      "method": "get",
      "params": {
        "SelectionCriteria": {
          "AdGroupIds": [1296506]
        },
        "FieldNames": ["Id", "Keyword", "Bid", "State", "Status"]
      }
    }
{% endcut %}

{% cut "Ответ" %}
    {
      "result": {
        "Keywords": [{
          "State": "ON",
          "Keyword": "test keyword 5.1",
          "Status": "ACCEPTED",
          "Bid": 7700000,
          "Id": 3458327
        }, {
          "Keyword": "Новая фраза",
          "Id": 3458351,
          "Bid": 400000,
          "Status": "ACCEPTED",
          "State": "ON"
        }]
      }
    }
{% endcut %}

Что дальше

Итак, вы научились работать с методом get. В следующем уроке мы рассмотрим принципы работы методов, изменяющих данные.