ＮＨＫの番組をゆるく検索できる PowerAppsでつくってみた

#はじめに
当記事ではＮＨＫ番組表APIを利用し、ＮＨＫの番組検索アプリを作成します。
番組表APIとの接続にはカスタムコネクタを利用します。

ＮＨＫ番組表APIは以下を参照ください。
https://api-portal.ＮＨＫ.or.jp/
アプリを登録しApikeyを取得しておきます。

#概要

**ＮＨＫ、特にＥテレが大好きです。
カマキリ先生、植物に学ぶ生存戦略、みんなで筋肉体操…etc
ぶっ飛んでますよねｗ**

製作者側が楽しんで番組を作ってる雰囲気が素敵なのです。

そんなＮＨＫは番組情報を提供するAPIを公開してくれています。
APIがあるなら接続しない手はない、番組件検索アプリを作成してみます。


#作成
手順は簡単です。
①カスタムコネクタを作り
②PowerAppsで番組検索アプリを作ります。

##カスタムコネクタの作成
カスタムコネクタの作成方法は[以前の記事](https://qiita.com/MiyakeMito/items/800018d7642c0e4e86f3)にて記載しています。
ここではポイントのみを書きます。

[PowerAppsホーム画面](https://make.powerapps.com/)より[データ]の[カスタムコネクタ]を選択。

任意の名前を入力し、[ホスト]と[ベースURL]は以下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/844ba808-ebd8-74df-07d5-0af3d3f1dad1.png)

上記ＮＨＫ番組APIの仕様を見るとわかるのですが、ＮＨＫのサービス（総合1，Ｅテレ、ＢＳプレミアム，ラジオ第1など）によりレスポンスのKey値が変わってしまいます。ですので、アクションは検索するサービスごとに作成する必要があります。

総合1のレスポンス（"g1"になっている）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/e918cfa3-fcfc-9850-96c6-0d6fc6a370a8.png)


Ｅテレのレスポンス（"e1"になっている）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/f196e3b7-afac-dc0c-b41b-5a954171c652.png)

総合1のアクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/0023c65f-3f99-3443-aa19-c02b06b7c2bc.png)

Ｅテレのアクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/7b9e64c9-4f42-b9a4-2fca-920f6485048f.png)

要求のサービスパラメータには"g1"や"e1"をリテラルで記載しています。（Power Appsで呼出時にセットしてもいいです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/9e230a98-2362-8a40-ba62-3e402e5bb2f3.png)

応答には[ＮＨＫ番組表APIの仕様](https://api-portal.nhk.or.jp/doc-genre-v2-con)のテスト結果を利用すると良いと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/43c5d090-969a-9f44-fa75-e715c8bd3deb.png)


##PowerAppsアプリの作成

こんな感じにつくりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/d01fafe2-457a-6292-0e65-c0927cf756a4.png)

