나만의 비트 코인 차트를 만들고 싶습니다.
비트 코인 과거 가격 데이터를 검색하는 신뢰할 수있는 방법을 알고 계십니까? REST를 사용하여 검색하는 방법이 있습니까? REST를 지원하는 Bitfloor를 보았지만 유용한 값을 반환하지 않고 "내부 서버 오류"가 있습니다.
Bitcoincharts도 보았지만 2000 데이터 값으로 제한되어 있다고 생각합니다.
이에 대해 작업 할 프레임 워크 나 시스템을 제안 하시겠습니까?
나만의 비트 코인 차트를 만들고 싶습니다.
비트 코인 과거 가격 데이터를 검색하는 신뢰할 수있는 방법을 알고 계십니까? REST를 사용하여 검색하는 방법이 있습니까? REST를 지원하는 Bitfloor를 보았지만 유용한 값을 반환하지 않고 "내부 서버 오류"가 있습니다.
Bitcoincharts도 보았지만 2000 데이터 값으로 제한되어 있다고 생각합니다.
이에 대해 작업 할 프레임 워크 나 시스템을 제안 하시겠습니까?
답변:
실제로 Bitcoincharts에서 전체 Bitcoin 거래 내역을 CSV 형식으로 가져올 수 있습니다. http://api.bitcoincharts.com/v1/csv/
활성 교환을 위해 하루에 두 번 업데이트되며 몇 가지 죽은 교환도 있습니다.
수정 : CSV에 열 헤더가 없기 때문에 다음과 같습니다. 열 1) 거래의 타임 스탬프, 열 2) 가격, 열 3) 거래량
bitcoincharts.com
데이터 의 큰 격차에주의하십시오 . 또한 틱 "매수 / 매도"정보가 없습니다.
여기에서 많은 과거 데이터를 찾을 수 있습니다 : https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data
경우에 따라 비트 스탬프 거래 데이터를 수집하려는 경우 더 오랜 기간 동안 더 높은 해상도로 웹 소켓 에서 하려면 아래의 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 라이브러리를 사용하여 JSONObject 및 JSONArray를 검색합니다. 아래 예제는 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;
}
}
}
Coinbase에는 REST API가 있습니다. 웹 사이트에서 과거 가격에 액세스 할 수 가 있습니다. 데이터는 약 10 분마다 Coinbase 현물 가격 (USD)을 표시하는 것 같습니다.
결과는 CSV 형식으로 반환됩니다. API를 통해 원하는 페이지 번호를 쿼리해야합니다. 페이지 당 1000 개의 결과 (또는 가격 포인트)가 있습니다. 이는 페이지 당 약 7 일 분량의 데이터입니다.
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로 가져가 보시겠습니까? 버그 보고서를 남겨주시겠습니까?