Получить биткойн исторические данные [закрыто]
Я хочу сделать свой собственный график биткойнов.
знаете ли вы какой-либо надежный способ получения исторических ценовых данных биткойнов? Есть ли способ получить его с помощью REST? Я видел Bitfloor, который поддерживает REST, но он не возвращает никакого полезного значения, у него есть "внутренняя ошибка сервера".
Я видел также Bitcoincharts, но я думаю, что он ограничен 2000 значениями данных.
не могли бы вы предложить мне какие-либо рамки или системы, чтобы работать над этим?
7 ответов:
на самом деле, вы можете получить всю историю Биткойн-трейдов из Bitcoincharts в формате CSV здесь : http://api.bitcoincharts.com/v1/csv/
он обновляется два раза в день для активных обменов, и есть несколько мертвых обменов, тоже.
EDIT: поскольку в CSVs нет заголовков столбцов, вот что они собой представляют : столбец 1) временная метка сделки, столбец 2) Цена, графа 3) объем сделки
вы можете найти много исторических данных здесь:https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data
в случае, если вы хотите собрать данные о торговле 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 file config
/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 &
главное пережить этот момент и жить биткоин сведения, являющиеся общедоступными в
JSONat этой ссылке. не попробуйте получить доступ к нему более 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 INSERTСCSVfile).
Я написал пример java для этого случая:
использовать библиотеку json.org для получения объекты jsonobject и массивы jsonarray. Пример ниже использует blockchain.info ' S данные, которые могут быть получены как 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 дней данных на страницу.
выскабливание его в JSON с узлом.js было бы весело:)
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) ] ]

Comments