获取比特币历史数据[关闭]


122

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

您知道检索比特币历史价格数据的可靠方法吗?有没有办法使用REST来检索它?我看到了支持REST的Bitfloor,但它没有返回任何有用的值,它具有“内部服务器错误”。

我也看到了Bitcoincharts,但我认为它仅限于2000个数据值。

您会建议我使用任何框架或系统吗?



您可以从Coinigy处获得涵盖许多交易所/市场的历史比特币数据的费用:coinigy.com/bitcoin-data
Joe Phillips

Answers:


150

实际上,您可以在此处从CSV格式的Bitcoincharts中获取整个比特币交易历史:http ://api.bitcoincharts.com/v1/csv/

每天更新两次以进行主动交换,也有一些死掉的交换。

编辑:由于CSV中没有列标题,所以它们是这样的:第1列)交易的时间戳,第2列价格,第3列)交易量


2
+1是,实际上它对于绘制已建立的交易非常有用。数据也可以通过bitstamp的pusher API实时获取,这就是我现在正在做的事情。索引了bitstamp一天后,我下载了bitstampUSD.csv并在数据前添加了完整图片
nurettin 2014年

2
@Lykegenes第二列是什么?取值范围为0.5-33,不能为USD / BTC的汇率。
holdenlee 2014年

4
当心bitcoincharts.com数据之间的巨大差距。另请注意,没有勾选“买/卖”信息。
Petr Javorik '17

2
@theJerm采用UNIX时间戳格式,因此自1970年1月1
Lykegenes

2
在哪里可以获取莱特币,以太坊或其他重要硬币的数据?
skan

31

您可以在这里找到很多历史数据:https : //www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data


1
SO不鼓励仅链接的答案。他还在寻找一种方法来检索数据,而不仅仅是数据本身。
fancyPants 2013年

1
没错,我的回答应该更全面。但是,它确实回答了他的请求,因为页面右侧列出了用于检索数据的API调用。
肖恩

链接已断开
Guillaume Chevalier


1
尼斯,有趣的网站。我喜欢的另一项服务是walletinvestor.com/forecast/bitcoin-prediction,它使用AI和机器学习来进行短期和长期投资的每日加密货币价格预测。
约翰尼

15

如果,你想收集bitstamp贸易数据形成自己的WebSocket在更高的分辨率在更长的时间内,你可以使用下面的脚本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 &

使用时间序列存储(例如InfluxDB)将是一个不错的改进。
MrYellow

7

Bitstamp有在公开可用的实时数据比特币JSON这个环节请勿在十分钟之内尝试访问超过600次,否则它们将阻塞您的IP(此外,无论如何都是不必要的;请在此处阅读更多信息)。以下是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可以BULK INSERTCSV文件中进行插入)。


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;
            }
        }
    }

这是使用什么库?
Michael A

标准JSON:json.org
DOMI

4

Coinbase具有REST API,可让您从其网站访问历史价格。该数据似乎显示了大约每十分钟一次Coinbase现货价格(美元)。

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


4

使用Node.js将其刮到JSON会很有趣:)

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

在此处输入图片说明

[
  [
    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)
  ]
]

谢谢你的脚本!看来现在下载的文件仅包含“未定义”。
乍得·约翰逊

我只是签出了仓库,运行了npm install,然后cat bitstampUSD-2014-9-9.json对我来说还不错。如果您投入精力使其能够正常工作,那么让它进入Github,而不是Stackoverflow注释?给我一个错误报告?
f1lt3r

如果我理解您的代码可以让我以1分钟为单位获得比特币价格的完整历史记录?
Mayeul sgc

是的,没错
f1lt3r
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.