サービスとジャンルのItmeプロパティには、OneDriveに保存したExcelブックのテーブルを指定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/e30aba4d-e8ba-19d7-3d57-a72a86788906.png)
サービスの一覧は[ＮＨＫ番組表APIドキュメント](https://api-portal.nhk.or.jp/doc-request#explain_service)より取得。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/b375a119-affc-1fb3-737f-22bd5e0c4e86.png)
ジャンル一覧は上記ページにて
ARIB STD-B10 デジタル放送に使用する番組配列情報標準規格 5.1版
第2部番組配列情報における基本情報のデータ構造と定義
「付録Ｈ:コンテント記述子におけるジャンル指定」で定義

とありますが、リンク先は404となりますので、下記を参考にしてください
（http://www.arib.or.jp/english/html/overview/doc/6-STD-B10v4_6-E2.pdf より取得）

|code   |genre                                  |
|:------|--------------------------------------:|
|0000|通常、一般                                |
|0001|天気予報                                  |
|0002|特別番組、ドキュメンタリー                |
|0003|政治、国会                                |
|0004|経済学、市場レポート                      |
|0005|海外、国際レポート                        |
|0006|ニュース分析                              |
|0007|ディスカッション、会議                    |
|0008|特別レポート                              |
|0009|ローカルプログラム                        |
|0010|トラフィックレポート                      |
|0100|スポーツニュース                          |
|0101|野球                                      |
|0102|サッカー                                  |
|0103|ゴルフ                                    |
|0104|その他の球技                              |
|0105|相撲、格闘技                              |
|0106|オリンピック、国際ゲーム                  |
|0107|マラソン、スポーツ、水泳                  |
|0108|モータースポーツ                          |
|0109|マリンスポーツ、ウィンタースポーツ        |
|0110|競馬、公開レース                          |
|0200|ゴシップ/タブロイドショー                 |
|0201|ファッション                              |
|0202|住んでいる、家                            |
|0203|健康、医療                                |
|0204|ショッピング、通販事業                    |
|0205|グルメ、コッキング                        |
|0206|イベント                                  |
|0207|プログラムガイド、情報                    |
|0300|日本のドラマ                              |
|0301|海外ドラマ                                |
|0302|時代劇                                    |
|0400|日本のロック、ポップミュージック          |
|0401|海外のロック、ポップミュージック          |
|0402|クラシック、オペラ                        |
|0403|ジャズ、フュージョン                      |
|0404|人気曲、日本の人気曲                      |
|0405|ライブコンサート                          |
|0406|ランキング、音楽のリクエスト              |
|0407|カラオケ、アマチュア歌唱コンテスト        |
|0408|日本のバラード、日本の伝統音楽            |
|0409|童謡                                      |
|0410|民謡、ワールドミュージック                |
|0500|クイズ                                    |
|0501|ゲーム                                    |
|0502|さまざまな話                              |
|0503|コメディプログラム                        |
|0504|音楽のバラエティ                          |
|0505|ツアーバラエティ                          |
|0506|コッキングバラエティ                      |
|0600|海外映画                                  |
|0601|日本映画                                  |
|0602|アニメーション                            |
|0700|日本のアニメーション                      |
|0701|海外アニメ                                |
|0702|特殊効果                                  |
|0800|社会的、現在のイベント                    |
|0801|歴史、旅行記録                            |
|0802|自然、動物、環境                          |
|0803|宇宙、科学、医学                          |
|0804|文化、伝統文化                            |
|0805|文学、文学芸術                            |
|0806|スポーツ                                  |
|0807|トータルドキュメンタリー                  |
|0808|インタビュー、ディスカッション            |
|0900|現代劇、洋劇                              |
|0901|ミュージカル                              |
|0902|ダンス、バレエ                            |
|0903|コミックストーリー、エンターテインメント  |
|0904|歌舞伎、古典劇                            |
|1000|旅行、釣り、アウトドアエンターテインメント|
|1001|ガーデニング、ペット、手工芸品            |
|1002|音楽、芸術、工芸                          |
|1003|日本のチェス（将棋）と「行く」            |
|1004|麻雀、ピンボールゲーム                    |
|1005|車、バイク                                |
|1006|コンピューター、テレビゲーム              |
|1007|会話、言語                                |
|1008|小さな子供たち、学童たち                  |
|1009|中学生・高校生                            |
|1010|大学生、試験                              |
|1011|生涯教育、資格                            |
|100C|教育上の問題                              |
|1100|老人                                      |
|1101|障害者                                    |
|1102|社会福祉                                  |
|1103|ボランティア                              |
|1104|手話                                      |
|1105|テキスト（字幕）                          |
|1106|音声多重放送の説明                        |



番組検索ボタンは下記のように記載しました。

```
UpdateContext({code:LookUp(サービス,サービス名=Dropdown1.Selected.サービス名 ,コード)});
UpdateContext({classification:LookUp(ジャンル,分類=Dropdown2.Selected.分類,コード)});
//番組一覧取得
Switch(code,
    "g1",ClearCollect(show,NHK_genre.getNHKgenreg1("[地域ID]",classification,Text(DatePicker1.SelectedDate,"[$-ja]yyyy-mm-dd"),{key:"[Apikey]"}).list.g1),
    "e1",ClearCollect(show,NHK_genre.getNHKgenree1("[地域ID]",classification,Text(DatePicker1.SelectedDate,"[$-ja]yyyy-mm-dd"),{key:"[Apikey]"}).list.e1)
);

//番組詳細取得
Switch(code,
    "g1",ClearCollect(show2,AddColumns(show,"logo_url",First(NHK_Info.getNHKInfog1("[地域ID]",id,{key:"[Apikey]"}).list.g1).program_logo.url,"url",First(NHK_Info.getNHKInfog1("[地域ID]",id,{key:"[Apikey]"}).list.g1).program_url)),
    "e1",ClearCollect(show2,AddColumns(show,"logo_url",First(NHK_Info.getNHKInfoe1("[地域ID]",id,{key:"[Apikey]"}).list.e1).program_logo.url,"url",First(NHK_Info.getNHKInfoe1("[地域ID]",id,{key:"[Apikey]"}).list.e1).program_url))
);
```

[Program Genre API](https://api-portal.nhk.or.jp/doc-genre-v2-con)でジャンルを検索し、コレクションに格納。
[Program Info API](https://api-portal.nhk.or.jp/doc-info-v2-con)でHitした番組の詳細情報を取得し、カラムに追加します。
（今回は番組ロゴURLと番組ページのURLを取得しました）

".list.g1"や".program_logo.url"といった記載があります。
これはAPIのレスポンスがJSON形式となっており、階層構造の深層にあるKeyの値を取得しています。
攻略方法がありますので[Power AppsでもJSONと仲良くなるために](https://qiita.com/MiyakeMito/items/ffcc7639b2813dee77ca)の記事をご覧ください。

最後にギャラリーの設定です。
開始、終了時間には日時のフォーマットを指定して表示させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/cc0bb136-4267-d0ad-d504-03d15e82821a.png)

また、右アイコンから番組のWebページが開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/0bbf3e03-3e64-d4f1-2a6f-b50300fade88.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/82e6e908-9d70-a143-925e-bf9799354a02.png)

#まとめ
溢れ出るＥテレ愛から、ＮＨＫ番組検索アプリを作ってしまいました。
次回はPower Automateで、番組の見逃し防止フローを作成してみます。