Работа с API Яндекс Метрикой

8 января 2015 Антон Кулешов 11661 4

Недавно один пользователь «ВКонтакте» задал мне вопрос: как получить Яндекс токен для работы с API Метрикой? Проблема, по своей сути, не вызывает сложностей, хотя на тот момент я не мог дать исчерпывающего ответа. На поиск решения у «неподготовленного» читателя может уйти весьма продолжительный промежуток времени. В этой статье я рассмотрю простой пример работы с API Яндекс Метрикой и подробно распишу все этапы.

Реклама

Перед тем, как я начну вдаваться в подробности, хочу отметить: Яндекс обладает замечательным API, при помощи которого очень удобно решать поставленные задачи разного плана и уровня сложности. К примеру: получать статистику по сайту за различные промежутки времени или управлять своими счётчиками и аккаунтами.

Теперь стоит наметить план действий для работы с API Яндекс Метрикой, он будет включать в себя несколько пунктов:

  • Регистрация нового Яндекс приложения;
  • Получение Яндекс токена;
  • Написание скрипта для взаимодействия с данными из Метрики.

В последнем пункте я напишу простой скрипт, который будет подключаться к API и получать статистику посещаемости за сегодняшний и вчерашний дни. Думаю это хороший пример, который будет полезен читателю и поможет ему лучше разобраться с принципом работы API Яндекса.

Регистрация приложения

Все пользовательские Яндекс приложения, которые взаимодействуют с Яндекс сервисами находиться на этой странице oauth.yandex.ru. Там же можно найти ссылку на добавление нового приложения - кликнем по ней!

registratsiya-prilozheniya-yandeks

Далее нам предстоит заполнить форму: указываем название нашего приложения, выбираем права «Яндекс.Метрика», в появившихся чекбоксах указываем на второй – «получение статистики». В последнем поле формы жмем на ссылку «Подставить URL для разработки».

zapolnenie-formy-registratsii-prilozheniya-yandeks

Всё - приложение настроено!

Жмём сохранить, и попадает на страницу с информацией о нём. Там мы видим ID приложения, пароль и Callback URL. Из всего этого нам понадобится только ID.

informatsiya-o-yandeks-prilozhenii

С регистрацией покончено, переходим к следующему этапу.

Получение Яндекс токена

Есть всего три способа, как получить токен, о них вы можете узнать на этой странице – способы получения Яндекс токенов. Я же опишу самый простой и быстрый вариант - это получение «отладочного токена».

В адресную строку браузера вводим ссылку данного вида, в которой вместо «идентификатор_приложения» подставляем ID своего приложения:

https://oauth.yandex.ru/authorize?response_type=token&client_id=идентификатор_приложения

Далее, в появившемся сообщении, выбираем «Разрешить»:

razrezhenie-na-dostup-k-statistiki-yandeks-prilozheniya

Вот и всё, мы получили заветный токен:

yandeks-token-prilozheniya

Помимо всего прочего, хочу отметить, и это очень важно: время жизни токена – 1 год. Если этого времени мало, то можно легко автоматизировать процесс, но только для этого придется воспользоваться другими способами получения токина, например «Веб-приложение -> Извлечь токен из URL», об этом в следующих статьях.

Скрипт для работы c API

Сам код довольно простой: это класс, содержащий несколько свойств и методов. Чтобы начать им пользоваться необходимо, заменить значения переменных $token и $counter_id на свои.

class APImetrika{

	private $token 	    = "токен";
	private $url_api    = "https://api-metrika.yandex.ru/";
	private $counter_id = "номер_счётчика";

	public function get_traffic($date1, $date2){

		return $this->get_data(
			$this->url_api.
			"stat/v1/data?id=".
			$this->counter_id.
			"&metrics=ym:s:users,ym:s:visits,ym:s:pageviews".
			"&pretty=1".
			"&date1=".$date1.
			"&date2=".$date2.
			"&oauth_token=".
			$this->token
		);
	}

	private function get_data($url){

		if($url){

			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $url);
			curl_setopt($ch, CURLOPT_HEADER, 0);
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
			curl_setopt($ch, CURLOPT_TIMEOUT, 30);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

			$data = json_decode(
				curl_exec($ch), true
			);

			curl_close($ch);

			if(is_array($data)){

				return $data;
			}
		}

		return false;
	}
}

