업비트에서 코인이름으로 가격조회하기 실급

 

지난번에 이어서

 

업비트의 코인이름으로 정보/가격 조회하는 프로그래밍을 해보자,

귀찮은 관계로 통째로 소스를 붙이고 주석으로 설명해두었다

 

import requests


#### 모든 코인들의 코드명을 알아보자

url = "https://api.upbit.com/v1/market/all"

response = requests.get(url)
market_list = response.json()

## 모든 코인들의 json결과
print (market_list)


## {코인이름 : 코드명}을 담아낼 dictionary 그릇만들기
market_dict = {}

## 빈 그릇에 json의 코인이름:코드명만 뽑아 dictionary 형태로 넣는다
for i in market_list:
    if i['market'].split("-")[0] == "KRW":  # KRW(한화) 가격정보의 코드명만 가져온다
        market_dict[i['korean_name']]=i['market']  #KRW 조건의 코인이름:코드명을 dictionary로 저장
        print (i['market'])
    else:                       # KRW가 아닌 코드명은 버린다
        print ('ignore')
print (market_dict)

######### 한글만 넣어도 가격이 나오는 API 처리 ###########

coin_name = "리플"  #여기다가 업비트에서 지원하는 코드명을 변수로 쓰면, 매칭된 코드명으로 코인정보+가격을 조회해 올 것이다.

coin_code_name = market_dict[coin_name]
coin_info_url = "https://api.upbit.com/v1/ticker?markets=" + str(coin_code_name)
coin_info_response = requests.get(coin_info_url)
coin_info_result = coin_info_response.json()[0]

print ("정보: ", coin_info_result)
print ("시작가: ", coin_info_result['opening_price'])
print ("현재거래가: ", coin_info_result['trade_price'])

API get method를 알아보자,

개발자가 아니어도 유용하게 API를 활용할수 있는 아주 좋은 방법,

 

requests와 json만 다룬다면 여러가지 API를 get method로 잘 조회해 올 수 있다.

우선 requests부터,

 

준비물 : python3 이상과, requests 모듈

API : 엄청 친절한 open api 코인거래소 업비트 오픈 API로 실습해보겠다.

docs.upbit.com/reference#%EC%8B%9C%EC%84%B8-%EC%A2%85%EB%AA%A9-%EC%A1%B0%ED%9A%8C

 

업비트 개발자 센터

업비트 Open API 사용을 위한 개발 문서를 제공 합니다.업비트 Open API 사용하여 다양한 앱과 프로그램을 제작해보세요.

docs.upbit.com

이보다도 친절하고 멋진 API 센터가 있을까

 

 

 

우선 처음은 아래의 api url

https://api.upbit.com/v1/market/all

업비트에서 다루는 모둔 코인과 해당 코인모델코드명 JSON 리스트이다.

 

모듈은 import requests, 별도로 pip 설치 하지 않더라도

python3 이상에는 기본 내장되어 있는듯 하다

 

 

이렇게 해도 되고,

import requests
url = "https://api.upbit.com/v1/market/all"


response = requests.get(url)
print (response.json)

#실행결과 >>[{'market': 'KRW-BTC', 'korean_name': '비트코인', 'english_name': 'Bitcoin'}, {'market': 'KRW-ETH', 'korean_name': '이더리움', 'english_name': 'Ethereum'}, {'market': 'BTC-ETH', 'korean_name': '이더리움', 'english_name': 'Ethereum'}, {'market': 'BTC-LTC', 'korean_name': '라이트코인

 

이렇게 해도된다, 형태는 다르지만 결과는 똑같다 절차상 무슨 큰차이가 있는진 모르겠다.

header가 필요한 경우는 requests.request("GET", url, header="헤더값")이런식으로 넣을 수 있다. 

import requests
url = "https://api.upbit.com/v1/market/all"

response2 = requests.request("GET", url)
print (response2.json())

#실행결과 >>[{'market': 'KRW-BTC', 'korean_name': '비트코인', 'english_name': 'Bitcoin'}, {'market': 'KRW-ETH', 'korean_name': '이더리움', 'english_name': 'Ethereum'}, {'market': 'BTC-ETH', 'korean_name': '이더리움', 'english_name': 'Ethereum'}, {'market': 'BTC-LTC', 'korean_name': '라이트코인

 

그런데 사실 이 정도의 GET method 조회는 구글 크롬같은 브라우저에서 URL만 넣으면 그냥 나온다.

아래의 주소로 크롬에서 열면 위 결과값과 똑같이 페이지에 뿌려진다.

https://api.upbit.com/v1/market/all

 

그럼 python으로 request하면 장점은 무엇인가?

저 json 정보를 가져온 다음 원하는대로 파싱할수 있다는 것이다.

예를들어 json 두번째 항목인 '이더리움'정보만 보고 싶다면,

 

이렇게 print (response.josn[1])을 하면 (첫번째가 [0] 두번째가 [1]이다) 두번째 json그룹인 이더리움 정보만 나온다.

