Разбор спискав Android? - PullRequest
0 голосов
/ 08 января 2012

Я занимаюсь разработкой пользовательского инструмента отчетов Adsense, используя Клиентская библиотека Google Java для Android .Я успешно прошел проверку подлинности и могу выполнять вызовы API на сервере.но теперь, когда я получаю ответ, я не знаю, как его проанализировать и правильно показать результат пользователю.

Согласно javaDocs, AdsenseReportsGenerateResponse.getRows () создает список> Но я немного растерялся, как правильно разобрать его, чтобы получить:

-Today's earnings
-Yesterday's earnings
-Last 7 days
-Last month
-From the beginning of time

Вот часть моего кода, связанная с вопросом

        Reports.Generate request = adsense.reports().generate(startDate, endDate);    

        request.setMetric(Arrays.asList("PAGE_VIEWS", "AD_REQUESTS", "AD_REQUESTS_COVERAGE", "CLICKS",
                "AD_REQUESTS_CTR", "COST_PER_CLICK", "AD_REQUESTS_RPM", "EARNINGS"));

        request.setDimension(Arrays.asList("DATE", "WEEK", "MONTH"));    
        request.setSort(Arrays.asList("+DATE"));

        AdsenseReportsGenerateResponse response = request.execute();

        //TODO: Here be dragons
        response.getRows();

Редактировать: Вот javaDoc, в котором упоминается getRow ()

Хм, кажется, никто на этом сайте не может помочь?!

Ответы [ 2 ]

2 голосов
/ 12 января 2012

Вы должны найти наш пример кода полезным: http://code.google.com/p/google-api-java-client/wiki/APIs#AdSense_Management_API

А именно, этот файл вас интересует: http://code.google.com/p/google-api-java-client/source/browse/adsense-cmdline-sample/src/main/java/com/google/api/services/samples/adsense/cmdline/GenerateReport.java?repo=samples

Вот фрагмент кода для печати вывода. Имейте в виду, это для приложения командной строки, но должно быть легко адаптируемым:

if ((response.getRows() != null) && !response.getRows().isEmpty()) {
  // Display headers.
  for (AdsenseReportsGenerateResponseHeaders header : response.getHeaders()) {
    System.out.printf("%25s", header.getName());
  }
  System.out.println();

  // Display results.
  for (List<String> row : response.getRows()) {
    for (String column : row) {
      System.out.printf("%25s", column);
    }
    System.out.println();
    }

  System.out.println();
} else {
  System.out.println("No rows returned.");
}

Что касается получения данных за разные периоды времени, вам, вероятно, следует запускать разные отчеты, а не объединять их в один, поскольку для этого потребуются разные даты начала и окончания. Вот как это работает:

  • Сегодняшний заработок: установите даты начала и окончания на сегодняшний день, установите в списке измерений просто ДАТА
  • Вчерашний заработок: установите дату начала и окончания вчерашнего дня, установите в списке измерений просто ДАТА
  • Последние 7 дней: если вам нужны данные за день, то вы можете установить дату начала на 7 дней назад, дату окончания на сегодня, а в списке измерений просто DATE. Если вы хотите агрегировать статистику, возможно, вам придется рассчитать ее самостоятельно, поскольку неделя и месяц относятся к календарной неделе и месяцу, а не к последним 7 дням.
  • Последний месяц: дата начала 1-го числа прошлого месяца, дата окончания последнего дня месяца, измерение МЕСЯЦ.
  • Все время: как вы хотите, чтобы это агрегировалось? В месяц? Затем установите начальную дату, скажем, 1980-1-1, конечную дату на сегодняшний день и измерение на МЕСЯЦ.

Этот пост в блоге должен немного лучше понять концепцию отчетности: http://adsenseapi.blogspot.com/2011/11/adsense-management-api-diving-into.html

Дайте мне знать, если вам нужна помощь с чем-нибудь еще!

2 голосов
/ 08 января 2012

Это не List<List>, насколько я понимаю API.Попробуйте это:

String[][] array = response.getRows();

for (int i = 0; i < array.getSize(); i++){

    String dimension = array[i][0];
    String metric = array[i][1];

    //Do what you want with them

}

Я пишу это, потому что, насколько я понимаю, API говорит, что у него есть список измерений с одним значением для строки и одним для метрики.

Если вы ожидаете, что в каждой строке будет несколько ячеек (что, как я полагаю, API не работает таким образом), вам нужно добавить еще одну для внутренней части и получить размер текущего списка, возможно, с чем-то вроде array[i].getSize()

Отпишитесь, если вам это не поможет.

Редактировать: теперь вижу.Попробуйте это:

List list = response.getRows();

for (int i = 0; i < list.size(); i++){

List<String> list2 = list.get(i);

for (int j = 0; j < list2.size(); j++){
String value = list2.get(j);
//Do what you want
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...