MotionBoardのWebAPIを使ってMotionBoardのデータをDataSpiderで外部に出力する

# 最初に

MotionBoardは様々なデータを集め、画面上で仮想統合ができるBIツールです。
データを集め、データをビジュアライズすることに長けています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/6a29b059-2c28-d888-0700-5dd268e9905e.png)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/7bc601e7-ace8-cafa-2313-c2d66b9de500.gif" width=60%>

※キャプチャはウイングアーク１ｓｔ社のホームページより抜粋

https://www.wingarc.com/product/motionboard/index.html


# 今回やりたいこと

MotionBoardでデータを集め・加工して、可視化する以外に、このデータをもっと他のアプリに渡したいというニーズが出てくると思います。
今回はMotionBoardで表示しているデータをWebAPIの機能を使って、外部に出力をしてみたいと思います。

今回使う機能はこちらです。

https://cs.wingarc.com/manual/mb/6.2/ja/UUID-99d9bc54-327d-73ec-44fd-1dec8a155f5b.html#UUID-8d21cdc0-ad02-2e29-0323-2b45306c752b_d38915e276854

プログラムでもAPIを叩いてデータ抽出が可能ですが、今回はETLツールであるDataSpiderからAPIを呼び出してみたいと思います。


# 実装してみる

今回の流れはこちらです。
・MotionBoardで明細表をつくる
・DataSpiderでデータを抽出する


### MotionBoardで明細表をつくる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/249a9206-2196-4593-1694-49791051c7c4.png)

まずはMotionBoardから取得したいデータを選択し、明細表を作成します。
（集計したチャートなども選択可能ですが、ここでは明細表を選びます）

この明細表の[アイテムプロパティ]→[共通]タブをクリックし、[WebAPIでのデータ取得を許可する]にチェックを入れます。
そして以下の情報をおさえておきましょう。
・ボードパス
・ボード名
・アイテムID

これらはAPIを呼び出す際に使用をします。

### DataSpiderでデータを抽出する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/6ee77462-8811-23ab-260a-c1eb61468b6d.png)

今回解説するところは赤枠の中です。
それ以外はETLツールで効率的にログや実行判断をするライブラリです。
それらについてはこちらで解説をしています。
DataSpiderやETLツールを使う人にはぜひご覧になっていただきたい内容です。

https://zenn.dev/ryosanbimania/articles/5e361f5f9dc570

#### グローバルリソースの設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/af4ff00e-616f-c76c-be79-2f6110ed9dd4.png)

グローバルリソースのRESTを選択します。
URLはMotionBoard Cloudか、MotionBoard Cloud for Salesforceか、MotionBoardオンプレかによって変わります。

詳細はこちらをご覧ください。

https://cs.wingarc.com/manual/mb/cloud/ja/UUID-b0985959-0d97-f5c1-03c7-d62f258d99b1.html#UUID-df21a715-f5e6-00b4-6314-cb9981a6b702_d38915e271298

#### スクリプトの設定

今回のスクリプトではWebAPIで実行した結果をCSVにして、そのCSVをDr.Sumに格納しています。
今回の解説ではWebAPIをCSVにするところまでを解説します。青枠のところですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/09356bb4-2fa3-70d6-71c8-75d85b317428.png)

##### WebAPI実行（POST実行処理）
まずはWebAPIの実行の定義を作ります。
使用するコンポーネントは[REST]の[POST実行処理]です。

接続先は先ほど設定したグローバルリソースを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/6508a804-375f-2b32-ee69-534a22185060.png)

パスは[rest/item/get/csv]
クエリパラメータは
　tenant：%{WebAPI_MBSF_テナント}　　←ここでは環境変数に入れていますがベタ打ちでOKです
　boardpath：先ほどMotionBoardの明細表を作ったボードのパス


リクエスト設定ではマルチパートフォームを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/fd5f59fd-0786-c257-6a67-26647737f8a3.png)

マルチパートフォームは下記を登録しておきます。
　id
　pw
　itemId
　readCount
種類はすべて文字列です。


レスポンス設定ではCSVをどこに出力するかを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/9bc9308d-5693-eb45-4175-4d409bd8f799.png)


RESTコンポーネントの設定は以上です。


##### 定数入力（Mapper）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/01933fcc-7870-1d5c-a940-60c3b6e0df83.png)

WebAPIで指定したマルチパートフォームに渡すデータを定義します。

ぼくはユーザーIDやパスワードは環境変数に入れています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/b3785998-3b4b-6802-c1ff-b4b1b92fa4ad.png)

アイテムIDは明細表のIDを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/45b00241-7f14-1164-1ea4-49d31cb9c0de.png)


レコードカウントは固定値で[2147483647]を入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/e5692dda-8849-ce89-7434-1d7ce75820f3.png)


設定は以上です。


こちらを実行するとMotionBoardのデータをCSVとして出力することが可能です。
他にもJSON形式にしたり、別のアプリに転送することも可能となります。

# 最後に
今回の処理はマニアックですが、使いどころによってはすごく便利になります。
MotionBoardは数多くの接続ドライバーを持っているので、MotionBoardでデータを抽出して、外部で活用することもできます。


夢が広がりますね。