googleanalyticsAPI(Management API(v3))を利用して、データを取得するんだけど、
PHP 5.3.0 or higher is required to use service accounts.
このエラーが出で、いろいろ面倒だったのでその対応方法も含めて記載
っていうか、phpのバージョンあげないとまずいね
■analyticsAPIを利用できるようにする
https://console.developers.google.com
アカウント:XXXXXXXXXXXX
■1日のリクエスト上限
50,000 requests/day
■analyticsAPIの利用許可設定
■認証設定
■上記画面のクライアントIDを作成をクリックすると・・・
こんな感じで、ファイルがダウンロードされる。
ファイルの中身は秘密鍵のファイル
添付の通り 16.....c42という秘密鍵のバイナリ?ファイル
秘密鍵のパスワードは、上記にあるとおり、XXXXXXXXXXX
「OK」を押下すると
クライアント / メール アドレス / 公開キー フィンガープリントこの辺めもっておく
■googleanalytics側の設定
先ほど発行されたメールアドレスを追加
これでとりあえず、設定は完了
■対象viewIDの取得
APIリクエスト対象のviewIDを取得する
■APIには利用制限が存在する
https://console.developers.google.com
ここで確認できる
■APIを叩くソースをこれより記述していく
apiを取得するためのライブラリを取得
git clone https://github.com/google/google-api-php-client.git
このディレクトリ配下のrequire_onceのパスをすべて書き換える
define("HOGE", 'google-api-php-client/src/');
require_once HOGE .'Google/Auth/AssertionCredentials.php';
require_once HOGE .'Google/Cache/File.php';
require_once HOGE .'Google/Cache/Memcache.php';
require_once HOGE .'Google/Config.php';
require_once HOGE .'Google/Collection.php';
require_once HOGE .'Google/Exception.php';
require_once HOGE .'Google/IO/Curl.php';
require_once HOGE .'Google/IO/Stream.php';
require_once HOGE .'Google/Model.php';
require_once HOGE .'Google/Service.php';
require_once HOGE .'Google/Service/Resource.php';
./Auth/Abstract.php
./Auth/AssertionCredentials.php
./Auth/Exception.php
./Auth/LoginTicket.php
./Auth/OAuth2.php
./Auth/Simple.php
./Cache/Apc.php
./Cache/Exception.php
./Cache/File.php
./Cache/Memcache.php
./Cache/Null.php
./Client.php
./Collection.php
./Http/Batch.php
./Http/CacheParser.php
./Http/MediaFileUpload.php
./Http/REST.php
./Http/Request.php
./IO/Abstract.php
./IO/Curl.php
./IO/Exception.php
./IO/Stream.php
./Service/Exception.php
./Service/Resource.php
./Signer/P12.php
./Verifier/Pem.php
上記ファイルのrequire_onceをすべて書き換えた
■php5.2対応
このままだと、Oauth2系の認証でこける
php5.3用に作られている部分もあるので、一部ライブラリの書き換えが必要
./Signer/P12.php
これがオリジナルのソースコードのメソッド
-----------------------------------------
public function sign($data)
{
if (version_compare(PHP_VERSION, '5.3.0') < 0) {
throw new Google_Auth_Exception(
"PHP 5.3.0 or higher is required to use service accounts."
);
}
$hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
if (!openssl_sign($data, $signature, $this->privateKey, $hash)) {
throw new Google_Auth_Exception("Unable to sign data");
}
これの、openssl_signのところがphp5.2だとちゃんとうごかん
これを下記のように修正する
-----------------------------------------
public function sign($data)
{
/*
if (version_compare(PHP_VERSION, '5.3.0') < 0) {
throw new Google_Auth_Exception(
"PHP 5.3.0 or higher is required to use service accounts."
);
}
$hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
if (!openssl_sign($data, $signature, $this->privateKey, $hash)) {
throw new Google_Auth_Exception("Unable to sign data");
}
*/
if (!$this->my_openssl_sign($data, $signature, $this->privateKey, "sha256")) {
throw new Google_AuthException("Unable to sign data");
}
return $signature;
}
private function my_openssl_sign($data, &$signature, $priv_key_id, $signature_alg = 'sha256WithRSAEncryption') {
$pinfo = openssl_pkey_get_details($priv_key_id);
$hash = hash('sha256', $data);
$t = '3031300d060960864801650304020105000420'; # sha256
$t .= $hash;
$pslen = $pinfo['bits']/8 - (strlen($t)/2 + 3);
$eb = '0001' . str_repeat('FF', $pslen) . '00' . $t;
$eb = pack('H*', $eb);
return openssl_private_encrypt($eb, $signature, $priv_key_id, OPENSSL_NO_PADDING);
}
-----------------------------------------
ここまで
■データ取得を試してみる
#!/usr/bin/php
require_once('google-api-php-client/src/Google/Client.php');
require_once('google-api-php-client/src/Google/Service/Analytics.php');
//クライアントID
define('CLIENT_ID', 'XXXXXXXXXXXXXXX');
//メールアドレス
define('SERVICE_ACCOUNT_NAME', 'XXXXXXXXXXXXXXX');
//秘密鍵(アップロードした場所)
define('KEY_FILE', 'gaapi.ppk');
//ビューIDの定義
define('PROFILE_ID', 'XXXXXXXXXXXXXXX');
class gaBaseController
{
//--- analyticsのビューIDのセット
public $profile_id = null;
function __construct($profile_id)
{ /* {{{ */
$this->profile_id = $profile_id;
} /* }}} */
}
class ga_aaaaaa extends gaBaseController
{
function __construct($argv = null)
{ /* {{{ */
parent::__construct(PROFILE_ID);
} /* }}} */
public function main()
{ /* {{{*/
$client = new Google_Client();
$client->setApplicationName("analytics api");
$client->setClientId(CLIENT_ID);
$client->setAssertionCredentials(new Google_Auth_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/analytics'),
file_get_contents(KEY_FILE)
));
$service = new Google_Service_Analytics($client);
// ビュー ID
$ids = 'ga:' . $this->profile_id;
// 期間(スタート)
$start_date = '2014-05-09';
// 期間(エンド)
//$end_date = 'today';
$end_date = '2014-05-11';
// メトリクス
$metrics = 'ga:sessions,ga:pageviews';
// ディメンション
$dimensions = 'ga:dimension11';
// ソート
$sort = 'ga:pageviews';
// 最大取得数
$max_results = 10;
$optParams = array('dimensions' => $dimensions, 'sort' => $sort, 'max-results' => $max_results);
$data = $service->data_ga->get($ids, $start_date, $end_date, $metrics, $optParams);
print_r($data);
}
}
$obj = new ga_aaaaaa ();
$obj->main();
■カスタムディメンションの指定方法
$dimensions = 'ga:dimension11';APIでカスタムディメンションをリクエストするときにはまった
twitterアカウントです
■たぶんこれが一番簡単!googleAnalyticsでスクロール率を計測する方法
■googleAnalyticsリアルタイムAPIとiftttを使ってトレンドのtweetをやってみる
■ビーコン(BLE)とgoogleAnalyticsで交通量の測定をやってみる
■google analyticsでtagmanagerのルックアップテーブルを使ってみる
■アナリティクスでカスタムディメンションとデータインポートとタグマネージャとAPIでデータ分析をしてみる
■php5.2でもgoogleanalyticsAPIを利用したい
■Google Analytics Individual Qualification(GAIQ)を取ってみた
※コメント投稿者のブログIDはブログ作成者のみに通知されます