2013-04-22 1 views
96

Я хочу сделать свою собственную биткойновую диаграмму.Получить биткойн исторических данных

Вы знаете какой-либо надежный способ получить исторические данные о ценах биткойнов? Есть ли способ получить его с помощью REST? Я видел Bitfloor, который поддерживает REST, но он не возвращает никакого полезного значения, он имеет «внутреннюю ошибку сервера».

Я видел также биткойны, но я думаю, что это ограничено 2000 значениями данных.

Не могли бы вы предложить мне какие-либо рамки или систему для работы?

+3

Здесь: http://bitcoin.stackexchange.com/a/4808/5 – nmat

ответ

118

На самом деле, вы можете получить весь Bitcoin торгует историю с Bitcoincharts в формате CSV здесь: http://api.bitcoincharts.com/v1/csv/

он обновляется два раза в день для активных обменов, и есть несколько неработоспособных бирж, тоже.

EDIT: Поскольку нет заголовков столбцов в томами CSV, вот что они: колонок 1) временная метка торговой, в колонке 2) цена, колонка 3) объем торговли

+2

+1 да, это действительно очень полезно для составления диаграмм установленных сделок. Данные также можно получить в реальном времени через API-интерфейс толкателя битстопа, который я сейчас делаю. После индексации bitstamp в течение дня я загрузил bitstampUSD.csv и добавил данные, чтобы получить полное изображение – nurettin

+0

@Lykegenes также в списке торгов не отображается информация о глубине рынка, глубина - это мгновенная картина всего двух порядков книги в определенное время, в то время как торговая последовательность - это только то место, где встречаются книги заказов – anddam

+0

@anddam Я не знаю, искали ли вы данные о глубине рынка, но если вы в конечном итоге найдете его, пожалуйста, поделитесь! :) – Lykegenes

27

Вы можете найти много исторических данные здесь: https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data

+1

Ссылка только ответы не рекомендуется на SO. Также он ищет способ получить данные, а не только сами данные. – fancyPants

+1

Вы правы, я должен был быть более всеобъемлющим в своем ответе. Однако он отвечает на его запрос, поскольку API вызывает получение данных, перечисленных в правой части страницы. – Sean

+0

Ссылка не удалена –

7

Bitstamp живые данные Bitcoin, которые находятся в открытом доступе в JSON на this link. Не делайте попытку доступа к нему более чем 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 вы можете сделать BULK INSERT из CSV файл).

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

+0

Стандарт JSON: http://www.json.org/ – domi

2

Coinbase имеет REST API, что дает вам доступ к историческим ценам со своего сайта. Похоже, что данные показывают ценовую цену Coinbase (в долларах США) каждые десять минут.

Результаты возвращаются в формате CSV. Вы должны запросить номер страницы, который вы хотите использовать через API. На странице 1000 результатов (или ценовых точек). Это составляет около 7 дней на каждую страницу.

15

В случае, если вы хотите получить данные о битстопах с их 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 & 
+0

Использование магазина временного ряда, такого как InfluxDB, будет хорошим улучшением. – MrYellow

3

Зачистка его JSON с Node.js будет весело :)

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

Спасибо за скрипт! Похоже, что теперь загруженные файлы содержат только «неопределенные». –

+0

Я только что проверил репо, запустил 'npm install', а затем' cat bitstampUSD-2014-9-9.json' отлично выглядит для меня. Если вы инвестируете в его работу, давайте перейдем к комментариям Github, а не к Stackoverflow.Оставьте мне сообщение об ошибке? – f1lt3r

+0

если я понимаю, что ваш код позволяет мне получить полную историю биткойнов в масштабе 1 минуты? –