web-dev-qa-db-ja.com

ビットコインの履歴データを取得する

私は自分のビットコインチャートを作りたいです。

ビットコインの過去の価格データを取得する信頼できる方法をご存知ですか? RESTを使用して取得する方法はありますか? RESTをサポートするBitfloorを見ましたが、有用な値を返さず、「内部サーバーエラー」があります。

Bitcoinchartsも見ましたが、データ値は2000に制限されていると思います。

それについて機能するフレームワークまたはシステムを提案していただけますか?

117
Cod1ngFree

実際には、BitcoinartsからCSV形式のBitcoin取引履歴全体を取得できます: http://api.bitcoincharts.com/v1/csv/

アクティブな交換のために1日に2回更新され、デッド交換もいくつかあります。

編集:CSVには列ヘッダーがないため、列ヘッダーは次のとおりです。列1)取引のタイムスタンプ、列2)価格、列3)取引量

144
Lykegenes

ここで多くの履歴データを見つけることができます: https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data

30
Sean

場合には、ビットスタンプ取引データを 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 __== '__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 &
15
mettw

Bitstampには、 this linkJSONname__で公開されているライブビットコインデータがあります。 しない 10分以内に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
}

ここから、JSONname__を解析してデータベースに保存し(またはMongoDBname__で直接挿入)、アクセスできます。

履歴データ(データベースに応じて-それがあなたのアプローチ方法である場合)については、ほとんどのデータベースで使用できるフラットファイルから挿入を行います(たとえば、SQL Serverを使用すると、CSVname__ファイルからBULK INSERTを実行できます)。

7
user123

この場合のJavaの例を作成しました。

Json.orgライブラリーを使用して、JSONObjectsおよびJSONArraysを取得します。以下の例では、JSONObjectとして取得できるblockchain.infoのデータを使用しています。

    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

Node.jsでJSONにスクレイピングするのは楽しいでしょう:)

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には REST API があり、ウェブサイトから過去の価格にアクセスできます。データは、コインベースのスポット価格(米ドル)を約10分ごとに示しているようです。

結果はCSV形式で返されます。 APIを使用して、必要なページ番号を照会する必要があります。 1ページあたり1000件の結果(または価格ポイント)があります。これは、1ページあたり約7日間のデータです。

4
leishman