[PHP]GoogleAnalyticsからPV数を取得するまで

# [PHP]GoogleAnalyticsからPV数を取得するまで
ホームページの解析に利用されるGoogleAnalyticsからPV数を取得するまでの備忘録
1. GoogleDeveloersでプロジェクトの作成
2. GoogleAnalyticsの設定
3. PHPで取得する際のサンプル

## 1.GoogleDeveloersでプロジェクトの作成
### 新規プロジェクトの作成
https://console.developers.google.com/start へアクセスして、GoogleAnalyticsAPIを扱うためのプロジェクトを作成
名前はご自由に
![2015-08-31_14h49_15.png](https://qiita-image-store.s3.amazonaws.com/0/74129/97fa49a0-c2a2-7da0-40ae-5eb21dad58c4.png)

### Analytics APIの有効化
プロジェクトが利用するAPIを選択しなければいけないので、左のメニューからAPIを検索して  AnalyticsAPIを有効化する
![2015-08-31_14h55_30.png](https://qiita-image-store.s3.amazonaws.com/0/74129/8b89e4df-cfc8-0a5f-b3da-8862c5382a32.png)

### 認証情報の追加
各GoogleのAPIを利用するためには、各サービスに応じた認証が必要となります。
今回はサーバからAPIを叩きに行くので、サービスアカウントで作成します。
![2015-08-31_14h57_29.png](https://qiita-image-store.s3.amazonaws.com/0/74129/f34a0fc1-a928-75fd-39f1-390e3145038f.png)
キーのタイプは「.p12」でOKです。
サービスアカウントが作成されると同時に「.p12」形式の秘密鍵がダウンロードされます。
後ほど使うので保管しておきましょう。

作成されたサービスアカウントはこんな感じ
![2015-08-31_15h01_21.png](https://qiita-image-store.s3.amazonaws.com/0/74129/d0626c6c-b55b-f8bc-22ae-94e13851bacb.png)
クライアントIDとメールアドレスは後ほど扱います。

新規プロジェクトの作成は以上です。

## GoogleAnalyticsの設定
先ほど作成したプロジェクトのサービスアカウントの、GoogleAnalyticsへのアクセスを許可しましょう。

### クライアントメールアドレスの追加
PV数を取得したいレポートを見ている状態で、上部メニューの「アナリティクス設定」をクリック
![2015-08-31_15h17_27.png](https://qiita-image-store.s3.amazonaws.com/0/74129/f2f28fc3-f153-ff64-2ccd-a983f54ea362.png)

設定画面でビュー項目の「ユーザ管理」へ
![2015-08-31_15h18_25.png](https://qiita-image-store.s3.amazonaws.com/0/74129/dbd89213-66e6-a09b-1825-ddac88eaf04a.png)

ユーザの追加をします。
「権利を付与するユーザー」に先ほど作成したクライアントIDの**メールアドレス**をコピペ
権限に表示と分析が含まれているか確認
![2015-08-31_15h20_30.png](https://qiita-image-store.s3.amazonaws.com/0/74129/a474339a-8f9b-214b-7874-f649bc173775.png)

### ビューIDの確認
同じ設定のビュー項目で「ビュー設定」を選択
設定内に記載されている「ビューID」をメモメモ
このビューIDを用いて、APIはデータを取得するAnalyticsを一意に識別します
![2015-08-31_15h22_24.png](https://qiita-image-store.s3.amazonaws.com/0/74129/9b225bb1-a51d-8c59-3c47-79d042831097.png)

##  PHPで取得する際のサンプル
### ライブラリ
API用のPHPライブラリをGoogleさんが提供してくれているので、そちらを使います。
**google/apiclient**
GitHub：https://github.com/google/google-api-php-client
packagist：https://packagist.org/packages/google/apiclient

### コード
composer使ってるならいりませんが、使ってない人はライブラリ下の「autoload.php」をrequire_onceしてあげましょう。

```php
public function getPageView()
{

    //ビューID
    $viewId = CORPORATE;

    //GoogleAPI クライアント メールアドレス
    $client_email = GAADD;

    //.p12ファイル(秘密鍵)
    $private_key = file_get_contents(P12KEY);

    //メトリクス：取得するデータ ga:pageviewsはPV数
    $metrics = "ga:pageviews";

    //取得期間(Y-m-d形式)
    $from = '2015-08-10';
    $to = '2015-08-12';

    //オプション
    $option = [
        "dimensions" => 'ga:date', //ディメンション：区切り 日付ごとに
        "max-results" => 10000, //最大取得件数 10000がAPIの上限
        "sort" => "ga:date", //ソート 日付順
    ];


    //スコープのセット
    $scopes = ["https://www.googleapis.com/auth/analytics.readonly"];

    //クレデンシャルの作成
    $credentials = new Google_Auth_AssertionCredentials($client_email, $scopes, $private_key);

    //Googleクライアントのインスタンスを作成
    $client = new Google_Client();
    $client->setAssertionCredentials($credentials);

    //トークンのリフレッシュ
    if ($client->getAuth()->isAccessTokenExpired()) {
        $client->getAuth()->refreshTokenWithAssertion($credentials);
    }
    $_SESSION["service_token"] = $client->getAccessToken();

    //Analyticsのインスタンスを作成
    $analytics = new Google_Service_Analytics($client);

    //データの取得
    $obj = $analytics->data_ga->get(
        "ga:{$viewId}",
        $from,
        $to,
        $metrics,
        $option
    );

    echo '<pre>';
    var_dump($obj->rows);
    echo '</pre>';
}
```
 
取得結果  

```php
array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(8) "20150810"
    [1]=>
    string(3) "891"
  }
  [1]=>
  array(2) {
    [0]=>
    string(8) "20150811"
    [1]=>
    string(3) "983"
  }
  [2]=>
  array(2) {
    [0]=>
    string(8) "20150812"
    [1]=>
    string(4) "1003"
  }
}
```  

こんな感じになる（ﾊｽﾞ）

### PV数以外も月ごととかも
上記サンプルの

```php
    //メトリクス：取得するデータ ga:pageviewsはPV数
    $metrics = "ga:pageviews";

    $option = [
        "dimensions" => 'ga:date', //ディメンション：区切り 日付ごとに
        "max-results" => 10000, //最大取得件数 10000がAPIの上限
        "sort" => "ga:date", //ソート 日付順
    ];

```

このへんいじると、Session数とか情報の粒度とかいじれる。