我想做我自己的比特幣圖表。
有任何可靠的方式來檢索比特幣的曆史價格數據嗎?有什麽方法可以使用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
)。
參考資料