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になっており、ソースをかなり修正しなければいけないことがわかった。要修正点の詳細はこちら。
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流なのだろうか?
- 当然ではあるが、サンプルコードはエラーが起こった際のメッセージが不親切なので、なかなかなぜ動かないのか分からないだろうなぁ。