📖

Power Apps+Power Automate バーコードスキャンで本の情報を取得するアプリ作成②

2024/03/25に公開

概要

前回は、キャンバスアプリにバーコードリーダーコントロールとテキスト入力コントロールを置いて、端末でアプリを起動し本のバーコードをスキャンするとISBNコード(以下、便宜上「書籍コード」と言います。)がテキスト入力ボックスに入るようにできました。

今回は、読み取った書籍コードをもとに、本の情報を取得するフローをPower Automateで作る手順を記載していきます。

なお、こちらの記事が大変参考になりました。
https://qiita.com/DEmodoriGatsuO/items/29f7b3e145b1215e5bb8#:~:text=Power AppsでGoogle Books APIを使ったバーコードリーダーを作ってみた 1 Power Apps Power,検証 今回の目的は「書籍情報」の取得です。 ... 4 Power Automateで実践してみる 1.
https://powerdaaps.hatenablog.com/entry/2024/01/21/012714

(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の解析って何? と思っていた私。こちらの記事が大変参考になりました。)
https://tech-blog.cloud-config.jp/2021-10-07-power-automate-json-best-friends

...さてここで実験その2です。JSONの解析をしさえすれば、タイトルと著者名と表紙画像(URL)だけを結果として抜粋することができるか。

※(補足)JSONの解析アクションの使い方についても、記しておきます。
HTTPで返された本文についての解析なので、コンテンツは「本文」を選択。スキーマは「サンプルから生成」を押して、先ほど確認した出力本文をコピペしてしまいます。

「完了」を押すと、勝手にスキーマを作ってくれます(感激)。

(補足おわり)

これでPowerAppに取得したtitleの値を返せる...かと思いきや、「選択した出力はコレクション内にある」云々のエラーが発生。 うん? 実験その2も失敗。

(7)フローの作成続き

先ほどの出力本文をよく見てみると、どうやらitems:[...]という配列型になっているようなんですね。

ここで、冒頭に掲載した記事及びこちら
https://mofumofupower.hatenablog.com/entry/2020/03/26/220403
の記事にも大いに助けられたのですが、
データの作成の式を body('HTTP')?['items']?[0]?['volumeInfo'] にします。これは、「HTTP要求で返された本文のうち、itemsという配列の、0番目の要素の中から、volumeInfoという要素の値を取得する。」という意味です。

このあと改めてvolumeInfoの中の値についてJSON解析をし、

アクションを追加して、「組み込み」→「PowerApps」→「PowerAppまたはFlowに応答する」を選択。

出力を「タイトル」「著者名」「表紙画像URL」の3つにします。すべてテキスト型です。値はそれぞれ、「title」「authors」「thumbnail」を選択します。

これでフローは完成です。保存しておきます。
ちなみに、この状態でテストすると、最後の「PowerAppまたはFlowに応答する」のアクションはスキップされます。まあそれはそうなんですが、何このエラー!?と慌ててしまう人は私以外にもいるはず...いないか...? とにかく、ここはスルーで大丈夫です。

ここまで来たらもう少しです。次回に続きます。

Discussion