JSON
Взаимодействие с API на JSON и авторизация по токену.
Получение сведений о клиенте
Пример демонстрирует вызов метода GetClientInfo.
<?php
/*
Пример программного кода для работы с API сервиса Яндекс Директ
В примере использован рекомендуемый синтаксис для работы с API сервиса Яндекс Директ
на языке PHP с использованием протокола JSON и авторизацией по токенам.
Обращаем внимание, что все текстовые данные должны быть в кодировке UTF8
Подробнее про получение токена читайте в документации:
https://tech.yandex.ru/oauth/doc/dg/
*/
require_once "HTTP/Request.php";
// Важно: данные отправляем POST-методом
$req =& new HTTP_Request("https://api.direct.yandex.ru/v/json/");
$req->setMethod(HTTP_REQUEST_METHOD_POST);
// Инициализация параметров для авторизации
$data = array(
token => "YOUR-YANDEX-OAUTH-TOKEN"
);
// Параметры для запроса метода GetClientInfo
$data['method'] = "GetClientInfo";
$data['param'] = array(YOUR-YANDEX-LOGIN);
/*
Если ваша версия php не поддерживает встроенной функции json_encode/json_decode,
можно воспользоваться библиотекой: http://pear.php.net/package/Services_JSON
*/
require_once 'Classes/json.php';
$json = new Services_JSON;
$json_data = $json->encode($data);
/*
Если встроенные функции json_encode/json_decode поддерживаются, то программа может выглядеть так:
$json_data = json_encode($data);
$decoded_result = json_decode($result);
*/
$req->addRawPostData($json_data);
$response = $req->sendRequest();
$errmsg = PEAR::isError($response);
if (! $errmsg) {
$result = $req->getResponseBody();
$decoded_result = $json->decode($result);
if (isset($decoded_result->data)) {
// Обработка ответа метода
print_r($decoded_result);
} else if ($decoded_result->error_code) {
// Если ошибку вернул сервер API
echo "Error: code = ".$decoded_result->error_code
.", str = ".$decoded_result->error_str
.", detail = ".$decoded_result->error_detail;
} else {
echo "Unknown error";
}
} else {
// Если ошибка произошла при попытке запроса
echo "Request error: ".$errmsg;
}
?>
Создание кампании
Пример демонстрирует вызов метода CreateOrUpdateCampaign.
<?php
# Cпособ отправления JSON-запроса c OAuth-авторизацией
# PHP 4 >= 4.3.0, PHP 5
# логин в Директе
$login = 'YOUR-LOGIN';
# метод API
$method = 'CreateOrUpdateCampaign';
# входные данные
$params = array(
'Login' => $login,
'CampaignID' => 0,
'StatusContextStop' => 'No',
'Name' => 'Новая кампания',
'FIO' => 'Иванов Иван Иванович',
'EmailNotification' => array(
'Email' => $login . '@yandex.ru',
'SendWarn' => 'Yes',
'MoneyWarningValue' => 1,
'WarnPlaceInterval' => 15,
'SendAccNews' => 'No'
),
'MinusKeywords' => array('скачать', 'mp3', 'песня'),
'AddRelevantPhrases' => 'Yes',
'RelevantPhrasesBudgetLimit' => 50,
'Strategy' => array(
'StrategyName' => 'HighestPosition',
),
);
# ============================================================
# перекодировка строковых данных в UTF-8
function utf8($struct) {
foreach ($struct as $key => $value) {
if (is_array($value)) {
$struct[$key] = utf8($value);
}
elseif (is_string($value)) {
$struct[$key] = utf8_encode($value);
}
}
return $struct;
}
# формирование запроса
$request = array(
'token'=> 'YOUR-YANDEX-OAUTH-TOKEN',
'method'=> $method,
'param'=> utf8($params),
'locale'=> 'ru',
);
# преобразование в JSON-формат
$request = json_encode($request);
# параметры запроса
$opts = array(
'http'=>array(
'method'=>"POST",
'content'=>$request,
)
);
# создание контекста потока
$context = stream_context_create($opts);
# отправляем запрос и получаем ответ от сервера
$result = file_get_contents('https://api.direct.yandex.ru/v/json/', 0, $context);
# вывод результата
print_r($result);
?>