В данной статье я приведу простой пример работы с API Яндекс.Метрики, научу как получить OAuth token для работы скрипта, а также приведу пример получения некоторых данных из статистики за указанный период.
Перед тем, как начать получать статистические данные с Яндекс.Метрики, нам нужно зарегистрировать приложение в ее API, а также получить OAuth token для доступа к самой статистике:
$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;
Простой пример подключения к 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Когда человек начинать жалеть себя и придумывать оправдания своим неудачам, он начинает постепенно умирать.
© Наполеон Хилл
Супер-предложение!
Купить виртуальный хостинг для сайта и домен с бесплатным тестовым периодов 1 месяц!
Подпишитесь на интересные обновления моего блога, чтобы быть в тренде последних тенденций разработки и продвижения сайтов:
Здавствуйте! А можно ли вытащить кол-во просмотров для конкретной страницы?
Если мне не изменяет память, то одним запросом для конкретной страницы нет возможности выдерать просмотры в метрике, возможно есть в гугл аналитиксе. данным вопросом не занимался. Можно попробывать выдрать посещения заданной страницы от сюда, где выводятся популярные страницы 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
Добрый вечер. Спасибо за пример использования api метрики, начал использовать на своем сайте.
искать сайты по запросу "скрипт получение значений счетчика яндекс-метрики" где можно вписать кликабельную ссылку наверное тоже не красиво?
Как скажите, просто своих же посетителей вы лишаете ещё одного хорошего примера использования api яндекс метрики.
OMG получение токена это что-то. Передается логин и пароль :/ ЛОГИН_УЧЕТНОЙ_ ЗАПИСИ_ЯНДЕКСА&password=ПАРОЛЬ_ОТ_УЧЕТНОЙ_ ЗАПИСИ_ЯНДЕКСА спрашивается зачем потом еще передавать id клиента приложение и пароля приложения. если и так можно авторизоваться и посмотреть нужные данные. либо создать приложение с большими правами
Добрый день! Подскажите, пожалуйста, как вывести статистику не за день, а за целый месяц?
отличная статья, спасибо.
Спасибо!
А можно поподробнее как вставлять то на сайт. Файл я создал, но как я понимаю теперь нужен яваскрипт который все это дело обработает?
Добрый день! Подскажите, почему не могу получить токен из json запроса. Вот код $token_o = json_decode($token echo $token_o->access_token;
Не рабочий код. Пусть автор посмотрит что ему его же код на сайте внизу страницы и показывает какая у него посещаемость. По нулям везде.
Спасибо за замечание, но оно не верно :) Код рабочий, а то что в 2 часа показывает по нулям следствие того что скрипт выполнялся в 00:00 в кроне и через каждые 2-3 часа, точно не помню, надо все поменять на 0:10 хотя бы когда метрика будет отдавать правильные значения. Посмотрите значения чуть позже.
и сейчас 0. дело не во времени. у меня похожие функции тоже перестали работать. не могу понять в чем дело. яндексоидам пишу - отмараживаются.
Действительно :) Ответ начал приходить Access is denied, возможно токен слетел, чуть позже гляну
я ж говорю - у меня такое же. причем на разных аккуаунтах разных токенах. дело наверное не в отдельном токене. если получится решить проблему - напиши пожалуйста здесь в чем дело. спасибо.
замените $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? По этой статье получилось авторизоваться, а как сделать остальное не знаю. Заранее благодарю.
Сделал все как сказано, но выводит просто название строк, а чисел нет
Сам мучаюсь, мне приходит ответ что сервис временно недоступен
советую так не делать, логин и пароль нет смысла открывать
логин и пароль публично ни где не открыт
ну как нет если ты их вставляешь в код скрипта, а если взлом с целью узнать твой пароль? не лучше ли так сделать? 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'] } } }
я привел скрипт, который запускается самостоятельно откуда угодно единожды для получения токкена и все, удаляешь его потом. Логин и пароль от Яндекса не нужен для получения данных по api, лишь токкен. Материал нацелен для новичков и полноценные библиотеки с классами незачем приводить, еще больше будет вопросов у людей.