Главная / Скрипты для сайта / Блог / PHP скрипт для работы с API Яндекс.Метрики

PHP скрипт для работы с API Яндекс.Метрики

В данной статье я приведу простой пример работы с API Яндекс.Метрики, научу как получить OAuth token для работы скрипта, а также приведу пример получения некоторых данных из статистики за указанный период.

Как получить OAuth token для доступа к Метрике

Перед тем, как начать получать статистические данные с Яндекс.Метрики, нам нужно зарегистрировать приложение в ее API, а также получить OAuth token для доступа к самой статистике:

  1. Начинаем регистрацию нового приложения на странице https://oauth.yandex.ru/client/new
  2. В «Название» пишем любое удобное для вас название, в раскрывающемся списке «Яндекс.Метрики» ставим галочку на «Получение статистики, чтение параметров своих и доверенных счётчиков», в «Ссылка на приложение» пишем свой сайт (пимсать сайт необязательно)
  3. Получаем для дальнейших действий «Id приложения» и «Пароль приложения»

Как получить OAuth token или токен Яндекса 

  1. Далее используем приведенный ниже мой PHP код для получения заветного OAuth token, в который вводим «Логин» и «Пароль» от учетной записи на Яндексе (если кто не понял, то проще говоря логин и пароль от почты Яндекса), а также полученые ранее «Id приложения» и «Пароль приложения». Т.е. создаем, к примеру, token.php с этим кодом, закидываем в корень сайта, вносим нужные нам данные и вызываем
$yandex_get_token_url = "https://oauth.yandex.ru/token";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $yandex_get_token_url);
curl_setopt($ch, CURLOPT_HEADER, 1); //посмотреть результат запроса
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'grant_type=password&username=ЛОГИН_УЧЕТНОЙ_
ЗАПИСИ_ЯНДЕКСА&password=ПАРОЛЬ_ОТ_УЧЕТНОЙ_
ЗАПИСИ_ЯНДЕКСА&client_id=ID_ПРИЛОЖЕНИЯ&client_secret=ПАРОЛЬ_ПРИЛОЖЕНИЯ');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$token = curl_exec($ch);
curl_close($ch);

echo $token;
  1. Если вы все правильно сделали, то на странице появится некоторая непонятная для новичка информация, но взгляд мы должны окинуть на фрагмент текста, где написан многосимвольный access_token — это и есть наш заветный OAuth token

  1. Теперь мы можем использовать его для получения любой статистики наших счетчиков в Яндекс.Метрике

Выводим через PHP статистику с Яндекс.Метрики

Простой пример подключения к API Яндекс.Метрики за сегодняшний день:

$today=date("Ymd");
$metrika_url = "http://api-metrika.yandex.ru/stat/traffic/summary.json?id=ID_СЧЕТЧИКА&pretty=1&date1=$today&date2=$today&oauth_token=НАШ_ТОКЕН";

Далее просто получаем JSON по сгенерированному нашему адресу $metrika_url и декодируем его в обычный объект:

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrika_url);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$metrika = curl_exec ($ch);
curl_close($ch);

$metrika_o = json_decode($metrika);
echo "Статистика посещений за сегодня:<br>";
echo "Посетителей: ".$metrika_o->totals->visits."<br>";
echo "Из них новых: ".$metrika_o->totals->new_visitors."<br>";
echo "Просмотров: ".$metrika_o->totals->page_views;

Если вы хотите получать получить данные за черашний день:

$date=date ('Ymd', time()-86400);

Кстати, на моем сайте в подвале используется именно данный пример интеграции статистики из Яндекс.Метрики по средствам API. Только вывожу я за вчерашний день, обновление данных настроил через CRON в 00:05. Я думаю вы часто видели на сайтах подуюный блок и надеюсь я помог вам. Можно выводить не только эти данные счетчика но и много других: проценты отказов, популярные страницы, посещения по регионам и многое другое. Если у вас есть вопросы, жду их в комментариях.

