search
LoginSignup
3

More than 1 year has passed since last update.

Microsoft Power Apps Advent Calendar 2020 Day 12

posted at

updated at

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

はじめに

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

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

概要

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

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

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

作成

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

カスタムコネクタの作成

カスタムコネクタの作成方法は以前の記事にて記載しています。
ここではポイントのみを書きます。

PowerAppsホーム画面より[データ]の[カスタムコネクタ]を選択。

任意の名前を入力し、[ホスト]と[ベースURL]は以下。
image.png

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

総合1のレスポンス("g1"になっている)
image.png

Eテレのレスポンス("e1"になっている)
image.png

総合1のアクション
image.png

Eテレのアクション
image.png

要求のサービスパラメータには"g1"や"e1"をリテラルで記載しています。(Power Appsで呼出時にセットしてもいいです)
image.png

応答にはNHK番組表APIの仕様のテスト結果を利用すると良いと思います。
image.png

PowerAppsアプリの作成

こんな感じにつくりました。
image.png

サービスとジャンルのItmeプロパティには、OneDriveに保存したExcelブックのテーブルを指定しています。
image.png
サービスの一覧はNHK番組表APIドキュメントより取得。

image.png
ジャンル一覧は上記ページにて
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と仲良くなるためにの記事をご覧ください。

最後にギャラリーの設定です。
開始、終了時間には日時のフォーマットを指定して表示させます。
image.png

また、右アイコンから番組のWebページが開きます。
image.png

image.png

まとめ

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3