SlideShare a Scribd company logo
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

More Related Content

What's hot

【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
日本マイクロソフト株式会社
 
Hadoop Workshop using Cloudera on Amazon EC2
Hadoop Workshop using Cloudera on Amazon EC2Hadoop Workshop using Cloudera on Amazon EC2
Hadoop Workshop using Cloudera on Amazon EC2
IMC Institute
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
Tableau学習おすすめTips
Tableau学習おすすめTipsTableau学習おすすめTips
Tableau学習おすすめTips
ShoichiYashiro
 
いまできるデータ分析を Power BI ではじめよう
いまできるデータ分析を Power BI ではじめよういまできるデータ分析を Power BI ではじめよう
いまできるデータ分析を Power BI ではじめよう
Yugo Shimizu
 
おひとりさまAWS Organizationsのススメ
おひとりさまAWS OrganizationsのススメおひとりさまAWS Organizationsのススメ
おひとりさまAWS Organizationsのススメ
Makio Tsukamoto
 
When apache pulsar meets apache flink
When apache pulsar meets apache flinkWhen apache pulsar meets apache flink
When apache pulsar meets apache flink
StreamNative
 
Managing transactions on Ethereum with Apache Airflow
Managing transactions on Ethereum with Apache AirflowManaging transactions on Ethereum with Apache Airflow
Managing transactions on Ethereum with Apache Airflow
Michael Ghen
 
XMPPの紹介
XMPPの紹介XMPPの紹介
XMPPの紹介
隆行 神戸
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介
Yahoo!デベロッパーネットワーク
 
Presto overview
Presto overviewPresto overview
Presto overview
Shixiong Zhu
 
Nmap 9つの真実
Nmap 9つの真実Nmap 9つの真実
Nmap 9つの真実
abend_cve_9999_0001
 
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
Kazuto Kusama
 
Lean coffee
Lean coffeeLean coffee
Lean coffee
Takeshi Arai
 
マウスホイールイベント処理マニアックス
マウスホイールイベント処理マニアックスマウスホイールイベント処理マニアックス
マウスホイールイベント処理マニアックス
Masayuki Nakano
 
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
NTT DATA Technology & Innovation
 
え、毎月手作業でレポートを作ってるの?Power BI を使えば自動化できますよ!
え、毎月手作業でレポートを作ってるの?Power BI を使えば自動化できますよ!え、毎月手作業でレポートを作ってるの?Power BI を使えば自動化できますよ!
え、毎月手作業でレポートを作ってるの?Power BI を使えば自動化できますよ!
Yugo Shimizu
 

What's hot (17)

【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
 
Hadoop Workshop using Cloudera on Amazon EC2
Hadoop Workshop using Cloudera on Amazon EC2Hadoop Workshop using Cloudera on Amazon EC2
Hadoop Workshop using Cloudera on Amazon EC2
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
Tableau学習おすすめTips
Tableau学習おすすめTipsTableau学習おすすめTips
Tableau学習おすすめTips
 
いまできるデータ分析を Power BI ではじめよう
いまできるデータ分析を Power BI ではじめよういまできるデータ分析を Power BI ではじめよう
いまできるデータ分析を Power BI ではじめよう
 
おひとりさまAWS Organizationsのススメ
おひとりさまAWS OrganizationsのススメおひとりさまAWS Organizationsのススメ
おひとりさまAWS Organizationsのススメ
 
When apache pulsar meets apache flink
When apache pulsar meets apache flinkWhen apache pulsar meets apache flink
When apache pulsar meets apache flink
 
Managing transactions on Ethereum with Apache Airflow
Managing transactions on Ethereum with Apache AirflowManaging transactions on Ethereum with Apache Airflow
Managing transactions on Ethereum with Apache Airflow
 
XMPPの紹介
XMPPの紹介XMPPの紹介
XMPPの紹介
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介
 
Presto overview
Presto overviewPresto overview
Presto overview
 
