犬画像 API につないでみよう

Node-RED パレットにはじめから多彩な接続ノードがあります。 WEB まわりで使われる HTTP / WebSocket など揃えています。

API は HTTP でつなぐことが多いですが Node-RED にも HTTP 関連ノードあります。

さまざまな API につなぐ例として、犬画像 API から https://random.dog/ を取得してみることを試してみます。
- Web サイト
- 使い方のページ
- 今回使う API
- https://random.dog/woof.json?include=jpg,jpeg
- JPG,JPEG に絞ってランダム犬画像を取得する API
- https://random.dog/woof.json?include=jpg,jpeg
フローのタブを追加して今回のフローをはじめる
Node-RED ではフローをタブで分けて作業できます。今回のフローは新しいタブで進めましょう。処理としては同じ Node-RED 内の処理です。

こちらの+ボタンからフローのタブを作成します。

新しい名前のフローができるので、こちらで進めます。
inject ノードを配置

パレットから inject ノードを配置します。
http request ノードを配置

パレットから http resuest ノードを探します。このノードは、HTTPリクエストを送信し、レスポンスを返します。

inject ノードの横に配置します。

inject ノードとつなぎます。
http request ノードの設定

さきほど配置した http resuest ノードをダブルクリックしてプロパティを表示します。

ランダムで犬画像が取得できる API https://random.dog/ の仕様は https://github.com/AdenFlorian/random.dog に書いてあります。Web サイトの右下にリンクがあります。
GETリクエストでURL https://random.dog/woof.json?include=jpg,jpeg とつなぎに行くとJPG,JPEG に絞ってランダム犬画像を取得できるので、それに合わせてプロパティを以下に設定します。
- メソッド
- GET
- URL
- 名前
- random.dog
- 出力形式
- JSON オブジェクト
出力形式を JSON オブジェクトに変更するのは、すでにリクエストが JSON で来ることでが分かっているので、この後 JSON として扱うことで、今後のデータを扱いやすくします。
完了ボタンをクリックしてワークスペースに戻りましょう。
一度デバッグをしてみる

ここまで出来たら、名前を変更することで shibe.online となった 先ほどの http request ノードのあとに debug ノードを配置してつなげましょう。

デプロイします。

inject ノードのボタンをクリックして、inject ノードからデータを発生させて、http request ノードが random.dog にアクセスしてデータを受信して debug ノードにデータが届くか試してみましょう。

デバッグタブにデータが来るか確認しましょう。

JSON であればこちらの三角ボタンをクリックすることで、中のデータ構造を確認できます。
{"fileSizeBytes":49470,"url":"https://random.dog/1ddb2caa-41f5-456f-a446-f5a5335b5811.jpg"}
今回の場合は、配列のデータで 1 つだけ柴犬画像 URL が入っています。
データの流れを変更できる change ノードを配置

http request ノードに change ノードをつなぎます。change ノードはデータの流れを変更できます。

パレットでは近くに似ている switch ノードがあるので、間違えないように配置してください。

http request ノードに change ノードをつなぎます。
change ノードの設定

change ノードをノードをダブルクリックしてプロパティを表示します。

msg.payload に変更する対象の値を、まず、msg にします。

対象の値は payload.url にします。
{"fileSizeBytes":49470,"url":"https://random.dog/1ddb2caa-41f5-456f-a446-f5a5335b5811.jpg"}
先ほどの柴犬画像 URLが配列がきていて URL が一つだけ入っているものを指定するために、payload の中の url の値ということで payload.url にしています。
完了ボタンをクリックしてワークスペースに戻りましょう。
画像を表示する node-red-contrib-image-output ノードを追加する
ここまでで、柴犬画像の画像URLを 1つ表示することができます。
画像 URL が入ってくると画像を表示する node-red-contrib-image-output ノードをインストールします。

右のメニューから メニュー > パレットの管理 と移動します。

ノードの追加タブをクリックしてノード追加画面に移動します。

ノードを検索するテキストエリアに node-red-contrib-image-output を入力してノードを検索して ノードを追加 ボタンをクリックします。

追加 ボタンをクリックします。

インストールされました。
node-red-contrib-image-output ノードをつなげる

node-red-contrib-image-output ノードをパレットから探します。

node-red-contrib-image-output ノードをパレットからワークスペースに配置します。

change ノードと node-red-contrib-image-output ノードのフローをつなぎます。

デプロイします。
動かしてみる

inject ノードのボタンをクリックして、動作確認してみましょう。

このように、柴犬 API からデータが取得でき、node-red-contrib-image-output ノードで画像が表示されます。
エクストラ

- node-red-contrib-image-output ノードのプロパティに Width 160 という画像の横幅を指定する値があるので 320 にして大きく画像を表示してみましょう。
- 余裕があれば、 public-apis https://github.com/public-apis/public-apis の紹介