はじめに
単なるプログラムのデーモン化は面白みがないので、為替データを収集するプログラムのデーモン化(自動化)を紹介します。システムの監視だけでなく、為替変動のようにリアルタイムな監視をしたい場合に、プログラムのデーモン化は役立つと思っています。
目次
- 為替データを収集するプログラムの作成
- 為替データを収集するプログラムのデーモン化
1. 為替データを収集するプログラムの作成
Python3でプログラムを作成していきます。
1.1 公開されている為替データの確認
先ずはデータの確認です。
" http://www.gaitameonline.com/rateaj/getrate "にアクセスすると、下記のように為替レートに関するデータがjson形式で表示されます。
1.2 プログラムの作成
作成したプログラムを以下に示します。
今回は、60秒毎にUSDJPYのデータを収集しcsvで保存します。尚、PC再起動後に収集したデータが消去されるように、データの保存先はtmpフォルダを指定しています。パラメータの調整によって、データ収集の周期や保存先などは変更できます。
#!/usr/bin/env python3
import requests
import json
import time
import datetime
import pandas as pd
# parameters
URL = "http://www.gaitameonline.com/rateaj/getrate"
TARGET = "USDJPY"
FILEPATH = "/tmp/currency_"+TARGET+".csv"
TIMESPAN = 60 # [sec]
def main(INIT):
# get data
res = requests.get(URL)
current_time = [datetime.datetime.now()]
# data transform json to pandas
jData = res.json()
tmpData = jData["quotes"]
col = 0
for k in tmpData:
if k["currencyPairCode"] == TARGET:
break
col += 1
targetData = tmpData[col]
add_data = pd.DataFrame.from_dict(targetData,orient='index',columns=current_time)
add_data = add_data.T
# save data
if INIT == 1:
add_data.to_csv(FILEPATH)
else:
add_data.to_csv(FILEPATH,mode='a', header=False)
if __name__ == '__main__':
f = open(str(FILEPATH),'w')
f.close()
INIT_FLAG = 1
while True:
main(INIT_FLAG)
time.sleep(TIMESPAN)
INIT_FLAG = 0
上記のプログラムを実行すると、指定したパスにデータが保存されていることが確認できます。
# cat /tmp/currency_USDJPY.csv
,high,open,bid,currencyPairCode,ask,low
2022-11-13 13:43:16.838764,138.76,138.76,138.76,USDJPY,138.81,138.76
2022-11-13 13:44:17.044830,138.76,138.76,138.76,USDJPY,138.81,138.76
2. 為替データを収集するプログラムのデーモン化
2.1 プログラムへの実行権限付与とデーモンの定義
作成したpythonプログラムに実行権限を付与しておきます。
# sudo chmod a+x /opt/MyDaemon/collect_currency_rate.py
次に、以下のようにデーモンを定義します。
ExecStartには、作成したpythonプログラムのパスを指定します。
[Unit]
Description=Collect Currency Rate Data
[Service]
Type=simple
Restart=always
ExecStart=/opt/MyDaemon/collect_currency_rate.py
[Install]
WantedBy=multi-user.target
2.2 デーモンの起動と動作確認
デーモンを起動します。
# sudo systemctl daemon-reload
# sudo systemctl start my-collect-currency-rate.service
# sudo systemctl enable my-collect-currency-rate.service
無事に起動していることが確認できます。
# sudo systemctl status my-collect-currency-rate.service
● my-collect-currency-rate.service - Collect Currency Rate Data
Loaded: loaded (/etc/systemd/system/my-collect-currency-rate.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-11-14 09:02:25 JST; 1s ago
Main PID: 10962 (python3)
Tasks: 8 (limit: 4915)
CGroup: /system.slice/my-collect-currency-rate.service
└─10962 python3 /opt/MyDaemon/collect_currency_rate.py
11月 14 08:48:14 ub-host systemd[1]: Started Collect Currency Rate Data.
数分後に/tmp/currency_USDJPY.csv を確認すると、無事にデータが約60秒毎に収集されていることが確認できました。
# cat /tmp/currency_USDJPY.csv
,high,open,bid,currencyPairCode,ask,low
2022-11-14 08:48:14.725133,139.90,138.95,139.44,USDJPY,139.45,138.95
2022-11-14 08:49:14.939894,139.90,138.95,139.41,USDJPY,139.42,138.95
2022-11-14 08:50:15.135750,139.90,138.95,139.45,USDJPY,139.47,138.95
2022-11-14 08:51:15.336668,139.90,138.95,139.46,USDJPY,139.47,138.95
2022-11-14 08:52:15.503485,139.90,138.95,139.50,USDJPY,139.51,138.95
3. まとめ
為替データを収集するプログラムのデーモン化(自動化)について紹介しました。
今後は、収集した為替データの表示や利用に関して紹介するかもしれません。
参考文献