|
|||||||||
| 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 и OrgJsonMapperMetrikaApi 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 Метрики. Картина такова:
JsonSerializationExceptionTransportExceptionAuthExceptionParseExceptionServerException, в который передаются возвращенные сервером ошибки NoDataExceptionMetrikaApi
Каждый полученный отчет потом должен обрабатываться в рамках одного потока, т.к. thread safety библиотек, выгружающих
данные из JSON ответов, не гарантируется.
|
|||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES | ||||||||