概要
SORACOM Harvest DataのデータをCSVで取得するシリーズ最終回です。
前編では環境構築、中編ではTalend Open Studio(以降TOS)を使ったJSONデータダウンロードとPythonによるCSV変換を説明しましたので、最終回では自動実行する方法を説明します。
前編、中編を読んでいない方は前編から順にお読みください。
前提
自動実行は常時起動のWindowsサーバーで実行することとします。
タスクスケジューラーを使い、1日前のデータを、午前0時経過後に実行することにします。
TOSの変更
TOSにはContext変数をいうものがあり、実行時にコマンドライン引数として渡すことが可能です。
これを使って日付が指定できるようにします。
対象日の指定
中編で作成したTOSのジョブにContext変数「ctx_date」を設定し、Valueに対象の日付をyyyy/MM/dd
の形式で設定しておきます。
初期処理のfrom_strとto_strの指定方法を変更します。
String from_str = "2023/07/23 00:00:00";
String to_str = "2023/07/23 23:59:59";
↓
String from_str = context.ctx_date + " 00:00:00";
String to_str = context.ctx_date + " 23:59:59";
保存先の指定
ついでに保存フォルダを指定できるようにして、ファイル名をharvest_data.jsonからharvest_data20230723.jsonのような名前で保存できるようにします。
-
Context変数「ctx_folder」を設定し、Valueに保存先を設定しておきます。
※ TOSのフォルダは\(円マークやバックスラッシュ)区切りではなく、/(スラッシュ)区切りで表記する必要があります。 -
初期処理の末尾にファイル名のグローバル変数セットを追加する。
// 保存ファイル名 globalMap.put("file", context.ctx_folder + "harvest_data" + context.ctx_date.replace("/", "") + ".json");
-
ついでに、tFileOutputJSONはファイルが既にファイルが存在するとエラーになるため、初期処理の後にtFileDeleteを追加し、OnSubjobOkでつなぎなおす。
以上でTOSの修正完了です。
TOSの自動実行
実行モジュールの作成
自動実行設定
ここからは実際にジョブを自動実行する常時起動のサーバー上の作業となります。
サーバーにはJDKとPython(pandas)のインストールを行っておいてください。
※ TOSのインストールは不要です
バッチファイルに処理を追加
実行モジュールの作成で作ったZIPファイルを任意のフォルダに展開し、「HarvestData」の中にあるバッチファイル「HarvestData_run.bat」を以下の通り編集(赤字部を追記・緑字は説明文)する。
%~d0
cd %~dp0昨日の日付を取得
for /f %%i in ('powershell -Command "& {$yesterday = (Get-Date).AddDays(-1); $yesterday.ToString('yyyy/MM/dd')}"') do set YESTERDAY=%%i対象日と保存先フォルダをContext変数として追記
java -Dtalend.component.manager.m2.repository="%cd%/../lib" -Xms256M -Xmx1024M (略) local_project.harvestdata_0_1.HarvestData --context=Default %* --context_param ctx_date=%YESTERDAY% --context_param ctx_folder=(ファイルの保存フォルダ)JSON→CSVの変換
set YYYYMMDD=%YESTERDAY:/=%
python C:\work\tos\soracom_json_csv.py (ファイルの保存フォルダ)harvest_data%YYYYMMDD%.json
※ ファイルの保存フォルダは\(円マークやバックスラッシュ)区切りではなく、/(スラッシュ)区切りで表記する必要があります。
タスク設定
編集したバッチファイル「HarvestData_run.bat」の実行を登録する。
- タスクスケジューラを起動し、「タスクの作成」をクリックする。
- 名前に「HarvestData」を入力し、「ユーザーがログオンしているかどうかにかかわらず実行する」を選択し、「最上位の特権で実行する」を選択する。
- 「トリガー」を選択し、「新規」をクリックする。
- 「毎日」を選択し、実行する時刻を指定し、「OK」をクリックする。
- 「操作」を選択し、「新規」をクリックする。
- プログラム/スクリプトで「HarvestData_run.bat」のパスを指定し、「OK」をクリックする。
- 「OK」をクリックすると、パスワードを求められるのでパソコンのログインパスワードを入力し、「OK」をクリックする。
以上で自動実行の設定完了です。
おわりに
当初考えていた以上の大作となってしまいました。
馴染みのない方には難しい内容になってしまったと反省していますが、どなたかのお役に立てたら幸いです。