PHPでGoogle Analytics APIをアクセスしてみました。

Note:　今回使ったのは google-api-php-client v1 のバージョンです。

phpからapiにアクセスし、データをブラウザーで出力できるまでのステップを書いてます。

必要なもの：
- composer
- php > 5.2
- google developerアカウント
- 使っているgoogle analyticsアカウント

##Step: 1 - Google Developer Consoleでプロジェクトの作成

- [https://console.developers.google.com/]()　からログインします。
- プロジェクトの作成をクリックします。
<img width="1280" alt="gapi-01.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/3567a1b5-20b1-806d-f446-634518af8c49.png">　　
- プロジェクト名を記入して作成ボタンをクリックします。
<img width="1277" alt="gapi-02.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/73f0fcda-124d-1843-e75f-369128c5b33b.png">

##Step: 2 - APIの設定
- メニューからAPI Managerに入ります。
<img width="1280" alt="gapi-03.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/5417ef1d-b3c0-aa79-7c5d-856619cd7410.png">
<img width="1280" alt="gapi-04.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/9d9040cb-041a-9488-94fe-d4435f815062.png">　　
- Analytics APIをクリックし　APIを有効にします。
<img width="1280" alt="gapi-05.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/eb02a7f8-79c7-f061-e90f-712a616e2819.png">
<img width="1280" alt="gapi-06.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/ad0cb3bf-a83d-8906-c69e-2fc2711459e0.png">

##Step: 3 - 認証情報の設定
- 認証情報まだ設定してないので、このようにメッセージが出てきます。認証情報に進みます。
<img width="1280" alt="gapi-07.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/4e8200d4-1a5b-b69a-fda5-3a6231bc5ca1.png">　　
- 先にOAuth同意画面のサービス名を設定します。
<img width="1280" alt="gapi-08.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/1dd14682-13d2-8f58-ff00-824720266572.png">　　
- 次は認証情報のサービスアカウントを追加します。
<img width="1280" alt="gapi-09.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/dd06a5b0-c04a-8ee6-f070-0e7b3153d0e8.png">　　
- P12を選択してキーを作成します。
<img width="1280" alt="gapi-10.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/42802093-cd0d-5d26-177f-f4ee198d64c8.png">　　
- 作成したプライベートキーは自動的にパソコンにダウンロードされます。（Safariで作成するときうまくダウンロードされない場合がございますのでChromeをお勧めします。）この唯一のファイルを後でphp使っているサーバーにアップロードして、PHPコードで引用します。
<img width="1280" alt="gapi-11.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/de8b65de-6935-287e-7947-7f796e5070cf.png">　　
- それから、アカウントのメールアドレスも自動で作成されます。このアドレスをGoogle Analyticsの設定とPHPコード、2つの場所で使います。
<img width="1280" alt="gapi-12.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/dcee1232-5a21-81b1-3265-135a2601e3bd.png">

##Step: 4 - Google Analyticsの設定
- [https://analytics.google.com/]()からアカウントにログインします。
- アナリティクス設定でPHPからアクセスしたいアカウントのユーザー管理のところに入ります。
<img width="1280" alt="gapi-13.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/2288a1b6-9e21-20c1-2ac6-673e4f2ee28c.png">　　
- Step3で作成されたメールアドレスを「表示と分析」の権限で追加します。
<img width="1280" alt="gapi-14.png" src="https://qiita-image-store.s3.amazonaws.com/0/93564/6a5d3417-7659-a7d0-90b5-ce9d9d0b3f60.png">

##Step: 5 - Composerでgoogle-api-php-clientのインストール
- サーバーにログインし、Webrootでcomposer.jsonファイルを作成します。

```json:composer.json
{
	"require": {
		"google/apiclient": "1.*"
	}
}
```

- `composer install` を実行したらAPIのインストールが始まります。

(Note: composerがない場合、[https://getcomposer.org/doc/00-intro.md]()からcomposerをインストールするか、[https://github.com/google/google-api-php-client/tree/v1-master]()からソースコードを直接ダウンロードします。

##Step: 6 - APIをアクセスするPHPコード
- step3で作成したプライベートキーをアップロードし、コードで引用します。

```php:googleanalytics.php
<?php
function getService()
{
  // Creates and returns the Analytics service object.

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

  // Use the developers console and replace the values with your
  // service account email, and relative location of your key file.
  $service_account_email = 'step3で作成されたメールアドレスを入力';
  $key_file_location = 'step3で作成されたプライベートキーの場所';

  // Create and configure a new client object.
  $client = new Google_Client();
  $client->setApplicationName("MyAnalyticsApp");
  $analytics = new Google_Service_Analytics($client);

  // Read the generated client_secrets.p12 key.
  $key = file_get_contents($key_file_location);
  $cred = new Google_Auth_AssertionCredentials(
      $service_account_email,
      array(Google_Service_Analytics::ANALYTICS_READONLY),
      $key
  );
  $client->setAssertionCredentials($cred);
  if($client->getAuth()->isAccessTokenExpired()) {
    $client->getAuth()->refreshTokenWithAssertion($cred);
  }

  return $analytics;
}

function getFirstprofileId(&$analytics) {
  // Get the user's first view (profile) ID.

  // Get the list of accounts for the authorized user.
  $accounts = $analytics->management_accounts->listManagementAccounts();

  if (count($accounts->getItems()) > 0) {
    $items = $accounts->getItems();
    $firstAccountId = $items[0]->getId();

    // Get the list of properties for the authorized user.
    $properties = $analytics->management_webproperties
        ->listManagementWebproperties($firstAccountId);

    if (count($properties->getItems()) > 0) {
      $items = $properties->getItems();
      $firstPropertyId = $items[0]->getId();

      // Get the list of views (profiles) for the authorized user.
      $profiles = $analytics->management_profiles
          ->listManagementProfiles($firstAccountId, $firstPropertyId);

      if (count($profiles->getItems()) > 0) {
        $items = $profiles->getItems();

        // Return the first view (profile) ID.
        return $items[0]->getId();

      } else {
        throw new Exception('No views (profiles) found for this user.');
      }
    } else {
      throw new Exception('No properties found for this user.');
    }
  } else {
    throw new Exception('No accounts found for this user.');
  }
}

function getResults(&$analytics, $profileId) {
  // Calls the Core Reporting API and queries for the number of sessions
  // for the last seven days.
   return $analytics->data_ga->get(
       'ga:' . $profileId,
       '7daysAgo',
       'today',
       'ga:sessions');
}

function printResults(&$results) {
  // Parses the response from the Core Reporting API and prints
  // the profile name and total sessions.
  if (count($results->getRows()) > 0) {

    // Get the profile name.
    $profileName = $results->getProfileInfo()->getProfileName();

    // Get the entry for the first entry in the first row.
    $rows = $results->getRows();
    $sessions = $rows[0][0];

    // Print the results.
    print "First view (profile) found: $profileName\n";
    print "Total sessions: $sessions\n";
  } else {
    print "No results found.\n";
  }
}

$analytics = getService();
$profile = getFirstProfileId($analytics);
$results = getResults($analytics, $profile);
printResults($results);

?>
```

- ファイルを保存して、ブラウザーから `http://webrootの場所/googleanalytics.php`　にアクセスしたら、`First view (profile) found: アナリティクスのビューID Total sessions: 合計セッション数`　が表示されます。

```php
return $analytics->data_ga->get(
       'ga:' . $profileId,
       '7daysAgo',
       'today',
       'ga:sessions');
```
は、最初見つかったアナリティクスビューの先週分のセッション数をゲットします。
別のビューのデータを見る場合、`$profileId`をそのビューのIDに変わります。

他のプロパティをゲットする場合もこちらのパラメータを変更することができます。

Dimensions&Metricsプロパティ参考：[https://developers.google.com/analytics/devguides/reporting/core/dimsmets](https://developers.google.com/analytics/devguides/reporting/core/dimsmets)