社内のツールやクラウドツールなどからcsv形式のファイルをDLする業務を自動化したい
- ツール側で定期DLの仕組みがなくローカルで自動化する必要があるとする
- Macの場合はopenコマンドを利用してDLを自動化する方法が便利
- 以下の手順でやることが多い
openコマンドでcsvファイルをDLできるようにする
1.csvダウンロードのURLを読み解く
URLを調べる
- クラウドツールなどで、csvダウンロードのURLが公開されていることが前提
- DLボタンを右クリックでパスをコピーなどでわかる事が多い
URLを解析する
- だいたい以下のような形式が多い
https:xxxxxxx{固定URL1}/segmentxx{セグメント}/xxxxxxx{固定URL2}/yyyymmdd{データ抽出開始日}/xxxxxxx{固定URL3}/xx{データの抽出期間}
- この固定のURLと可変のパラメータを見極める
openコマンド用の変数を考える
- 上記の例でいうと、以下のような変数が考えられる
- 固定URLの変数
- URL変数1=https:xxxxxxx{固定URL1}
- URL変数2=/xxxxxxx/{固定URL2}
- URL変数3=/xxxxxxx{固定URL3}
- 可変パラメーターの変数
- セグメント=segmentxx{セグメント}
- データ抽出開始日=yyyymmdd
- データの抽出期間=xx{データの抽出期間}
- 固定URLの変数
- この可変パラメーターを自由に変更しつつ、openコマンドで開けるようにする
2.openコマンドで抽出するscript
openコマンドの基本的な使い方
# !/bin/bash
open "https://qiita.com/"
これを、解析したURLの変数を使えるようにする
# !/bin/bash
# 抽出用の変数
## 固定URLの変数
URL変数1=https:xxxxxxx{固定URL1}
URL変数2=/xxxxxxx/{固定URL2}
URL変数3=/xxxxxxx{固定URL3}
## 可変パラメーターの変数
セグメント=segmentxx{セグメント}
データ抽出開始日=yyyymmdd
データの抽出期間=xx{データの抽出期間}
# 抽出用openコマンド
open ""$URL変数1""$セグメント""$URL変数2""$データ抽出開始日""$URL変数3""$データの抽出期間""
さらに、引数で可変パラメーターを指定できるようにする
# !/bin/bash
#########################################
# csvDL用script
# 引数
# 1:セグメント
# 2:データ抽出開始日(yyyymmdd)
# 3:データの抽出期間
# (利用例)sh csv_dl.sh segmentA 2021-7-1 7
#########################################
# 抽出用の変数
## 固定URLの変数
URL変数1=https:xxxxxxx{固定URL1}
URL変数2=/xxxxxxx/{固定URL2}
URL変数3=/xxxxxxx{固定URL3}
## 可変パラメーターの変数
セグメント=$1
データ抽出開始日=$2
データの抽出期間=$3
# 抽出用openコマンド
open ""$URL変数1""$セグメント""$URL変数2""$データ抽出開始日""$URL変数3""$データの抽出期間""
3.DLしたファイルの名前を変更して保存するscript
- csvDL系のファイル名はだいたいわかりにくいので一貫性のあるファイル名に変更する
- csvDLしたファイルがローカルのdownloadsにおかれる場合を想定
-
固定のファイル名+セグメント名+データ抽出開始日+データ抽出期間.csv
というファイル名にしたい場合
# !/bin/bash
cd /Users/DIRNAME/Downloads
text=$(ls -t | head -n 1)
mv "$text" "ファイル名"$セグメント""$データ抽出開始日""$データの抽出期間".csv"
4.処理を一つにまとめる
# !/bin/bash
#########################################
# csvDL用script
# 引数
# 1:セグメント
# 2:データ抽出開始日(yyyymmdd)
# 3:データの抽出期間
# (利用例)sh csv_dl.sh segmentA 2021-7-1 7
#########################################
# 抽出用の変数
## 固定URLの変数
URL変数1=https:xxxxxxx{固定URL1}
URL変数2=/xxxxxxx/{固定URL2}
URL変数3=/xxxxxxx{固定URL3}
## 可変パラメーターの変数
セグメント=$1
データ抽出開始日=$2
データの抽出期間=$3
# 抽出用openコマンド
open ""$URL変数1""$セグメント""$URL変数2""$データ抽出開始日""$URL変数3""$データの抽出期間""
sleep 10 # ファイルを保存するまでスリープさせる
# ファイル名を変更して保存
cd /Users/DIRNAME/Downloads
text=$(ls -t | head -n 1)
mv "$text" "ファイル名"$セグメント""$データ抽出開始日""$データの抽出期間".csv"
作成したscriptを定期実行できる仕組みつくる
Automatorなどを利用して定期的に叩く仕組みを作成すれば完了!
以上
ひとこと
- 絶対もっとよい方法ありそうなのと、書き方も拙いので忌憚なきご意見を
- 世の中のcsvファイルDLの命名規則を統一化してほしい