구글에서 웹사이트 방문 분석을 할 수 있는 기능을 제공하는데, 관리사이트에 들어가서 봐야하는 별도 페이지 사용 이슈가 있다.
이 데이터를 구글 스프레드 시트나 원하는 페이지에서 불러와 사용하기 위한 api 가 Google Analytics API 다.
PHP 5.4 이상이 필요하다고하여 5.3에서 업데이트 하는데에도 Ubuntu 12.04 에서 지원이 되지 않아 상당한 시간이 걸렸다.
https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-php
1. centos 6.9에서 PHP 5.6으로 업그레이드 한 뒤, 구글 개발자 콘솔에서 https://console.developers.google.com/start/api?id=analyticsreporting.googleapis.com&credential=client_key 아날리틱스 관련 프로젝트를 생성하여 API를 사용할 수 있게 해야한다.(키 파일을 받아 서버에 올린다.)
2. 이제 서비스 계정으로 들어가 데이터를 송수신해 줄 계정을 만들고 https://console.developers.google.com/permissions/serviceaccounts 아날리틱스 관리자 페이지에 등록 및 읽기 및 분석 권한을 부여한다.(웹사이트 분석 스크립트도 해당 사이트에 적용해야 데이터가 수집되므로 기존 등록된 스크립트와 별개로 추가 적용한다.)
3. PHP 소스파일을 Composer를 이용해 설치할 수 있는데, 이를 사용하려면 Composer를 설치해야 한다.
4. composer require google/apiclient:^2.0 여기까지 하면 50% 정도 한 것이다.
5. 다행이 구글에서 visual 하게 view를 잘 제공해 줘서 analytics 관련한 https://ga-dev-tools.appspot.com/account-explorer/ 계정을 확인 가능하다. 이 계정의 숫자로 된 view id를 실제 사용할 소스에 넣는다.
6. 예제 코드를 실행해 본다.(아래 코드는 예제에 1가지 metric과 dimension만 제공하기 때문에 Dimensions & Metrics Explorer를 통해 몇가지를 더 추가해서 사용했다. 데이터가 좀 더 쌓여야 더 필요한 항목 추가가 가능할 것 같다.
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
// Load the Google API PHP Client Library.
require_once __DIR__ . '/vendor/autoload.php';
$analytics = initializeAnalytics();
$response = getReport($analytics);
printResults($response);
/**
* Initializes an Analytics Reporting API V4 service object.
*
* @return An authorized Analytics Reporting API V4 service object.
*/
function initializeAnalytics()
{
// Use the developers console and download your service account
// credentials in JSON format. Place them in this directory or
// change the key file location if necessary.
$KEY_FILE_LOCATION = __DIR__ . '/key.json';//키 파일은 개발자 콘솔 부분에서 다운로드 받는다.
// Create and configure a new client object.
$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) {
// Replace with your view ID, for example XXXX.
$VIEW_ID = "9자리 숫자로 되어있었다";
// Create the DateRange object.
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate("7daysAgo");
$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");
//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");
$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 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 );
}
/**
* Parses and prints the Analytics Reporting API V4 response.
*
* @param An Analytics Reporting API V4 response.
*/
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] . "n<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] . "n<br />");
}
}
}
}
}
?>
ga:browser: Chrome
ga:fullReferrer: (direct)
ga:userType: New Visitor
sessions: 3
pageviews: 5
users: 3
session_duration: 106.0
댓글 달기