PHP отправка OAuth токена в HTTP заголовке для Яндекс.Метрики.
06-Мар-19 12:00
Недавно в нескольких проектах обнаружил, что Яндекс.Метрика перестал отдавать данные через 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;