CakePHPクッキング

CakePHPでGoogleAnalyticsAPIを使う

開発環境:CakePHP2.5.1

CakePHPでGoogleAnalyticsを使う方法について見ていきましょう。

Google側の設定

まずはGoogle側の設定を行っていきます。
Google Developers Consoleでプロジェクトを作成します。
https://console.developers.google.com/project

作成したプロジェクト内の「APIと認証」>「API」内にある「Analytics API」を有効にします。

そして、「APIと認証」>「認証情報」でクライアントIDを作成します。
今回はブラウザベースで利用するので「ウェブ アプリケーション」を選択し、「承認済みの JavaScript 生成元」に表示させるURLを指定します。
その際、「承認済みのリダイレクト URI」は自動で変更されていきますが、認証後のURIを指定したい時は手動で変更します。
入力が完了したら、「クライアントIDを作成」をクリックすると、IDが作成されます。

続いて、「APIと認証」>「同意画面」内の「メールアドレス」と「サービス名」を設定します。

GoogleAnalyticsに登録する

GoogleAnalytics側の設定です。
https://www.google.com/analytics/web/
管理画面で、データを取得したいサイトの「アナリティクス設定」>「ビュー」>「ユーザー管理」を開きます。
そのページ内の「権限を付与するユーザー」にGoogle Developers Consoleで作成された「メールアドレス」を登録します。
権限はデフォルトの「表示と分析」、「このユーザーにメールで通知」はチェックなしです。

Google APIs Client Library for PHPをgit clone

まず最初はGithub上に公開されているソースをgit cloneします。
https://github.com/google/google-api-php-client

リネームして設置

git cloneしたファイルを google-api-php-client とリネームして app/Vendor 配下に設置します。

コントローラー側の設定

続いて、コントローラー側にコードを書いていきます。

<?php
class AnalyticsController extends AppController {

    public $components = array('Session');