import requests
url = "https://api.upbit.com/v1/market/all"


response = requests.get(url)
print (response.json[1])

#실행결과>>{'market': 'KRW-ETH', 'korean_name': '이더리움', 'english_name': 'Ethereum'}

 

이더리움의 영어 명칭만 뽑아내고 싶다면?

이렇게 문자열 [1]로 들어간 depth에서 ['english_name']를 지정해주면 해당 value를 받을 수 있다.

json은 아주 심플한 key:value 형태로 ['key 명칭']만 넣어주면 짝지어진 value를 뽑을수 있다

import requests
url = "https://api.upbit.com/v1/market/all"


response = requests.get(url)
print (response.json[1]['engilish_name'])

#실행결과>> Ethereum

 

자 그러면 정말 중요한 실습예제다,

나는 업비트의 비트코인이나 이더리움 가격을 원하는대로 조회해 보고 싶다면 어떻게 해야할까,

우선 아래의 업비트 코인별 정보 ticker 현재가 조회 API URL을 사용한다

https://api.upbit.com/v1/ticker?markets="코인모델명"

자 그런데 'https://api.upbit.com/v1/ticker?markets=비트코인' 이런식으로는 값이 나오질 않는다. 404에러가 난다

docs.upbit.com/reference#%EC%8B%9C%EC%84%B8-ticker-%EC%A1%B0%ED%9A%8C

 

업비트 개발자 센터

업비트 Open API 사용을 위한 개발 문서를 제공 합니다.업비트 Open API 사용하여 다양한 앱과 프로그램을 제작해보세요.

docs.upbit.com

개발자 센터의 python 예제코드를 보면 알수 있듯이, 각 코인별 모델코드를 사용해야한다.

이게 바로 위에서 사용한 api.upbit.com/v1/market/all에서 나오는 모델코드명이다.

 

 

그러니 한글로 '비트코인', '이더리움', '라이트코인'만 넣어도 뚝딱 가격이 나오게 하고싶으면,

api.upbit.com/v1/market/all에서 한글명에 key로 매핑된 '모델코드명'으로 변환하여, markets 파라미터 값으로 넣으면된다.  

 

모델코드명으로 변환하려면 일단 api.upbit.com/v1/market/all에서 수집하여 새로운 {한글명:모델코드명} 형태의 dictionnary 포맷으로 만들어야 한다. 이건 다음 포스팅에서...

1. 타겟 문자열의 개수 세기,  (  ).count('찾는문자열)

 print("hobby".count('b)) => 2

혹은

a = "hobby"

print(a.count(''b)) = > 2

 

어디에 활용할지는 고민

 

2. 타겟 문자열의 위치 알려주기 (find)

sentence = "python is best choice"

print (sentence.find('best')) => 10 (0부터 시작)

 

3. 타겟 문자열의 위치 알려주기 (index)

sentence = "python is best choice"

print (sentence.index('best')) => 10 (0부터 시작)

 

find와 차이점은 거의 없지만,

find는 없는 문자를 찾으면 -1로 정상반환,

index는 에러를 발생시킨다. 뭐가 더 스탠다드일까?

 

4. 공백 지우기 (strip, lstrip. rstrip)

sentence = '   daniel  '

print (sentence.strip()) => 'daniel'  #양쪽 여백 지우기

print (sentence.lstrip()) ='daniel  '  #왼쪽 여백 지우기

print (sentence.rstrip()) =  '   daniel' #오른쪽 여백 지우기

 

양쪽 여백 지우기는 매우 자주할것 같다. 데이터 정규화에 필수

 

 

5. 대문자 소문자 바꾸기 (upper, lower)

sentence1 = 'you can do it'

sentence2 = 'You Can Do It'

 

print(sentence1.upper()) => "YOU CAN DO IT"

print(sentence2.lower()) => "you can do it"

 

6. 문자열 삽입 (join)

a.join('bbb') # 형태

 

a = '_x_'  #삽입할 문자열

'bbb' = #삽입될 문자열

print (a.join('bbb')) = b_x_b_x_b

 

그런데 join은 어디다 쓰는 경우가 있을까? 

스펠 단위로 문자열을 끼워넣는 경우가...

 

 

그리고 굉장이 자주 사용할수 밖에 없는 중요한 함수

 

7. 문자열 바꾸기 (replace)

sentence = 'life is good'

print ( sentence.replace('life', 'money') ) = >  money is good

 

8. 문자열 나누기 (split)

sentence = 'life is good'

print (sentence.split(' ')) => ['life', 'is', 'good'] list로 분리된다.

print (sentence.split(' ')[1]) =>  'is' (list중 두번째[1] 선택하기)

 

sentence = 'life is good'

splited = sentence.split(' ')

for word in splited:

 print (word)

 

=> life

     is

     good

 

for문으로 단어별 분리됨

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts