Tableau
Developers Club
Season2
/*TableauのAPIすべて*/
Tableau Server REST API
Workshop
Tableau Senior Technical Support Engineer | Aki Iimura
Sirius Data Science | Takamasa Koimai
REST APIって何
 REpresentational State Transferの略
 Webアプリケーションの「分かりやすい」インターフェイス
あるリソースに対する
GET(取ってくる)、POST(作る)、PUT(更新する)、DELETE(消す)
の操作をURLとHTTPメソッドで表現
 言語は問いません
TableauServer REST API
 Tableau ServerのWeb UIの操作がAPIで可能
 URLへHTTPメソッドでアクセス
 リクエスト、レスポンスの内容(ボディ)は、XML形式(JSONも可)
 処理の成功、失敗は返却されるステータスコードで判断
 処理順
1. サインイン
2. 各処理を実施
3. サインアウト
TableauServerの
WebUIで
操作するのと一緒!
※REST APIの詳細は、リファレンスを参照してください。
https://onlinehelp.tableau.com/current/api/rest_api/en-
us/REST/rest_api_ref.htm
それでは、さっそく実行してみましょう!
ここでは、サイト内のユーザー一覧を取得してみます。
1. サインイン
curl "http://18.179.4.4/api/3.2/auth/signin" -X POST -d
@signin.xml
<tsRequest>
<credentials name="dev-club-creator"
password="password" >
<site contentUrl="dev-club" />
</credentials>
</tsRequest>
 リクエスト
 リクエストボディ(signin.xml)
TableauServer名
を指定
APIのバージョン
を指定
※注
APIバージョンはTableauServerのバージョンによって違います。
新しいTableauServerバージョンへ古いAPIバージョンでは
アクセスできません。(逆はOK)
・2018.3へ3.1でリクエスト NG
・2018.2へ3.2でリクエスト OK
TableauServerバージョンとAPIバージョンの対応はリファレンス
をご参照ください。
サインイン
ユーザ名
サインイン先
サイト名
パスワード
<tsResponse xmlns="http://tableau.com/api"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.2.xsd">
<credentials token="yRnoOOSWSSW5jVGWbR-
d7Q|IOCYGocPpH30ruaKNHi7jXcOjqvlwS6W">
<site id="76c69004-de1b-4a49-b244-554d18cccf70" contentUrl="Dev-club"/>
<user id="3f3a451b-18cc-4156-880a-186e67bf09d6"/>
</credentials>
</tsResponse>
 レスポンス
