한국투자증권은 주식 시세 조회 및
주문까지 지원하는 오픈API를 제공합니다. 타사처럼 원도우에
제한된 환경도 아니고 http 프로토콜로 접속하고 정보를 얻기 때문에 프로그램 언어 및 OS 환경의 제약을 받지 않습니다.
여기 에 API 문서와 샘플 코드도
있지만 주식 전종목에 대한 하루치 현재가와 거래량을 가져 오는 파이썬 코드를 작성합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | import requests
import json
import csv
import time
import datetime
import sys
url_token = "https://openapi.koreainvestment.com:9443/oauth2/tokenP"
data = {"grant_type": "client_credentials",
"appsecret": "6S..yQ=",
"appkey": "PSBv..5KCmKj"}
headers = {"Content-Type": "application/json; charset=UTF-8",}
res = requests.post(url_token, data=json.dumps(data))
rescode = res.status_code
if rescode == 200:
json_data = json.loads(res.text)
else:
print("error code " + str(rescode) + " | " + res.text)
sys.exit("Getting token fails")
url = "https://openapi.koreainvestment.com:9443/uapi/domestic-stock/v1/quotations/inquire-ccnl"
headers = {'authorization' : 'Bearer ...',
'appkey' : 'PSBvsN..CmKj',
'appsecret' : '6S24....zGyQ=',
'tr_id' : 'FHKST01010100'}
headers['authorization'] = 'Bearer ' + json_data['access_token']
params = {'FID_COND_MRKT_DIV_CODE' : 'J',
'FID_INPUT_ISCD' : '950160'}
today = datetime.datetime.today()
today_formatted = today.strftime('%Y%m%d')
with open('data_5732_20230215.csv', 'rt', encoding='euc-kr') as csvfile:
rows = csv.reader(csvfile, delimiter=',')
next(rows) # skip header
for r in rows:
print(r[0], r[1])
params['FID_INPUT_ISCD'] = r[0]
time.sleep(0.3)
res = requests.get(url, headers=headers, params=params)
rescode = res.status_code
if rescode == 200:
json_data = json.loads(res.text)
else:
print("error code " + str(rescode) + " | " + res.text)
break
print(str(today_formatted), json_data['output']['stck_prpr'], json_data['output']['acml_vol'])
|
8줄
: API를 웹페이지에서 신청하면 appsecret와 appkey를 바로 구하지만 API 실행에는 OAuth도 추가로 필요합니다. API에 따라 웹소켓과 REST 방식으로 나뉘는데 국내 주식 시세는 REST 방식이고 OAuth 인증에 접근토큰이 필요합니다. 법인이 아닌 개인을 위한 접근토큰
유효기간은 만 24시간입니다. url_token는 이 접근토큰을
위한 URL입니다.
9,10,11줄: 접근토근을 얻기 위한 grant_type는 client_credentials이고 appsecret와 appkey는 웹페이지에서 신청 즉시 구합니다.
12줄
: HTTP POST를 위한 header입니다.
13줄 : 파이썬의 requests package를 이용해서 POST합니다.
post의 data인수에 위에서 정의한 data를
json.dumps()를 통해 올립니다.
15,16줄 : POST가 성공적이면 결과를 json 형식으로 바꿉니다.
21줄 : 주식 현재가를 얻기 위한 URL입니다.
25줄 : 주식현재가 시세 https://apiportal.koreainvestment.com/apiservice/apiservice-domestic-stock-quotations
를 위한 tr_id입니다.
26줄
: authorization를 앞에서 얻은 접근토큰으로 변경합니다.
28,
29줄 : 주식현재가 시세 https://apiportal.koreainvestment.com/apiservice/apiservice-domestic-stock-quotations
에 나온 대로 query parameter를 설정합니다.
31,
32줄: 오늘 날짜를 2023-03-19 형태로
변환합니다.
33줄
: 파일 data_5732_20230215.csv는 상장된
주식의 종목코드인데 krx 홈피 http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201010105
에서 구합니다.
37줄: 첫번째 열이 종목코드, 두번째가 종목명입니다.
38줄: FID_INPUT_ISCD를 6자리 종목코드로 지정합니다.
40줄: requests.get로 API를 호출합니다. 인수로
headers와 params를 사용합니다.
43줄: json 형식으로 변환한 json_data를 구합니다.
47줄: 현재가는 json_data[‘output’][‘stck_prpr’]이고
거래량은 json_data[‘output’][‘acml_vol’]입니다.