今回は前回の続きからです。前回はWebページのデータを取得し必要な部分だけを抜き出しました。
今回は抜き出したデータをファイルに保存します。また、一定時間繰り返し処理する方法などについても説明します。

○JavaScript配列を文字だけにして表示

 まず、Raspberry Piのターミナルにh2タグで抜き出した結果を表示してみましょう。debugノードをダブルクリックして設定画面を開きます。「システムコンソール」の部分にチェックを入れます。入れたら完了ボタンを押します。

 デプロイしたら実行します。Raspberry Piのターミナルを確認します。文字列は表示されていますが、単純にh2タグの文字だけが出力されていないようです。これは出力した内容がJavaScriptの配列になっているためです。Node-REDでは配列内容を読めるように変換して出力します。この時に配列であることを示す記号も付けてしまいます。


JavaScriptの配列を普通の文字列にするには、いくつか方法がありますが、ここではtemplateノードを使うことにします。templateノードを図のように配置しノードを繋ぎます。

 次にtemplateノードをダブルクリックして設定画面を開きます。テンプレートの欄に以下のように入力します。これはmustache記法で配列内の内容をすべて出力するという意味になります。ここらへんはchatGPTなどのAIに尋ねた方が理解が早いでしょう。

{{#payload}}
{{.}}
{{/payload}}

デプロイしてから実行します。今度は純粋に抜き出した文字だけがターミナルに表示されています。

○ファイル名に日付をつけて保存

 今度は出力された文字をファイルに保存します。また、保存したファイル名を2026年2月15日のように日付を含めるようにします。
 ストレージのカテゴリからwrite fileノードを配置します。

 templateノードとwrite fileノードを繋ぎます。


 write fileノードをダブルクリックして設定画面を開きます。ファイル名の部分に/home/pi/h2.txtと入力します。動作はファイルを上書きを選択します。選択したら完了ボタンを押します。

デプロイしてから実行します。実行すると/home/pi/ディレクトリ内にh2.txtというファイルが作成されます。内容を確認するとh2タグ内の文字があるのが確認できます。

 ここまでは問題ない動作です。次に保存されたh2.txtファイルの名前を日時に変更します。ファイル名を日時に変更するためにexecノードを配置します。

execノードをダブルクリックして設定画面を開きます。コマンドの欄に以下のコマンドを入力します。
なお、dateコマンドを使った日付、日時にする指定に関しては本連載の第5回(https://news.mynavi.jp/techplus/article/natonakucommand-5/)等でも使用しています。

mv /home/pi/h2.txt /home/pi/$(date '+%Y-%m-%d-%H%M').txt

write fileノード(/home/pi/h2.txtと表示されているノード)とexecノードを繋ぎます。

繋いだらデプロイして実行します。実行した日時がファイル名として保存されているのが確認できます。

1分後に実行すると新たに日時を含んだファイルが作成されているのが確認できます。問題なく動作しています。(同じ分の時に実行すると上書きされます)

○定期的に実行

 先ほどは手作業でトリガーとなるinjectボタンをクリックして作成したフローを実行させました。1分ごとに処理を行いたい場合に手作業でやるには現実的ではありません。やはり、このような定期的な繰り返し処理はコンピューターで行うのが筋というものです。都合の良いことにNode-REDは手軽に繰り返し処理ができるようになっています。定期的な処理を行う場合、UNIX系であればcronを使えば良いのですが、慣れないうちは失敗してしまうこともあります。その点、Node-REDは分かりやすいため失敗する可能性は低いでしょう。

 定期的に処理を実行するにはinjectノードで設定を行います。先ほど作成したフローを1分ごとに実行するように変更してみましょう。
 injectノード(タイムスタンプと表示されています)をダブルクリックして設定画面を表示します。設定画面の下に繰り返しという項目があります。

繰り返しの項目を「指定した時間間隔」に変更します。項目を選択すると何秒ごとにするか、何分ごとにするかを指定できます。ここでは1分ごとに実行するようにしました。

設定が終わったらデプロイして実行します。実行はこれまでと同じinjectノードの左側の□をクリックします。定期的に処理するように設定したとしても最初の実行トリガーは必要です。

1分間隔でしか動作しないため、しばらく放置しておきます。しばらく待ってから確認すると1分ごとに処理が実行され日時を含んだファイルが生成されていることが確認できます。


○Node-REDの停止

 1分ごとに処理されるのは確認できましたが、このままファイルが増え続けると大変です。このフローの処理を止めるには、どれかのノード間の線を削除してデプロイします。が、その方法は以前使いましたので、今回はNode-RED本体ごと停止させてみます。
 Raspberry Piのターミナルを開きます。リモートの場合、Raspberry Piにsshでログインしても構いません。

ターミナルで以下のコマンドを入力します。入力後リターンキーを押せばNode-REDが停止します。

node-red-stop

 1分ごとにファイルが追加されていましたが、Node-REDが停止したのでファイルの追加は行われていないことを確認します。ファイルが増えていなければNode-REDは停止しています。

 再びNode-REDを起動する場合は以下のようにコマンドを入力します。

node-red-start

.
編集部おすすめ