TableauServer REST APIでの認証は認証トークンをリクエストヘッダに
含めて行うため、認証トークンを取得しておく必要があります。
また、基本的にサイト毎の処理となるため、ほとんどの処理で
site_idが必要となるため、こちらも取得しておきましょう。
参考:JSON形式なら
curl "http://18.179.4.4/api/3.2/auth/signin" -X POST -H "Accept: application/json" -H
"Content-Type: application/json" -d @signin.json
{
"credentials": {
"name": "dev-club-creator",
"password": "password",
"site": { "contentUrl": "dev-
club" }
}
}
 リクエスト
 リクエストボディ
(signin.json)
 レスポンス
{
"credentials":{
"site":{
"id":"76c69004-de1b-4a49-b244-554d18cccf70",
"contentUrl":"Dev-club"
},
"user":{"id":"3f3a451b-18cc-4156-880a-186e67bf09d6"},
"token":"ub0uIiuJT5yNbbE0rHP6ug|1MT4v5cGFCwKVVtgCby7tY
Ure3PLHipp"
}
}
2. ユーザリスト取得
curl "http://18.179.4.4/api/3.2/sites/76c69004-de1b-4a49-b244-
554d18cccf70/users" -X GET -H "X-Tableau-Auth: yRnoOOSWSSW5jVGWbR-
d7Q|IOCYGocPpH30ruaKNHi7jXcOjqvlwS6W"
 リクエスト
サインイン時に取得した
サイトIDを指定
サインイン時に取得した
認証トークンを指定
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.2.xsd">
<pagination pageNumber="1" pageSize="100" totalAvailable="2"/>
<users>
<user id="3f3a451b-18cc-4156-880a-186e67bf09d6" name="dev-club-creator“ siteRole="SiteAdministratorCreator"
lastLogin="2019-01-22T04:28:45Z" externalAuthUserId=""/>
<user id="1b003a5d-4e30-45f7-9b92-77f8283905af" name="dev-club-explorer" siteRole="SiteAdministratorExplorer"
externalAuthUserId=""/>
</users>
</tsResponse>
 レスポンス
サイト内に作成されているユーザーの
情報がユーザー数分、返ってきます。
(今回は2人分)
3. サインアウト
curl "http://18.179.4.4/api/3.2/auth/signout" -X POST -H "X-
Tableau-Auth:yRnoOOSWSSW5jVGWbR-
d7Q|IOCYGocPpH30ruaKNHi7jXcOjqvlwS6W"
 リクエスト
サインイン時に取得した
認証トークンを指定
 レスポンス
サインアウトのレスポンスは、ステータスコードのみです。
サインアウトを実行することにより、セッションを終了し認証トークンが無効化されます。
Pythonでの実行
今、curlコマンドで実行した処理をPythonで記述したのが、user_list.pyです。
user_list.pyを実行してみましょう。
(途中でパスワードを聞かれますので、お伝えしたパスワードを入力してください。)
> python user_list.py dev-club-creator
dev-club
• 実行コマンド
第1引数:サインインユーザー名
第2引数:サイン先サイト名
各リクエストとレスポンスが出力されるので、確認してみてください!
REST API使ってどんなことするの?
 Tableau ServerのWebUIで個々のリソースに対して、「手で」行う操作の自動化が
可能
 ユーザー作成など運用作業の自動化が可能
 (Tableau Serverとは別の)Webアプリケーション上で、Tableau Serverのリソース
操作を行うサーバの開発が可能(がんばれば…)
ここで、実際にREST APIを使用しているユーザーさんに
どんなことをしているか、お話していただきたいと思います。
REST API接続に必要なコーディング
 http接続とGET,POSTの処理
 リクエストペイロード(XML/json)の作成
 レスポンスボディデータ(XML/json)の解析
Tableau Server Client (Python)とは
 これらのhttp接続や、XMLデータの作成や、レスポンスXMLの解析を抽象化し、
「サーバへ接続」、「サインイン」「サイト一覧取得」など、分かりやすいメソッド群を
提供するPythonライブラリです。
 pip install tableauserverclient で、簡単にインストール可能
Tableau Server Client (Python)を使ってみましょう
 インストールされていますか?
 お困りでしたら、slack #rest-api、またはお近くのスタッフにお声をおかけください。
Tableau Server Client – Tableau Server接続確認
 お手元のカードの情報で、ブラウザからアクセス先のTableau Serverにログイン
できることを確認します。
Tableau Server Client (Python)を使ってみましょう
 エディタを開き tdc_tsc1.py を作成します。
 以下の一行を書き込み、保存します。
 この行はtableauserverclientという(インストール済みの)モジュールを、”TSC”という名前でこれか
ら使用可能にします。という意味です。
import tableauserverclient as TSC
 Anaconda Promptまたはターミナルから、以下の
コマンドでtdc_tsc1.pyを実行します。
$ python tdc_tsc1.py
 何もエラーが返ってこなければ、正しくTableau Server Clientが使用可能です。
Tableau Server Client – サーバへ接続
 以下のように、認証情報とログインアクションを書き込み、保存します。
import tableauserverclient as TSC
tablealu_auth = TSC.TableauAuth(‘お手元adminname’, ‘お手元Password’, ‘お手
元Sitename’)
server = TSC.Server(‘http://18.179.4.4’, ‘3.2’)
server.auth.sign_in(tableau_auth)
 Anaconda Promptまたはターミナルから、以下のコマンドでtdc_tsc1.pyを実行
します。
$ python tdc_tsc1.py
 何もエラーが返ってこなければ、ログイン成功です。
Tableau Server Client – ワークブック一覧取得
import tableauserverclient as TSC
tablealu_auth = TSC.TableauAuth(‘お手元adminname’, ‘お手元Password’,
‘お手元Sitename’)
server = TSC.Server(‘http://18.179.4.4’, ‘3.2’)
with server.auth.sign_in(tableau_auth):
all_workbooks, pagination_item = server.workbooks.get()
for wb in all_workbooks:
print(wb.name)
print(wb.id)
with の書式内で、
ログイン状態を維持
したまま各種処理が
可能
workbooks.get()メ
ソッドでワークブッ
ク一覧リスト(と
ページ番号)を取得
ワークブック一覧リストか
らワークブックオブジェク
トを一つづつ取得し、その
nameとidを出力
Tableau Server Client – ワークブック一覧取得
import tableauserverclient as TSC
tablealu_auth = TSC.TableauAuth(‘お手元adminname’, ‘お手元Password’,
‘お手元Sitename’)
server = TSC.Server(‘http://18.179.4.4’, ‘3.2’)
with server.auth.sign_in(tableau_auth):
all_workbooks, pagination_item = server.workbooks.get()
for wb in all_workbooks:
print(wb.name)
print(wb.id)
$ python tdc_tsc3.py
Regional.twbx
2baa2bd0-3310-43ec-9c7d-cc269a202d62
Superstore.twbx
7b4f8821-bab7-4118-9f84-489b161e2a98
 実行結果
Tableau Server Client – 同様にサイトユーザ一覧取得
import tableauserverclient as TSC
tablealu_auth = TSC.TableauAuth(‘お手元adminname’, ‘お手元Password’,
‘お手元Sitename’)
server = TSC.Server(‘http://18.179.4.4’, ‘3.2’)
with server.auth.sign_in(tableau_auth):
all_users, pagination_item = server.users.get()
for u in all_users:
print("name:{} / role:{}".format(u.name, u.site_role))
$ python tdc_tsc4.py
name:admin / role:ServerAdministrator
name:058_admin / role:SiteAdministratorExplorer
name:058_1 / role:Creator
name:058_2 / role:Explorer
 実行結果
.formatで一行
で出力
Tableau Server Client – ユーザ一覧からロール変更
import tableauserverclient as TSC
tablealu_auth = TSC.TableauAuth(‘お手元adminname’, ‘お手元Password’,
‘お手元Sitename’)
server = TSC.Server(‘http://18.179.4.4’, ‘3.2’)
with server.auth.sign_in(tableau_auth):
all_users, pagination_item = server.users.get()
for u in all_users:
if u.site_role == ‘Explorer’: # site_roleがExplorerだったら
u.site_role = ‘Unlicensed‘ # Unlicensedに変更して
u = server.users.update(u) # アップデート
print("name:{} / role:{}".format(u.name, u.site_role))
$ python tdc_tsc5.py
name:058_2 / role:Unlicensed
 実行結果
Tableau Server Client - デバッグの友
 Debug出力でどこが間違っているか見当がつきます。
userなんて属性
はないって
正しくはusersでした
Tableau Server Client - デバッグの友
 httpトレースツール Fiddlerで、サーバサイドの問題の見当がつきます。
Signin認証エラーとな。
->サイトが間違っていた..
Tableau Server Clientのサンプルスクリプト
 Tableau Server Clientのサンプルス
クリプトはgitリポジトリに含まれており
ます。
 https://github.com/tableau/server-
client-pythonから”Download ZIP”でダ
ウンロード
 もしくは”git clone
https://github.com/tableau/server-
client-python.git”
Tableau Server Clientのリファレンスマニュアル
 Tableau Server Clientリファレンスマニュアルに、すべての可能なメソッドが説
明されています。
Tableau Developer Programをご利用ください
 Tableau Server をお持ちでなくても、Tableau Developer Programに登録
することで、開発用のフリーのTableau Onlineアカウントがご利用になれます。
 https://www.tableau.com/developer
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau Server REST API Workshop

Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau Server REST API Workshop

  • 1.
    Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau ServerREST API Workshop Tableau Senior Technical Support Engineer | Aki Iimura Sirius Data Science | Takamasa Koimai
  • 2.
    REST APIって何  REpresentationalState Transferの略  Webアプリケーションの「分かりやすい」インターフェイス あるリソースに対する GET(取ってくる)、POST(作る)、PUT(更新する)、DELETE(消す) の操作をURLとHTTPメソッドで表現  言語は問いません
  • 3.
    TableauServer REST API Tableau ServerのWeb UIの操作がAPIで可能  URLへHTTPメソッドでアクセス  リクエスト、レスポンスの内容(ボディ)は、XML形式(JSONも可)  処理の成功、失敗は返却されるステータスコードで判断  処理順 1. サインイン 2. 各処理を実施 3. サインアウト TableauServerの WebUIで 操作するのと一緒! ※REST APIの詳細は、リファレンスを参照してください。 https://onlinehelp.tableau.com/current/api/rest_api/en- us/REST/rest_api_ref.htm
  • 4.
  • 5.
    1. サインイン curl "http://18.179.4.4/api/3.2/auth/signin"-X POST -d @signin.xml <tsRequest> <credentials name="dev-club-creator" password="password" > <site contentUrl="dev-club" /> </credentials> </tsRequest>  リクエスト  リクエストボディ(signin.xml) TableauServer名 を指定 APIのバージョン を指定 ※注 APIバージョンはTableauServerのバージョンによって違います。 新しいTableauServerバージョンへ古いAPIバージョンでは アクセスできません。(逆はOK) ・2018.3へ3.1でリクエスト NG ・2018.2へ3.2でリクエスト OK TableauServerバージョンとAPIバージョンの対応はリファレンス をご参照ください。 サインイン ユーザ名 サインイン先 サイト名 パスワード
  • 6.
    <tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.2.xsd"> <credentialstoken="yRnoOOSWSSW5jVGWbR- d7Q|IOCYGocPpH30ruaKNHi7jXcOjqvlwS6W"> <site id="76c69004-de1b-4a49-b244-554d18cccf70" contentUrl="Dev-club"/> <user id="3f3a451b-18cc-4156-880a-186e67bf09d6"/> </credentials> </tsResponse>  レスポンス TableauServer REST APIでの認証は認証トークンをリクエストヘッダに 含めて行うため、認証トークンを取得しておく必要があります。 また、基本的にサイト毎の処理となるため、ほとんどの処理で site_idが必要となるため、こちらも取得しておきましょう。
  • 7.
    参考:JSON形式なら curl "http://18.179.4.4/api/3.2/auth/signin" -XPOST -H "Accept: application/json" -H "Content-Type: application/json" -d @signin.json { "credentials": { "name": "dev-club-creator", "password": "password", "site": { "contentUrl": "dev- club" } } }  リクエスト  リクエストボディ (signin.json)  レスポンス { "credentials":{ "site":{ "id":"76c69004-de1b-4a49-b244-554d18cccf70", "contentUrl":"Dev-club" }, "user":{"id":"3f3a451b-18cc-4156-880a-186e67bf09d6"}, "token":"ub0uIiuJT5yNbbE0rHP6ug|1MT4v5cGFCwKVVtgCby7tY Ure3PLHipp" } }
  • 8.
    2. ユーザリスト取得 curl "http://18.179.4.4/api/3.2/sites/76c69004-de1b-4a49-b244- 554d18cccf70/users"-X GET -H "X-Tableau-Auth: yRnoOOSWSSW5jVGWbR- d7Q|IOCYGocPpH30ruaKNHi7jXcOjqvlwS6W"  リクエスト サインイン時に取得した サイトIDを指定 サインイン時に取得した 認証トークンを指定 <tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.2.xsd"> <pagination pageNumber="1" pageSize="100" totalAvailable="2"/> <users> <user id="3f3a451b-18cc-4156-880a-186e67bf09d6" name="dev-club-creator“ siteRole="SiteAdministratorCreator" lastLogin="2019-01-22T04:28:45Z" externalAuthUserId=""/> <user id="1b003a5d-4e30-45f7-9b92-77f8283905af" name="dev-club-explorer" siteRole="SiteAdministratorExplorer" externalAuthUserId=""/> </users> </tsResponse>  レスポンス サイト内に作成されているユーザーの 情報がユーザー数分、返ってきます。 (今回は2人分)
  • 9.
    3. サインアウト curl "http://18.179.4.4/api/3.2/auth/signout"-X POST -H "X- Tableau-Auth:yRnoOOSWSSW5jVGWbR- d7Q|IOCYGocPpH30ruaKNHi7jXcOjqvlwS6W"  リクエスト サインイン時に取得した 認証トークンを指定  レスポンス サインアウトのレスポンスは、ステータスコードのみです。 サインアウトを実行することにより、セッションを終了し認証トークンが無効化されます。
  • 10.
    Pythonでの実行 今、curlコマンドで実行した処理をPythonで記述したのが、user_list.pyです。 user_list.pyを実行してみましょう。 (途中でパスワードを聞かれますので、お伝えしたパスワードを入力してください。) > python user_list.pydev-club-creator dev-club • 実行コマンド 第1引数:サインインユーザー名 第2引数:サイン先サイト名 各リクエストとレスポンスが出力されるので、確認してみてください!
  • 11.
    REST API使ってどんなことするの?  TableauServerのWebUIで個々のリソースに対して、「手で」行う操作の自動化が 可能  ユーザー作成など運用作業の自動化が可能  (Tableau Serverとは別の)Webアプリケーション上で、Tableau Serverのリソース 操作を行うサーバの開発が可能(がんばれば…) ここで、実際にREST APIを使用しているユーザーさんに どんなことをしているか、お話していただきたいと思います。
  • 13.
    REST API接続に必要なコーディング  http接続とGET,POSTの処理 リクエストペイロード(XML/json)の作成  レスポンスボディデータ(XML/json)の解析
  • 14.
    Tableau Server Client(Python)とは  これらのhttp接続や、XMLデータの作成や、レスポンスXMLの解析を抽象化し、 「サーバへ接続」、「サインイン」「サイト一覧取得」など、分かりやすいメソッド群を 提供するPythonライブラリです。  pip install tableauserverclient で、簡単にインストール可能
  • 15.
    Tableau Server Client(Python)を使ってみましょう  インストールされていますか?  お困りでしたら、slack #rest-api、またはお近くのスタッフにお声をおかけください。
  • 16.
    Tableau Server Client– Tableau Server接続確認  お手元のカードの情報で、ブラウザからアクセス先のTableau Serverにログイン できることを確認します。
  • 17.
    Tableau Server Client(Python)を使ってみましょう  エディタを開き tdc_tsc1.py を作成します。  以下の一行を書き込み、保存します。  この行はtableauserverclientという(インストール済みの)モジュールを、”TSC”という名前でこれか ら使用可能にします。という意味です。 import tableauserverclient as TSC  Anaconda Promptまたはターミナルから、以下の コマンドでtdc_tsc1.pyを実行します。 $ python tdc_tsc1.py  何もエラーが返ってこなければ、正しくTableau Server Clientが使用可能です。
  • 18.
    Tableau Server Client– サーバへ接続  以下のように、認証情報とログインアクションを書き込み、保存します。 import tableauserverclient as TSC tablealu_auth = TSC.TableauAuth(‘お手元adminname’, ‘お手元Password’, ‘お手 元Sitename’) server = TSC.Server(‘http://18.179.4.4’, ‘3.2’) server.auth.sign_in(tableau_auth)  Anaconda Promptまたはターミナルから、以下のコマンドでtdc_tsc1.pyを実行 します。 $ python tdc_tsc1.py  何もエラーが返ってこなければ、ログイン成功です。
  • 19.
    Tableau Server Client– ワークブック一覧取得 import tableauserverclient as TSC tablealu_auth = TSC.TableauAuth(‘お手元adminname’, ‘お手元Password’, ‘お手元Sitename’) server = TSC.Server(‘http://18.179.4.4’, ‘3.2’) with server.auth.sign_in(tableau_auth): all_workbooks, pagination_item = server.workbooks.get() for wb in all_workbooks: print(wb.name) print(wb.id) with の書式内で、 ログイン状態を維持 したまま各種処理が 可能 workbooks.get()メ ソッドでワークブッ ク一覧リスト(と ページ番号)を取得 ワークブック一覧リストか らワークブックオブジェク トを一つづつ取得し、その nameとidを出力
  • 20.
    Tableau Server Client– ワークブック一覧取得 import tableauserverclient as TSC tablealu_auth = TSC.TableauAuth(‘お手元adminname’, ‘お手元Password’, ‘お手元Sitename’) server = TSC.Server(‘http://18.179.4.4’, ‘3.2’) with server.auth.sign_in(tableau_auth): all_workbooks, pagination_item = server.workbooks.get() for wb in all_workbooks: print(wb.name) print(wb.id) $ python tdc_tsc3.py Regional.twbx 2baa2bd0-3310-43ec-9c7d-cc269a202d62 Superstore.twbx 7b4f8821-bab7-4118-9f84-489b161e2a98  実行結果
  • 21.
    Tableau Server Client– 同様にサイトユーザ一覧取得 import tableauserverclient as TSC tablealu_auth = TSC.TableauAuth(‘お手元adminname’, ‘お手元Password’, ‘お手元Sitename’) server = TSC.Server(‘http://18.179.4.4’, ‘3.2’) with server.auth.sign_in(tableau_auth): all_users, pagination_item = server.users.get() for u in all_users: print("name:{} / role:{}".format(u.name, u.site_role)) $ python tdc_tsc4.py name:admin / role:ServerAdministrator name:058_admin / role:SiteAdministratorExplorer name:058_1 / role:Creator name:058_2 / role:Explorer  実行結果 .formatで一行 で出力
  • 22.
    Tableau Server Client– ユーザ一覧からロール変更 import tableauserverclient as TSC tablealu_auth = TSC.TableauAuth(‘お手元adminname’, ‘お手元Password’, ‘お手元Sitename’) server = TSC.Server(‘http://18.179.4.4’, ‘3.2’) with server.auth.sign_in(tableau_auth): all_users, pagination_item = server.users.get() for u in all_users: if u.site_role == ‘Explorer’: # site_roleがExplorerだったら u.site_role = ‘Unlicensed‘ # Unlicensedに変更して u = server.users.update(u) # アップデート print("name:{} / role:{}".format(u.name, u.site_role)) $ python tdc_tsc5.py name:058_2 / role:Unlicensed  実行結果
  • 23.
    Tableau Server Client- デバッグの友  Debug出力でどこが間違っているか見当がつきます。 userなんて属性 はないって 正しくはusersでした
  • 24.
    Tableau Server Client- デバッグの友  httpトレースツール Fiddlerで、サーバサイドの問題の見当がつきます。 Signin認証エラーとな。 ->サイトが間違っていた..
  • 25.
    Tableau Server Clientのサンプルスクリプト Tableau Server Clientのサンプルス クリプトはgitリポジトリに含まれており ます。  https://github.com/tableau/server- client-pythonから”Download ZIP”でダ ウンロード  もしくは”git clone https://github.com/tableau/server- client-python.git”
  • 26.
    Tableau Server Clientのリファレンスマニュアル Tableau Server Clientリファレンスマニュアルに、すべての可能なメソッドが説 明されています。
  • 27.
    Tableau Developer Programをご利用ください Tableau Server をお持ちでなくても、Tableau Developer Programに登録 することで、開発用のフリーのTableau Onlineアカウントがご利用になれます。  https://www.tableau.com/developer