Nmap 9つの真実
Nmap 9つの真実Nmap 9つの真実
Nmap 9つの真実
 
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
 
Lean coffee
Lean coffeeLean coffee
Lean coffee
 
マウスホイールイベント処理マニアックス
マウスホイールイベント処理マニアックスマウスホイールイベント処理マニアックス
マウスホイールイベント処理マニアックス
 
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
 
え、毎月手作業でレポートを作ってるの?Power BI を使えば自動化できますよ!
え、毎月手作業でレポートを作ってるの?Power BI を使えば自動化できますよ!え、毎月手作業でレポートを作ってるの?Power BI を使えば自動化できますよ!
え、毎月手作業でレポートを作ってるの?Power BI を使えば自動化できますよ!
 

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

Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Takahiro Yonei
 
Akka HTTP
Akka HTTPAkka HTTP
Akka HTTP
TanUkkii
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理土岐 孝平
 
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Tasuku Otani
 
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にReactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
 
OpenStack API
OpenStack APIOpenStack API
OpenStack API
Akira Yoshiyama
 
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LTWebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
mganeko
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 ichikaway
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説Akira Inoue
 
System4 comment
System4 commentSystem4 comment
System4 commentJun Chiba
 
Oracle APEX もくもく会 プラグインを作ろう
Oracle APEX もくもく会 プラグインを作ろうOracle APEX もくもく会 プラグインを作ろう
Oracle APEX もくもく会 プラグインを作ろう
良 亀井
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2Masatoshi Tada
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
shigeya
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010
stomita
 
Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方
Amazon Web Services Japan
 

Similar to Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau Server REST API Workshop (20)

Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
Salesforce DUG Japan Meetup#9(REST API, Metadata API etc)
 
Akka HTTP
Akka HTTPAkka HTTP
Akka HTTP
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
 
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
 
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単にReactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
 
OpenStack API
OpenStack APIOpenStack API
OpenStack API
 
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LTWebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
 
System4 comment
System4 commentSystem4 comment
System4 comment
 
Oracle APEX もくもく会 プラグインを作ろう
Oracle APEX もくもく会 プラグインを作ろうOracle APEX もくもく会 プラグインを作ろう
Oracle APEX もくもく会 プラグインを作ろう
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010
 
Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方
 

More from Hiroshi Masuda

Tableauエンジニア育成の取り組み
Tableauエンジニア育成の取り組みTableauエンジニア育成の取り組み
Tableauエンジニア育成の取り組み
Hiroshi Masuda
 
Partner community
Partner communityPartner community
Partner community
Hiroshi Masuda
 
Tableau x データサイエンス
Tableau x データサイエンスTableau x データサイエンス
Tableau x データサイエンス
Hiroshi Masuda
 
Tableau データサイエンス勉強会 第2回の予告 Forecast FlowでAIとBIのマリアージュ
Tableau データサイエンス勉強会 第2回の予告 Forecast FlowでAIとBIのマリアージュTableau データサイエンス勉強会 第2回の予告 Forecast FlowでAIとBIのマリアージュ
Tableau データサイエンス勉強会 第2回の予告 Forecast FlowでAIとBIのマリアージュ
Hiroshi Masuda
 
Tableauから始める統計学の基礎
Tableauから始める統計学の基礎Tableauから始める統計学の基礎
Tableauから始める統計学の基礎
Hiroshi Masuda
 
Tableauデータサイエンス勉強会(ユーザ会)とは
Tableauデータサイエンス勉強会(ユーザ会)とはTableauデータサイエンス勉強会(ユーザ会)とは
Tableauデータサイエンス勉強会(ユーザ会)とは
Hiroshi Masuda
 
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
Hiroshi Masuda
 
