おぼえがき

おぼえがき

php5.2でもgoogleanalyticsAPIを利用したい

2014-05-14 | googleanalytics


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)を取ってみた




最新の画像もっと見る

コメントを投稿