122 votes

Obtenir des données historiques bitcoin

Je veux faire mon propre graphique bitcoin.

Connaissez-vous un moyen fiable de récupérer des données de prix historiques en bitcoins? Est-il possible de le récupérer à l'aide de REST? J'ai vu Bitfloor, qui supporte REST, mais il ne renvoie aucune valeur utile, il a une "erreur de serveur interne".

J'ai aussi vu des Bitcoincharts, mais je pense que c'est limité à 2000 valeurs de données.

Souhaitez-vous me suggérer un cadre ou un système pour travailler à ce sujet?

148voto

Lykegenes Points 153

En fait, vous POUVEZ obtenir l’historique complet des transactions Bitcoin auprès de Bitcoincharts au format CSV ici: http://api.bitcoincharts.com/v1/csv/

il est mis à jour deux fois par jour pour les échanges actifs, et il y a aussi quelques échanges morts.

EDIT: Puisqu'il n'y a pas d'en-tête de colonne dans les CSV, voici ce qu'ils sont: colonne 1) horodatage de la transaction, colonne 2) le prix, colonne 3) le volume de la transaction

31voto

Sean Points 166

Vous pouvez trouver beaucoup de données historiques sur ici: http://www.quandl.com/markets/bitcoin

15voto

mettw Points 11

Dans le cas, vous souhaitez recueillir bitstamp données sur le commerce sous forme de leurs websocket dans une résolution plus élevée sur une période plus longue, vous pouvez utiliser le script log_bitstamp_trades.py ci-dessous.

Le script utilise python websocket-client et pusher_client_python les bibliothèques, afin de les installer.

#!/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

et logrotate fichier de 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
}

ensuite, vous pouvez l'exécuter en arrière-plan

nohup ./log_bitstamp_trades.py /mnt/data/bitstamp_logs/bitstamp-trade.log /mnt/data/bitstamp_logs/reload_log &

7voto

user123 Points 325

Bitstamp a vivre bitcoin données qui sont disponibles au public, en JSON à ce lien. Ne pas essayer d'accéder à plus de 600 fois en dix minutes ou bien ils vont bloquer votre adresse IP (et en plus, c'est inutile de toute façon; en lire plus ici). Ci-dessous est un C# approche pour l'obtention des données en direct:

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
}

À partir d'ici, vous pouvez analyser l' JSON et de les stocker dans une base de données (ou avec MongoDB de les insérer directement) et ensuite y accéder.

Pour des données historiques (selon la base de données - si c'est la façon dont vous vous approchez d'elle), faire une insertion à partir d'un fichier plat, dont la plupart des bases de données vous permettent d'utiliser (par exemple, SQL Server vous pouvez faire un BULK INSERT d'un CSV le fichier).

4voto

DomenK Points 132

J'ai écrit un exemple Java pour ce cas:

Utilisez la bibliothèque json.org pour récupérer JSONObjects et JSONArrays. L'exemple ci-dessous utilise les données de blockchain.info qui peuvent être obtenues en tant que 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;
            }
        }
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X