안녕하세요.
오늘은 거래소에서 제공하는 api 를 가지고 최근가격과 거래량을 표로 만들어 보겠습니다.
사용 할 거래소 API 는 빗썸으로 하겠습니다.

다른 거래소의 API 주소를 원하시면 아래 포스팅을 참고하세요!

최종 결과물은 이렇게...  허접하지만 목표는 디자인이 아니기 때문에ㅠㅠ



우선 지난시간에 했던 내용에 이어서 코딩을 하겠습니다. 


※ 지난 시간에 했던 내용 중 상단 내용만 그대로 가져다 쓰겠습니다. 

// 스누피 인클루드 (경로 주의 하세요)
include_once './insert/Snoopy.class.php';
// 스누피 객체 생성
$snoopy = new snoopy;
// fetch를 이용하여 스누피 객체에 빗썸 API의 모든 내용 담기
$snoopy -> fetch("https://api.bithumb.com/public/ticker/all");
// 담은 값을 $result 객체에 담기
$result = $snoopy->results;



위의 내용에 추가로 해야 할 작업은 $result 객체에 담겨있는 api 전체 내용 중 필요한 가격 부분과 거래량 부분을 추출 해야 하는 부분입니다.


먼저 빗썸 API 링크로 들어 가보시면 아래처럼 BTC 부터 EOS 까지 최근 거래내역을 보실 수 있습니다.

(그 중 BTC 만 예시로 가져왔습니다.)

"BTC":{"opening_price":"11502000","closing_price":"11240000","min_price":"10950000","max_price":"11565000","average_price":"11306739.6560","units_traded":"6984.75602934","volume_1day":"6984.75602934","volume_7day":"72123.92432754","buy_price":"11231000","sell_price":"11254000"}


위의 내용 중 표로 만들 최근가격(closing_price), 하루 거래량(volume_1day) 에 해당하는 내용을 가져오겠습니다.



추출 하기 위해서 preg_match_all 이라는 php 함수를 사용 하였습니다.

// $price 변수에 closing_price 와 "main_price 사이의 가격을 반복으로 담기 
preg_match_all("|closing_price\":\"(.*)\",\"min_price\"|U", $result, $price, PREG_SET_ORDER);
// $volume 변수에 volume_1day 와 "volume_7day 사이의 가격을 반복으로 담기 
preg_match_all("|volume_1day\":\"(.*)\",\"volume_7day\"|U", $result, $volume, PREG_SET_ORDER);



1. closing_price에 해당하는 숫자값 을 가지고 오기 위해선 앞뒤 단어를 알아야 합니다.

ex) "closing_price":"11240000","min_price"


11240000 가격만 추출 하기 위해서 preg_match_all 함수 안에 (.*) 앞뒤로 "closing_price":" 와 ","min_price" 를 넣었습니다.


※ (.*) 값은 앞단어와 뒷단어 사이의 모든 값 이라는 표현입니다.

  함수 안의 따옴표(") 앞에 \ 표시는 따옴표를 특수문자로 사용하기 위함입니다.



위와 같이 적용하면 $price 변수에는 closing_price 의 값이, $volume 변수에는 volume_1day 의 값이 2차 배열로 들어가게 됩니다.

$price 변수와 $volume 변수를 출력을 해보면 아래와 같이 나옵니다.


echo '$price[0][0] : '.$price[0][0];
echo '$price[0][1] : '.$price[0][1];


↓ 출력화면


$price[0][0] 배열에는 앞뒤 단어 포함 되어 들어가고, $price[0][1] 배열에는 앞뒤 단어 제거 후 금액 값만 들어가는 것을 확인 하실 수 있습니다.



저희가 원하는 값은 앞뒤 단어가 없어야 하기 때문에 $price[0][1] 를 사용하여 표를 만들도록 하겠습니다.


preg_match_all 이라는 함수는 설정해 둔 값이 반복 된다면 배열에 계속 들어가게 되어있습니다.

그러므로 $price[0][1] 값은 BTC 최근가격, $price[1][1] 에는 이더리움 최근가격 ..... 해서 $price[11][1] 에는 EOS 까지 총 12개가 들어있습니다.




그럼 $price[0][1] 배열을 반복문을 사용하여 값을 출력 해 보겠습니다.

// 증가하는 변수 $int 생성
$int = 0;
// $price 배열의 갯수보다 적은만큼만 반복
while($int < count($price)){
	// 출력
	echo $price[$int][1];
	// 출력 후 $int 값 1 증가
	$int++;
}

↓ 출력화면


잘 나오고 있습니다. 그럼 마지막으로 $price 와 $volume 값으로 표를 만들어 보도록 하겠습니다. (HTML table 을 사용하여 나타내었습니다.)


// 증가하는 변수 $int 생성
$int = 0;
// 코인명 $coin 배열에 저장(순서에 맞게)
$coin = array('BTC', 'ETH', 'DASH', 'LTC', 'ETC', 'XRP', 'BCH', 'XMR', 'ZEC', 'QTUM', 'BTG', 'EOS');

// 테이블 생성(HTML)
echo "";
// $price 배열의 갯수보다 적은만큼만 반복
while($int < count($price)){
	// 출력
	echo "";
	// 출력 후 $int 값 1 증가
	$int++;
}
// 테이블 종료
echo "
coinpricevolume
".$coin[$int]."".$price[$int][1]."".$volume[$int][1]."
";



↓ 최종 출력화면




※ 스누피는 PHP 로 작성 되어 있습니다. PHP 환경에서 정상 작동 합니다.




1. 스누피 다운로드


다운로드 주소 

http://sourceforge.net/projects/snoopy/files/latest/download



1) 다운로드 후 압축해제



