8
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

為替データの収集をデーモンで自動化

Last updated at Posted at 2022-11-13

はじめに

単なるプログラムのデーモン化は面白みがないので、為替データを収集するプログラムのデーモン化自動化)を紹介します。システムの監視だけでなく、為替変動のようにリアルタイムな監視をしたい場合に、プログラムのデーモン化は役立つと思っています。

目次

  1. 為替データを収集するプログラムの作成
  2. 為替データを収集するプログラムのデーモン化

1. 為替データを収集するプログラムの作成

Python3でプログラムを作成していきます。

1.1 公開されている為替データの確認

先ずはデータの確認です。
" http://www.gaitameonline.com/rateaj/getrate "にアクセスすると、下記のように為替レートに関するデータがjson形式で表示されます。

image.png

1.2 プログラムの作成

作成したプログラムを以下に示します。
今回は、60秒毎にUSDJPYのデータを収集しcsvで保存します。尚、PC再起動後に収集したデータが消去されるように、データの保存先はtmpフォルダを指定しています。パラメータの調整によって、データ収集の周期や保存先などは変更できます。

collect_currency_rate.py
#!/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プログラムのパスを指定します。

/etc/systemd/system/my-collect-currency-rate.service
[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. まとめ

為替データを収集するプログラムのデーモン化(自動化)について紹介しました。
今後は、収集した為替データの表示や利用に関して紹介するかもしれません。

参考文献

8
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?