【RaspberryPi】Node-REDでWebアクセス(クライアント)後半

Webアクセスの処理も後半となります。前回はHTTP経由でのCSVファイルのダウンロードを行っていましたが、今回は一般的なWebAPIへアクセスして見ようと思います。

【関連】

【RaspberryPi】Node-REDでWebアクセス(クライアント)前半 - uepon日々の備忘録

WebAPIへのアクセスを行う

今回は比較的アクセスが簡単なwaht3wordsというサービスのAPIを使用してみたいと思います。

what3wrodsの登録をする

what3words.com

waht3wordWikipediaによれば…

what3words(ワットスリーワーズ)は、3メートルの解像度で場所を伝達するためのジオコーディングシステムである。what3wordsでは、地理的座標を3つの単語で符号化する。例えば、自由の女神像の持つ松明の位置は、"toned.melt.ship"の3語で表している。従来のほかの位置エンコードシステムとの違いは、長い文字(たとえば住所)や数字(たとえば経緯度)ではなく、3つの単語で簡単に表される点にある。

ja.wikipedia.org

ってことのようです。簡単に言えば住所などの表記が長くなりがちなので、3つの言葉の組み合わせで表現しましょうというものです。

what3wordsユーザー登録をする

まず、WebAPIを使用するにはAPI-Keyが必要になるので、そのためのユーザー登録を行います。 ユーザ登録するために、こちらのURLにアクセスします。 すると以下のような画面が表示されます。

f:id:ueponx:20190916074920p:plain

画面右上にあるハンバーガーボタンをクリックし、ユーザー登録の作業をすすめます。

登録はFacebookgoogleのアカウントと連携することで行うことができるので、今回はFacebookのユーザIDとのアカウント連携をすすめてみます。 【Facebookで続行】のボタンをクリックします。

f:id:ueponx:20190916092105p:plain

ボタンをクリックすると確認のダイアログが表示されるので【中央にある青いボタン】をクリックします。 アカウント作成の画面に遷移します。

f:id:ueponx:20190916094448p:plain

この中で、氏名などの情報を入力し、プライバシーポリシーの同意のチェックボックスにチェックを入れます。このチェックを入れないと【続行】ボタンがアクティブになりませんので、必ず行ってください。(アクティブになるとボタン化赤く変化します。)

f:id:ueponx:20190916095212p:plain

【続行】ボタンをクリックするとユーザー登録は完了して以下のような画面になります。

f:id:ueponx:20190916095302p:plain

これでユーザー登録は完了です。

API KEYの取得

つづいてAPIのアクセスに必要なAPI-KEYを取得します。ログインが終わったら上の方にあるメニューバーの【Developer】をクリックします。

f:id:ueponx:20190916095606p:plain

すると以下のような画面に遷移します。このページはAPIの説明とGet Startedというチュートリアルがあるのでそれを見ていくことになります。

f:id:ueponx:20190916094816p:plain

画面内のGet Startedの中にある【1.Get your free API key】のリンクをクリックします。

f:id:ueponx:20190916075010p:plain

すると、以下のようなデベロッパーページが表示されます。左側のペインにある【デベロッパAPIキー】をクリックします。

f:id:ueponx:20190916075014p:plain

すると画面右側に【APIキーの作成】が表示されるのでクリックします。

f:id:ueponx:20190916075025p:plain

APIキーの作成に関するライセンス確認のダイアログが表示されるので

f:id:ueponx:20190916075030p:plain

同意のチェックボックスにチェックを入れて、【続行】ボタンをクリックします。

f:id:ueponx:20190916075037p:plain

続いてはAPIキーを発行するアプリの作成を行います。アプリの【名前】と【ディスクリプション】(説明)を入力して【APIキーの作成】ボタンをクリックします。

この例では以下のように設定しています。

  • 名前:ueponAPP
  • ディスクリプション:API test

f:id:ueponx:20190916075044p:plain

すると、デベロッパAPIキーが表示されます。ここで表示されたAPIキーを後程使用するのでメモしておきます。

f:id:ueponx:20190916075050p:plain

これで開発の準備ができました。先ほどのDeveloperページのGet Startedに戻ります。

今回は緯度経度から3つのワードでできた住所を調べたいので【Coordinates => 3 word address】の欄にあるリンクをコピーします。

f:id:ueponx:20190916075058p:plain

コピーすると以下のようなリンクアドレスが取得できます。ここで[API-KEY]となっている部分を先ほど生成しておいたAPI-KEYに変更します。

https://api.what3words.com/v3/convert-to-3wa?coordinates=51.521251%2C-0.203586&key=[API-KEY]

このリンクアドレスにブラウザなどからアクセスすると以下のようなJSONデータ返されます。 この中でwordsの値がindex.home.raftとなっているのがわかるかと思います。これが取得された3 word Addressとなります。

f:id:ueponx:20190916075110p:plain

値が英語の単語になっていますが、これはデフォルトが英語になっているので、クエリで言語を設定すれば日本語にすることもできます。

リンクアドレスの末尾に&language=jaに追加すれば大丈夫です。

https://api.what3words.com/v3/convert-to-3wa?coordinates=51.521251%2C-0.203586&key=[API-KEY]&language=ja

改めてこのリンクアドレスにアクセスすると以下のようになります。

f:id:ueponx:20190916081434p:plain

日本語の場合にはていせい・ゆとり・しゅふという3つの単語が帰ってきます。

これでAPIの準備はOKです。

Node-REDからアクセスを行う

