2019년에 Crawling 공부하면서 정리를 했었던 내용의 일부입니다. 이때만 해도 정말 관심이 없었는데 지금은 차트를 상당히 좋아하는 제 자신이 대비됩니다. 살펴보겠습니다.
우선 업비트 개발자 센터로 접속한다.
메인페이지 → 고객센터 → Open API 이용안내 → 업비트 개발자 센터
또는 아래 GET STARTED 클릭!
시세 정보 아래 'REST API를 이용한 업비트 시세 수신' 을 활용할 예정이다.
cURL 언어로 소개가 되어있지만 R에서 GET 방식을 활용한 HTTP 요청으로 해결 가능.
시세 정보 조회 방법
- 코인 리스트 조회
- 상장 코인 294개 정보를 조회할 수 있음
- 예시 : 원화 마켓의 비트코인 시세를 알고싶다면 market 파라미터에 KRW-BTC 라고 명시할 수 있음
curl --request GET \ --url 'https://api.upbit.com/v1/ticker?markets=KRW-BTC'
2. 코인별 시세 조회
- 특정 코인의 현재 시세를 조회 가능
curl --request GET \ --url 'https://api.upbit.com/v1/ticker?markets=KRW-BTC'
3. 코인별 캔들 조회
- 분, 일, 주, 월 간격의 시세를 조회 가능
- 예시 : KRW-BTC (원화, 비트코인 마켓)에서 가장 최근으로부터 5분봉을 3개 가져오고 싶다면 다음과 같이 요청가능
curl --request GET \ --url 'https://api.upbit.com/v1/candles/minutes/5?market=KRW-BTC&count=3'
- to 파라미터를 다음처럼 사용 가능
실습
패키지 부르기
> library(tidyverse)
> library(httr)
> library(rvest)
> library(jsonlite)
가격 조회
업비트 개발자 센터의 웹 페이지 주소로 HTTP 요청을 실행하고 Upbit 마켓에 상장된 가상화폐의 코드 목록 조회
> res <- GET(url = 'https://api.upbit.com/v1/market/all')
> print(res)
Response [https://api.upbit.com/v1/market/all]
Date: 2019-10-19 08:29
Status: 200
Content-Type: application/json;charset=UTF-8
Size: 24.1 kB
Json type이므로, fromJSON() 활용하기
> coinList <- res %>% content(as = 'text') %>% fromJSON()
> coinList
market korean_name english_name
1 KRW-BTC 비트코인 Bitcoin
2 KRW-ETH 이더리움 Ethereum
3 BTC-ETH 이더리움 Ethereum
4 BTC-LTC 라이트코인 Litecoin
5 BTC-STRAT 스트라티스 Stratis
비트코인으로 지정하여 관심있는 코인의 가격을 조회
> coinNm <- '비트코인'
# 관심 있는 코인의 코드 확인
> coinList[coinList$korean_name == coinNm, 'market']
[1] "KRW-BTC" "USDT-BTC"
# 비트코인 현재 가격 조회
> res <- GET(url = 'https://api.upbit.com/v1/ticker',
+ query = list(markets = 'KRW-BTC') )
> res
Response [https://api.upbit.com/v1/ticker?markets=KRW-BTC]
Date: 2019-10-19 08:32
Status: 200
Content-Type: application/json;charset=UTF-8
Size: 806 B
데이터를 추출해보자
> coinPrice <- res %>% content(as = 'text') %>% fromJSON()
> coinPrice
market trade_date trade_time trade_date_kst trade_time_kst trade_timestamp opening_price high_price
1 KRW-BTC 20191019 083148 20191019 173148 1.571474e+12 9428000 9470000
low_price trade_price prev_closing_price change change_price change_rate signed_change_price
1 9384000 9451000 9434000 RISE 17000 0.001801993 17000
signed_change_rate trade_volume acc_trade_price acc_trade_price_24h acc_trade_volume
1 0.001801993 0.0840891 5043019650 16618799892 535.4759
acc_trade_volume_24h highest_52_week_price highest_52_week_date lowest_52_week_price
1 1765.195 16840000 2019-06-26 3562000
lowest_52_week_date timestamp
1 2018-12-15 1.571474e+12
이것저것 뽑아보자
> # 최근 거래일시 출력
> as.POSIXct(x = coinPrice$trade_timestamp / 1e3, origin = '1970-01-01')
[1] "2019-10-19 17:31:48 KST"
> # 전일종가
> coinPrice$prev_closing_price
[1] 9434000
>
> # 현재시세
> coinPrice$trade_price
[1] 9451000
>
> # 변동금액
> coinPrice$signed_change_price
[1] 17000
>
> # 변동율
> coinPrice$signed_change_rate
[1] 0.001801993
분, 일, 주, 월 간격 시세 조회
분 단위 URL 마지막에 1, 3, 5, 10, 15, 30, 60, 240을 추가하면 해당 간격으로 조회가능
분 단위 : 'https://api.upbit.com/v1/candles/minutes/1'
일 단위 : 'https://api.upbit.com/v1/candles/days'
주 단위 : 'https://api.upbit.com/v1/candles/weeks'
월 단위 : 'https://api.upbit.com/v1/candles/months'
분 단위로 조회
> res <- GET(url = 'https://api.upbit.com/v1/candles/minutes/1',
+ query = list(market = 'KRW-BTC',
+ count = 200) )
>
>
> res
Response [https://api.upbit.com/v1/candles/minutes/1?market=KRW-BTC&count=200]
Date: 2019-10-19 09:51
Status: 200
Content-Type: application/json;charset=UTF-8
Size: 69.6 kB
> res %>% content(as = 'text') %>% fromJSON() -> df
> head(x = df, n = 10L)
market candle_date_time_utc candle_date_time_kst opening_price high_price low_price trade_price timestamp candle_acc_trade_price candle_acc_trade_volume unit
1 KRW-BTC 2019-10-19T09:51:00 2019-10-19T18:51:00 9428000 9432000 9425000 9428000 1.571479e+12 6800444.43 0.72144258 1
2 KRW-BTC 2019-10-19T09:50:00 2019-10-19T18:50:00 9428000 9430000 9428000 9428000 1.571479e+12 1283538.62 0.13614091 1
3 KRW-BTC 2019-10-19T09:49:00 2019-10-19T18:49:00 9430000 9430000 9430000 9430000 1.571479e+12 1198564.22 0.12710119 1
4 KRW-BTC 2019-10-19T09:48:00 2019-10-19T18:48:00 9440000 9440000 9440000 9440000 1.571479e+12 16001103.97 1.69503220 1
5 KRW-BTC 2019-10-19T09:47:00 2019-10-19T18:47:00 9441000 9441000 9440000 9440000 1.571478e+12 350518.39 0.03713006 1
6 KRW-BTC 2019-10-19T09:46:00 2019-10-19T18:46:00 9441000 9441000 9441000 9441000 1.571478e+12 23924.72 0.00253413 1
7 KRW-BTC 2019-10-19T09:45:00 2019-10-19T18:45:00 9435000 9441000 9433000 9441000 1.571478e+12 13366888.01 1.41660987 1
8 KRW-BTC 2019-10-19T09:44:00 2019-10-19T18:44:00 9434000 9436000 9434000 9436000 1.571478e+12 1851219.86 0.19619795 1
9 KRW-BTC 2019-10-19T09:43:00 2019-10-19T18:43:00 9435000 9436000 9434000 9435000 1.571478e+12 3631427.46 0.38491079 1
10 KRW-BTC 2019-10-19T09:42:00 2019-10-19T18:42:00 9430000 9441000 9430000 9433000 1.571478e+12 20227525.37 2.14437684 1
시:분 추출하기
> str_extract(string = df$candle_date_time_kst,
+ pattern = '\\d{2}:\\d{2}') -> df$trade_time
ggplot을 이용하여 표현
> ggplot(data = df,
+ mapping = aes(x = trade_time,
+ y = trade_price,
+ group = TRUE)) +
+ geom_line() +
+ theme_bw() +
+ theme(axis.text.x = element_text(angle = 90))
비슷하게 다 적용해서 하면 가능. 월단위로 한번 뽑아보자
> res <- GET(url = 'https://api.upbit.com/v1/candles/months',
+ query = list(market = 'KRW-BTC',
+ count = 12))
> res
Response [https://api.upbit.com/v1/candles/months?market=KRW-BTC&count=12]
Date: 2019-10-19 09:55
Status: 200
Content-Type: application/json;charset=UTF-8
Size: 4.63 kB
> res %>% content(as = 'text') %>% fromJSON() -> df
> head(x = df, n = 10L)
market candle_date_time_utc candle_date_time_kst opening_price high_price low_price trade_price timestamp candle_acc_trade_price candle_acc_trade_volume first_day_of_period
1 KRW-BTC 2019-10-01T00:00:00 2019-10-01T09:00:00 9945000 10443000 9295000 9435000 1.571479e+12 6.707671e+11 68204.19 2019-10-01
2 KRW-BTC 2019-09-01T00:00:00 2019-09-01T09:00:00 11612000 13014000 9268000 9945000 1.569888e+12 1.748379e+12 152291.29 2019-09-01
3 KRW-BTC 2019-08-01T00:00:00 2019-08-01T09:00:00 11956000 14570000 11380000 11612000 1.567296e+12 3.661279e+12 283765.53 2019-08-01
4 KRW-BTC 2019-07-01T00:00:00 2019-07-01T09:00:00 13599000 15537000 10880000 11957000 1.564618e+12 6.321462e+12 487170.94 2019-07-01
5 KRW-BTC 2019-06-01T00:00:00 2019-06-01T09:00:00 10383000 16840000 9172000 13598000 1.561939e+12 4.981182e+12 395517.39 2019-06-01
6 KRW-BTC 2019-05-01T00:00:00 2019-05-01T09:00:00 6117000 10815000 6107000 10383000 1.559347e+12 3.225143e+12 364387.76 2019-05-01
7 KRW-BTC 2019-04-01T00:00:00 2019-04-01T09:00:00 4661000 6566000 4621000 6117000 1.556669e+12 1.666238e+12 286261.85 2019-04-01
8 KRW-BTC 2019-03-01T00:00:00 2019-03-01T09:00:00 4240000 4680000 4120000 4661000 1.554077e+12 9.711789e+11 220183.66 2019-03-01
9 KRW-BTC 2019-02-01T00:00:00 2019-02-01T09:00:00 3775000 4554000 3735000 4240000 1.551398e+12 6.131763e+11 149447.01 2019-02-01
10 KRW-BTC 2019-01-01T00:00:00 2019-01-01T09:00:00 4200000 4577000 3730000 3775000 1.548979e+12 6.255651e+11 152628.16 2019-01-01
월-일 추출하고 그래프로 표현
> str_extract(string = df$candle_date_time_kst,
+ pattern = '(?<=-)\\d{2}-\\d{2}') -> df$trade_days
> ggplot(data = df,
+ mapping = aes(x = trade_days,
+ y = trade_price,
+ group = TRUE)) +
+ geom_line() +
+ theme_bw() +
+ theme(axis.text.x = element_text(angle = 90))
<Copyright 2019. hotorch. All rights reserved.>
'Programming > R' 카테고리의 다른 글
[Crawling] PDF파일 R로 간단하게 크롤링해보기 (0) | 2021.08.15 |
---|---|
[Crawling] 공공데이터 포털 : 한국환경공단 대기오염정보 open api 수집 (0) | 2021.08.06 |
[Crawling] KBReport 2019 정규시즌 투수 Stat Crawling (0) | 2021.07.22 |
R 정규표현식 기본문법 (0) | 2021.07.17 |
[Crawling] R stringr 패키지 사용법 (0) | 2021.07.06 |