SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Ryosuke Uchitate
 

Was ist angesagt? (20)

Keycloakのステップアップ認証について
Keycloakのステップアップ認証についてKeycloakのステップアップ認証について
Keycloakのステップアップ認証について
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Vault の鍵管理機構
Vault の鍵管理機構Vault の鍵管理機構
Vault の鍵管理機構
 
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
 
2019 FIDO Tokyo Seminar - LINE PayへのFIDO2実装
2019 FIDO Tokyo Seminar - LINE PayへのFIDO2実装2019 FIDO Tokyo Seminar - LINE PayへのFIDO2実装
2019 FIDO Tokyo Seminar - LINE PayへのFIDO2実装
 
とある診断員とAWS
とある診断員とAWSとある診断員とAWS
とある診断員とAWS
 
MQ入門
MQ入門MQ入門
MQ入門
 
Hacked? Pray that the Attacker used PowerShell
Hacked? Pray that the Attacker used PowerShellHacked? Pray that the Attacker used PowerShell
Hacked? Pray that the Attacker used PowerShell
 
App013 ここはあえて紙と
App013 ここはあえて紙とApp013 ここはあえて紙と
App013 ここはあえて紙と
 
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
 
認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜認証の課題とID連携の実装 〜ハンズオン〜
認証の課題とID連携の実装 〜ハンズオン〜
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
 
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
 
Internet Week 2018:D2-3 丸ごと分かるペネトレーションテストの今
Internet Week 2018:D2-3 丸ごと分かるペネトレーションテストの今Internet Week 2018:D2-3 丸ごと分かるペネトレーションテストの今
Internet Week 2018:D2-3 丸ごと分かるペネトレーションテストの今
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
 
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開するKeycloakでFAPIに対応した高セキュリティなAPIを公開する
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
 
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
 

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

Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
 
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
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Akira Inoue
 
System4 comment
System4 commentSystem4 comment
System4 comment
Jun Chiba
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
Makoto Haruyama
 

Ähnlich wie 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のはじめ方
 

Mehr von Hiroshi Masuda

Mehr von 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