cryptowat.chが終了してしまったので、bitcoinデータ取得はCryptoCompareに移行するか…。一分足だと過去一週間文しか取得できない。
参考URL
https://note.com/taiyo_pro/n/nbe13dc03bbe9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import requests from datetime import datetime import time import json import sqlite3 # 一分足で取得 def requests_to_cryptocompare(toTs = -1): return requests.get('https://min-api.cryptocompare.com/data/v2/histominute', params={ 'fsym': "BTC", # 仮想通貨のシンボル 'tsym': "JPY", # ペアの通貨のシンボル 'limit': 2000, # レコードの取得数、最大2000 'e': "bitFlyerFX", # 取引所 'toTs': toTs # 取得したいデータの基準となるタイムスタンプ(unixtime) }) # ループフラグ b = True next_unixtime = -1 #タイムスタンプをさかのぼりながらデータを取得し、リストに詰めていく while b: conn = sqlite3.connect("chart.db") cur = conn.cursor() # 無かったらテーブル作成。quote_volumeは BTC/JPYのJPY換算 cur.execute('create table IF NOT EXISTS chart(close_time integer, open_price integer, high_price integer, low_price integer, close_price integer, volume REAL, quote_volume REAL, primary key(close_time))') # 一分足で取得 req = requests_to_cryptocompare(next_unixtime) js = json.loads(req.text) # データは日付が古い方から新しい方に向けて格納される # 期間をさかのぼりながら取得する手順と組み合わせるため、逆順にして新しいデータ→古いデータの順に入れていく data_list = js["Data"]["Data"] data_list.reverse() for data in data_list: if data["close"] == 0: # 期間外でデータが存在しない場合はエラーなどではなく、0が入るらしい b = False break unixtime = data["time"] next_unixtime = unixtime - 1 # sqliteにupsert cur.execute("INSERT OR REPLACE INTO chart(close_time, open_price, high_price, low_price, close_price, volume, quote_volume ) values(?,?,?,?,?,?,?)", [data['time'], data['open'], data['high'], data['low'], data['close'], data['volumefrom'], data['volumeto']]) conn.commit() cur.close() conn.close() print(datetime.fromtimestamp(data_list[0]["time"]) ," to " , datetime.fromtimestamp(data_list[-1]["time"])) time.sleep(0.2) #ファイルにも書き込む #file = open( "./chart/"+ datetime.now().strftime('%Y%m%d_%H%M%S') +".json", "w",encoding="utf-8") #json.dump(req.json(), file) |