Я использую фреймворк 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'] !!}
});

И в результате получим такой график (выложил просто картинку)

chart1

 

Вот еще для примера:

//Получаем и обрабатываем данные по регионам -> городам
$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'] !!}
    }
});

И результат ( опять скриншот результата! )

chart2

Остальные методы для получения данных описанны на GitHub или смотрите readme.md пакета...