Massimiliano Assante 2019-05-06 15:34:14 +00:00
parent 372605d175
commit 7c58db8e8b
1 changed files with 46 additions and 38 deletions

View File

@ -135,8 +135,7 @@ public class VREAccessesHarvester extends BasicHarvester {
AnalyticsReportCredentials credentialsFromD4S = getAuthorisedApplicationInfoFromIs(); AnalyticsReportCredentials credentialsFromD4S = getAuthorisedApplicationInfoFromIs();
AnalyticsReporting service = initializeAnalyticsReporting(credentialsFromD4S); AnalyticsReporting service = initializeAnalyticsReporting(credentialsFromD4S);
HashMap<String,GetReportsResponse> responses = getReportResponses(service, credentialsFromD4S.getViewIds(), HashMap<String,List<GetReportsResponse>> responses = getReportResponses(service, credentialsFromD4S.getViewIds(), dateRange);
dateRange);
List<VREAccessesReportRow> totalAccesses = new ArrayList<>(); List<VREAccessesReportRow> totalAccesses = new ArrayList<>();
for(String view : responses.keySet()) { for(String view : responses.keySet()) {
@ -172,30 +171,38 @@ public class VREAccessesHarvester extends BasicHarvester {
* @return GetReportResponse The Analytics Reporting API V4 response. * @return GetReportResponse The Analytics Reporting API V4 response.
* @throws IOException * @throws IOException
*/ */
private static HashMap<String,GetReportsResponse> getReportResponses(AnalyticsReporting service, private static HashMap<String,List<GetReportsResponse>> getReportResponses(AnalyticsReporting service,
List<String> viewIDs, DateRange dateRange) throws IOException { List<String> viewIDs, DateRange dateRange) throws IOException {
HashMap<String,GetReportsResponse> reports = new HashMap<>(); HashMap<String,List<GetReportsResponse>> reports = new HashMap<>();
// Create the Metrics object. // Create the Metrics object.
Metric sessions = new Metric().setExpression("ga:pageviews").setAlias("pages"); Metric sessions = new Metric().setExpression("ga:pageviews").setAlias("pages");
com.google.api.services.analyticsreporting.v4.model.Dimension pageTitle = new com.google.api.services.analyticsreporting.v4.model.Dimension().setName("ga:pagePath"); com.google.api.services.analyticsreporting.v4.model.Dimension pageTitle = new com.google.api.services.analyticsreporting.v4.model.Dimension().setName("ga:pagePath");
for(String view : viewIDs) { for(String view : viewIDs) {
List<GetReportsResponse> gReportResponses = new ArrayList<>();
logger.info("Getting data from Google Analytics for viewid: " + view); logger.info("Getting data from Google Analytics for viewid: " + view);
// Create the ReportRequest object. boolean iterateMorePages = true;
ReportRequest request = new ReportRequest().setViewId(view.trim()).setDateRanges(Arrays.asList(dateRange)) String nextPageToken = null;
.setMetrics(Arrays.asList(sessions)).setDimensions(Arrays.asList(pageTitle)); while (iterateMorePages) {
// Create the ReportRequest object.
ArrayList<ReportRequest> requests = new ArrayList<ReportRequest>(); ReportRequest request = new ReportRequest().setViewId(view.trim()).setDateRanges(Arrays.asList(dateRange))
requests.add(request); .setMetrics(Arrays.asList(sessions)).setDimensions(Arrays.asList(pageTitle));
request.setPageSize(1000);
// Create the GetReportsRequest object. request.setPageToken(nextPageToken);
GetReportsRequest getReport = new GetReportsRequest().setReportRequests(requests); ArrayList<ReportRequest> requests = new ArrayList<ReportRequest>();
requests.add(request);
// Call the batchGet method. // Create the GetReportsRequest object.
GetReportsResponse response = service.reports().batchGet(getReport).execute(); GetReportsRequest getReport = new GetReportsRequest().setReportRequests(requests);
reports.put(view, response); // Call the batchGet method.
GetReportsResponse response = service.reports().batchGet(getReport).execute();
nextPageToken = response.getReports().get(0).getNextPageToken();
iterateMorePages = (nextPageToken != null);
logger.debug("got nextPageToken: "+nextPageToken);
gReportResponses.add(response);
}
reports.put(view, gReportResponses);
} }
// Return the response. // Return the response.
return reports; return reports;
@ -211,30 +218,31 @@ public class VREAccessesHarvester extends BasicHarvester {
* *
* @param response An Analytics Reporting API V4 response. * @param response An Analytics Reporting API V4 response.
*/ */
private static List<VREAccessesReportRow> parseResponse(String viewId, GetReportsResponse response) { private static List<VREAccessesReportRow> parseResponse(String viewId, List<GetReportsResponse> responses) {
logger.debug("parsing Response for " + viewId); logger.debug("parsing Response for " + viewId);
List<VREAccessesReportRow> toReturn = new ArrayList<>(); List<VREAccessesReportRow> toReturn = new ArrayList<>();
for (GetReportsResponse response : responses) {
for (Report report: response.getReports()) { for (Report report: response.getReports()) {
List<ReportRow> rows = report.getData().getRows(); List<ReportRow> rows = report.getData().getRows();
if (rows == null) { if (rows == null) {
logger.warn("No data found for " + viewId); logger.warn("No data found for " + viewId);
} }
else { else {
for (ReportRow row: rows) { for (ReportRow row: rows) {
String dimension = row.getDimensions().get(0); String dimension = row.getDimensions().get(0);
DateRangeValues metric = row.getMetrics().get(0); DateRangeValues metric = row.getMetrics().get(0);
VREAccessesReportRow var = new VREAccessesReportRow(); VREAccessesReportRow var = new VREAccessesReportRow();
boolean validEntry = false; boolean validEntry = false;
String pagePath = dimension; String pagePath = dimension;
if (pagePath.startsWith("/group") || pagePath.startsWith("/web")) { if (pagePath.startsWith("/group") || pagePath.startsWith("/web")) {
var.setPagePath(dimension); var.setPagePath(dimension);
validEntry = true; validEntry = true;
} }
if (validEntry) { if (validEntry) {
var.setVisitNumber(Integer.parseInt(metric.getValues().get(0))); var.setVisitNumber(Integer.parseInt(metric.getValues().get(0)));
toReturn.add(var); toReturn.add(var);
}
} }
} }
} }