본문 바로가기
카테고리 없음

[코딩-주식]한국투자증권 API문서 따라하기 02

by tistorymaster 2024. 9. 8.

▶ [국내주식]기본시세>주식현재가 시세

1. API 정보 및 요청 파라메터 분석

2. 현재가 조회 함수

def get_current_price(code="005930"):
    """현재가 조회"""
    while True:
        PATH = "uapi/domestic-stock/v1/quotations/inquire-price"
        URL = f"{URL_BASE}/{PATH}"
        headers = {"Content-Type":"application/json", 
                "authorization": f"Bearer {ACCESS_TOKEN}",
                "appkey":APP_KEY,
                "appsecret":APP_SECRET,
                "tr_id":"FHKST01010100"}
        params = {
        "fid_cond_mrkt_div_code":"J",
        "fid_input_iscd":code,
        }
        time.sleep(1)
        res = requests.get(URL, headers=headers, params=params)
        result = res.json()
        if not result:
            print("[get_current_price:현재가 조회] 에러")
            time.sleep(0.3)
            continue
        else:
            print('[get_current_price:현재가 조회]가 정상적으로 완료되었습니다.')
            print(result)  # 응답값 확인용
            break

    return int(res.json()['output']['stck_prpr'])

 

3. 확인 코드

print("# 1. 시작")
import requests
import json
import time
import ki_config  # 개인정보에 대한 별도화일 링크용

################################################################################################################################## 
'''
한국투자증권에 접속하기 위한 보안승인 코드 (공통)
'''
################################################################################################################################## 
def get_access_token():
    """토큰 발급"""
    while True:
        headers = {"content-type":"application/json"}
        body = {"grant_type":"client_credentials",
        "appkey":APP_KEY, 
        "appsecret":APP_SECRET}
        PATH = "oauth2/tokenP"
        URL = f"{URL_BASE}/{PATH}"
        res = requests.post(URL, headers=headers, data=json.dumps(body))
        '''
        print(res.json())
        {
        'access_token':'....'                                # 발급토큰
        'access_token_token_expired': '2024-00-00 00:00:00', # 유효기간
        'token_type': 'Bearer',                              # API 호출 시, 접근토큰유형 "Bearer" 입력. ex) "Bearer eyJ...."
        'expires_in': 86400                                  # 유효기간(초)
        }
        '''
        time.sleep(0.2)
        try:
            ACCESS_TOKEN = res.json()["access_token"]
            ACCESS_TOKEN_EXPIRED = res.json()["access_token_token_expired"]
            print('# 2. 접근토큰 발급 완료')
            return ACCESS_TOKEN, ACCESS_TOKEN_EXPIRED
        except:
            print("접근 토큰 발급이 불가능합니다")
            print(res.json())
            time.sleep(1)
################################################################################################################################## 
def get_current_price(code="005930"):
    """현재가 조회"""
    while True:
        PATH = "uapi/domestic-stock/v1/quotations/inquire-price"
        URL = f"{URL_BASE}/{PATH}"
        headers = {"Content-Type":"application/json", 
                "authorization": f"Bearer {ACCESS_TOKEN}",
                "appkey":APP_KEY,
                "appsecret":APP_SECRET,
                "tr_id":"FHKST01010100"}
        params = {
        "fid_cond_mrkt_div_code":"J",
        "fid_input_iscd":code,
        }
        time.sleep(1)
        res = requests.get(URL, headers=headers, params=params)
        result = res.json()
        if not result:
            print("[get_current_price:현재가 조회] 에러")
            time.sleep(0.3)
            continue
        else:
            print('[get_current_price:현재가 조회]가 정상적으로 완료되었습니다.')
            print(result)
            break

    return int(res.json()['output']['stck_prpr'])
##################################################################################################################################
'''
한국투자증권 주식투자 자동매매 프로그램 시작
'''
APP_KEY = ki_config.APP_KEY
APP_SECRET = ki_config.APP_SECRET
URL_BASE = ki_config.URL_BASE

# CANO = ki_config.CANO
# ACNT_PRDT_CD = ki_config.ACNT_PRDT_CD

ACCESS_TOKEN, ACCESS_TOKEN_EXPIRED = get_access_token()
get_current_price()

#화면 출력(라인 수정)

