はじめに
REST API を介して Yellowfin を管理する方法は、以前にもいくつかご紹介差し上げています。
今回は、クライアント組織の管理にかかわる内容を紹介します。クライアント組織の情報参照、新規作成、組織へのユーザー登録などに関する処理です。なお、サンプルコードはすべて php で記述しています。
アクセストークンの取得
REST API 経由でリソースの参照、作成、追加などの処理を行う場合、まずはアクセストークンの取得が必須となります。
アクセストークンを取得するまでのコードは、第 1 回 『Yellowfin REST API エクスポートできるコンテンツの確認』 を参照ください。
組織情報の参照
アクセストークンを取得したら、続いて以下のコードを順に記述します。
・クライアント組織の管理に関わる処理は、/api/orgs/ API を使用します。
$url3 = 'http://localhost:8080/api/orgs/';
・API に引き渡すヘッダー情報の中に、アクセストークンを含めます。
$header3 = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123, token='.$accessToken,
'Accept:application/vnd.yellowfin.api-v2+json'
);
・curl で処理を実行します。先のコードで作成したヘッダー情報などを伴って、GET で情報を要求します。
$ch3 = curl_init();
curl_setopt($ch3, CURLOPT_URL, $url3);
curl_setopt($ch3, CURLOPT_HTTPHEADER, $header3);
curl_setopt($ch3, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch3, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch3, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true);
$result3 = curl_exec($ch3);
$result3_json = json_decode($result3, true);
curl_close($ch3);
・result3_json に、組織に関する情報が JSON の配列の形で格納されます。具体的な形式は、開発者サイト Response samples に説明があります。見やすくするために、result3_json からクライアント組織の内部 ID、クライアント参照 ID 、名前、タイムゾーン、カスタムスタイルパスに関する情報だけを抜き出し、カンマ区切りの CSV 形式に変更しています。
$i=0;
foreach($result3_json["items"] as $value) {
$orgInfo=$result3_json["items"][$i]["ipOrg"].','.$result3_json["items"][$i]["clientRefId"].','.
$result3_json["items"][$i]["name"].','.$result3_json["items"][$i]["defaultTimezone"].','.
$result3_json["items"][$i]["customStylePath"]."\n";
echo($orgInfo);
$i++;
}
・getOrgs.php を実行すると、以下のような結果が返ってきます。
1,,Default,ASIA/TOKYO,
13151,001,A社,ASIA/TOKYO,001
13204,002,B社,ASIA/TOKYO,002
この中で、13151、13204 が ipOrg と呼ばれる内部 ID で、クライアント組織を一位に認識する情報です。この情報を、組織にユーザーを登録する処理の中で使用します。
クライアント組織の新規作成
アクセストークンを取得したら、続いて以下のコードを順に記述します。
・情報参照の処理と同様に、/api/orgs/ API を使用します。
$url3 = 'http://localhost:8080/api/orgs/';
・API に引き渡すヘッダー情報の中に、アクセストークンを含めます。
$header3 = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123, token='.$accessToken,
'Accept:application/vnd.yellowfin.api-v2+json',
'Content-Type:application/json'
);
・作成するクライアント組織の情報を JSON 形式の外部ファイルから読み込みます。
ob_start();
include("org.json");
$orgData = ob_get_clean();
・下記は、クライアント参照 ID が 003 の、C 社という名前の組織を追加する JSON の例です。JSON ファイルに含める各項目の詳細は、開発者サイトの REQUEST BODY SCHEME の箇所をご確認ください。
{
"clientRefId": "003",
"name": "C社",
"defaultTimezone": "ASIA/TOKYO",
"customStylePath": "003"
}
・curl で処理を実行します。先のコードで作成したヘッダー、ボディー情報などを伴って、POST で要求します。
curl_setopt($ch3, CURLOPT_HTTPHEADER, $header3);
curl_setopt($ch3, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch3, CURLOPT_POSTFIELDS, $orgData);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch3, CURLOPT_URL, $url3);
$result3 =curl_exec($ch3);
curl_close($ch3);
クライアント組織へのユーザー登録
クライアント組織にユーザーを所属させるためには、クライアント組織の ID (ipOrg) と、ユーザーの ID (userId) に関する情報が必要となります。ipOrg の確認方法は先述の通りです。 userId の確認方法は 『Yellowfin 情報参照プログラム PHP + REST API でロール / ユーザー / グループなどの情報を取得』の記事をご確認ください。
アクセストークンを取得したら、続いて以下のコードを順に記述します。
・URL の一部に、ipOrg を含めます。
$iporg='13204';
$url3 = 'http://localhost:8080/api/orgs/'.$iporg.'/user-access/';
・ヘッダー情報として、取得したアクセストークンを受け渡します。
$header3 = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123, token='.$accessToken,
'Accept:application/vnd.yellowfin.api-v2+json',
'Content-Type:application/json'
);
・登録するユーザーの情報を JSON ファイルから読み込みます。
ob_start();
include("userOrg.json");
$orgData = ob_get_clean();
・JSON ファイルには、登録するユーザーの userId 情報のみを含みます。
{
"userId": 13202
}
・curl で処理を実行します。先のコードで作成したヘッダー、ボディー情報などを伴って、POST で要求します。
$ch3 = curl_init();
curl_setopt($ch3, CURLOPT_HTTPHEADER, $header3);
curl_setopt($ch3, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch3, CURLOPT_POSTFIELDS, $orgData);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch3, CURLOPT_URL, $url3);
$result3 =curl_exec($ch3);
curl_close($ch3);
最後に
開発者サイトには、上記で説明した以外にも、様々な API が紹介されています。いずれも、本記事内のサンプルコードを修正することでほぼ対応が可能です。
いろいろとお試しください。
では皆様、良いデータ分析を! Cheers!! Santé!
おまけ コード全容
//変数の宣言
$adminId = 'admin@yellowfin.com.au';
$adminPassword = 'test';
$time = ceil(microtime(true)*1000);
$url = 'http://localhost:8080/api/refresh-tokens';
$url2 = 'http://localhost:8080/api/access-tokens';
$refreshToken = "";
$accessToken = "";
//リフレッシュトークン:HEADERデータ作成
$header = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123',
'Accept:application/vnd.yellowfin.api-v2+json',
'Content-Type:application/json;charset=UTF-8'
);
//リフレッシュトークン:BODYデータ作成
$body = array(
'userName'=>$adminId,
'password'=>$adminPassword
);
$body_json = json_encode($body, JSON_PRETTY_PRINT);
//リフレッシュトークン:Yellowfinにトークンを要求
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
$json_result = json_decode($result);
$refreshToken = $json_result->securityToken;
curl_close($ch);
//アクセストークン:HEADERデータ作成
$header2 = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123, token='.$refreshToken,
'Accept:application/vnd.yellowfin.api-v2+json',
'Content-Type:application/json'
);
//アクセストークン:Yellowfinにトークンを要求
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_HTTPHEADER, $header2);
curl_setopt($ch2, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch2, CURLOPT_POSTFIELDS, '');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_URL, $url2);
curl_close($ch);
$result2 = curl_exec($ch2);
$json_result2 = json_decode($result2);
$accessToken=$json_result2->securityToken;
//変数の宣言
$url3 = 'http://localhost:8080/api/orgs/';
//クライアント組織参照:HEADERデータ作成
$header3 = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123, token='.$accessToken,
'Accept:application/vnd.yellowfin.api-v2+json'
);
//クライアント組織参照:処理
$ch3 = curl_init();
curl_setopt($ch3, CURLOPT_URL, $url3);
curl_setopt($ch3, CURLOPT_HTTPHEADER, $header3);
curl_setopt($ch3, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch3, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch3, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true);
$result3 = curl_exec($ch3);
$result3_json = json_decode($result3, true);
curl_close($ch3);
//クライアント組織:情報出力
$i=0;
foreach($result3_json["items"] as $value) {
$orgInfo=$result3_json["items"][$i]["ipOrg"].','.$result3_json["items"][$i]["clientRefId"].','.
$result3_json["items"][$i]["name"].','.$result3_json["items"][$i]["defaultTimezone"].','.
$result3_json["items"][$i]["customStylePath"]."\n";
echo($orgInfo);
$i++;
}
//変数の宣言
$adminId = 'admin@yellowfin.com.au';
$adminPassword = 'test';
$time = ceil(microtime(true)*1000);
$url = 'http://localhost:8080/api/refresh-tokens';
$url2 = 'http://localhost:8080/api/access-tokens';
$refreshToken = "";
$accessToken = "";
//リフレッシュトークン:HEADERデータ作成
$header = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123',
'Accept:application/vnd.yellowfin.api-v2+json',
'Content-Type:application/json;charset=UTF-8'
);
//リフレッシュトークン:BODYデータ作成
$body = array(
'userName'=>$adminId,
'password'=>$adminPassword
);
$body_json = json_encode($body, JSON_PRETTY_PRINT);
//リフレッシュトークン:Yellowfinにトークンを要求
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
$json_result = json_decode($result);
$refreshToken = $json_result->securityToken;
curl_close($ch);
//アクセストークン:HEADERデータ作成
$header2 = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123, token='.$refreshToken,
'Accept:application/vnd.yellowfin.api-v2+json',
'Content-Type:application/json'
);
//アクセストークン:Yellowfinにトークンを要求
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_HTTPHEADER, $header2);
curl_setopt($ch2, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch2, CURLOPT_POSTFIELDS, '');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_URL, $url2);
curl_close($ch);
$result2 = curl_exec($ch2);
$json_result2 = json_decode($result2);
$accessToken=$json_result2->securityToken;
//変数の宣言
$url3 = 'http://localhost:8080/api/orgs/';
//クライアント組織作成:HEADERデータ作成
$header3 = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123, token='.$accessToken,
'Accept:application/vnd.yellowfin.api-v2+json',
'Content-Type:application/json'
);
//クライアント組織作成:データ読込
ob_start();
include("org.json");
$orgData = ob_get_clean();
//クライアント組織作成:作成
$ch3 = curl_init();
curl_setopt($ch3, CURLOPT_HTTPHEADER, $header3);
curl_setopt($ch3, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch3, CURLOPT_POSTFIELDS, $orgData);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch3, CURLOPT_URL, $url3);
$result3 =curl_exec($ch3);
curl_close($ch3);
//変数の宣言
$adminId = 'admin@yellowfin.com.au';
$adminPassword = 'test';
$time = ceil(microtime(true)*1000);
$url = 'http://localhost:8080/api/refresh-tokens';
$url2 = 'http://localhost:8080/api/access-tokens';
$refreshToken = "";
$accessToken = "";
//リフレッシュトークン:HEADERデータ作成
$header = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123',
'Accept:application/vnd.yellowfin.api-v2+json',
'Content-Type:application/json;charset=UTF-8'
);
//リフレッシュトークン:BODYデータ作成
$body = array(
'userName'=>$adminId,
'password'=>$adminPassword
);
$body_json = json_encode($body, JSON_PRETTY_PRINT);
//リフレッシュトークン:Yellowfinにトークンを要求
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
$json_result = json_decode($result);
$refreshToken = $json_result->securityToken;
curl_close($ch);
//アクセストークン:HEADERデータ作成
$header2 = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123, token='.$refreshToken,
'Accept:application/vnd.yellowfin.api-v2+json',
'Content-Type:application/json'
);
//アクセストークン:Yellowfinにトークンを要求
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_HTTPHEADER, $header2);
curl_setopt($ch2, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch2, CURLOPT_POSTFIELDS, '');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_URL, $url2);
curl_close($ch);
$result2 = curl_exec($ch2);
$json_result2 = json_decode($result2);
$accessToken=$json_result2->securityToken;
//変数の宣言
$iporg='13204';
$url3 = 'http://localhost:8080/api/orgs/'.$iporg.'/user-access/';
//ユーザー登録:HEADERデータ作成
$header3 = array(
'Authorization:YELLOWFIN ts='.$time.', nonce=123, token='.$accessToken,
'Accept:application/vnd.yellowfin.api-v2+json',
'Content-Type:application/json'
);
//ユーザー登録:データ読込
ob_start();
include("userOrg.json");
$orgData = ob_get_clean();
//ユーザー登録:登録
$ch3 = curl_init();
curl_setopt($ch3, CURLOPT_HTTPHEADER, $header3);
curl_setopt($ch3, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch3, CURLOPT_POSTFIELDS, $orgData);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch3, CURLOPT_URL, $url3);
$result3 =curl_exec($ch3);
curl_close($ch3);