2013-04-22 128 views
96

我想做我自己的比特币图表。获取比特币的历史数据

你会知道任何可靠的方法来获取比特币的历史价格数据?有什么方法可以使用REST来检索它吗?我看到Bitfloor支持REST,但它没有返回任何有用的值,它有一个“内部服务器错误”。

我看到也Bitcoincharts,但我认为这是仅限于2000年的数据值。

你会建议我的任何框架或系统的正常工作呢?

+3

这里:http://bitcoin.stackexchange.com/a/4808/5 – nmat 2013-04-29 10:06:33

回答

118

其实,你可以得到整个比特币在这里CSV格式的交易历史从Bitcoincharts: http://api.bitcoincharts.com/v1/csv/

它每天更新两次,积极交流,并有几个死的交流了。

编辑:由于没有列标题的CSV中,这里的他们是什么: 列1)业界的时间戳, 列2)的价格, 列3)贸易量

+2

+1是的,这对绘制已建立的交易非常有用。数据也可以通过bitstamp的推送API实时获取,这正是我现在正在做的。在索引bitstamp一天之后,我下载了bitstampUSD.csv,并预先填充了数据以获得完整的图片 – nurettin 2014-03-05 17:40:13

+0

@Lykegenes也列出了交易不显示市场深度的信息,深度是整个二阶的瞬时图片当交易顺序只是订单簿会见的地方 – anddam 2014-05-30 17:18:29

+0

@anddam我不知道你是否在寻找市场深度数据,但如果你最终找到它,请分享! :) – Lykegenes 2014-06-30 13:35:06

27

你可以在这里找到大量的历史数据:https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data

+1

链接只回答不鼓励对SO。他还在寻找一种方法来检索数据,而不仅仅是数据本身。 – fancyPants 2013-07-05 15:43:36

+1

你说得对,我的答案应该更全面。然而,它确实回答了他的请求,因为调用API检索数据的请求列在页面的右侧。 – Sean 2013-07-08 20:59:02

+0

链接已中断 – 2017-03-06 04:07:59

7

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您可以从CSVBULK INSERT文件)。

4

我写了一个Java示例这种情况:

使用json.org库检索一个JSONObjects和JSONArrays。下面的例子使用blockchain.info的数据,它可以作为JSONObject获取。

public class main 
    { 
     public static void main(String[] args) throws MalformedURLException, IOException 
     { 
      JSONObject data = getJSONfromURL("https://blockchain.info/charts/market-price?format=json"); 
      JSONArray data_array = data.getJSONArray("values"); 

      for (int i = 0; i < data_array.length(); i++) 
      { 
       JSONObject price_point = data_array.getJSONObject(i); 

       // Unix time 
       int x = price_point.getInt("x"); 

       // Bitcoin price at that time 
       double y = price_point.getDouble("y"); 

       // Do something with x and y. 
      } 

     } 

     public static JSONObject getJSONfromURL(String URL) 
     { 
      try 
      { 
       URLConnection uc; 
       URL url = new URL(URL); 
       uc = url.openConnection(); 
       uc.setConnectTimeout(10000); 
       uc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); 
       uc.connect(); 

       BufferedReader rd = new BufferedReader(
         new InputStreamReader(uc.getInputStream(), 
         Charset.forName("UTF-8"))); 

       StringBuilder sb = new StringBuilder(); 
       int cp; 
       while ((cp = rd.read()) != -1) 
       { 
        sb.append((char)cp); 
       } 

       String jsonText = (sb.toString());    

       return new JSONObject(jsonText.toString()); 
      } catch (IOException ex) 
      { 
       return null; 
      } 
     } 
    } 
+0

这是使用什么库? – Codingo 2014-03-13 00:34:39

+0

标准JSON:http://www.json.org/ – domi 2014-03-19 16:54:39

2

Coinbase有一个REST API,让您访问其网站的历史价格。数据似乎显示每十分钟Coinbase现货价格(以美元计)。

结果以CSV格式返回。您必须通过API查询您想要的页码。每页有1000个结果(或价格点)。这是每页大约7天的数据量。

15

如果您想在较长时间内以更高的分辨率从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 & 
+0

使用诸如InfluxDB之类的时间系列商店将是一个不错的改进。 – MrYellow 2017-11-13 22:11:09

3

它的Node.js刮JSON会很有趣:)

https://github.com/f1lt3r/bitcoin-scraper

enter image description here

[ 
    [ 
    1419033600, // Timestamp (1 for each minute of entire history) 
    318.58,  // Open 
    318.58,  // High 
    318.58,  // Low 
    318.58,  // Close 
    0.01719605, // Volume (BTC) 
    5.478317609, // Volume (Currency) 
    318.58  // Weighted Price (USD) 
    ] 
] 
+0

谢谢你的脚本!看来现在下载的文件只包含“未定义”。 – 2017-01-02 04:55:11

+0

我刚刚检出了repo,运行'npm install',然后'cat bitstampUSD-2014-9-9.json'对我来说看起来很好。如果你投入了工作,让我们把它带到Github而不是Stackoverflow的评论?给我一个错误报告? – f1lt3r 2017-01-02 18:41:10

+0

如果我了解您的代码,我可以在1分钟内获得比特币价格的完整历史记录吗? – 2017-03-27 06:27:24