일상일지

구글 애널리틱스 api chartjs 적용하기(실전예제) 본문

개발

구글 애널리틱스 api chartjs 적용하기(실전예제)

서호Seoho 2020. 7. 30. 18:01
반응형

https://whoa0987.tistory.com/9

 

구글 애널리틱스 api(Google Analytics api, ga api) 연동해서 별도의 로그인 없이 그래프 만들기

구글 애널리틱스 api 연동으로 제가 소개해드릴 방법은 두가지입니다. 1. Javascript 이용해서 데이터 받아오기(따로 구글 로그인이 필요함, 로그인 버튼 둬야함) 2. Java 이용해서 데이터 받아오기(키

whoa0987.tistory.com

위 글에 이은 내용입니다.

Java로 ga api 통신하기 예제입니다.

 

 

 

 

jsp에 선언

<canvas id="siteUse"></canvas>

 

 

 

js에 애널리틱스 데이터 가져오는 queryReports함수, 차트를 그리는 drawChart함수

queryReports : function(startDate, endDate, expression, name, label) {
			
			var key = new Array();
			var value = new Array();
			
			var param = {
					startDate : startDate,
					endDate : endDate,
					metrics : expression,
					dimensions : name
				}
			$.ajax({
				method:'GET',
				dataType:'json',
				url:_ctx+"컨트롤러 호출",
				data:param,
				async:false,
				success:function(result){
					for(var i=0; i<result.length; i++){
				    	key[i]=result[i].dimensions[0];
				    	value[i]=result[i].metrics[0].values[0];
					}
					 
				},
				error:function(error){
					
				}
			})

		    	main.drawChart(key,value,label); 
		},
		
		drawChart : function(key, value, label_name){
			
			for(var i=0; i<key.length; i++){
				var year=key[i].substring(0,4);
				var month=key[i].substring(4,6);
				var date=key[i].substring(6,8);
				
				key[i]=month+'-'+date;
			}
			
			 /*차트*/
			 var ctx = document.getElementById('siteUse').getContext('2d');
			 var myChart = new Chart(ctx, {
			     type: 'line',
			     data: {
			         labels: key,
			         datasets: [{
			        	 label : label_name,
			             data: value,
			             backgroundColor: [
			                 'rgba(255, 255, 255, 0)'
			             ],
			             borderColor: [
			                 'rgba(244, 121, 42, 1)'
			             ],
			             borderWidth: 1
			         }]
			     },
			     options: {
			         scales: {
			             yAxes: [{
			                 ticks: {
			                     beginAtZero: true
			                 },
			             }]
			         }
			     }
			 });

			
		},

 

 

 

컨트롤러에서 호출된 HelloAnalytics 클래스

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;

import java.io.FileInputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import com.google.api.services.analyticsreporting.v4.AnalyticsReportingScopes;
import com.google.api.services.analytics.model.FilterExpression;
import com.google.api.services.analyticsreporting.v4.AnalyticsReporting;

import com.google.api.services.analyticsreporting.v4.model.ColumnHeader;
import com.google.api.services.analyticsreporting.v4.model.DateRange;
import com.google.api.services.analyticsreporting.v4.model.DateRangeValues;
import com.google.api.services.analyticsreporting.v4.model.GetReportsRequest;
import com.google.api.services.analyticsreporting.v4.model.GetReportsResponse;
import com.google.api.services.analyticsreporting.v4.model.Metric;
import com.google.api.services.analyticsreporting.v4.model.Dimension;
import com.google.api.services.analyticsreporting.v4.model.MetricHeaderEntry;
import com.google.api.services.analyticsreporting.v4.model.OrderBy;
import com.google.api.services.analyticsreporting.v4.model.Report;
import com.google.api.services.analyticsreporting.v4.model.ReportRequest;
import com.google.api.services.analyticsreporting.v4.model.ReportRow;

public class HelloAnalytics {
  private static final String APPLICATION_NAME = "Hello Analytics Reporting";
  private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
  static String path = HelloAnalytics.class.getResource("").getPath();
  private static final String KEY_FILE_LOCATION = "json 키 파일 경로";
  private static final String VIEW_ID = "view아이디";
  public static List<ReportRow> main(Map<String, Object> params) {
	  
	  List<ReportRow> rows = null;
    try {
      //인증
      AnalyticsReporting service = initializeAnalyticsReporting();
	  //매트릭스 디멘션 등등 적용
      GetReportsResponse response = getReport(service,params);
      //결과값
      rows = printResponse(response);
      
      
    } catch (Exception e) {
      e.printStackTrace();
    }
    
    //가져온 결과값을 컨트롤러로 리턴
    return rows;
  }

  /**
   * Initializes an Analytics Reporting API V4 service object.
   *
   * @return An authorized Analytics Reporting API V4 service object.
   * @throws IOException
   * @throws GeneralSecurityException
   */
  private static AnalyticsReporting initializeAnalyticsReporting() throws GeneralSecurityException, IOException {

    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    GoogleCredential credential = null;
    try{
    	credential = GoogleCredential
                .fromStream(new FileInputStream(KEY_FILE_LOCATION))
                .createScoped(AnalyticsReportingScopes.all());
    }catch(IOException e){
    	System.out.println(e);
    }finally {
    }
    

    // Construct the Analytics Reporting service object.
    return new AnalyticsReporting.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APPLICATION_NAME).build();
  }

  /**
   * Queries the Analytics Reporting API V4.
   *
   * @param service An authorized Analytics Reporting API V4 service object.
   * @return GetReportResponse The Analytics Reporting API V4 response.
   * @throws IOException
   */
  @SuppressWarnings("null")
private static GetReportsResponse getReport(AnalyticsReporting service, Map<String, Object> params) throws IOException {
    // Create the DateRange object.
    DateRange dateRange = new DateRange();
    dateRange.setStartDate((String) params.get("startDate"));
    dateRange.setEndDate((String) params.get("endDate"));

    // Create the Metrics object.
    Metric sessions = new Metric()
        .setExpression((String) params.get("metrics"));

    Dimension pageTitle = new Dimension().setName((String) params.get("dimensions"));
    
    List<OrderBy> orderBys= null;
    
    if(params.get("fieldName")!=null) {
    	orderBys= new ArrayList<>();
    	OrderBy orderBy= new OrderBy().setFieldName((String) params.get("fieldName")).setSortOrder((String) params.get("sortOrder")).setOrderType((String)params.get("orderType"));
    	orderBys.add(orderBy);
    }
    
    // Create the ReportRequest object.
    
	ReportRequest request = new ReportRequest()
        .setViewId(VIEW_ID)
        .setDateRanges(Arrays.asList(dateRange))
        .setMetrics(Arrays.asList(sessions))
        .setDimensions(Arrays.asList(pageTitle))
        .setFiltersExpression((String) params.get("filter"))
        .setIncludeEmptyRows(true)
        .setOrderBys(orderBys);

    ArrayList<ReportRequest> requests = new ArrayList<ReportRequest>();
    requests.add(request);

    // Create the GetReportsRequest object.
    GetReportsRequest getReport = new GetReportsRequest()
        .setReportRequests(requests);

    // Call the batchGet method.
    GetReportsResponse response = service.reports().batchGet(getReport).execute();

    // Return the response.
    return response;
  }

  /**
   * Parses and prints the Analytics Reporting API V4 response.
   *
   * @param response An Analytics Reporting API V4 response.
 * @return 
   */
  private static List<ReportRow> printResponse(GetReportsResponse response) {

    for (Report report: response.getReports()) {
      List<ReportRow> rows = report.getData().getRows();

      	return rows;
    }
	return null;
  }
}

 

 

 

 

 

결과

 

 

 

 

잘나온다.

반응형
Comments