Данный материал ставит своей целью предложить многочисленным пользователям (SEO-специалистам, владельцам и менеджерам интернет-магазинов, блогерам) веб-аналитики от компании Яндекс - простой и удобный способ доступа к практически любым отчетам Метрики посредством гибкого API Yandex.Metrica, работа которого, в общем, (если закрыть глаза на некоторые траблы в ночное по Москве время) не вызывает нареканий. Рабочий пример приложения, написанного на Ruby, всегда доступен для загрузки в гитхабе автора, репозиторий получил название Ruby-CLI-App-for-Yandex-Metrica-API.
Не будем здесь останавливаться на технических подробностях установки и использования Ruby в различных средах, будь то Windows, macOS или Linux; в Сети опубликовано поистине огромное число статей, подробно освещающих - например - эту процедуру, так что не думаю, что данный момент способен вызвать проблемы. Поэтому далее попробую короткой строкой прокомментировать только код и логику приложения, написанного таким образом, чтобы представлять из себя способный ко многим изменениям и довольно гибкий конструктор.
01.11.2020 UPD
К сожалению, пользователи нередко, как выяснилось, испытывают проблемы с запуском этого скрипта (а также аналогичного, заточенного под API Рекламной Службы Яндекса), работая в операционной системе Windows (в линуксах проблем нет, насколько знаю). Не готов, увы, предложить радикальных средств решения. Но набросал веб-реализацию этого написанного на Ruby кода, чтобы каждый желающий мог попробовать, потратив всего лишь пару минут: сервис не требует регистрации, никаких данных не сохраняет, прост и удобен, welcome по ссылке. О любых траблах, пусть даже небольших - большая просьба сообщить, отписавшись в комментариях либо на форуме.
Как получить аналитику API Yandex.Metrica в командной строке
Начнем с файла start.rb, который, собственно, и печатает в консоли данные Яндекс.Метрика, вызывая методы Ruby-CLI-App-for-Yandex-Metrica-API и получая через их посредство данные Yandex.Metrica; если припомнить терминологию MVC, это - наша вьюха. В качестве примера я наполнил этот файл пятью или шестью вызовами, сконструированными по такому вот несложному принципу:
Analytics.query('ym:s:externalRefererPathLevel1')['data'].first(10).each do |i|
puts i['dimensions'][0]['name']
puts i['metrics'][0].to_i
end
Варианты: коли уж упомянул о гибкости и масштабируемости скрипта, попробуем получить геотаргетинг посетителей сайта, исключив из него те или иные страны; например, исключаем русскоговорящую аудиторию, дабы исследовать интерес к блогу представителей иных (выведем ТОП-10) стран. Опять же, ничего сложного:
Analytics.query('ym:s:regionCountry')['data'].first(13).each do |i|
next unless i['dimensions'][0]['name'] != 'Russia' &&
i['dimensions'][0]['name'] != 'Ukraine' &&
i['dimensions'][0]['name'] != 'Belarus'
puts i['dimensions'][0]['name']
puts i['metrics'][0].to_i
end
Или, наоборот, получим число посетителей только из одной страны:
Analytics.query('ym:s:regionCountry')['data'].each do |i|
if i['dimensions'][0]['name'] == 'United States'
puts i['dimensions'][0]['name']
puts i['metrics'][0].to_i
end
end
Что здесь происходит? - ничего сложного: вызывается метод query класса Analytics, передавая в качестве аргумента строку 'ym:s:externalRefererPathLevel1', являющуюся т.н. группировкой API Метрика (полный список группировок и метрик API Yandex.Metrica см. здесь). Класс описан в файле analytics.rb:
class Analytics
def self.query(v)
YandexMetrika.dimension_or_preset?(ENV['AUTH_TOKEN_METRIKA'], ENV['IDS_METRIKA'], v)
end
end
Основное предназначение данного метода - подставлять в запрос токен доступа и идентификатор вашего счетчика Яндекс.Метрика, которые перечислены в файле .env; здесь работает ruby gem 'dotenv' , который, наряду с двумя другими джемами -
require 'dotenv/load'
require 'typhoeus'
require 'json'
- является необходимым для работы нашего консольного клиента API Yandex.Metrica. Установка такого рода зависимостей обычно крайне несложна; в Linux, например, вот так:
gem install dotenv
, в Windows... не намного сложнее. Погуглите, все на самом деле элементарно, было бы желание разобраться.
Как видим, в данном случае идет обращение уже к методу класса YandexMetrika, причем метод носит длинное название dimension_or_preset?, вполне точно передающее его смысл и предназначение. Суть в том, что перечень параметров, используемых при запросе к API Яндекс.Метрика, способен меняться в зависимости от тех данных, которые мы хотим получить; желая получить список рефереров (с которого мы начали, помните? - группировка 'ym:s:externalRefererPathLevel1', первый уровень URL внешнего реферера) или, например, перечень стран, откуда на наш сайт пришли визитеры ('ym:s:regionCountry') - параметры запроса способны выглядеть, например, следующим образом:
{
'ids' => ids,
'metrics' => 'ym:s:visits',
'dimensions' => dimension,
'lang' => 'en',
'date1' => '1daysAgo',
'date2' => 'yesterday',
'accuracy' => 'full'
}
, если же нам хотелось бы получить список ключевых фраз ('sources_search_phrases'), то:
{
'ids' => ids,
'preset' => preset,
'date1' => '1daysAgo',
'date2' => 'yesterday',
'accuracy' => 'full'
}
Как видите, 'dimensions' заменен на 'preset', 'metrics' же и 'lang' нам здесь вообще (впрочем, дело вкуса) без надобности. Таким образом, метод dimension_or_preset? призван определить, чем именно является переданный аргумент v; как видите, я попросту ищу в строке вхождение 'sources', используя условие: если вхождение имеет место быть, то это preset, если нет - dimension, и уже в зависимости от этого вызываем следующий, финальный метод того же класса. Излишне говорить, что описанное - далеко не единственное из возможных решений подобного рода:
class YandexMetrika
def self.dimension_or_preset?(token, ids, v)
params = if v.include? 'sources'
{
'ids' => ids,
'preset' => v,
'date1' => '1daysAgo',
'date2' => 'yesterday',
'accuracy' => 'full'
}
else
{
'ids' => ids,
'metrics' => 'ym:s:visits',
'dimensions' => v,
'lang' => 'en',
'date1' => '1daysAgo',
'date2' => 'yesterday',
'accuracy' => 'full'
}
end
inquiry(token, params)
end
def self.inquiry(token, params)
response = Typhoeus::Request.get(
'https://api-metrika.yandex.ru/stat/v1/data',
params: params,
headers: {
Accept: 'application/x-yametrika+json',
Authorization: 'OAuth' + token
}
)
JSON.parse(response.body)
end
end
Собственно, в повседневной работе ничто не мешает SEO-специалисту набросать в скрипте столько методов, сколько ему нужно, не прибегая к проверкам; я лишь пытался следовать принципу DRY (Don't Repeat Yourself), публикуя код в своем GitHub:
Ну вот как-то так. В ближайшее время постараюсь подключить в приложении аналогичным способом иные методы API Яндекс.Метрика, в том числе adfox... заходите на огонек этого блога. Да, если кто-то еще не в курсе, как получить токен доступа - в левом сайдбаре страницы доступна, в числе прочих, ссылка на материал Получаем отладочный токен на OAuth-сервере Яндекса.