2) 압축 해제한 파일 전부를 서버(웹호스팅) 으로 업로드


업로드가 완료 되었으면, 설치는 끝났습니다. 참 쉽죠?






2. PHP 페이지 내 스누피 불러오기 및 적용.




	// 스누피 인클루드 (경로 주의 하세요)
	include_once './insert/Snoopy.class.php';
	// 스누피 객체 생성
	$snoopy = new snoopy;
	// fetch를 이용하여 스누피 객체에 빗썸 API의 모든 내용 담기
	$snoopy -> fetch("https://api.bithumb.com/public/ticker/all");
	// 담은 값을 $result 객체에 담기
	$result = $snoopy->results;
	
	// 출력
	echo $result;


※ 위엣 값을 입력 하시고 저장하시면 웹에서 API 사이트에 있는 내용을 모두 담아 옵니다.

(출력되는 페이지의 내용이 https://api.bithumb.com/public/ticker/all 사이트의 내용과 동일합니다.)






3. preg_match_all 을 사용하여 원하는 값 추출



빗썸의 BTC 현재가만 분리해서 값을 가져오도록 해보겠습니다.

(빗썸의 현재가는 "closing_price" 의 값을 가져 오면 됩니다.)


▼ 빗썸 API 페이지

API 페이지에 보시면 위의 이미지의 내용들이 아래와 같이 한줄로 들어 있습니다.

{"BTC":{"opening_price":"12633000","closing_price":"11351000","min_price":"10555000","max_price":"12650000","average_price":"11720488.0444","units_traded":"11983.63012161","volume_1day":"11983.63012161","volume_7day":"80223.98672679","buy_price":"11352000","sell_price":"11358000"}




위 내용 중 closing_pricemin_price 사이의 값인 11351000 PREG_MATCH_ALL 을 이용하여 추출 해보겠습니다.


	// 스누피 인클루드 (경로 주의 하세요)
	include_once './insert/Snoopy.class.php';
	// 스누피 객체 생성
	$snoopy = new snoopy;
	// fetch를 이용하여 스누피 객체에 빗썸 API의 모든 내용 담기
	$snoopy -> fetch("https://api.bithumb.com/public/ticker/all");
	// 담은 값을 $result 객체에 담기
	$result = $snoopy->results;
	
	// 출력
	//echo $result;
	
	preg_match_all("|closing_price\":\"(.*)\",\"min_price|U", $result, $name, PREG_SET_ORDER);
	
	echo 'BITHUMB BTC PRICE : '.$name[0][1];


※ preg_match_all 에서 받은 $name 변수는 위와 같이 배열로 출력 하셔야 합니다.


PREG_MATCH_ALL 의 내용을 좀 더 자세히 공부하고 싶으신 분은 아래 링크 참조 하세요!

http://php.net/manual/en/function.preg-match-all.php





4. 결과






거래소 별 최근 거래 내역 API 를 json 형태로 받아 올수 있는 사이트 링크입니다.

아래 API 를 활용 하여 저는 실시간으로 가격 급등, 급락 코인과

거래소별 코인 가격비교 하는 사이트를 만들어 보았습니다.

http://rocketchart.net

저는 파이썬을 이용하지 않고 PHP와 스누피(snoopy)를 이용하여 데이터를 크롤링 하여 DB에 넣은 뒤

뽑아 내었는데요. snoopy 를 이용하여 크롤링 하는 방법은 다음 포스팅에 올리겠습니다.


※ 파이썬으로 API 를 가져 오는 것을 공부 하신다면, 아래 사이트에 잘 정리 되어 있습니다.

https://i.k-june.com/wp/4560


1. 국내 거래소


코인원(coinone) API

https://api.coinone.co.kr/ticker/?currency=all&format=json

빗썸(bithumb) API     

https://api.bithumb.com/public/ticker/all

코빗(korbit) API             

https://api.korbit.co.kr/v1/ticker?currency_pair=btc_krw

코인네스트(Coinnest) API    

https://www.coinnest.co.kr/api/pub/ticker

코인레일(coinrail) API

https://api.coinrail.co.kr/public/last/order?currency=qtum-btc



2. 해외 거래소


bittrex API

https://bittrex.com/api/v1.1/public/getmarketsummaries

poloniex API

https://poloniex.com/public?command=returnTicker

bitfinex API

https://api.bitfinex.com/v1/tickers

kraken API

https://api.kraken.com/0/public/Ticker?pair=BCHXBT,DASHXBT(필요한 코인 추가)

hitbtc API         

https://api.hitbtc.com/api/1/public/ticker

binance API

https://api.binance.com/api/v1/ticker/24hr

quoine API

https://api.quoine.com/products

yobit API         

https://yobit.net/api/3/ticker/eth_btc-lsk_btc(필요한 코인 추가)

liqui API         

https://api.liqui.io/api/3/ticker/trx_btc-ast_btc(필요한 코인 추가)

GDAX API

https://api-public.sandbox.gdax.com/products/ETH-BTC/ticker

bitstamp API

https://www.bitstamp.net/api/v2/ticker/xrpbtc (ltcbtc,ethbtc)

okcoin API

https://www.okcoin.com/api/v1/ticker.do?symbol=btc_usd

Zaif API           

https://api.zaif.jp/api/1/currency_pairs/all

kucoin API

https://api.kucoin.com/v1/market/open/symbols

bitflyer API       

https://api.bitflyer.jp/v1/getticker


※ OKex 거래소는 사이트 접속이 안되어 구하지 못하였습니다.


위의 링크 이동 시, 아래와 같이 json 형태로 보이신다면 정상 입니다.!



+ Recent posts