it-swarm.com.de

Erhalten Sie historische Bitcoin-Daten

Ich möchte mein eigenes Bitcoin-Diagramm erstellen.

Kennen Sie eine zuverlässige Methode, um historische Preisdaten für Bitcoins abzurufen? Gibt es eine Möglichkeit, es mit REST abzurufen? Ich habe Bitfloor gesehen, das REST unterstützt, aber keinen nützlichen Wert zurückgibt. Es liegt ein "interner Serverfehler" vor.

Ich habe auch Bitcoincharts gesehen, aber ich denke, es ist auf 2000 Datenwerte begrenzt.

Würden Sie mir einen Rahmen oder ein System vorschlagen, um daran zu arbeiten?

120
Cod1ngFree

Tatsächlich KÖNNEN Sie die gesamte Bitcoin-Handelshistorie von Bitcoincharts im CSV-Format hier abrufen: http://api.bitcoincharts.com/v1/csv/

es wird zweimal täglich aktualisiert, wenn ein Austausch aktiv ist, und es gibt auch einige tote Austauschvorgänge.

BEARBEITEN: Da es in den CSVs keine Spaltenüberschriften gibt, sind dies: Spalte 1) der Zeitstempel des Handels, Spalte 2) der Preis, Spalte 3) das Volumen des Handels

145
Lykegenes
31
Sean

Falls Sie Bitstamp-Handelsdaten von ihrem Websocket in höherer Auflösung über einen längeren Zeitraum sammeln möchten, können Sie das unten stehende Skript log_bitstamp_trades.py verwenden.

Das Skript verwendet die Bibliotheken python websocket-client und pusher_client_python. Installieren Sie sie daher.

#!/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 __== '__main__':
    log_file_path = sys.argv[1]
    log_file_reload_path = sys.argv[2]
    main(log_file_path, log_file_reload_path

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

dann können Sie es im Hintergrund ausführen

Nohup ./log_bitstamp_trades.py /mnt/data/bitstamp_logs/bitstamp-trade.log /mnt/data/bitstamp_logs/reload_log &
15
mettw

Bitstamp enthält Live-Bitcoin-Daten, die in JSON unter dieser Link öffentlich verfügbar sind. Versuchen Sie nicht , mehr als 600 Mal in zehn Minuten darauf zuzugreifen, sonst blockieren sie Ihre IP (und es ist sowieso unnötig; Lesen Sie hier mehr ). Das Folgende ist ein C# Ansatz zum Abrufen von Live-Daten:

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
}

Von hier aus können Sie das JSON analysieren und in einer Datenbank speichern (oder mit MongoDB direkt einfügen) und dann darauf zugreifen.

Führen Sie für Verlaufsdaten (abhängig von der Datenbank - wenn Sie so vorgehen) eine Einfügung aus einer Einfachdatei durch, die Sie in den meisten Datenbanken verwenden können (z. B. mit SQL Server du kannst ein BULK INSERT aus einer CSV Datei).

7
user123

Ich habe ein Java Beispiel für diesen Fall geschrieben:

Verwenden Sie die Bibliothek json.org, um JSONObjects und JSONArrays abzurufen. Das folgende Beispiel verwendet die Daten von blockchain.info, die als JSONObject abgerufen werden können.

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

Es würde Spaß machen, es mit Node.js auf JSON zu kratzen :)

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)
  ]
]
4
f1lt3r

Coinbase verfügt über eine REST-API , mit der Sie über die Website auf historische Kurse zugreifen können. Die Daten scheinen den Coinbase-Spot-Preis (in USD) etwa alle zehn Minuten anzuzeigen.

Die Ergebnisse werden im CSV-Format zurückgegeben. Sie müssen die gewünschte Seitenzahl über die API abfragen. Es gibt 1000 Ergebnisse (oder Preispunkte) pro Seite. Das sind ungefähr 7 Tage Daten pro Seite.

4
leishman