Дата публикации: 25 января, 2014
    Отзывы и комментарии:
  • Vadim Miskyi:
    Здавствуйте! А можно ли вытащить кол-во просмотров для конкретной страницы?
  • Кирилл:
    Если мне не изменяет память, то одним запросом для конкретной страницы нет возможности выдерать просмотры в метрике, возможно есть в гугл аналитиксе. данным вопросом не занимался. Можно попробывать выдрать посещения заданной страницы от сюда, где выводятся популярные страницы http://api-metrika.yandex.ru/stat/content/popular?id=ID_СЧЕТЧИКА&pretty=1&date1=$today&date2=$today&oauth_token=НАШ_ТОКЕН подробнее тут http://api.yandex.ru/metrika/doc/ref/stat/content-popular.xml Также, предположу, что и через Цели http://api.yandex.ru/metrika/doc/ref/reference/get-counter-goal.xml#goal-condition
  • Gennadii Alforov:
    Добрый вечер. Спасибо за пример использования api метрики, начал использовать на своем сайте.
  • Кирилл:
    искать сайты по запросу "скрипт получение значений счетчика яндекс-метрики" где можно вписать кликабельную ссылку наверное тоже не красиво?
  • Gennadii Alforov:
    Как скажите, просто своих же посетителей вы лишаете ещё одного хорошего примера использования api яндекс метрики.
  • Михаил Иванов:
    OMG получение токена это что-то. Передается логин и пароль :/ ЛОГИН_УЧЕТНОЙ_ ЗАПИСИ_ЯНДЕКСА&password=ПАРОЛЬ_ОТ_УЧЕТНОЙ_ ЗАПИСИ_ЯНДЕКСА спрашивается зачем потом еще передавать id клиента приложение и пароля приложения. если и так можно авторизоваться и посмотреть нужные данные. либо создать приложение с большими правами
  • Виктор Горячев:
    Добрый день! Подскажите, пожалуйста, как вывести статистику не за день, а за целый месяц?
  • Alexander Sizintsev:
    отличная статья, спасибо.
  • Oleg Gafarov:
    Спасибо!
  • Evgeny Nikiforov:
    А можно поподробнее как вставлять то на сайт. Файл я создал, но как я понимаю теперь нужен яваскрипт который все это дело обработает?
  • Evgeny Nikolaev:
    Добрый день! Подскажите, почему не могу получить токен из json запроса. Вот код $token_o = json_decode($token echo $token_o->access_token;
  • Аноним:
    Не рабочий код. Пусть автор посмотрит что ему его же код на сайте внизу страницы и показывает какая у него посещаемость. По нулям везде.
  • www.1seo.by:
    Спасибо за замечание, но оно не верно :) Код рабочий, а то что в 2 часа показывает по нулям следствие того что скрипт выполнялся в 00:00 в кроне и через каждые 2-3 часа, точно не помню, надо все поменять на 0:10 хотя бы когда метрика будет отдавать правильные значения. Посмотрите значения чуть позже.
  • Аноним:
    и сейчас 0. дело не во времени. у меня похожие функции тоже перестали работать. не могу понять в чем дело. яндексоидам пишу - отмараживаются.
  • www.1seo.by:
    Действительно :) Ответ начал приходить Access is denied, возможно токен слетел, чуть позже гляну
  • Аноним:
    я ж говорю - у меня такое же. причем на разных аккуаунтах разных токенах. дело наверное не в отдельном токене. если получится решить проблему - напиши пожалуйста здесь в чем дело. спасибо.
  • www.1seo.by:
    замените $ch = curl_init( curl_setopt($ch, CURLOPT_URL, $metrika_url curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1 $metrika = curl_exec ($ch curl_close ($ch на $ch = curl_init( curl_setopt ($ch, CURLOPT_URL,$metrika_url curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" curl_setopt ($ch, CURLOPT_TIMEOUT, 60 curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1 $metrika = curl_exec ($ch curl_close($ch
  • Аноним:
    СУПЕР! Спасибо, все работает.
  • Анатолий Пауль:
    Как получить токен из результата? $obj = json_decode($token print $obj->{'access_token'}; не помогает
  • Александр:
    $obj->access_token;
  • Валерий Саляхов:
    Приветствую, у кого нибудь есть рабочий скрипт: как добавить цель в Яндекс метрике через Яндекс API на PHP? По этой статье получилось авторизоваться, а как сделать остальное не знаю. Заранее благодарю.
  • Влад:
    Сделал все как сказано, но выводит просто название строк, а чисел нет
  • матвеев сергей:
    Сам мучаюсь, мне приходит ответ что сервис временно недоступен
  • матвеев сергей:
    советую так не делать, логин и пароль нет смысла открывать
  • www.1seo.by:
    логин и пароль публично ни где не открыт
  • матвеев сергей:
    ну как нет если ты их вставляешь в код скрипта, а если взлом с целью узнать твой пароль? не лучше ли так сделать? if ( !isset( $_GET["code"] ) ) { setcookie( "yaAccessToken", "", time() - 3600 Header( "Location: https://oauth.yandex.ru/authorize?response_type=code&client_id=".$settings['global']['clientId'] die( } $result = postKeys("https://oauth.yandex.ru/token?", array( 'grant_type'=> 'authorization_code', // тип авторизации 'code'=> $_GET["code"], // наш полученный код 'client_id'=>$settings['global']['clientId'], 'client_secret'=>$settings['global']['clientSecret'] ), array('Content-type: application/x-www-form-urlencoded') // после получения ответа, проверяем на код 200, и если все хорошо, то у нас есть токен if ($result["code"]==200) { $result["response"]=json_decode($result["response"],true $token=$result["response"]["access_token"]; $new = new Token($settings $new->setToken($token }else echo "не правильный код: ".$result["code"]; function postKeys($url,$peremen,$headers) { $post_arr=array( foreach ($peremen as $key=>$value) { $post_arr[]=$key."=".$value; } $data=implode('&',$post_arr $handle=curl_init( curl_setopt($handle, CURLOPT_URL, $url curl_setopt($handle, CURLOPT_HTTPHEADER, $headers curl_setopt($handle, CURLOPT_POSTFIELDS, $data curl_setopt($handle, CURLOPT_POST, true curl_setopt($handle, CURLOPT_TIMEOUT, 60 curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false curl_setopt($handle, CURLOPT_RETURNTRANSFER, true curl_setopt($handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" $response=curl_exec($handle $code=curl_getinfo($handle, CURLINFO_HTTP_CODE return array("code"=>$code,"response"=>$response }
  • матвеев сергей:
    class Token{ private $login = ''; private $client_id = ''; private $client_secret = ''; function __construct($settings) { $this->login = $settings['global']['login']; $this->client_id = $settings['global']['clientId']; $this->client_secret = $settings['global']['clientSecret']; setcookie("yaClientId", $this->client_id, null, '/'// по желанию } public function setToken($token){ if (isset($token)) { setcookie("yaAccessToken", $token, null, '/' header('Location: http://'.$_SERVER['HTTP_HOST'].'/'.$settings['global']['index'] } } }
  • www.1seo.by:
    я привел скрипт, который запускается самостоятельно откуда угодно единожды для получения токкена и все, удаляешь его потом. Логин и пароль от Яндекса не нужен для получения данных по api, лишь токкен. Материал нацелен для новичков и полноценные библиотеки с классами незачем приводить, еще больше будет вопросов у людей.


Раз в жизни фортуна стучится в дверь каждого человека, но человек в это время нередко сидит в ближайшей пивной и никакого стука не слышит.
© Марк Твен

Скидки для новичков:

Купить виртуальный хостинг для сайта и домен со скидкой 5%!

Подробнее

Подпишитесь на интересные обновления моего блога, чтобы быть в тренде последних тенденций разработки и продвижения сайтов: