我想做我自己的比特币图表。
有任何可靠的方式来检索比特币的历史价格数据吗?有什么方法可以使用REST来检索它吗?我看到Bitfloor支持REST,但它没有返回任何有用的值,而是一个“内部服务器错误”(“internal server error”)。
我也看到了Bitcoincharts,但我认为它仅限于2000个数据值。
有什么好的办法吗?
最佳解决思路
实际上,您可以通过CSV格式从Bitcoincharts获取比特币交易历史记录:http://api.bitcoincharts.com/v1/csv/, 数据示例:
它每天对活跃的交易进行2次更新,并且也有一些不活跃的交易。
编辑:由于CSV中没有列标题,这里补充一下:第1列)交易时间戳,第2列)价格,第3列)交易量
次佳解决思路
您可以在这里找到很多历史数据:https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data
第三种解决思路
如果您希望在更长时间内以更高的分辨率从websocket收集bitstamp交易数据,您可以使用下面的脚本log_bitstamp_trades.py。
该脚本使用python websocket-client和pusher_client_python库,如果没有的话请安装它们。
#!/usr/bin/python
import pusherclient
import time
import logging
import sys
import datetime
import signal
import os
logging.basicConfig()
log_file_fd = None
def sigint_and_sigterm_handler(signal, frame):
global log_file_fd
log_file_fd.close()
sys.exit(0)
class BitstampLogger:
def __init__(self, log_file_path, log_file_reload_path, pusher_key, channel, event):
self.channel = channel
self.event = event
self.log_file_fd = open(log_file_path, "a")
self.log_file_reload_path = log_file_reload_path
self.pusher = pusherclient.Pusher(pusher_key)
self.pusher.connection.logger.setLevel(logging.WARNING)
self.pusher.connection.bind('pusher:connection_established', self.connect_handler)
self.pusher.connect()
def callback(self, data):
utc_timestamp = time.mktime(datetime.datetime.utcnow().timetuple())
line = str(utc_timestamp) + " " + data + "\n"
if os.path.exists(self.log_file_reload_path):
os.remove(self.log_file_reload_path)
self.log_file_fd.close()
self.log_file_fd = open(log_file_path, "a")
self.log_file_fd.write(line)
def connect_handler(self, data):
channel = self.pusher.subscribe(self.channel)
channel.bind(self.event, self.callback)
def main(log_file_path, log_file_reload_path):
global log_file_fd
bitstamp_logger = BitstampLogger(
log_file_path,
log_file_reload_path,
"de504dc5763aeef9ff52",
"live_trades",
"trade")
log_file_fd = bitstamp_logger.log_file_fd
signal.signal(signal.SIGINT, sigint_and_sigterm_handler)
signal.signal(signal.SIGTERM, sigint_and_sigterm_handler)
while True:
time.sleep(1)
if __name__ == '__main__':
log_file_path = sys.argv[1]
log_file_reload_path = sys.argv[2]
main(log_file_path, log_file_reload_path
和logrotate文件配置
/mnt/data/bitstamp_logs/bitstamp-trade.log
{
rotate 10000000000
minsize 10M
copytruncate
missingok
compress
postrotate
touch /mnt/data/bitstamp_logs/reload_log > /dev/null
endscript
}
那么你可以在后台运行它
nohup ./log_bitstamp_trades.py /mnt/data/bitstamp_logs/bitstamp-trade.log /mnt/data/bitstamp_logs/reload_log &
第四种思路
Bitstamp的实时比特币数据可以在this link的JSON
中公开获得。千万别在十分钟内尝试访问它600次以上,否则他们会阻止你的IP(也没有这样做的必要, read more here)。以下是获取实时数据的C#
方法:
using (var WebClient = new System.Net.WebClient())
{
var json = WebClient.DownloadString("https://www.bitstamp.net/api/ticker/");
string value = Convert.ToString(json);
// Parse/use from here
}
从这里,您可以解析JSON
并将其存储在数据库中(或者直接插入MongoDB
),然后访问它。
对于历史数据(取决于数据库 – 如果这是您的方法),请从大多数数据库允许使用的普通文件插入(例如,通过SQL Server
,您可以从CSV
文件执行BULK INSERT
)。
参考资料