閲覧ありがとうございます。
Pythonで、ccxtから板情報を1秒ごとに取得し、1時間ごとcsvに出力するとというプログラムを書いています。
コードは以下になるのですが、型変換の部分が違うのかデータが取り出せません。
初心者なのでおかしな部分が多々あるかもしれませんが、お分かりになる方がいらっしゃればご助言いただきたいです。
よろしくお願いいたします。
python
1import ccxt 2import time 3from datetime import datetime as dt 4import pandas as pd 5import json 6import os 7import requests 8import json 9 10#ccxtから取引所を読み込む 11exchange = ccxt.bitflyer() 12exchange.load_markets() 13#通貨ペア 14symbol = 'BTC/JPY' 15order_book = exchange.fetch_order_book(symbol) 16#スリープ秒数 17sleep_t = 1 18#板の深さ 19depth = 5 20 21#板データ取得 22def get_board(): 23 data = order_book 24 #jsonデータを辞書型へ変換 25 board = json.loads(data.text) 26 #現在時刻の取得 27 dict_data = {'time' : dt.now()} 28 dict_data.update({'ask_price_{}'.format(i) : board['asks'][i]['price'] for i in range(depth)}) 29 dict_data.update({'ask_price_{}'.format(i) : board['asks'][i]['size'] for i in range(depth)}) 30 dict_data.update({'bid_price_{}'.format(i) : board['bids'][i]['price'] for i in range(depth)}) 31 dict_data.update({'bid_price_{}'.format(i) : board['bids'][i]['size'] for i in range(depth)}) 32 #辞書型をpandas seriesに変換 33 return pd.Series(dict_data) 34 35#ループ処理 36def get_coin_board(): 37 init_time = dt.now() 38 end_time = dt.now() 39 print('START /', init_time) 40 main_list = [] 41 while (end_time - init_time).seconds < 3600: 42 try: 43 #jsonデータをpandas seriesへ変換 44 dict_data = get_board() 45 #pandas seriesをリストへ追加 46 main_list.append(dict_data) 47 except Exception as e: 48 print('exception: ',e.args) 49 time.sleep(sleep_t) 50 end_time = dt.now() 51 #pandas seriesのリストを結合 52 df_data = pd.concat(main_list, axis=1).T 53 df_data.to_csv('./data/exchange_hourly_board_day_{}_init_{}_{}_end_{}_{}.csv'.format(init_time.day, init_time.hour, init_time.minute, end_time.hour, end_time.minute)) 54 print('END /', end_time) 55 56if __name__ == '__main__': 57 if not os.path.exists('./data'): 58 os.mkdir('./data') 59 while True: 60 try: 61 get_coin_board() 62 except Exception as e: 63 print('exception: ', e.args)
出力されたエラー
exception: ("'dict' object has no attribute 'text'",)
File "*******", line 62, in <module>
get_coin_board()
File "******", line 50, in get_coin_board
time.sleep(sleep_t)