我正在为Android开发一个使用Google Java客户端库的自定义Adsense报告工具。我已经成功地进行了身份验证,并且可以对服务器进行API调用。但现在,当我收到响应时,我不知道如何解析它并正确地向用户显示结果。
根据javaDocs,AdsenseReportsGenerateRespons.getRows()生成一个List>,但我有点不知道如何正确解析它以获得:
-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()
这个网站上似乎没有人能帮上忙?!
您应该会发现我们的示例代码很有用: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.");
}
至于获取不同时间段的数据,您可能应该运行不同的报告,而不是将其全部塞进一个报告中,因为这需要不同的开始日期和结束日期。以下是它的工作原理:
- 今天的收益:将开始日期和结束日期设置为今天,将维度列表设置为仅DATE
- 昨天的收益:将开始和结束日期设置为昨天,将维度列表设置为仅date
- 最后7天:如果需要每天的数据,则将开始日期设置为7天前,将结束日期设置为今天,并将维度列表仅设置为date。如果你想汇总统计数据,你可能需要自己计算,因为WEEK和MONTH指的是日历周和日历月,而不是最后7天
- 上月:开始日期上月1日,结束日期当月最后一天,维度month
- 一直以来:您希望如何聚合?每月?然后将开始日期设置为1980-1-1,结束日期设置为今天,维度设置为MONTH
这篇博客文章应该有助于更好地理解报告概念:http://adsenseapi.blogspot.com/2011/11/adsense-management-api-diving-into.html
如果你在其他方面需要帮助,请告诉我!
就我对api的理解而言,它不是List<List>
。试试这个:
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
}
}