この記事ではCURLコマンドでWebAPIを実行して成功したが、バッチファイルにして自動化をしようとしたときに日本語ありのAPIで実行できず沼ってしまった方に向けて対処法をお伝えします。

CURLコマンドに日本語が含まれるとバッチファイルが動かない

近年ではAPIを呼び出してファイルを保存をしたりと手軽にCURLコマンドを記述することが多くなっています。そこでWebAPIを呼び出す際にシステム上日本語でデータを持っており、どうしてもAPI上に日本語表記で書かなくてはならないケースがあります。そこでエンコードしてみたり、文字コードを変換してみたり、いろいろ試してみたがなかなかバッチファイルにして成功できないケースがあります。私はコマンドプロンプトでは動くのにバッチファイルでは動かないことに沼ってしまいました…。
PowerShellで実行する
バッチファイルではCURLコマンドでWebAPIを実行できますが、同様にPowerShellでもInvoke-WebRequestでWebAPIを実行できます。今回はPowerShellでうまくいったのでその方法でお伝えします。※目的はタスクスケジューラに登録することとしています。

メモ帳にHTTPリクエストを記述する
$URL = “http://localhost:8787/motionboard/rest/item/get/csv?boardPath=/テスト/テスト&itemId=ITEM_1-1”
$OUTPUT = “C:\Users\test\Desktop\test.csv”Invoke-WebRequest -Uri $URL -OutFile $OUTPUT
まずはメモ帳にPowerShellで記述方式に従ってHTTPリクエストを記述します。
私はMotionBoardというシステムのWebAPIを使ってMotionBoard内の日本語フォルダーにあるBIダッシュボードのデータをCSVで指定のローカルフォルダーに出力するといった内容になっております。
※ここでURLに日本語があるのが今回の沼ポイントです。
UTF-8(BOM付き)でps1ファイルを作成する
①メモ帳でPowerShellで実行できるコマンドを記述したら「名前を付けて保存」します。
②その際に文字コードを「UTF-8(BOM付き)」で保存します。※ここがポイントです。
③ファイル名を「~.ps1」に変更します。
④試しに作成したps1ファイルを右クリックから「PowerShellで実行」し正常に動くか確認します。
正常に動けば最後にタスクスケジューラに設定すれば完了です。

タスクスケジューラに登録

タスクスケジューラの細かい設定は割愛していきますが「操作の編集」の画面だけ共有しておきます。
設定する箇所は3つ
①プログラム/スクリプトを「powershell.exe」にする
②引数の追加を
「-ExecutionPolicy Bypass -File “C:\Users\test\Desktop\get_csv.ps1″」にする
※実際に皆さんが運用するps1ファイルの場所を指定してください。
③開始を「C:\Users\test\Desktop」
※実際に皆さんが運用するps1ファイルの場所を指定してください。
まとめ
今回CURLコマンドで日本語表記があった際にコマンドプロンプトやAPIテスターでは実行できてもバッチファイルにすると実行できないときの対処法についてご説明しました。結局は目的が自動でWebAPIを実行することなのでPowerShellでも問題ないと思います。CURLコマンド愛好家の皆様はどうにかCURLコマンドのみで実行する方法も模索してみてください。
コメント