Tableau RestAPI <Server情報獲得編>

Tableau RestAPI <Server情報獲得編> | Tableau-id Press -タブロイド-
Tabhou
こんにちは。truestar工房の三村です。
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に紐づく情報)

シート毎に出力する内容は以下の通りです。


① 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ファイルに出力したり、いろんな事ができます。

そのお話はまた次回に。では。