目的
Adobe AnalyticsがMarketing Cloudに統合され、API接続の認証の仕組みが少し変わったりしていて、過去のサンプルコードを使い回せなくなってきた。
なので、Marketing Cloudに接続されたAnalyticsを前提とした、Reporting API v1.4に接続するシンプルな方法のメモを残しておく。
API接続の流れ(Client Credentialを利用したOAuthの場合)
1.Application IDとApplication Secretを用いてTokenを取得する
2.各種リクエストを実行する際に、Tokenを併せて送る
3.リクエストの結果の戻り値を処理
大前提
- Adobe Marketing CloudとAdobe Analyticsが紐づけられている
- Adobe Developer ConnectionにAdobe ID(Marketing Cloudで使っているもの)でログインしている
- Marketing CloudやAnalyticsでAPIの利用権限が付与されている
事前準備
- Marketing CloudでAPIに接続するアプリケーションの利用登録をする → Create an Application
- 発行されたApplication IDとApplication Secretをメモする
#具体的なコード
複雑なことはせずに、Token取得と各種APIコール実行の2つの関数を用意してみた。
api_call.php
// 諸設定
define("APP_ID", "1234567890-test-app"); // Application ID
define("APP_SEC", "abc123def456ghi789"); // Application Secret
define("ENDPOINT", "https://api.omniture.com");
// エンドポイントはデータセンターによって異なる(San Joseはapi.、Dallasはapi2.、Singaporeはapi4.…
// Tokenを取得する関数(直接は使わない):/tokenにベーシック認証でアクセスする
function getToken(){
$ch = curl_init(ENDPOINT."/token");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_USERPWD, APP_ID.":".APP_SEC);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array("grant_type" => "client_credentials")));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch));
curl_close($ch);
return $response->access_token;
}
// APIコールを実行する関数:method(Report.Queueとか)と渡すパラメータの配列を引数にして、結果をjsonデコードして返す
function execRequest($method,$request_param){
$token = getToken();
$ch = curl_init(ENDPOINT."/admin/1.4/rest/?method=".$method."&access_token=".$token);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($request_param));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch));
curl_close($ch);
return $response;
}
// では実際に使ってみる…
// パラメータを定義(入れ子がトリッキーなのでドキュメントをよく読むこと)
$request_param = array(
"reportDescription" => array(
"reportSuiteID" => "YOUR_REPORTSUITE_ID"
)
);
// execRequest関数に、第一引数にmethod、第二引数に↑で定義したパラメータを指定
$report_id = execRequest("Report.Queue",$request_param);
// 結果を出力(Report.Queueなので、レポートIDが返ってくる)
var_dump($report_id);
Enjoy!
何かトラブっても知りません