|
|||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
MetrikaApi
.
See:
Description
Interface Summary | |
---|---|
AccountApi | API для работы с аккаунтами, представителем которых является текущий пользователь |
DelegateApi | API для работы с делегатами |
FilterApi | API для работы с фильтрами. |
GoalApi | API для работы с целями |
GrantApi | API для работы с правами доступа |
MetrikaApi | API Яндекс.Метрики. |
OperationApi | |
Report | Отчёт системы Яндекс.Метрика. |
ReportBuilder | Построитель отчетов. |
ReportItem | Одна запись с результатами отчёта. |
Class Summary | |
---|---|
ApiFactory | Класс, создающий экземпляр MetrikaApi . |
Example | Примеры использования Metrika4j |
MetrikaDate | Представление даты в API Яндекс.Метрики. |
Enum Summary | |
---|---|
ReportBuilder.Group | Способ группировки данных по времени в отчёте |
ReportBuilder.TableMode | Способ представления результатов отчёта |
Reports | Отчёты, доступные в API Яндекс.Метрики |
Центральный класс Metrika4j - MetrikaApi
. В нем есть методы для работы с главными сущностями
Яндекс.Метрики:
счетчиками и отчетами. Работа с дополнительными сущностями (Цели, Фильтры, etc) вынесена в отдельные мини-API,
получаемые из главного
класса MetrikaApi
c помощью методов getXxxApi()
, например API целей MetrikaApi.getGoalApi()
.
Структура методов примерно соответствует структуре REST-вызовов. Один REST-вызов = один метод.
Аргументы, передаваемые в REST-вызов, соответствуют аргументам, передаваемым в методы API (кроме API работы
с отчетами).
Все сущности (счетчики, цели, фильтры, etc) - POJO объекты, без какой либо бизнес-логики.
JsonMapper
и JsonObject
. Готовые имплементации, включенные в Metrika4j - это
JacksonMapper
и OrgJsonMapper
MetrikaApi
c помощью ApiFactory
// Создаем экземпляр API, использующий Jackson JSON-processor и транспорт по умолчанию MetrikaApi api = ApiFactory.createMetrikaAPI("05dd3dd84ff948fdae2bc4fb91f13e22", new JacksonMapper());Если HTTP транспорт по умолчанию (использующий стандартный
HttpUrlConnection
из JDK) не устраивает,
можно создать свой транспорт, имплементировав HttpTransport
. Транспорт должен получать
OAuth токен при создании и передавать его в каждом запросе к серверам Метрики.
// Создаём транспорт, передав в него OAuth токен HttpTransport transport = new MyTransport("05dd3dd84ff948fdae2bc4fb91f13e22"); // Создаем экземпляр API, использующий Jackson JSON-processor и заданный транспорт MetrikaApi api = ApiFactory.createMetrikaAPI(transport, new JacksonMapper());Полученный экземпляр API полностью thread-safe, поэтому на все приложение достаточно только одного экземпляра.
// Получаем список счетчиков в текущем аккаунте Counter[] myCounters = api.getCounters();По умолчанию в полученных счетчиках не будет заполнена часть полей (цели, фильтры, зеркала и т.п.). Чтобы заполнить их, надо при чтении счетчиков указать, какая детализация нужна
// Получаем счетчики с заполненными целями и фильтрами Counter[] myCounters = api.getCounters(CounterDetails.goals, CounterDetails.filters); // Получаем счетчики с полной детализацией Counter[] detailedCounters = api.getCounters(CounterDetails.values());При повышении детализации будет увеличиваться время ответа и объем передаваемой информации, поэтому лучше не злоупотреблять высокой детализацией.
// Создание счетчика Counter newCounter = new Counter(); newCounter.setSite("mysite.ru"); newCounter.setName("Мой сайт"); Counter createdCounter = api.createCounter(newCounter); // В createdCounter содержится новый счетчик, загруженный из Метрики, со всем значениями полей, проставленными Метрикой System.out.println(createdCounter.getId());
// Удаление счетчика api.deleteCounter(createdCounter.id);
Reports
. Для построения отчета надо вызвать метод
MetrikaApi.makeReportBuilder(Reports, int)
, который вернет объект ReportBuilder
- построитель отчета.
В построителе отчета можно задать параметры отчета (временной интервал, сортировку и т.п.). Когда все параметры будут
установлены, вызывайте метод ReportBuilder.build()
, который отправит запрос на сервер API
Метрики и вернет результат.
// Создаем построитель отчета "популярное содержимое" для счетчика с id=2138128 ReportBuilder builder = api.makeReportBuilder(Reports.contentPopular, 2138128); // Задаём параметры отчета (отчет за неделю) и строим отчет Report report = builder.withDateFrom(MetrikaDate.yesterday()).withDateTo(MetrikaDate.today()).build();Отчет возвращается в виде объекта
Report
, представляющего собой таблицу с результатами, плюс некоторая
дополнительная информация (итоги, интервал дат, к которым относится отчет и т.п.). Каждая строка таблицы результатов -
объект ReportItem
, данные из которого можно получить одним из методов getXXX(String fieldName)
(аналогично получению значений из JDBC ResultSet). Имена полей и возвращаемые дополнительные данные надо уточнять
для каждого отчета в документации на API Яндекс.Метрики
// Вытаскиваем результаты из отчета ReportItem[] items = report.getData(); for (ReportItem item : items) { System.out.printf("pageViews: %4d, url: %s", item.getInt("page_views"), item.getString("url")).println(); }Некоторые отчеты бывают не только табличные, но и древовидные. Для получения древовидного отчета надо задать в
ReportBuilder
соответствующий режим.
// Строим такой же отчет, но древовидный report = builder.withTableMode(ReportBuilder.TableMode.tree).build(); // Отображаем первые два уровня items = report.getData(); for (ReportItem item : items) { // Первый уровень System.out .printf("Level 1, pageViews: %4d, url: %s", item.getInt("page_views"), item.getString("url")) .println(); ReportItem[] children = item.getArray("chld"); if (children != null) { for (ReportItem child : children) { // Второй уровень System.out .printf(" Level 2, pageviews: %4d, url: %s", child.getInt("page_views"), child.getString("url")) .println(); } } }
Metrika4jException
.
Ошибки могут возникнуть только в момент обращения к серверам API Метрики. Картина такова:
JsonSerializationException
TransportException
AuthException
ParseException
ServerException
, в который передаются возвращенные сервером ошибки NoDataException
MetrikaApi
Каждый полученный отчет потом должен обрабатываться в рамках одного потока, т.к. thread safety библиотек, выгружающих
данные из JSON ответов, не гарантируется.
|
|||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |