当前位置: 首页>>技术问答>>正文


获取比特币的历史价格数据

qingchuanTR 技术问答 , , , 去评论

我想做我自己的比特币图表。

有任何可靠的方式来检索比特币的历史价格数据吗?有什么方法可以使用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 linkJSON中公开获得。千万别在十分钟内尝试访问它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)。

参考资料

 

本文由《纯净的天空》出品。文章地址: https://vimsky.com/article/3790.html,未经允许,请勿转载。