본 글에서는 한투 Rest API의 초기세팅에 대하여 다루고자 한다.
참고로 이 글의 내용 및 앞으로도 작성할 내용들은 한국투자증권 공식 사이트의 KIS Developers 페이지, 파이썬으로 배우는 오픈API 트레이딩 초급 예제, 파이썬을 이용한 미국주식 자동매매를 참조하여 작성한 내용들이다.
import 할 모듈은 일단 requests와 json이다.
(참고로 추후의 편의를 위해 활용할 기본 함수들은 class에 담을 예정이다. 함수를 따로 떼어 활용하고 싶은 분들은 class 선언을 지우고, 변수마다 있는 self.을 떼고 활용하시면 된다.)
한투에서 제공하는 Rest API 서비스는 한투가 제공하는 url에 접속하여 본인의 자격을 증명하고(APP KEY, APP SECRET), 본인이 원하는 정보를 양식에 맞게 요청하면, 이를 json이라는 원하는 정보가 담긴 형식으로 제공받는 방식이다.
(여기까지가 내가 이해하는 REST API이며 이 이상의 자세한 설명은 불가하니 혹시 이 글을 보고 계신 선배님이 있다면 댓글로 조언 부탁드린다.)
아무튼, requests와 json을 import 한다.
import requests
import json
그 다음은 앞으로 계속해서 반복적으로 필요한 변수들을 미리 지정해준다.
self.APP_KEY = ""
self.APP_SECRET = ""
App_key와 secret에는 본인이 API 발급시 받은 키를 입력하면 된다.
(보안을 위해 개인 스토리지에 txt 작성 후 넘겨주는 방식을 사용하기도 하지만, 나처럼 코드공개를 하는 상황이 아니면 크게 보안에 도움이 되는 방법인지 모르겠으므로 일단 PASS)
URL_BASE는 실전 투자의 경우 https://openapi.koreainvestment.com:9443, 모의투자의 경우는 https://openapivts.koreainvestment.com:29443을 입력한다.
self.headers = {"content-type": "application/json"}
self.body = {"grant_type": "client_credentials",
"appkey": self.APP_KEY,"appsecret": self.APP_SECRET}
self.PATH = "oauth2/tokenP"
다음 행의 headers와 body는 access token을 발급받기 위한 일종의 양식이며, path는 access token이 저장되어있는 URL_BASE의 하위 디렉토리라고 생각하면 편하다.
self.URL = f"{self.URL_BASE}/{self.PATH}"
self.res = requests.post(self.URL, headers=self.headers, data=json.dumps(self.body))
바로 다음행에서 URL_BASE와 PATH를 합치고, 그 다음행에서 requests에 활용했음을 볼 수 있다. 앞으로, header와 body, path만 변경하며 지속 사용될 구조이니, 대략 저런 형태라는 것 정도는 눈에 익히도록 하자.
self.ACCESS_TOKEN = self.res.json()["access_token"]
지금껏 준비한 양식을 request로 요청하여 res 변수에 담았고, 여기서 우리가 필요한 부분을 발취하여 ACCESS_TOKEN이라는 변수에 담았다.
이제, ACCESS_TOKEN이 필요할 때마다 해당 변수를 활용할 수 있다.
import requests
import json
class ki():
def __init__(self):
self.APP_KEY = ""
self.APP_SECRET = ""
self.URL_BASE = "https://openapi.koreainvestment.com:9443"
self.headers = {"content-type": "application/json"}
self.body = {"grant_type": "client_credentials",
"appkey": self.APP_KEY,
"appsecret": self.APP_SECRET}
self.PATH = "oauth2/tokenP"
self.URL = f"{self.URL_BASE}/{self.PATH}"
self.res = requests.post(self.URL, headers=self.headers, data=json.dumps(self.body))
self.ACCESS_TOKEN = self.res.json()["access_token"]
참조한 사이트
한국투자증권 API 문서
파이썬을 이용한 미국주식 자동매매
파이썬으로 배우는 오픈API 트레이딩 초급 예제