Я использую фреймворк laravel 5, и для своих сайтов, у меня появилась необходимость получать данные статистики, используя API Yandex Metrika.
Для этого был написан пакет - Yandex Metrika Laravel 5 Package.
Фактически пакет предназначен только для удобного получения данных, и имеет некоторые заготовки запросов, а обработкой и выводом в нужной для пользователя форме не занимается - это уже каждый напишет для себя сам... Хотя кое-что все равно пришлось написать, исключительно для себя, но может кому-нибудь и подойдет.
Установка пакета
С помощью Composer
composer require alexusmai/yandex-metrika
Добавить сервис провайдер в app/config/app.php
Alexusmai\YandexMetrika\YandexMetrikaServiceProvider::class,
Добавить алиас
'YandexMetrika' => Alexusmai\YandexMetrika\YandexMetrikaFacade::class,
Публикуем файл настроек
php artisan vendor:publish --provider="Alexusmai\YandexMetrika\YandexMetrikaServiceProvider" --tag="yandex-metrika"
Настройка
Метрика использует протокол OAuth, этот протокол позволяет работать с данными Яндекса от лица пользователя Яндекса через приложение, зарегистрированное на Яндексе. Для начала нужно зарегистрировать новое приложение, и получить token
- Заходим на страницу
https://oauth.yandex.ru/
- Нажимаем «Зарегистрировать новое приложение»
- Запоняем поле «Название»
- Выбираем в разделе права пункт - Яндекс.Метрика и ставим галочку напротив пункта «Получение статистики, чтение параметров своих и доверенных счетчиков»
- Выбираем «Подставить URL для разработки» под полем «Callback URL»
- Сохраняем
- Копируем ID приложения и заходим на Яндекс под той учетной записью, от имени которой будет работать приложение
- Переходим по URL:
https://oauth.yandex.ru/authorize?response_type=token&client_id=подставим сюда идентификатор приложения
- Приложение запросит разрешение на доступ, нажимаем «Разрешить»
- Заносим полученный токен в файл конфигурации пакета.
Использование
Перечень всех методов выложен на Gitub. Я не буду переписывать одно и тоже, просто покажу некоторые результаты работы пакета.
Например получим активность посетителей за последние 30 дней
$metrika = YandexMetrika::getVisitsViewsUsers();
Результат запроса
YandexMetrika {#373 ▼
#url: "https://api-metrika.yandex.ru/"
#token: "123456789"
#counter_id: "123456789"
#cache: 60
#getMethodName: "getVisitsViewsUsersForPeriod"
#adaptMethodName: "adaptVisitsViewsUsers"
+data: array:11 [▼
"query" => array:13 [▶]
"data" => array:11 [▶]
"total_rows" => 11
"sampled" => false
"sample_share" => 1.0
"sample_size" => 122
"sample_space" => 122
"data_lag" => 87
"totals" => array:3 [▶]
"min" => array:3 [▶]
"max" => array:3 [▶]
]
+adaptData: null
}
Как я и писал выше, для себя я написал некоторую обработку полученных данных, и так:
//Получение и обработка полученных данных для построения графика Highcharts › Basic line
$metrika = YandexMetrika::getVisitsViewsUsers()->adapt();
//Обработанные данные
$chart1 = $metrika->adaptData;
Теперь у свойства adaptData появился массив с обработанными данными
+adaptData: array:2 [▼
"dataArray" => "[{"name":"Визиты","data":[10,14,14,20,12,6,13,7,6,6,5,7,13,12,6,15,10,5,7,5,8,6,8,13,8,9,11,15,10,9,5]},{"name":"Просмотры","data":[23,27,30,34,32,17,36,12,11,13,9,17,30,24,8,32,12,11,15,5,29,13,20,22,11,33,16,25,23,9,15]},{"name":"Посетители","data":[9,10,12,20,12,6,13,6,6,6,3,7,13,10,6,15,9,4,6,5,8,6,8,13,8,8,11,15,8,9,5]}]"
"dateArray" => "["29.03","30.03","31.03","1.04","2.04","3.04","4.04","5.04","6.04","7.04","8.04","9.04","10.04","11.04","12.04","13.04","14.04","15.04","16.04","17.04","18.04","19.04","20.04","21.04","22.04","23.04","24.04","25.04","26.04","27.04","28.04"]"
]
Данные подготовлены для передачи в Highchart.js скрипт для отрисовки ... Например
$('#chart1').highcharts({
chart: {
type: 'spline'
},
title: {
text: 'Активность посетителей за последние 30 дней'
},
xAxis: {
categories: {!! $chart['dateArray'] !!}
},
yAxis: {
title: {
text: 'Количество'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
series: {!! $chart['dataArray'] !!}
});
И в результате получим такой график (выложил просто картинку)
Вот еще для примера:
//Получаем и обрабатываем данные по регионам -> городам
$geoRegionPie = YandexMetrika::getGeoArea()->adapt()->adaptData;
JS код
$('#chart2').highcharts({
chart: {
type: 'pie'
},
lang: {
drillUpText: 'Вернуться к разбивке по странам'
},
title: {
text: 'География посещений за неделю - Страны'
},
subtitle: {
text: 'Нажмите на страну, чтобы перейти к разбивке по областям'
},
plotOptions: {
series: {
dataLabels: {
enabled: true,
format: '{point.name}: {point.y}'
}
}
},
tooltip: {
headerFormat: '{series.name}
',
pointFormat: '{point.name}: {point.y} визитов
'
},
series: [{
name: 'Страна',
colorByPoint: true,
data: {!! $geoRegionPie['dataArray'] !!}
}],
drilldown: {
series: {!! $geoRegionPie['drilldownArray'] !!}
}
});
И результат ( опять скриншот результата! )
Остальные методы для получения данных описанны на GitHub или смотрите readme.md пакета...
Войдите через социальную сеть
Или войдите в свой аккаунт
Забыли пароль? | Регистрация