Все методы API отчетов позволяют возвращать результаты, рассчитанные не только по всему сайту, но и по отдельному сегменту данных: для задания сегмента используется параметр filters. Например, для сегментации по ключевой фразе или части ключевой фразы API Yandex.Metrica зададим фильтры следующим образом: filters=ym:s:<attribution>SearchPhrase=@'phrase', добавив эту строку к параметрам запроса.
Но, пожалуй, мы добьемся результата значительно проще, если сегментируем получение результатов API Yandex.Metrica как перечень ключевых фраз, в течение последнего года приведших пользователя на интересующую нас страницу. В данном случае это будет прямо-таки животрепещущая статья форума, озаглавленная Как получить API key Google Maps без привязки платежного аккаунта.
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages': ['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Keywords', 'Visits'],
<?php
function curl_file_get_contents($url)
{
$authToken = '****************************';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-yametrika+json', 'Authorization: OAuth' . $authToken]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$obj = curl_exec($ch);
curl_close($ch);
return $obj;
}
$url = 'https://api-metrika.yandex.ru/stat/v1/data';
$params = array(
'ids' => '************',
'preset' => 'sources_search_phrases',
'date1' => '300daysAgo',
'date2' => 'yesterday',
'filters' => "ym:pv:URL=='https://masterpro.ws/forum/38-web-sajt-svoimi-rukami/5041-kak-poluchit-api-key-google-maps-bez-privyazki-platezhnogo-akkaunta'"
);
$obj = curl_file_get_contents($url . '?' . http_build_query($params));
$obj = json_decode($obj, true);
for ($i = 0;$i < count($obj['data']);$i++)
{
echo '[', "'", str_replace("'","",$obj['data'][$i]['dimensions'][0]['name']), "'", ', ', $obj['data'][$i]['metrics']['0'], '],';
}
?>
]);
var options = {
title: 'Visits to website',
is3D: true,
};
var chart = new google.visualization.PieChart(document.getElementById('piechart_3d'));
chart.draw(data, options);
}
</script>
<div id="piechart_3d" style="width: auto; height: 500px;"></div>
Актуально, не правда ли? Взгляните на чарт, это live demo, напрямую получающая данные API Yandex.Metrica. Автору остается лишь удивиться отсутствию импортозамещения в данном контексте: используйте Яндекс карты, дорогие товарищи, это вполне достойный продукт.
Небольшая ремарка. Обнаружилось, что один и тот же скрипт с течением времени получает от API Yandex.Metrica различные данные, причем - несмотря на то, что используется один и тот же диапазон дат. Дабы избежать подобного, вы можете попробовать добавить в запрос этот параметр:
'accuracy' => 'full'
Но - будьте готовы к тому, что объем данных в объекте JSON значительно уменьшится.
Поддержка поясняет: поскольку используются фильтры просмотра отдельной страницы в сочетании с группировкой по поисковым фразам - API Yandex.Metrica включает защиту от деанона.
Иными словами, данные, потенциально способные деанонимизировать пользователей - социально-демографические данные, адреса страниц входа, поисковые фразы, информация о роботах, etc - раскрываются не полностью. Такого рода информация доступна, если количество посетителей в выборке больше 10. Правило конфиденциальности может применяться к группировкам, метрикам или условиям сегментации, как в отчетах веб-интерфейса, так и в API отчетов (например, если ключ contains_sensitive_data указывает значение true - возможно отсутствие конфиденциальных данных в ответе).
Описанное ограничение несложно обойти, удалив из запроса параметр accuracy. В этом случае данные округляются в соответствии с выборкой, и точных данных по визитам и посетителям не будет; тем не менее, перечень поисковых фраз (вероятно, все равно неполный) вы получите. В силу всего вышесказанного, получив JSON единожды, я убрал запрос, оставив на веб-страничке лишь статичную часть скрипта (и это, таким образом, теперь не живая демка).