    public function index() {
        // パスが通っていなければ設定
        $path = '/path/to/cakephp/app/Vendor/google-api-php-client/src';
        set_include_path(get_include_path() . PATH_SEPARATOR . $path);

        App::import('Vendor', 'Google_Client', array('file' => 'google-api-php-client/src/Google/Client.php'));
        App::import('Vendor', 'Google_Service_Analytics', array('file' => 'google-api-php-client/src/Google/Service/Analytics.php'));

        // Google Developers Consoleで作成されたクライアントID
        define('CLIENT_ID', 'xxxxxxxx.apps.googleusercontent.com');
        // Google Developers Consoleで作成されたクライアントシークレット
        define('CLIENT_SECRET', 'xxxxxx');
        // Google Developers Consoleで作成されたリダイレクトURI
        define('REDIRECT_URI', 'http://' . $_SERVER['HTTP_HOST'] . '/analytics');

        $client = new Google_Client();
        $client->setClientId(CLIENT_ID);
        $client->setClientSecret(CLIENT_SECRET);
        $client->setRedirectUri(REDIRECT_URI);
        $client->addScope('https://www.googleapis.com/auth/analytics.readonly');

        $analytics = new Google_Service_Analytics($client);

        // 認証後codeを受け取ったらセッション保存
        if (isset($this->request->query['code'])) {
            $client->authenticate($this->request->query['code']);
            $this->Session->write('token', $client->getAccessToken());
            $this->redirect('http://' . $_SERVER['HTTP_HOST'] . '/analytics');
        }

        if ($this->Session->check('token')) {
            $client->setAccessToken($this->Session->read('token'));
        }
         
        if ($client->getAccessToken()) {
            $start_date = date('Y-m-d', strtotime('- 10 day'));
            $end_date = date('Y-m-d');
            // GoogleAnalyticsの「アナリティクス設定」>「ビュー」>「ビュー設定」の「ビューID」
            $view = 'xxxxxxxxx';

            // データ取得
            $data = array();
            $dimensions = 'ga:date';
            $metrics = 'ga:visits';
            $sort = 'ga:date';
            $optParams = array('dimensions' => $dimensions, 'sort' => $sort);
            $results = $analytics->data_ga->get('ga:' . $view, $start_date, $end_date, $metrics, $optParams);
            if (isset($results['rows']) && !empty($results['rows'])) {
                $data['Sample']['date'] = $results['rows'][0][0];
                $data['Sample']['visits'] = $results['rows'][0][1];
            }

            pr($data);         
        } else {
            $auth_url = $client->createAuthUrl();
            echo '<a href="'.$auth_url.'">認証</a>';
        }
        exit;
    }

動作確認

設定したページを呼び出すと、「認証」のリンクが表示されます。
それをクリックすると、Googleの認証ページに移り、認証をすると自身のページに戻ってきて結果を返してくれます。

エラーが返される時は

GoogleAnalyticsAPIからエラーが返ってくる場合は、エラーコードを確認の上、下記のページを参照にしてください。
https://developers.google.com/analytics/devguides/reporting/realtime/v3/errors?hl=ja

The following two tabs change content below.

柴田 篤志

愛知県一宮市在住のWEBシステム屋(SE・プログラマ)。PHP、 CakePHPを利用して日々開発中。CakePHPをこれから始める方、ある程度CakePHPで開発をしている初級〜中級者の方を対象に、CakePHPでの開発をスピードアップするための情報をまとめています。CakePHPの案件のご依頼、御見積はこちらへご連絡ください。

最新記事 by 柴田 篤志 (全て見る)

WordPressとCakePHPの共存

サイトを作るのに便利なWordPress。プラグインも数多く用意されて

サイトマップの作成方法

Googleのウェブマスターツールに渡すためのサイトマップの作成方法で

INSERTしたIDを取得する

データを保存した後にINSERTされたデータのIDを使って何かの処理を

ファイルの存在確認やフォルダー内のファイル一覧取得

特定のファイルの存在を確認したい場合や特定のフォルダー内にあるファイル

リンクの最後に常にスラッシュをつける方法

URLの最後に常にスラッシュをつけるかつけないかを統一する方法は、UR

countやsumを使う時のフィールド名を指定する

CakePHPでcountやsumなどを使う場合、ちょっとした工夫が必

Formの便利な使い方

問い合わせフォームや会員機能など、WEBサイトを作る際に必ず必要になる

ヘルパーをオーバーライドする

CakePHPで便利な機能が詰まったヘルパーですが、時々もう少しこうだ

特定の時だけSQLの条件を追加するならSet::mergeを使う

SQLの条件を追加したい時に使うのがarray_mergeなどですが、

ページネーションではDISTINCTではなく、GROUP BYを使う

重複したデータを省く時に使うDISTINCTですが、ページ送りで使う時

Model内で別のModelを呼び出す

モデル内で別のモデルを使いたいケースがあった場合、次のようにすることで

CakePHPでGoogleAnalyticsAPIを使う

CakePHPでGoogleAnalyticsを使う方法について見てい

独自のfindを定義するfindMethods

findをより便利に、よりスッキリ書くのに、findMethodsを使

TCPDFを使ってCakePHPでPDFを作成

CakePHPでPDFを作成するには幾つかの方法がありますが、今回はT

JavaScriptをコードの最下部に配置

SEOの観点からJavaScriptのコードは一番下に記述したいところ

無限スクロールをさせる

TwitterやFacebookのタイムラインを見ていて、ページの下に

PHPExcelの導入

ExcelにDBのデータを表示して一覧を作ったり、請求書などのフォーマ

Warning: SplFileInfo::openFile〜の警告が表示されたら

ShellとWEBの両方で同一のModelを呼び出す時に「Warnin

連結されていないデータを抽出

通常、テーブルを連結してデータを取得するには、アソシエーションを利用し

データを取得する

データを取得したい時に少し変わった条件で取得したい場合があります。

PAGE TOP ↑