我想做我自己的比特币图表。获取比特币的历史数据
你会知道任何可靠的方法来获取比特币的历史价格数据?有什么方法可以使用REST来检索它吗?我看到Bitfloor支持REST,但它没有返回任何有用的值,它有一个“内部服务器错误”。
我看到也Bitcoincharts,但我认为这是仅限于2000年的数据值。
你会建议我的任何框架或系统的正常工作呢?
我想做我自己的比特币图表。获取比特币的历史数据
你会知道任何可靠的方法来获取比特币的历史价格数据?有什么方法可以使用REST来检索它吗?我看到Bitfloor支持REST,但它没有返回任何有用的值,它有一个“内部服务器错误”。
我看到也Bitcoincharts,但我认为这是仅限于2000年的数据值。
你会建议我的任何框架或系统的正常工作呢?
其实,你可以得到整个比特币在这里CSV格式的交易历史从Bitcoincharts: http://api.bitcoincharts.com/v1/csv/
它每天更新两次,积极交流,并有几个死的交流了。
编辑:由于没有列标题的CSV中,这里的他们是什么: 列1)业界的时间戳, 列2)的价格, 列3)贸易量
+1是的,这对绘制已建立的交易非常有用。数据也可以通过bitstamp的推送API实时获取,这正是我现在正在做的。在索引bitstamp一天之后,我下载了bitstampUSD.csv,并预先填充了数据以获得完整的图片 – nurettin 2014-03-05 17:40:13
@Lykegenes也列出了交易不显示市场深度的信息,深度是整个二阶的瞬时图片当交易顺序只是订单簿会见的地方 – anddam 2014-05-30 17:18:29
@anddam我不知道你是否在寻找市场深度数据,但如果你最终找到它,请分享! :) – Lykegenes 2014-06-30 13:35:06
链接只回答不鼓励对SO。他还在寻找一种方法来检索数据,而不仅仅是数据本身。 – fancyPants 2013-07-05 15:43:36
你说得对,我的答案应该更全面。然而,它确实回答了他的请求,因为调用API检索数据的请求列在页面的右侧。 – Sean 2013-07-08 20:59:02
链接已中断 – 2017-03-06 04:07:59
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
文件)。
我写了一个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;
}
}
}
Coinbase有一个REST API,让您访问其网站的历史价格。数据似乎显示每十分钟Coinbase现货价格(以美元计)。
结果以CSV格式返回。您必须通过API查询您想要的页码。每页有1000个结果(或价格点)。这是每页大约7天的数据量。
如果您想在较长时间内以更高的分辨率从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 &
使用诸如InfluxDB之类的时间系列商店将是一个不错的改进。 – MrYellow 2017-11-13 22:11:09
它的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)
]
]
谢谢你的脚本!看来现在下载的文件只包含“未定义”。 – 2017-01-02 04:55:11
我刚刚检出了repo,运行'npm install',然后'cat bitstampUSD-2014-9-9.json'对我来说看起来很好。如果你投入了工作,让我们把它带到Github而不是Stackoverflow的评论?给我一个错误报告? – f1lt3r 2017-01-02 18:41:10
如果我了解您的代码,我可以在1分钟内获得比特币价格的完整历史记录吗? – 2017-03-27 06:27:24
这里:http://bitcoin.stackexchange.com/a/4808/5 – nmat 2013-04-29 10:06:33