今度はNode-REDからこのAPIにアクセスをしてみたいと思います。 まずは新規のフローを作成します【+】のタブをクリックします。

f:id:ueponx:20190916075134p:plain

今回使用するのは以下4つのノードになります。

  • 入力グループの【inject】ノード
  • 機能グループの【http request】ノード
  • 機能グループの【json】ノード
  • 出力グループの【debug】ノード

f:id:ueponx:20190917080229p:plain

これらのノードをワークスペースにドロップし、

f:id:ueponx:20190917080251p:plain

以下のようにノードの端子を接続していきます。

f:id:ueponx:20190917080254p:plain

後は各ノードの設定を行います。

【inject】ノードを編集する

まずは起動トリガーとなるinjectノードをダブルクリックします。

f:id:ueponx:20190917080300p:plain

ノードをドロップすると、自動的にタイムスタンプという表示になるのでそれを名前のプロパティをスタートと変更して【完了】ボタンをクリックします。

f:id:ueponx:20190917080313p:plain

【http request】ノードを編集する

続いてhttp requestノードをダブルクリックします。このノードでWebアクセスをします。

f:id:ueponx:20190917080319p:plain

編集するのはURLのプロパティです。

https://api.what3words.com/v3/convert-to-3wa?coordinates=51.521251%2C-0.203586&key=[API-KEY]

先ほど使用したリンクアドレスに編集します。[API-KEY]の部分は置き換えます。 終わったら【完了】ボタンをクリックします。

f:id:ueponx:20190917080421p:plain

json】ノードを編集する

JSONデータを処理する、jsonノードをダブルクリックします。

f:id:ueponx:20190917080432p:plain

動作のプロパティのプルダウンから【常にJavaScriptオブジェクトに変換】を選びます。ここを修正していないとWebアクセスによって得られたJSONデータが単なるString(文字列)になるので以降データの取得などを行うことを考えるならばオブジェクトに変換させておく方が便利です。

f:id:ueponx:20190917084204p:plain

【debug】ノードを編集する

最後のdebugノードで結果を表示します。debugノードをダブルクリックして

f:id:ueponx:20190917080423p:plain

対象プロパティをmsg.payload.wordsと編集します。前段のJSONから送信されたデータからwordsのキーに入っているデータを取得し、表示を行うことになります。

f:id:ueponx:20190917080439p:plain

デプロイとフローの実行

設定が終了したので上部の【デプロイ】ボタンをクリックして、デプロイ作業を行います。

f:id:ueponx:20190917080426p:plain

以下のようにデプロイが成功しましたと表示されれば成功です。

f:id:ueponx:20190917080428p:plain

後はフローの実行になります。スタートと名付けたinjectノードの左側のボタンをクリックすると実行されます。

f:id:ueponx:20190917080441p:plain

デバックタブを表示させると以下のように表示されます。先ほどと同様にindex.home.raftが表示されています。これでWebAPIへのアクセスができました。

f:id:ueponx:20190917080444p:plain

もう少し触ってみる

先ほどはリンクアドレスの言語設定を行っていなかったので、英語の3単語になっていました。 URLを変えるものいいのですが、折角なので日本語も同時にアクセスできるようにしたいと思います。

先ほど作成したフローのhttp requestノード以降をマウスで選択し、コピー&ペーストを行います。あとはスタートのノードの端子と接続を行っておきます。

f:id:ueponx:20190917080446p:plain

つづいて新規に作成したhttp requestノードをダブルクリックしてURLプロパティの末尾に&language=jaを追加して【完了】ボタンをクリックします。

f:id:ueponx:20190918200627p:plain

あとは【デプロイ】ボタンをクリックして、

f:id:ueponx:20190917080457p:plain

フローの実行を行います。

f:id:ueponx:20190917080452p:plain

すると、英語と日本語の2つの結果がデバッグ画面上に表示されます。

f:id:ueponx:20190917080454p:plain


さらにもう少し触ってみる

今はhttp requestノードのURLプロパティにクエリパラメータを入力していますが、長くなると間違える可能性があります。そこでhttp requestノードにクエリパラメータをJSON形式でデータを渡しアクセスURLに反映をさせてみようと思います。

まずはスタートのinjectノードをダブルクリックします。

f:id:ueponx:20190917081734p:plain

ペイロードプロパティのブルダウンからJSONを選択します。

f:id:ueponx:20190917081738p:plain

そして入力ボックスの右側の【…】をクリックします。

f:id:ueponx:20190917081741p:plain

するとJSONエディタが立ち上がります。ここにJSON形式でKeyとValueのセットを記述します。(この時の入力にはURLエンコードをする必要はありません➡うれしい)編集が終わったら【完了】ボタンをクリックします。

f:id:ueponx:20190917081745p:plain

先ほど編集を行ったJSON形式のデータがペイロード部分に格納されます。確認できたら【完了】ボタンをクリックします。

f:id:ueponx:20190917081747p:plain

あとは、http requestノードをダブルクリックし、URLプロパティからクエリパラメータの文字列を削除し、【msg.payloadをクエリパラメータに追加】にチェックを入れて【完了】ボタンをクリックします。

これで先ほどと同様にWebAPIにアクセスができるようになります。

f:id:ueponx:20190918200654p:plain

おわりに

これでNode-REDを使用して一般的なWebAPIへのアクセスができるようになりました。 これで一般的な機器とのHTTPでの連携ができるようになりました。サーバー側もクライアント側もできるようになったので割と広がったかなと思います。

【Node-RED 関連エントリ-】

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

/* -----codeの行番号----- */