PHP отправка OAuth токена в HTTP заголовке для Яндекс.Метрики.

06-Мар-19 12:00

PHP отправка OAuth токена в HTTP заголовке для Яндекс.Метрики.

Недавно в нескольких проектах обнаружил, что Яндекс.Метрика перестал отдавать данные через API.

Выяснилось, что проблема в авторизации.

Передача авторизационного токена в параметрах URL перестанет работать 13 февраля 2019 года. Чтобы продолжить работу с API Метрики, настройте авторизацию по токену в HTTP-заголовке.

Поэтому написал небольшую функцию с использованием curl.

function curlHttpHeader($url){
    $authToken = 'Ваш token';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-yametrika+json', 'Authorization: OAuth' . $authToken]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}
Для примера приведу небольшой скрипт.
function curlHttpHeader($url){
    $authToken = 'Ваш token';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-yametrika+json', 'Authorization: OAuth' . $authToken]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

$url = 'https://api-metrika.yandex.ru/stat/v1/data';
$params = [
	'ids'         => 'ID Вашего приложения',
	'metrics'     => 'ym:pv:pageviews',
	'dimensions'  => 'ym:pv:URLPathFull',
	'date1'       => '7daysAgo',
	'date2'       => 'yesterday',
	'sort'        => '-ym:pv:pageviews',
	'limit'        => '30',
]; // данные параметры выведут 30 популярных страниц вашего сайта, за последние 7 дней.

$metrika = curlHttpHeader($url . '?' . http_build_query($params)); // получаем данные в json формате
$date = json_decode($metrika, true)['data']; // полученные данные преобразовываем в массив.

echo $date;