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 포맷으로 만들어야 한다. 이건 다음 포스팅에서...
'취미로 하는 프로그래밍 > 짭짤한 파이썬' 카테고리의 다른 글
파이썬으로 chatGpt 텔레그램봇을 만들기 (0) | 2023.10.27 |
---|---|
[requests] API를 호출해 보자, 너도 할 수 있어출처 - 2 (0) | 2020.10.09 |
문자열을 위한 함수 (0) | 2020.08.13 |
파이썬 포매팅 (0) | 2020.08.11 |
까먹기 쉬운 필수 자료형 (2) - 슬라이싱 (0) | 2020.08.11 |