我编写了一个简单的程序,它从 Kraken 获取比特币数据,并每 10 秒将其写入 CSV 文件。我给数据加上了时间戳,所以我知道它什么时候进来。我遇到的问题是程序会在这里和那里中断一两个小时,然后正常恢复。我想知道为什么会这样。是 Kraken 的服务,代码有问题,还是我没有考虑的其他问题?
这是代码:
import requests
import time
from time import sleep
import csv
from datetime import datetime
#Functions below return data from Kraken BTC exchange. Data is packed into nested dictionaries and lists. Functions unpack nested items and convert desired string into float object
#parse the data into a list, which can be used each time the functions are called
def parse_data(request):
json = request.json()
values = json.values()
values_list = [*values]
XBT = values_list[1]
XBT_values = XBT.values()
XBT_values_list = [*XBT_values]
data_dict = XBT_values_list[0]
data_dict_values = data_dict.values()
data_list = [*data_dict_values]
return data_list
#Get and return BTC ask price from Kraken
#Return as float
def ask_price(data_list):
return float(data_list[0][0])
#Get and return BTC bid price from Kraken
#Return as float
def bid_price(data_list):
return float(data_list[1][0])
#Get and return BTC last trade closed from Kraken
def last_trade_closed(data_list):
return float(data_list[2][0])
#Get and return BTC volume today from Kraken
#Return as float
def volume_today(data_list):
return float(data_list[3][0])
#Get and return BTC 24 hour volume from Kraken
#Return as float
def volume_24(data_list):
return float(data_list[3][1])
#Get and return BTC price today from Kraken
#Return as float
def volume_price_today(data_list):
return float(data_list[4][0])
#Get and return BTC 24 hour price from Kraken
#Return as float
def volume_price_24(data_list):
return float(data_list[4][1])
#Get and return BTC number of trades today from Kraken
#Return as float
def trade_numbers_today(data_list):
return float(data_list[5][0])
#Get and return BTC 24 hour number of trades from Kraken
#Return as float
def trade_numbers_24(data_list):
return float(data_list[5][1])
#Get and return BTC low today from Kraken
#Return as float
def low_today(data_list):
return float(data_list[6][0])
#Get and return BTC 24 hour low from Kraken
#Return as float
def low_24(data_list):
return float(data_list[6][1])
#Get and return BTC high today from Kraken
def high_today(data_list):
return float(data_list[7][0])
#Get and return BTC 24 hour highfrom Kraken
#Return as float
def high_24(data_list):
return float(data_list[7][1])
#write results to csv continuously
def write_to_csv():
#establishing column headers
columns = ['Ask Price', 'Bid Price', 'Last Trade Closed', 'Volume Today', 'Volume Last 24 Hours', 'Price Today', 'Price Last 24 Hours', \
'Number of Trades Today', 'Number of Trades Last 24 Hours', 'Low Today', 'Low Last 24 Hours', 'High Today', 'High Last 24 Hours', 'Time']
#write headers
with open('BTC.csv', 'a') as file:
writer = csv.writer(file)
writer.writerow(columns)
while True:
#make new request every 10 seconds, save the result of requested data as a list
request = requests.get('https://api.kraken.com/0/public/Ticker?pair=XBTUSD')
data_list = parse_data(request)
#putting function output data into list so I can write to CSV
final_data = [ask_price(data_list), bid_price(data_list), last_trade_closed(data_list), volume_today(data_list), volume_24(data_list), volume_price_today(data_list),volume_price_24(data_list), \
trade_numbers_today(data_list), trade_numbers_24(data_list), low_today(data_list), low_24(data_list), high_today(data_list), high_24(data_list), str(datetime.now())]
#write function data output data to CSV
writer.writerow(final_data)
time.sleep(10)
write_to_csv()
这是任何好奇的人的 Kraken API 文档:https ://www.kraken.com/features/api
任何想法/建议都会有所帮助,谢谢!