Botを定期実行した場合に、いちいちターミナルの出力結果を毎回見るわけにもいかないので、後で見やすいようにログファイルに記録しておきます。
ログの出力にはPythonだとloggingを使った方がよいみたいですが、いくつか設定とかをしなきゃいけないようで、それを説明するのも非常に手間なので、printを使うことにします。
別に素人が個人でやるんだからいいでしょ。
取引所はbitFlyerで、通貨はイーサリアムとします。
背景や前提については、以下のカテゴリーページをご覧ください。
注意事項
- 本サイトで掲載されている評価や感想等は、あくまでサイト運営者の主観であり、広告主に保証されたものではありません。
- 暗号資産(仮想通貨)取引は、元本を保証するものでなく、価格変動により損失が生じるリスクがあります。
お取引される際には、取引内容をよく理解し、ご自身の判断で行ってください。
Pythonのサンプルコード
いつものようにファイルを作成して、コードを入力します。
ファイル名は「put_log.py」としました。
from datetime import datetime
import requests
# 基本変数設定
main_url = 'https://api.bitflyer.com'
product_code = 'ETH_JPY'
param_only_product_code = {
'product_code': product_code
}
# 終了メッセージ出力用関数
def end_msg():
print('------------------------------')
print('End Time: ' + str(datetime.now())[:-7])
print('------------------------------')
print()
print()
# 通常メッセージ出力用関数
def put_msg(msg):
print(str(datetime.now())[:-7], msg)
# requests.get用関数
def requests_get(sub_url, params):
return requests.get(
main_url + sub_url,
params = params
).json()
# 開始メッセージ出力
print('------------------------------')
print('Start Time: ' + str(datetime.now())[:-7])
print('------------------------------')
# 板の状態確認
path_getstate = '/v1/getboardstate'
result_getstate = requests_get(path_getstate, param_only_product_code)
# 板の状態が正常でなければ終了
if result_getstate['health'] != 'NORMAL' and result_getstate['state'] != 'RUNNING':
put_msg('板の状態が正常ではないためプログラムを終了します。')
end_msg()
exit()
put_msg('板の状態は正常です。')
# 終了メッセージ出力
end_msg()
Pythonの実行結果
------------------------------
Start Time: 2022-03-20 15:51:01
------------------------------
2022-03-20 15:51:01 板の状態は正常です。
------------------------------
End Time: 2022-03-20 15:51:01
------------------------------
Pythonサンプルコードの説明
必要そうなところだけ説明します。
終了メッセージ出力用関数
# 終了メッセージ出力用関数
def end_msg():
print('------------------------------')
print('End Time: ' + str(datetime.now())[:-7])
print('------------------------------')
print()
print()
この「def」から始まるものは関数と呼ばれるものになります。
同じ処理を何度も書くのを避ける場合などに使います。
「datetime.now()」の後ろにある、「[:-7]」はスライスと呼ばれるもので、以下のような感じで文字をカットできます。
今回は秒より細かい時間は必要ないのでカットしています。
>>> str(datetime.now())
'2022-03-21 11:00:03.098143'
>>> str(datetime.now())[:-7]
'2022-03-21 11:03:48'
通常メッセージ出力用関数
# 通常メッセージ出力用関数
def put_msg(msg):
print(str(datetime.now())[:-7], msg)
関数は引数を取ることもできます。
この関数だと「msg」が引数および変数になり、関数を呼び出す時にこの値を入れると、出力するメッセージを変えることができます。
requests.get用関数
# requests.get用関数
def requests_get(sub_url, params):
return requests.get(
main_url + sub_url,
params = params
).json()
requestsもこんな感じで関数にしてみました。
サブURLとパラメータはAPIごとに変わるので引数にしています。
API実行結果は関数呼び出し元に返しています。
requests_getの関数呼び出し
# 板の状態確認
path_getstate = '/v1/getboardstate'
result_getstate = requests_get(path_getstate, param_only_product_code)
今回は取引所や通貨のやり取りが問題なくできるかを確認するAPIを実行しています。
先ほどの関数「requests_get」を上記のような感じで実行します。
「result_getstate」には実行結果が入ります。
板の状態が正常かどうかを確認する
# 板の状態が正常でなければ終了
if result_getstate['health'] != 'NORMAL' and result_getstate['state'] != 'RUNNING':
put_msg('板の状態が正常ではないためプログラムを終了します。')
end_msg()
exit()
put_msg('板の状態は正常です。')
「result_getstate」には以下のような値が入ります。
この「health」が「NORMAL」ではなく、さらに「state」が「RUNNING」ではない場合は、ちゃんと取引できないかもしれないため、ここでプログラムを終了させています。
板の状態が正常であれば、このコードの後にいろいろな処理を書くのですが、今回はあくまでログファイルを出力するためのサンプルコードなので、ここで終わりにしています。
他は省略
まぁここまで試してきた方は、もうわかるかと思います。
不明点あればご質問いただければ回答します。
最後に
長くなったので今回はここまでにします。
次回は今回作成したPythonコードをPowerShellから実行して、出力結果をファイルに保存します。
本シリーズの一覧ページは以下にまとめています。
それでは。
コメント