PHP
google
api
analytics

Google Analytics API v2をPHPで使う

Google Analytics APIをPHPで使おうとして、苦労した

Google Analytcs APIを使う必要があった、Amazon AWSのEC2からPHPで使おうと思いたって、調べた。

で、見つけたのがこことか、
https://syncer.jp/google-analytics-api-tutorial
こちら。
https://www.spiceworks.co.jp/blog/?p=10825

こちらを使うために、いろいろ苦労したので、メモを残しておく。

環境の準備

PHPのバージョンアップ

Amazon Linuxのインスタンスはすでにあったが、PHPを使おうと決めたので、まずはComposerのインストールをしなければならない。

Amazon LinuxのデフォルトのPHPのバージョンは要件に合わないので、最初5.4.0をYum経由でインストールした。
しかし、進めていたら5.5.0以上が必要とのことだったので、再度yumで5.5.0をインストールした。

httpdのバージョンアップ

Amazon AWSのデフォルトのhttpdのバージョンは2.2.34のようで、Composerで必要な2.4.xにバージョンアっプした。

インスタンスのアップグレード

上記準備をして、composerをインストールしようとしたところ、メモリ不足!
SWAPを増やそうにもディスクもフル、ということで、EC2のインスタンスをアップグレード、ディスク容量も増やした。

APIの利用準備

環境は整ったので、APIの利用準備はリンク先の情報にしたがって進めた。

APIの利用

最終的にAPIを利用してみようと、書いてあることそのままを実行した。しかしPHPのエラーで動かない。

PHP Fatal error: Class 'Google_Auth_AssertionCredentials' not found in /var/www/html/api/index.php on line 35

調べてみると、Google Analytics API for PHPはv2になっており、ソースをかなり修正しなければいけないことがわかった。要修正点の詳細はこちら。

https://github.com/google/google-api-php-client/blob/master/UPGRADING.md

diffはこちら

*** index.php.orig    2018-05-15 09:24:57.610308228 +0000
--- index.php.v2      2018-05-15 09:52:56.098575392 +0000
***************
*** 19,49 ****
  define('CSV_DIR', __DIR__.'/csv');

  // google-api-php-clientを呼び出します。
! require_once __DIR__.'/google-api-php-client-master/src/Google/autoload.php';
  // 念のためタイムゾーンの設定をします。
  date_default_timezone_set('Asia/Tokyo');

  $ymd = sprintf("%s01", $target_yyyymm);

- $json = file_get_contents(JSON_PATH);
- $json = json_decode($json, true);
-
- $client_email = $json['client_email'];
- $private_key  = $json['private_key'];
-
  $scopes = array(Google_Service_Analytics::ANALYTICS);
- $credentials = new Google_Auth_AssertionCredentials(
-     $client_email,
-     $scopes,
-     $private_key
- );

  $client = new Google_Client();
  $client->setApplicationName("Google Analytics PHP API");
- $client->setAssertionCredentials($credentials);
- if ($client->getAuth()->isAccessTokenExpired()) {
-     $client->getAuth()->refreshTokenWithAssertion();
- }
  $analytics = new Google_Service_Analytics($client);

  $date1 = date('Y-m-01', strtotime($ymd));
--- 19,36 ----
  define('CSV_DIR', __DIR__.'/csv');

  // google-api-php-clientを呼び出します。
! require_once __DIR__.'/google-api-php-client-master/vendor/autoload.php';
  // 念のためタイムゾーンの設定をします。
  date_default_timezone_set('Asia/Tokyo');

  $ymd = sprintf("%s01", $target_yyyymm);

  $scopes = array(Google_Service_Analytics::ANALYTICS);


  $client = new Google_Client();
+ $client->setAuthConfig(JSON_PATH);
+ $client->setScopes($scopes);
  $client->setApplicationName("Google Analytics PHP API");
  $analytics = new Google_Service_Analytics($client);

  $date1 = date('Y-m-01', strtotime($ymd));

感想

  • ここには書いていないが、gitとか、いろいろなツールを使わないと目的が達成できず、なかなか素人さんには難しい
  • APIのバージョンアップって、旧バージョンの使い方はいきなり切っちゃうのがGoogle流なのだろうか?
  • 当然ではあるが、サンプルコードはエラーが起こった際のメッセージが不親切なので、なかなかなぜ動かないのか分からないだろうなぁ。