Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

API Яндекс Метрика и Google Charts

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

По сути, количество визитов на счетчике сайта - практически единственный способ отображения в открытом доступе данных web-аналитики Яндекса; и это при том, что возможности отчетов Яндекс Метрики, с учетом новых функций сегментации и параметризации - поистине впечатляют. Отличный продукт, вполне достойный того, чтобы потратить время на его изучение. Да, все мы порой бегло анализируем данные Яндекс Метрики, авторизовавшись на Яндексе, и, как правило - не более того... почему? Должным образом структурированные отчеты аналитики, опубликованные на страницах вашего web-ресурса, вполне могли бы способствовать росту его популярности, представляя из себя хорошо оформленные информативные виджеты. Почему бы и нет, кто сказал, что статистика сайта уместна только в бакенде? Например, интерактивно обновляемый перечень самых посещаемых страничек или же популярность сайта в социальных сетях по версии Яндекс Метрика - вполне могли бы не только украсить страницы интернет-портала или корпоративной web-странички, но и привлечь новых посетителей.

 

 

Попробуем? Мне, например, раньше как-то не приходило в голову, что, судя по приведенной в начале статьи статистике визитов, структурированной по регионам, странички этого блога пользуются у американцев даже несколько большей популярностью, нежели у европейцев... оригинальный чарт Яндекс Метрика сформирован иначе, и подобное сравнение не сразу бросается в глаза. Хотя, может быть, оно и к лучшему, что "не бросается", в свете последних-то событий? Взгляните; как ни странно, русскоязычный этот сайт по-прежнему немало популярен среди навсегда братского, как мне всю жизнь внушали, народа Украины, с которым теперь уже не разделяет вообще ничего, кроме сущего пустяка: войны... поискав глазами в перечне стран, по какой-то странной и абсурдной, внезапно пришедшей в голову аналогии, Турцию и Сирию - я понял, что кое-какие технические моменты представленного решения еще нуждаются в доработке. Оставим это на будущее; отбросим сейчас попытки очень невеселого юмора и сходу перейдем к технической части.

Прежде всего, следует отметить, что идея обойтись сугубо js - успешного продолжения не получила: Яндекс Метрика явно не желает отдавать правильные корсы (подробнее см. статью Про cross-origin и джаваскрипты), а обращаться к JSONProxy нет никакого желания. Почему так происходит у Яндекса - это уже вопрос к представителям технической поддержки Яндекса; а в ожидании ответа - придется нам с вами прибегнуть в контексте демки к php и Google Charts.

Итак, все несложно; выбираем среди галереи Google Charts понравившийся шаблон, формируем запрос к API и далее прибегаем к несложному циклу для обработки получаемого JSON таким примерно образом... не забудьте, вам придется подставить вместо звездочек номер вашего счетчика на Яндекс Метрика и токен:

 

<?
$obj = json_decode(file_get_contents('https://api-metrika.yandex.ru/stat/v1/data?id=********&dimensions=ym:s:regionCountry&metrics=ym:s:visits&oauth_token=*************************'), true);
for( $i = 0; $i < 12; $i++){
echo '[', "'", $obj['data'][$i]['dimensions'][0]['name'], "'", ', ', $obj['data'][$i]['metrics']['0'], '],';
}
?>

 

Если не указывать специально CSV в качестве формата получения данных, а также временной отрезок - получаем по-дефолту статистику за недельный отрезок времени в формате JSON. Собственно, всегда возможны варианты; for example, здесь у вас без проблем пройдет даже самый неуклюжий foreach:

 

<?
$json = file_get_contents('https://api-metrika.yandex.ru/stat/v1/data?id=*******&dimensions=ym:s:regionCountry&metrics=ym%3As%3Avisits&oauth_token=************************');
$obj = json_decode($json, true);
foreach ($obj['data'] as $a) {
$i++;
if($i >24) break;
foreach ($a['dimensions'] as $b) {
$i++;
if($i >24) break;
echo '[', "'", $b['name'], "'", ', ',$a['metrics']['0'], '],';
}
}

 

Продолжение темы - в материале API Яндекс Метрика и Highcharts. Попробуйте сравнить возможности Google Charts и Highcharts!

 

Документация API Яндекс Метрика содержит, в частности, ряд примеров, к которым вы вполне можете обратиться при формировании токена и написании запросов: рекомендую, к слову, использовать именно актуальную версию API взамен устаревшей. Полностью код продемонстрированного виджета Яндекс Метрики всегда доступен на форуме; ну а продолжение, как обычно, следует.

2 комментарии

  • Aleksej

    написал Aleksej

    Вторник, 12 апреля 2016 13:26

    Как решить? - натурально, по аналогии, Михаил. Статьи о Highcharts и JSONP присутствуют на сайте, проиллюстрированы примерами кода и живыми демками. Но учтите, JSONP на сегодняшний день уже мало кем поддерживается.

  • Михаил

    написал Михаил

    Вторник, 12 апреля 2016 11:36

    А как решить эту задачу, используя JSONP и Highcharts?

Оставить комментарий

Добавьте ваш комментарий