Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
7 лет назад

Использование API Яндекс.Директ на базе фреймворка Yii2

Решая ежедневные задачи, приходит желание их автоматизировать, ведь в какой-то степени программисты люди немного ленивые. Вот и у меня был такой случай. Работаю над несколькими сайтами фирмы и стоит такая задача: добавлять порядка десяти товарных позиций на сайт, в Я.Директ и AdWords. Перед собой поставил задачу. Реализовать добавление в сервисы контекстной рекламы объявления при добавление товаров на сайт.

Начну описывать этот процесс с работы API Я.Директ. Для этого нам необходим аккаунт на Яндексе.
В первую очередь нам необходимо создать приложение. Переходим по ссылке. Введёте название приложения, права и CallBack URL — это необходимый минимум.
Права выбираете «Яндекс.Директ» - ставите галочку «Использование API Яндекс.Директа».
В Callback Url нажимаете ссылку - «Подставить URL для разработки»
Нажимаете «Сохранить»

Переходите по ссылке и нажимаете «Новая заявка» - «Тестовый доступ». Отвечаете на вопросы, который задаёт «Яндекс», нажимаете «Отправить» и ждите когда статус будет «Одобрена».

Дальше необходимо получить токен. Идём по ссылке - https://oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения>

Идентификатор приложения - id вашего приложения, узнать его можно по ссылке.

Для получения токена разрешите доступ. Далее откроется страница с токеном. Скопируйте его и сохраните.

Далее начнётся сама разработка. Хочу отметить сразу. В тестовом режиме вы можете работать только с тестовой средой Я.Директа. То есть в реальных объявлениях добавленных Вами кампаний, групп и объявлений не увидите.

Я работы с API я создал класс ApiDirect унаследованный от класса yii\base\Component;
Работаю в yii2 поэтому создал его в папке common/components.

Создал публичные переменные token, login, url, region и company.

public $token = 'AQAAAAAVq6T0AXieFCV2LEZclMc_*******';
public $login = 'login_on_yandex';
public $url = 'https://api-sandbox.direct.yandex.com/json/v5';
public $company = 239001;
public $region = 225;

Url — хранит неизменямую часть url к api.
Region — регион показа объявлений, у меня указана Россия
Рассмотрим весь код на примере двух классов.

Этот метод общий. Его будем использовать во всех методах, передавая массив с параметрами и нужным url.

public function Request($params = [], $url)
{
    // HTTP-заголовки
    $headers = array(
        "Authorization: Bearer $this->token",                   // OAuth-токен. Использование слова Bearer обязательно
        "Client-Login: $this->login",                     // Логин клиента рекламного агентства
        "Accept-Language: ru",                            // Язык ответных сообщений
        "Content-Type: application/json; charset=utf-8"   // Тип данных и кодировка запроса
    );
    $body = json_encode($params, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);// преобразуем массив параметров в формат json.
    //отправляем данные с помощью curl.
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, true);
    curl_setopt($curl, CURLINFO_HEADER_OUT, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    //записываем в переменную полученный ответ
    $r = curl_exec($curl);
    //получаем размер ответа hrader
    $responseHeadersSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
    //вырезаем всю информацию о HTTP-заголовках
    $responseHeaders = substr($r, 0, $responseHeadersSize);
    //получаем только нужный json.
    $responseBody = substr($r, $responseHeadersSize);
    //декодируем его и получаем ассоциативный массив.
    $res = json_decode($responseBody, true);
    return $res;
}

Рассмотрим метод получения списка Кампаний.

public function getCompanies()
{
    $params = [
        'method' => 'get',                                // Используемый метод сервиса Campaigns
        'params' => array(
            'SelectionCriteria' => (object)array(),      // Критерий отбора кампаний. Для получения всех кампаний должен быть пустым
            'FieldNames' => array('Id', 'Name', 'Type')           // Названия параметров, которые требуется получить
        )
    ];
    //вызываем наш «общий» метод, передав необходимые товары. Полученный ответ пишем в переменную
    $response = $this->Request($params, $this->url . '/campaigns');
    // проверяем есть ли ошибки.
    if ( empty($response['error']) ) {
        //возвращаем массив с результатом
        return ArrayHelper::getValue($response, 'result', false);
    } else {
        // Или выводим ошибку.
        return $this->setError($response['error']);
    }
}

Полный листинг кода смотрите по ссылке.
С методами API можете ознакомиться в документации

Данный пост подготовлен автором @zheev.
Заглавное фото с сайта soft.engineering

10
180.357 GOLOS
На Golos с August 2017
Комментарии (1)
Сортировать по:
Сначала старые