node-red-ogiri-01

こちらのNode-REDフローは、Node-RED UG Japanイベント「Node-RED大喜利」の第一回目のお題に対する解の一つになります。 https://node-red.connpass.com/event/257963/

フロー

フロー全体のイメージはこんな感じで仕上げました。 Screen Shot 2022-09-29 at 16 03 19

フローのJSONファイルは こちら から取得いただけます。

各ノードの解説

まずInjectノードです。こちらはデフォルトのままタイムスタンプを送信します。

Screen Shot 2022-09-29 at 16 03 36

次に、Injectノードで出力された日時をChangeノードを使ってGlobal変数へ入れておきます。 以下の式でYYYYMMDDにフォーマットしておきます。(これは読み込むCSVに持っている日付のフォーマットに合わせましょう)

$fromMillis($millis(),'[Y0001]/[M01]/[D01]')

Screen Shot 2022-09-29 at 16 03 47

Screen Shot 2022-09-29 at 16 04 08

Web上に公開されているCSVファイルをhttp requestノードを使って読み込みます。 ここでは敢えてGitHubではなく、別のサーバー上にCSVファイルを置いて、それにアクセスするようにしています。

Screen Shot 2022-09-29 at 16 04 20

csvノードを使ってパースします。 今回読み込むファイルにはヘッダ行が無いので 「1行目に列名を含む」のチェックは外してあります。

Screen Shot 2022-09-29 at 16 04 35

splitノードで1行1行を配列にしていきます。配列にしておくことで、その後のアウトプットの方法に合わせてデータを扱いやすくしています。

Screen Shot 2022-09-29 at 16 04 56

switchノードを使い、global変数に格納しておいた本日日付の値を元に配列のpayloadの中身を評価します。 条件に合致した場合のみ次のDebugノードへ出力します。

Screen Shot 2022-09-29 at 16 05 07

このような感じで1行づつDebugノードへ出力されます。 ファイル書き込み、DB書き込み、Web画面へ出力、など、扱いやすい形でCSVから条件に合致した行を抜き出せたのでは無いでしょうか。

Screen Shot 2022-09-29 at 16 05 30

まとめ

この方法はあくまで数あるやり方の内の一つにすぎません。自分でもっとやりやすい方法が見つけられればその方が良いでしょう。 いろいろと試してみてくださいね!