TableauRestAPIを使って、色々なアプリケーションを作成しています。
今回はその中の TableauServer情報を獲得する アプリケーションをご紹介いたします。
1.Tabhou<TableauServerの情報を出力>
1.1. 画面紹介
Windows のDeskTopアプリケーションです。名前は 『Tabhou』(TabluauServer情報)です。(あまりのセンスのなさに、変更要求が来た場合は対処する覚悟あり)TableauServer の バージョン、ログイン画面URL、ログインユーザーID、パスワード を入力して「Go」すると、そのユーザーがアクセスできるServer情報をエクセルファイルに出力する、という仕様です。Tabhouでは オンプレミス 環境での動作を前提としています。 |
1.2. 出力内容紹介
このプログラムでは、以下の情報をExcelファイルのそれぞれのシートに出力します。出力内容も今後社内要求により増減するかも(ワクワク♪)…誰にも見向きされず、このままかも…(うぅっ)
① Site情報
② Workbook情報(Siteに紐づく情報)
③ View情報(Siteに紐づく情報)
④ Project情報(Siteに紐づく情報)
⑤ User情報(Siteに紐づく情報)
⑥ Datasource情報(Siteに紐づく情報)
シート毎に出力する内容は以下の通りです。
|
② Workbookシート | ③ Viewシート | ④ Projectシート | ⑤ Userシート | ⑥ Datasourceシート |
site_name | site_name | site_name | site_name | site_name | site_name |
site_contentUrl | workbook_name | view_name | project_name | user_name | datasource_contentUrl |
site_adminMode | workbook_description | view_contentUrl | project_description | user_siteRole | datasource_createdAt |
site_disableSubscriptions | workbook_webpageurl | view_createdAt | project_createdAt | user_lastLogin | datasource_description |
site_state | workbook_contentUrl | view_updatedAt | project_updatedAt | user_externalAuthUserId | datasource_encryptExtracts |
site_revisionHistoryEnabled | workbook_showTabs | view_viewUrlName | project_contentPermissions | user_id | datasource_id |
site_revisionLimit | workbook_size | view_id | project_id | datasource_isCertified | |
site_subscribeOthersEnabled | workbook_createdAt | workbook_id | owner_id | datasource_name | |
site_allowSubscriptionAttachments | workbook_updatedAt | owner_id | datasource_type | ||
site_userQuota | workbook_defaultViewId | project_id | datasource_updatedAt | ||
site_guestAccessEnabled | workbook_id | datasource_useRemoteQueryAgent | |||
site_cacheWarmupEnabled | project_id | datasource_webpageUrl | |||
site_commentingEnabled | project_name | project_id | |||
site_storageQuota | owner_id | project_name | |||
site_flowsEnabled | owner_id | ||||
site_extractEncryptionMode | |||||
site_catalogingEnabled | |||||
site_derivedPermissionsEnabled | |||||
site_requestAccessEnabled | |||||
site_runNowEnabled | |||||
site_usage numUsers | |||||
site_storage | |||||
site_tierCreatorCapacity | |||||
site_tierExplorerCapacity | |||||
site_tierViewerCapacity |
1.3. 販売のご案内
Tabhouは 社内でサーバー内の整理整頓等に使っていただきたいと思って作成いたしました。
もし、このアプリケーションを「ほしい!」という方がいらっしゃいましたら、是非当社までお問い合わせください。ご要望に沿ってカスタマイズすることも可能です。
「いや、自分で作成します~」という方のために、手順とソースの一部を記載いたします。私はTabhouをC#で作成いたしました。
あまり綺麗なソースではないのですが…、その辺はご容赦くださいね。
2.Tableau RestAPI
2.1. Tableau RestAPIについて
RestAPI というのは、「これこれの情報をください」 とサーバーに対して問い合わせ(電文)を送り( Httpリクエスト)、サーバーがそれに答えるタイプ(RestFul)だった場合、回答が電文で帰る(Httpレスポンス)という仕組みです。
TableauServerはRestFulなサーバーのため、いろんな問い合わせに答えてくれます。
Tableau RestAPI は Tableau Server の バージョンによってインタフェースが異なります。ご使用のTableau Server の バージョンに合わせて 送信および受信電文の設計をしてください。
2.2. 手順とソースの一部
サーバーにサインインする手順とソースを記載いたします。
TableauServer 2020.1 の RestAPI signin の リファレンスマニュアルは以下になります。
https://help.tableau.com/v2020.1/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in
①login 電文をXML形式で準備します。
/* login Xml */
<tsRequest>
<credentials name="username" password="password" >
<site contentUrl="content-url" />
</credentials>
</tsRequest>
②Postで Httpリクエストを行います。
static internal HttpWebResponse Post(string url, string contentType, string payload)
{
HttpWebResponse ret = null;
byte[] buf = Encoding.UTF8.GetBytes(payload);
ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
HttpWebRequest wc = WebRequest.Create(url) as HttpWebRequest;
wc.Method = "POST";
wc.Headers.Add($"X-Tableau-Auth: {Token}");
wc.ContentType = contentType;
wc.ContentLength = buf.Length;
wc.GetRequestStream().Write(buf, 0, buf.Length);
try
{
ret = wc.GetResponse() as HttpWebResponse;
}
catch (WebException we)
{
errProc(we);
}
return ret;
}
③レスポンスをXML形式で獲得します。
static internal XDocument GetResponseInfo(HttpWebResponse response)
{
string ret = "";
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
ret = sr.ReadToEnd();
}
XDocument doc;
doc = XDocument.Parse(ret);
return doc;
}
④レスポンスからtokenを獲得します。以降、Siginoutするまで、このtokenを使います。
<tsRequest>
<credentials token="authentication-token"
estimatedTimeToExpiration="time-to-expiration" >
<site id="site-id" contentUrl="content-url" />
<user id="user-id-of-signed-in-user"
</credentials>
</tsRequest>
<流れ>
1.サインイン してtokenを獲得します。(これ以降の処理の電文にはこのtokenを設定します)
2.Site情報を獲得します。https://help.tableau.com/v2020.1/api/rest_api/en-us/REST/rest_api_ref.htm#query_sites
3.Site情報のSiteIdを指定して、その他の情報を獲得します。
4.サインアウトします。https://help.tableau.com/v2020.1/api/rest_api/en-us/REST/rest_api_ref.htm#sign_out
RestAPI は Server情報獲得だけでなく、ソースをパブリッシュしたり、ViewをPDFファイルに出力したり、いろんな事ができます。
そのお話はまた次回に。では。