Отримати історичні дані про біткойн [закрито]


122

Я хочу зробити свій власний біткойн-графік.

Чи знаєте ви будь-який надійний спосіб отримати історичні дані про біткойни? Чи є спосіб отримати його за допомогою REST? Я бачив Bitfloor, який підтримує REST, але він не повертає жодного корисного значення, у нього є "внутрішня помилка сервера".

Я бачив також біткоінчарти, але думаю, що це обмежено 2000 значеннями даних.

Ви б запропонували мені будь-яку структуру чи систему для роботи над цим?



Ви можете заплатити за історичні дані за біткойн, що охоплюють багато бірж / ринків з Coinigy: coinigy.com/bitcoin-data
Джо Філліпс

Відповіді:


150

Власне, ви можете МОЖТЕ отримати всю історію торгів Bitcoin з Bitcoincharts у форматі CSV тут: http://api.bitcoincharts.com/v1/csv/

він оновлюється двічі на день для активних обмінів, і є кілька мертвих бірж.

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


2
+1 так, насправді це дуже корисно для складання графіків усталених торгів. Дані також можна отримати в прямому ефірі через API штовхача бітстампа, що я зараз роблю. Проіндексувавши bitstamp протягом дня, я завантажив bitstampUSD.csv і попередив дані, щоб вони мали повне зображення
Нуреттін

2
@Lykegenes Що таке другий стовпець? Значення знаходяться в діапазоні 0,5-33, що не може бути обмінним курсом USD / BTC.
holdenlee

4
Остерігайтеся великих прогалин у bitcoincharts.comданих. Також зауважте, що немає позначки "купити / продати" інформацію.
Петро Яворик

2
@theJerm Це у форматі часових позначок UNIX, тому кількість секунд з 01.01.1970 у часовому поясі UTC
Lykegenes

2
Де я можу отримати дані для Litecoin, Ethereum або інших важливих монет?
скан

31

Тут ви можете знайти багато історичних даних: https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data


1
Відповіді лише на посилання не рекомендуються. Також він шукає спосіб отримати дані, не тільки самі дані.
модні штани

1
Ви маєте рацію, я мав би бути більш вичерпним у своїй відповіді. Однак він відповідає на його запит, оскільки API-дзвінки для отримання даних перераховані в правій частині сторінки.
Шон

Посилання розірвано
Гійом Шевальє

2
@GuillaumeChevalier я знайшов quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data
Jörn

1
Гарний, цікавий сайт. Ще одна послуга, яку я люблю - walletinvestor.com/forecast/bitcoin-prediction, яка використовує AI та машинне навчання для щоденного прогнозування цін на криптовалюту для короткострокових та довгострокових інвестицій.
Джонні

15

У випадку, якщо ви хочете зібрати дані про торгову марку bitstamp з їх веб-сокета з більшою роздільною здатністю протягом більш тривалого періоду, ви можете використовувати сценарій log_bitstamp_trades.py нижче.

Сценарій використовує бібліотеки python websocket-client та pushher_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

і логройте файл 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 &

Використання магазину часових рядів, таких як 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 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;
            }
        }
    }

Яку бібліотеку це використовує?
Майкл А

Стандартний JSON: json.org
доми

4

Coinbase має API REST, який надає вам доступ до історичних цін з їх веб-сайту. Дані, схоже, показують спотову ціну Coinbase (у доларах США) кожні десять хвилин.

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


4

Скребкувати його на JSON за допомогою Node.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)
  ]
]

Дякую за сценарій! Схоже, зараз завантажені файли просто містять "невизначений".
Чад Джонсон

Я просто перевірив репо, побіг npm install, а потім cat bitstampUSD-2014-9-9.jsonмені добре виглядає. Якщо ви інвестуєте в те, щоб він працював, давайте перенести його до Github, а не до коментарів Stackoverflow? Залиште мені повідомлення про помилку?
f1lt3r

якщо я розумію, ваш код дозволяє мені отримати повну історію цін на біткойн за шкалою 1 хвилину?
Mayeul sgc

Так, це правильно
f1lt3r
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.