Google Analytics API : PHP

구글 애널리틱스가 아닌 외부에서 데이터에 접근하기 위해 PHP로 구글 애널리틱스 API 사용법을 정리해보겠습니다.

1.사이트를 구글 애널리틱스 콘솔에 등록
2.구글 개발자 콘솔에서 새로운 프로젝트 생성
3.프로젝트 관리자에서 서비스 계정 생성 -> 키파일 다운로드
4.구글 애널리틱스 콘솔에 3번에서 생성된 계정을 사용자에 추가
5.API 호출하는 PHP 코드 작성

1.새로운 프로젝트 생성

https://console.developers.google.com/flows/enableapi?apiid=analyticsreporting.googleapis.com&credential=client_key

새로운프로젝트 생성

[계속] 다음에 [사용자 인증 정보로 이동] 다음에 나오는 인증 정보 추가 화면은 그냥 넘어갑니다.

2.서비스 계정 생성 및 키파일 다운로드

API를 통해 데이터를 송수신해줄 서비스 계정을 생성합니다.
또 보안을 위해 키파일로 사용할 파일도 다운로드 합니다.(JSON)
서비스계정생성

서비스 계정 세부정보는 이름만 입력하고 다음으로 진행합니다.
이 서비스 계정에 대한 엑세스 권한 부여도 다음으로 진행합니다.

키만들기

다음화면에서 [키만들기]를 선택하고 JSON 유형으로 다운로드 받고 완료합니다.
완료화면에서 나타나는 서비스 계정 목록중 [이메일]을 따로 복사해 둡니다.

3.애널리틱스 콘솔에 사용자 추가

콘솔에사용자추가

애널리틱스 콘솔 [관리] 화면에서 [보기 사용자 관리]를 선택합니다.
[사용자 추가]를 선택하고 이메일에 2번 항목에서 복사했던 이메일을 추가합니다.

4.PHP 코드 작성

PHP 코드를 작성하기 위해 몇가지 준비를 해아합니다.

Google API Library for PHP : 구글 애널리틱스 PHP용 API 라이브러리
VIEW_ID : 추적하려는 애널리틱스 콘솔 ID
키파일 : 보안을 위해 필요한 키파일
가져오려는 데이터 항목

API 다운로드 : https://github.com/googleapis/google-api-php-client
VIEW ID 확인 : https://ga-dev-tools.appspot.com/account-explorer/
데이터 항목/조건 목록 : https://ga-dev-tools.appspot.com/dimensions-metrics-explorer/

Source

<?php

// Load the Google API PHP Client Library.
require_once __DIR__ . '/vendor/autoload.php';

$analytics = initializeAnalytics();
$response = getReport($analytics);
printResults($response);


// 애널리틱스 호출
function initializeAnalytics() {
    $KEY_FILE_LOCATION = __DIR__.'<키파일 이름>';

    $client = new Google_Client();
    $client->setApplicationName("Hello Analytics Reporting");
    $client->setAuthConfig($KEY_FILE_LOCATION);
    $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
    $analytics = new Google_Service_AnalyticsReporting($client);

    return $analytics;
}


/**
* Queries the Analytics Reporting API V4.
*
* @param service An authorized Analytics Reporting API V4 service object.
* @return The Analytics Reporting API V4 response.
*/

// 애널리틱스 데이터 가져오기
function getReport($analytics) {

    $VIEW_ID = "<VIEW ID>";

    // Create the DateRange object.

    $dateRange = new Google_Service_AnalyticsReporting_DateRange();
    $dateRange->setStartDate("today");
    $dateRange->setEndDate("today");

    // Create the Metrics object.
    $sessions = new Google_Service_AnalyticsReporting_Metric();
    $sessions->setExpression("ga:sessions");
    $sessions->setAlias("sessions");

    $users = new Google_Service_AnalyticsReporting_Metric();
    $users->setExpression("ga:users");
    $users->setAlias("users");

    $pageviews = new Google_Service_AnalyticsReporting_Metric();
    $pageviews->setExpression("ga:pageviews");
    $pageviews->setAlias("pageviews");

    $ssd = new Google_Service_AnalyticsReporting_Metric();
    $ssd->setExpression("ga:sessionDuration");
    $ssd->setAlias("session_duration");

    //Create the Dimensions object.
    $browser = new Google_Service_AnalyticsReporting_Dimension();
    $browser->setName("ga:browser");

    $frf = new Google_Service_AnalyticsReporting_Dimension();
    $frf->setName("ga:fullReferrer");

    $userType = new Google_Service_AnalyticsReporting_Dimension();
    $userType->setName("ga:userType");

    // Create the ReportRequest object.
    $request = new Google_Service_AnalyticsReporting_ReportRequest();
    $request->setViewId($VIEW_ID);
    $request->setDateRanges($dateRange);
    $request->setDimensions(array($browser, $frf, $userType));
    $request->setMetrics(array($sessions, $pageviews, $users, $ssd));

    $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
    $body->setReportRequests(array($request));
    return $analytics->reports->batchGet( $body );
}

// 출력
function printResults($reports) {
    for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
        $report = $reports[ $reportIndex ];
        $header = $report->getColumnHeader();
        $dimensionHeaders = $header->getDimensions();
        $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
        $rows = $report->getData()->getRows();

        for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
            $row = $rows[ $rowIndex ];
            $dimensions = $row->getDimensions();
            $metrics = $row->getMetrics();
            for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
                print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "<br>");
            }
            for ($j = 0; $j < count($metrics); $j++) {
                $values = $metrics[$j]->getValues();
                for ($k = 0; $k < count($values); $k++) {
                    $entry = $metricHeaders[$k];
                    print($entry->getName() . ": " . $values[$k] . "<br>");
                }
            }   
        }
    }
}
?>

API와 키파일, VIEW ID를 모두 입력하고 호출하면 출력되는걸 확인할 수 있습니다.
Metric과 Demension 목록은 위의 데이터 항목/조건 목록 링크에서 더 볼 수 있습니다.