Power Apps+Power Automate バーコードスキャンで本の情報を取得するアプリ作成②
概要
前回は、キャンバスアプリにバーコードリーダーコントロールとテキスト入力コントロールを置いて、端末でアプリを起動し本のバーコードをスキャンするとISBNコード(以下、便宜上「書籍コード」と言います。)がテキスト入力ボックスに入るようにできました。
今回は、読み取った書籍コードをもとに、本の情報を取得するフローをPower Automateで作る手順を記載していきます。
なお、こちらの記事が大変参考になりました。
(3)フローを作成する
画面左側のAutomateフローアイコンから、フローを新規作成します。
トリガーに、テキスト情報(書籍コードが入ります)の入力を追加します。ついでにフローの名前もわかりやすい名前に変えておきました。
続いて、新しいアクションを追加します。「組み込み」→「HTTP」を選択。
方法は「GET」、要求URIは
https://www.googleapis.com/books/v1/volumes?q=isbn:
と入力したあと、「動的なコンテンツ」からトリガーに追加した入力コードを選択して追加。
そのほかの欄は空欄にしています。
(4)出力値を確認
ここでいったん保存して、どんな値が返ってくるのか確認してみましょう。フローのテストを実行します。Power Automateのマイフローから、今作成したフローを開いて、「編集」→「テスト」→「手動」を選択して「テスト」。
トリガーにコード情報を入力しないとフローが始まらないので、適当な書籍コードを入力して「フローの実行」。
フローが実行されました。
HTTPアクションの出力の部分が、今回返ってきた値です。本文については、もう少し読みとく必要がありそうです。
というわけで、出力の本文をVSCode上に貼り付けて確認してみました。
情報量が多いですが、今回は、本のタイトルと著者名、本の表紙画像だけをアプリ上に表示させることとします。該当するのはそれぞれ、「"title":」と「"authors":」と「"thumbnail":」の部分ですね。
(5)試行錯誤過程その1
...さて、ここで実験です。出力本文を丸ごと返した場合はどうなるか。
このようなシンプルなフローの場合は、先ほどの出力本文が「結果」テキストとしてそのまま帰ってきてしまうだけで、アプリ上で「結果」を表示するとこんな状態になってしまいます。当然と言えば当然ですが...。実験は失敗です。
(フロー)
(アプリ)
(6)試行錯誤過程その2
ということは、フロー上で出力本文のtitleとauthorsとthumbnailの値だけを抜粋してPower appsに返すフローにすればよいのでは? と考えました。この出力本文はJSON形式なので、JSONの解析アクションを挟めば、うまいことそれぞれの項目に分けて値を取り出せるかなと。
(参考:ていうかJSONの解析って何? と思っていた私。こちらの記事が大変参考になりました。)
...さてここで実験その2です。JSONの解析をしさえすれば、タイトルと著者名と表紙画像(URL)だけを結果として抜粋することができるか。
※(補足)JSONの解析アクションの使い方についても、記しておきます。
HTTPで返された本文についての解析なので、コンテンツは「本文」を選択。スキーマは「サンプルから生成」を押して、先ほど確認した出力本文をコピペしてしまいます。
「完了」を押すと、勝手にスキーマを作ってくれます(感激)。
(補足おわり)
これでPowerAppに取得したtitleの値を返せる...かと思いきや、「選択した出力はコレクション内にある」云々のエラーが発生。 うん? 実験その2も失敗。
(7)フローの作成続き
先ほどの出力本文をよく見てみると、どうやらitems:[...]という配列型になっているようなんですね。
ここで、冒頭に掲載した記事及びこちら
データの作成の式を body('HTTP')?['items']?[0]?['volumeInfo']
にします。これは、「HTTP要求で返された本文のうち、itemsという配列の、0番目の要素の中から、volumeInfoという要素の値を取得する。」という意味です。
このあと改めてvolumeInfoの中の値についてJSON解析をし、
アクションを追加して、「組み込み」→「PowerApps」→「PowerAppまたはFlowに応答する」を選択。
出力を「タイトル」「著者名」「表紙画像URL」の3つにします。すべてテキスト型です。値はそれぞれ、「title」「authors」「thumbnail」を選択します。
これでフローは完成です。保存しておきます。
ちなみに、この状態でテストすると、最後の「PowerAppまたはFlowに応答する」のアクションはスキップされます。まあそれはそうなんですが、何このエラー!?と慌ててしまう人は私以外にもいるはず...いないか...? とにかく、ここはスルーで大丈夫です。
ここまで来たらもう少しです。次回に続きます。
Discussion