Создание объявлений
PHP версии 5, формат JSON, используется библиотека cURL
Пример демонстрирует выполнение запроса методом Ads.add, обработку и вывод результата. Для использования примера во входных данных укажите OAuth-токен и идентификатор группы, в которой будет создано новое объявление. При запросе от имени агентства необходимо также указать логин клиента.
<?php
//--- Входные данные ----------------------------------------------------//
// Адрес сервиса Ads для отправки JSON-запросов (регистрозависимый)
$url = 'https://api.direct.yandex.com/json/v5/ads';
// OAuth-токен пользователя, от имени которого будут выполняться запросы
$token = 'ТОКЕН';
// Логин клиента рекламного агентства
// Обязательный параметр, если запросы выполняются от имени рекламного агентства
$clientLogin = 'ЛОГИН_КЛИЕНТА';
// Идентификатор группы объявлений, в которую будет добавлено новое объявление
$adGroupId = ИДЕНТИФИКАТОР_ГРУППЫ;
//--- Подготовка и выполнение запроса -----------------------------------//
// Установка HTTP-заголовков запроса
$headers = array(
"Authorization: Bearer $token", // OAuth-токен. Использование слова Bearer обязательно
"Client-Login: $clientLogin", // Логин клиента рекламного агентства
"Accept-Language: ru", // Язык ответных сообщений
"Content-Type: application/json; charset=utf-8" // Тип данных и кодировка запроса
);
// Параметры запроса к серверу API Директа
$params = array(
'method' => 'add', // Используемый метод
'params' => array(
'Ads' => array(
array(
'AdGroupId' => $adGroupId,
'TextAd' => array( // Параметры объявления
'Title' => 'Заголовок объявления',
'Text' => 'Текст объявления',
'Mobile' => 'NO',
'Href' => 'http://www.yandex.ru'
)
)
)
)
);
// Преобразование входных параметров запроса в формат JSON
$body = json_encode($params, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
// Инициализация cURL
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
/*
Для полноценного использования протокола HTTPS можно включить проверку SSL-сертификата сервера API Директа.
Чтобы включить проверку, установите опцию CURLOPT_SSL_VERIFYPEER в true, а также раскомментируйте строку с опцией CURLOPT_CAINFO и укажите путь к локальной копии корневого SSL-сертификата.
*/
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//curl_setopt($curl, CURLOPT_CAINFO, getcwd().'\CA.pem');
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);
// Выполнение запроса, получение результата
$result = curl_exec($curl);
//--- Обработка результата выполнения запроса ---------------------------//
if(!$result) { echo ('Ошибка cURL: '.curl_errno($curl).' - '.curl_error($curl)); }
else {
// Разделение HTTP-заголовков и тела ответа
$responseHeadersSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$responseHeaders = substr($result, 0, $responseHeadersSize);
$responseBody = substr($result, $responseHeadersSize);
if (curl_getinfo($curl, CURLINFO_HTTP_CODE) != 200) { echo "HTTP ошибка: ".curl_getinfo($curl, CURLINFO_HTTP_CODE); }
else {
// Преобразование ответа из формата JSON
$responseBody = json_decode($responseBody);
if (isset($responseBody->error)) {
$apiErr = $responseBody->error;
echo "Ошибка API {$apiErr->error_code}: {$apiErr->error_string} - {$apiErr->error_detail} (RequestId: {$apiErr->request_id})";
}
else {
// Извлечение HTTP-заголовков ответа: RequestId (Id запроса) и Units (информация о баллах)
$responseHeadersArr = explode("\r\n", $responseHeaders);
foreach ($responseHeadersArr as $header) {
if (preg_match('/(RequestId|Units):/', $header)) { echo "$header <br>"; }
}
// Вывод результата
// Обработка всех элементов массива AddResults, где каждый элемент соответствует одному объявлению
foreach ($responseBody->result->AddResults as $item) {
// Обработка вложенных элементов (может быть либо Errors, либо Id и, возможно, Warnings)
foreach ($item as $key => $value) {
// Если присутствует массив Errors, то объявление не создано из-за ошибки (ошибок может быть несколько)
if ($key == 'Errors') {
foreach ($value as $errItem) { echo "Ошибка: {$errItem->Code} - {$errItem->Message} ({$errItem->Details})<br>"; }
}
else {
// Если присутствует массив Warnings, то объявление создано, но есть предупреждения (предупреждений может быть несколько)
if ($key == 'Warnings') {
foreach ($value as $warItem) { echo "Предупреждение: {$warItem->Code} - {$warItem->Message} ({$warItem->Details})<br>"; }
}
echo "Создано объявление №{$value}<br>";
}
}
}
}
}
}
//--- Отладочная информация ---------------------------------------------//
//echo "<hr>Заголовки запроса: <pre>".curl_getinfo($curl, CURLINFO_HEADER_OUT)."</pre>";
//echo "Запрос: <pre>".json_encode($params, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)."</pre>";
//echo "Заголовки ответа: <pre>".$responseHeaders."</pre>";
//echo "Ответ: <pre>".json_encode($responseBody, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)."</pre>";
curl_close($curl);
?>