#はじめに
当記事ではNHK番組表APIを利用し、NHKの番組検索アプリを作成します。
番組表APIとの接続にはカスタムコネクタを利用します。
NHK番組表APIは以下を参照ください。
https://api-portal.NHK.or.jp/
アプリを登録しApikeyを取得しておきます。
#概要
NHK、特にEテレが大好きです。
カマキリ先生、植物に学ぶ生存戦略、みんなで筋肉体操…etc
ぶっ飛んでますよねw
製作者側が楽しんで番組を作ってる雰囲気が素敵なのです。
そんなNHKは番組情報を提供するAPIを公開してくれています。
APIがあるなら接続しない手はない、番組件検索アプリを作成してみます。
#作成
手順は簡単です。
①カスタムコネクタを作り
②PowerAppsで番組検索アプリを作ります。
##カスタムコネクタの作成
カスタムコネクタの作成方法は以前の記事にて記載しています。
ここではポイントのみを書きます。
PowerAppsホーム画面より[データ]の[カスタムコネクタ]を選択。
上記NHK番組APIの仕様を見るとわかるのですが、NHKのサービス(総合1,Eテレ、BSプレミアム,ラジオ第1など)によりレスポンスのKey値が変わってしまいます。ですので、アクションは検索するサービスごとに作成する必要があります。
要求のサービスパラメータには"g1"や"e1"をリテラルで記載しています。(Power Appsで呼出時にセットしてもいいです)
応答にはNHK番組表APIの仕様のテスト結果を利用すると良いと思います。
##PowerAppsアプリの作成
サービスとジャンルのItmeプロパティには、OneDriveに保存したExcelブックのテーブルを指定しています。
サービスの一覧はNHK番組表APIドキュメントより取得。
ジャンル一覧は上記ページにて
ARIB STD-B10 デジタル放送に使用する番組配列情報標準規格 5.1版
第2部番組配列情報における基本情報のデータ構造と定義
「付録H:コンテント記述子におけるジャンル指定」で定義
とありますが、リンク先は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でジャンルを検索し、コレクションに格納。
Program Info APIでHitした番組の詳細情報を取得し、カラムに追加します。
(今回は番組ロゴURLと番組ページのURLを取得しました)
".list.g1"や".program_logo.url"といった記載があります。
これはAPIのレスポンスがJSON形式となっており、階層構造の深層にあるKeyの値を取得しています。
攻略方法がありますのでPower AppsでもJSONと仲良くなるためにの記事をご覧ください。
最後にギャラリーの設定です。
開始、終了時間には日時のフォーマットを指定して表示させます。
#まとめ
溢れ出るEテレ愛から、NHK番組検索アプリを作ってしまいました。
次回はPower Automateで、番組の見逃し防止フローを作成してみます。