【一般】続 YouTube APIを利用したソリューションの構築例

# はじめに #
以前の記事[YouTube APIを利用したソリューションの構築例](https://qiita.com/Miki_Yokohata/items/bcac50ec3d03409be33e)の続編です。
前回の記事では、このようなデータセットを取得することができました。今回の記事ではこれらのデータを利用してみようと思います。
オリジナルのメニューでも作成してみましょうか。
## パブリッシャー ##
Webベースのメニューの作成に利用できるSharperlightアプリケーションと言えば**パブリッシャー**です。
早速、アプリケーションメニューから起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/97805c7e-b5ef-c98d-6015-6052156ed9de.png)
### メニューレポート ###
#### 一般タブ ####
ここではレポートの基本情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/396f33e1-94f0-3fdb-9409-0f31eb65cd85.png)
#### オプション ####
このタブでは、`既定の出力形式`に**Menu Panel**を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/8c0bf43e-434d-6f61-5970-ed2e1aa1f610.png)
#### クエリ ####
`クエリを編集`ボタンでクエリの作成を開始します。
製品（データモデル）には、もちろん先に作成したYouTubeを指定。
テーブルはPlaylistsを選択します。
メニューを作成するにあたりPlaylistのタイトルと各Playlistに属するVideoのタイトル、そしてビデオが選択された場合、そのビデオを再生するために必要なVideoIdを準備します。
データモデル内で作成しておいたVideoテーブルへのJOINも見えますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/7bcda773-8d7b-4b99-0b04-ed6fc73df9b7.png)
ここで一度、クエリとレポートを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/fda1920f-681b-fb47-4bf0-ca98dbb85228.png)
動作確認をするためSharperlightサービスを起動します。
作成したばかりのメニューレポートを選択し、右クリックメニューより`レポートの表示`を選択します。
メニューレポートがお手持ちのブラウザに表示されます。
あるPlaylistアイテムを展開表示した状態です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/01b90694-454b-464d-deb3-9a8dd8c90b7a.png)
### ビデオ再生用レポート ###
Videoメニューアイテムが選択された場合にそのビデオを表示する準備をします。
もうひとつ新たにレポートを作成しビデオの再生用とします。そしてその再生用レポートをこのメニューレポートから呼び出すといった形を作成します。
#### 一般タブ ####
ここではレポートの基本情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c205fa79-08f4-4232-4307-6c1d1d973fa7.png)
#### クエリ ####
`クエリを編集`ボタンでクエリの作成を開始します。
製品（データモデル）には、システムを指定。
テーブルは、ユーザーアカウントを選択します。
モード(このテーブルの必須フィルター)は、CUのまま。
このクエリはたった1行のレコードさえ返せばいいので、こういったフィルター設定とします。
そしてテキスト型のフィルターをひとつ追加し、メニューレポートから渡されるVideoIdを受け取る変数とします。このフィルターは**プロンプト**フィルターといってクエリにはなんら影響を与えません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/a007b1b1-5542-04c5-fc63-ebcf1694047a.png)
このレポートの目的はビデオの再生なので、拡張表現を利用してiframタグを作成しYouTubeビデオを埋め込む定義を作成します。
出力領域の右クリックメニューより`拡張表現を追加`を選びます。
構文エディタに以下のコードを記入します。データ型にはHTMLを指定。
```
"<iframe src='https://www.youtube.com/embed/" + {@videoId} + "'"  
+ " width='1200px' height='800px' scrolling='yes' frameborder='0'  allow='accelerometer; autoplay;'></iframe>"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/079fb206-8b11-cec9-2902-fd62ce28586f.png)
構文中のタグ`{@videoId}`は、先ほど追加したメニューレポートから渡されるVideoIdを受け取るためのプロンプトフィルターの参照タグです。実行時は実際の値で置き換えられます。
このように出力アイテムは、拡張表現ひとつのみです。`説明`欄は不要なので空白にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/490ce5b5-8d01-61e3-ce65-1a7ce206c88c.png)
これでビデオ再生用のレポートは完成。クエリとレポートを保存します。
### メニューレポートの更新 ###
ではメニューレポートに、今作成したビデオ再生用レポートを呼び出すコードを追加します。
クエリを開いて、新しい拡張表現を追加します。
構文エディタに以下のコードを記入し、データ型には**URL**を指定。
```
"{_System.Rest.URL}" + "Report/?query=QiitaSample.YouTubeVideoPlayer&fltvideoId=" + {%VideoId} + "&usid=" + "{_System.Rest.Usid}"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0e47d1f4-84e4-3931-e403-1cbf4fad534e.png)
構文中のタグ`{_System.Rest.URL}`は、Sharperlightサービスの基礎URLを取得するタグです。これ`{_System.Rest.Usid}`はセッションID取得用です。また`{%VideoId}`は、現在行のVideoIdを参照するタグです。
名前と説明にもURLと記入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/fee41962-0b44-c5ea-eea2-7a34223825ef.png)
また**VideiId**は非表示(Hidden)にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/6d45beae-b308-cb93-836b-72c72457bbf4.png)
これでメニューレポートは完成。クエリとレポートを保存します。
## 動作確認 ##
パブリッシャーダイアログの右クリックメニューより`レポートの表示`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/266ba56f-13c0-651a-75c2-6ac36ed20f99.png)
ブラウザにメニューレポートが表示されサブメニュー、つまりあるビデオをクリックすると選択されたビデオがこのように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/5370852e-3f44-8812-c747-2ad44c58eacb.png)
## メニューパネルの拡張 ##
このままではサブメニューの字数が多くて見づらくなってます。ちょっとクエリを編集して短くしてみます。
メニューレポートのクエリを再度開き、新しい拡張表現を追加します。
ビデオのタイトルから**Vol**以降の文字のみ取り出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/dc147c2a-a3d7-4502-015a-0421a9d31a26.png)
元のビデオタイトルは非表示にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/71314200-4774-4cdc-49ab-e194ea2b51f3.png)
また、パネルの幅を広げるためCSSを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/98c57149-8e76-8ffb-68bb-2638daaf1503.png)
```
<style type="text/css">
    #slTreeViewSection{
    	width: 255px !important;
    }
</style>
```
さあ、保存して実行してみます。結構スッキリしましたね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0f2aae67-54a6-0089-8de3-703548b59f48.png)
## 既定ページの追加 ##
今のままではメニューレポートが最初に表示された際、真ん中の領域が空白で格好悪いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/9dd1de94-4174-9cd0-90b3-b9e97a32953c.png)
何か既定ページを設定してみましょう。
メニューレポートの定義を再度開きます。`オプション`タブの既定の内容プロパティにこのようなURLを設定します。
SharperlightサービスのIndexページのアドレスです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/55ce5866-3fd8-333f-00bc-d82c41c765ae.png)
保存して実行してみると、このようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/58c61817-8b86-b16b-0f9e-42334d0c28aa.png)
で、ビデオを選ぶと...このようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/6ca44174-3a8b-17f0-45c6-a2174cf84ee7.png)
# あとがき #
今回はメニューレポートを作成してみました。データがこのような情報しか持っていないのであまり大したことはできませんが、こういった手法はどこかで役に立つのではないかと思います。
この記事が皆さんの業務のお役に立てれば光栄です。