ピタゴラAPIのすゝめ ー APIの組み合わせ利用でできること -
ピタゴラAPIのすゝめ ー APIの組み合わせ利用でできること -ピタゴラAPIのすゝめ ー APIの組み合わせ利用でできること -
ピタゴラAPIのすゝめ ー APIの組み合わせ利用でできること -
Hiroshi Masuda
 
Dev club season 2 extensionsapi workshop
Dev club season 2   extensionsapi workshopDev club season 2   extensionsapi workshop
Dev club season 2 extensionsapi workshop
Hiroshi Masuda
 
Tableau Developers Club 外部サービス連携#1 Tabpy触ってみよう#1
Tableau Developers Club 外部サービス連携#1 Tabpy触ってみよう#1Tableau Developers Club 外部サービス連携#1 Tabpy触ってみよう#1
Tableau Developers Club 外部サービス連携#1 Tabpy触ってみよう#1
Hiroshi Masuda
 

More from Hiroshi Masuda (10)

Tableauエンジニア育成の取り組み
Tableauエンジニア育成の取り組みTableauエンジニア育成の取り組み
Tableauエンジニア育成の取り組み
 
Partner community
Partner communityPartner community
Partner community
 
Tableau x データサイエンス
Tableau x データサイエンスTableau x データサイエンス
Tableau x データサイエンス
 
Tableau データサイエンス勉強会 第2回の予告 Forecast FlowでAIとBIのマリアージュ
Tableau データサイエンス勉強会 第2回の予告 Forecast FlowでAIとBIのマリアージュTableau データサイエンス勉強会 第2回の予告 Forecast FlowでAIとBIのマリアージュ
Tableau データサイエンス勉強会 第2回の予告 Forecast FlowでAIとBIのマリアージュ
 
Tableauから始める統計学の基礎
Tableauから始める統計学の基礎Tableauから始める統計学の基礎
Tableauから始める統計学の基礎
 
Tableauデータサイエンス勉強会(ユーザ会)とは
Tableauデータサイエンス勉強会(ユーザ会)とはTableauデータサイエンス勉強会(ユーザ会)とは
Tableauデータサイエンス勉強会(ユーザ会)とは
 
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
 
ピタゴラAPIのすゝめ ー APIの組み合わせ利用でできること -
ピタゴラAPIのすゝめ ー APIの組み合わせ利用でできること -ピタゴラAPIのすゝめ ー APIの組み合わせ利用でできること -
ピタゴラAPIのすゝめ ー APIの組み合わせ利用でできること -
 
Dev club season 2 extensionsapi workshop
Dev club season 2   extensionsapi workshopDev club season 2   extensionsapi workshop
Dev club season 2 extensionsapi workshop
 
Tableau Developers Club 外部サービス連携#1 Tabpy触ってみよう#1
Tableau Developers Club 外部サービス連携#1 Tabpy触ってみよう#1Tableau Developers Club 外部サービス連携#1 Tabpy触ってみよう#1
Tableau Developers Club 外部サービス連携#1 Tabpy触ってみよう#1
 

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

  • 1. Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau Server REST API Workshop Tableau Senior Technical Support Engineer | Aki Iimura Sirius Data Science | Takamasa Koimai
  • 2. REST APIって何  REpresentational State 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
  • 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"> <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が必要となるため、こちらも取得しておきましょう。
  • 7. 参考: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" } }
  • 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.py dev-club-creator dev-club • 実行コマンド 第1引数:サインインユーザー名 第2引数:サイン先サイト名 各リクエストとレスポンスが出力されるので、確認してみてください!
  • 11. REST API使ってどんなことするの?  Tableau ServerのWebUIで個々のリソースに対して、「手で」行う操作の自動化が 可能  ユーザー作成など運用作業の自動化が可能  (Tableau Serverとは別の)Webアプリケーション上で、Tableau Serverのリソース 操作を行うサーバの開発が可能(がんばれば…) ここで、実際にREST APIを使用しているユーザーさんに どんなことをしているか、お話していただきたいと思います。
  • 12.
  • 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