自分のビットコインチャートを作りたいです。
ビットコインの過去の価格データを取得する信頼できる方法を知っていますか?RESTを使用してそれを取得する方法はありますか?RESTをサポートするBitfloorを見ましたが、有用な値を返していません。「内部サーバーエラー」が発生しています。
ビットコインチャートも見ましたが、データ値は2000に制限されていると思います。
それについて作業するためのフレームワークやシステムを提案していただけますか?
自分のビットコインチャートを作りたいです。
ビットコインの過去の価格データを取得する信頼できる方法を知っていますか?RESTを使用してそれを取得する方法はありますか?RESTをサポートするBitfloorを見ましたが、有用な値を返していません。「内部サーバーエラー」が発生しています。
ビットコインチャートも見ましたが、データ値は2000に制限されていると思います。
それについて作業するためのフレームワークやシステムを提案していただけますか?
回答:
実際には、ビットコインの取引履歴全体をビットコインチャートからCSV形式でここで取得できます:http ://api.bitcoincharts.com/v1/csv/
アクティブな交換のために1日に2回更新され、いくつかのデッド交換もあります。
編集:CSVには列ヘッダーがないため、次のようになります。列1)取引のタイムスタンプ、列2)価格、列3)取引量
bitcoincharts.com
データの大きなギャップに注意してください。ティックの「購入/販売」情報がないことにも注意してください。
ここには多くの履歴データがあります:https : //www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data
場合によっては、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 &
BitstampにはJSON
、このリンクから公開されているライブビットコインデータがあります。 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
}
ここから、を解析JSON
してデータベースに保存(またはMongoDB
直接挿入して)してからアクセスできます。
履歴データの場合(データベースによって異なりますが、それがその方法の場合)、フラットファイルから挿入を実行します。これにより、ほとんどのデータベースで使用できます(たとえば、ファイルからをSQL Server
実行できます)。BULK INSERT
CSV
この場合の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;
}
}
}
Node.jsでJSONにスクレイピングするのは楽しいでしょう:)
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
問題はありませんでした。機能させることに投資している場合は、StackoverflowのコメントではなくGithubに持っていきましょう。バグレポートを残しますか?