(tensor37) F:\python>C:/Users/webti/anaconda3/envs/tensor37/python.exe f:/python/STOCKS/Korea_Investment/koreainvest_test2.py
# 1. 시작
# 2. 접근토큰 발급 완료
[get_current_price:현재가 조회]가 정상적으로 완료되었습니다.
{
'output': 
	{'iscd_stat_cls_code': '55', 
	'marg_rate': '20.00', 
	'rprs_mrkt_kor_name': 'KOSPI200', 
	'bstp_kor_isnm': '전기.전자', 
	'temp_stop_yn': 'N', 
	'oprc_rang_cont_yn': 'N', 
	'clpr_rang_cont_yn': 'N', 
	'crdt_able_yn': 'Y', 
	'grmn_rate_cls_code': '40', 
	'elw_pblc_yn': 'Y', 
	'stck_prpr': '68900', # 현재가 .............................!!
	'prdy_vrss': '-100', 
	'prdy_vrss_sign': '5', 
	'prdy_ctrt': '-0.14', 
	'acml_tr_pbmn': '1309833642247', 
	'acml_vol': '19022299', 
	'prdy_vrss_vol_rate': '74.05', 
	'stck_oprc': '69100', 
	'stck_hgpr': '69700', 
	'stck_lwpr': '68000', 
	'stck_mxpr': '89700', 
	'stck_llam': '48300', 
	'stck_sdpr': '69000',
	'wghn_avrg_stck_prc': '68859.01', 
	'hts_frgn_ehrt': '55.67', 
	'frgn_ntby_qty': '-2103728', 
	'pgtr_ntby_qty': '-635846', 
	'pvt_scnd_dmrs_prc': '71933', 
	'pvt_frst_dmrs_prc': '70466', 
	'pvt_pont_val': '69733', 
	'pvt_frst_dmsp_prc': '68266', 
	'pvt_scnd_dmsp_prc': '67533', 
	'dmrs_val': '70100', 
	'dmsp_val': '67900', 
	'cpfn': '7780', 
	'rstc_wdth_prc': '20700', 
	'stck_fcam': '100', 
	'stck_sspr': '53820', 
	'aspr_unit': '100', 
	'hts_deal_qty_unit_val': '1', 
	'lstn_stcn': '5969782550', 
	'hts_avls': '4113180', 
	'per': '32.33', 
	'pbr': '1.32', 
	'stac_month': '12', 
	'vol_tnrt': '0.32', 
	'eps': '2131.00', 
	'bps': '52002.00', 
	'd250_hgpr': '88800', 
	'd250_hgpr_date': '20240711', 
	'd250_hgpr_vrss_prpr_rate': '-22.41', 
	'd250_lwpr': '66000', 
	'd250_lwpr_date': '20231006', 
	'd250_lwpr_vrss_prpr_rate': '4.39', 
	'stck_dryy_hgpr': '88800', 
	'dryy_hgpr_vrss_prpr_rate': '-22.41', 
	'dryy_hgpr_date': '20240711', 
	'stck_dryy_lwpr': '68000', 
	'dryy_lwpr_vrss_prpr_rate': '1.32', 
	'dryy_lwpr_date': '20240906', 
	'w52_hgpr': '88800', 
	'w52_hgpr_vrss_prpr_ctrt': '-22.41', 
	'w52_hgpr_date': '20240711', 
	'w52_lwpr': '66000', 
	'w52_lwpr_vrss_prpr_ctrt': '4.39', 
	'w52_lwpr_date': '20231006', 
	'whol_loan_rmnd_rate': '0.15', 
	'ssts_yn': 'N', 
	'stck_shrn_iscd': '005930', 
	'fcam_cnnm': '100', 
	'cpfn_cnnm': '7,780 억', 
	'frgn_hldn_qty': '3323676105', 
	'vi_cls_code': 'N', 
	'ovtm_vi_cls_code': 'N', 
	'last_ssts_cntg_qty': '10138', 
	'invt_caful_yn': 'N', 
	'mrkt_warn_cls_code': '00', 
	'short_over_yn': 'N', 
	'sltr_yn': 'N'
	}, 
'rt_cd': '0', 
'msg_cd': 'MCA00000', 
'msg1': '정상처리 되었습니다.'
}