Теперь поговорим немного о методах класса. Первый метод, и он же главный, get_data() – является внутренним, служит для обращения к API Метрики и получения данных. Второй метод - публичный, с помощью него можно получать статистику, по сформированному в нём URL. Сам метод принимает два параметра: дату начала и дату окончания выборки.

Вот хороший пример использования данного класса: получение статистики посещений за сегодняшний и вчерашний дни.

Получаем данные:

require_once("APImetrika.php");

$obj = new APImetrika();

$today = $obj->get_traffic(
	date("Ymd"),
	date("Ymd")
);
$last  = $obj->get_traffic(
	date("Ymd", time() - 86400),
	date("Ymd", time() - 86400)
);

Выводим на страницу:

<h2>Cегодня</h2>
<p>
	Посетителей:
	<?php echo($today["totals"][0]);?>
</p>
<p>
        Визитов:
	<?php echo($today["totals"][1]);?>
</p>
<p>
        Просмотров:
	<?php echo($today["totals"][2]);?>
</p>
<h2>Вчера</h2>
<p>
        Посетителей:
	<?php echo($last["totals"][0]);?>
</p>
<p>
        Визитов:
	<?php echo($last["totals"][1]);?>
</p>
<p>
        Просмотров:
	<?php echo($last["totals"][2]);?>
</p>

Более подробно ознакомиться с перечнем действий, которые возможно совершать над API Яндекс Метрикой, можно по этому адресу - справочник разработчика.

Вот так, легко и просто мы управились с API Метрикой.

Реклама
Aleksandr
Aleksandr 12 июня 2016
Антон, спасибо за статью! У меня возникла такая задача, не мог бы мне кто-нибудь помочь?

Задача такая: нужно найти способ, как выцепить поисковую фразу перешедшего с поисковика пользователя. Затем нужно эту фразу прикрепить к форме, которую пошлёт этот пользователь. Метрика имеет доступ к этим данным. Но как с её помощью достать фразу данного посетителя? Я знаю, что раньше эти данные с лёгкостью можно было достать с помощью $_SERVER[«HTTP_REFERER»]. Сейчас же таким образом можно достать фразу только из контекстной рекламы

Пожалуйста, помогите. Можете ли подсказать скрипт API Метрики, достающий поисковую фразу, по которой перешёл посетитель?
Антон Кулешов
Антон Кулешов 13 июня 2016
Начну с того, что в $_SERVER[«HTTP_REFERER»] лежит не фраза, а адрес ресурса, с которого перешёл посетитель (читаем php мануал). Ну и касательно получения поискового запроса конкретного посетителя, зашедшего на сайт, – этого сделать нельзя, так как эти данные обрабатываются на стороне поисковика.
Aleksandr
Aleksandr 13 июня 2016
Ну вот запрос из контекстной рекламы с помощью $_SERVER[«HTTP_REFERER»] и регулярного выражения запросто достаётся. Поисковики недавно закрыли эту возможность?
Антон Кулешов
Антон Кулешов 14 июня 2016
Подобной возможности, насколько я знаю, никогда и не было. Было бы весьма жирно для веб-мастера - отслеживать поисковую фразу в момент захода пользователя на сайт. Из контекстной рекламы, я так полагаю, вы извлекаете utm метки, значения которых и парсятся.
no_avatar
Читайте далее

Аккордеон меню на CSS

20 апреля 2015 Антон Кулешов

Аккордеон меню – лучший вариант решения вертикального меню для сайта, он идеально подойдет для страниц с обширной навигацией. Главное достоинство аккордеон меню в том, что оно очень компактно, при условии того, что внутренних вкладок может быть очень много. С точки зрения пользователя, вертикальное меню намного удобнее горизонтального, т.к. физиологически человеческая кисть устроена так, что нам проще проводить мышью вертикальные, а не горизонтальные линии. Используя аккордеон меню, мы заботимся и о наших пользователях, и украшаем наш сайт динамическими эффектами, делая его ярче и привлекательнее.

Два способа сделать меню для сайта на HTML и CSS

26 января 2015 Антон Кулешов

Всем привет! Сегодня разберем пару примеров реализации горизонтального меню – самых простых и самых надежных.

Прогресс бар заполнения формы

15 июня 2016 Антон Кулешов

Необходимость заполнения длинных форм, зачастую, очень не нравится пользователям. Чтобы как-то снивелировать негативный эффект можно прикрепить к форме анимированный прогресс бар её заполнения. Сегодня речь пойдёт об JavaScript библиотеке под названием fort.