當前位置: 首頁>>技術問答>>正文


獲取比特幣的曆史價格數據

我想做我自己的比特幣圖表。

有任何可靠的方式來檢索比特幣的曆史價格數據嗎?有什麽方法可以使用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/zh-tw/article/3790.html,未經允許,請勿轉載。