미니 프로젝트/N Split 시스템

API 테스트 프로그램

시샐 2025. 6. 3. 18:22

사용하는 서비스는 LS 증권의 Open API이다. API를 사용하기 위해서는 LS 증권의 계좌가 필요하다.

상세한 내용은 해당 홈페이지에서 확인할 수 있다. Open API 사용 신청을 하고 개인 고유 토큰(APP Key, Secret Key)를 먼저 발급 받아야 한다.

실제 이용은 다시 API를 이용해서 APP Key, Secret Key로 Access Token을 발급받은 이후, 그 토큰을 이용해서 서비스를 이용할 수 있다.

일단 API의 사용법에 익숙해지기 위해서 간단한 테스트 프로그램을 만들어 보기로 했다.

 

import requests
from pathlib import Path

# App Key, Secret 
APP_KEY = "YOUR_APP_KEY"
APP_SECRET = "YOUR_APP_SECRET"

url = "https://openapi.ls-sec.co.kr:8080/oauth2/token"

headers = {
    "Content-Type": "application/x-www-form-urlencoded"
}

data = {
    "grant_type": "client_credentials",
    "appkey": APP_KEY,
    "appsecretkey": APP_SECRET,
    "scope": "oob"
}
token_path = Path(__file__).resolve().parent.parent / "db" / "access_token.txt"

response = requests.post(url, headers=headers, data=data)

if response.status_code == 200:
    result = response.json()
    access_token = result.get("access_token")
    if access_token:
        with open(token_path, "w") as f:
            f.write(access_token)
        print("Access token 저장 완료.")
    else:
        print("access_token 필드가 응답에 없습니다.")
else:
    print(f"요청 실패: {response.status_code}")
    print(response.text)

 

access_token은 유효기간(익일 오전 7시)이 있으므로 따라서 매일 한 번 자동으로 갱신해서 저장할 필요가 있다.

일단 테스트 단계이므로 여기서 얻을 것을 복사해서 사용해야 할 것 같다.

이제 이 코드로 실행해서 정상 응답이 오면 access_token.txt에 저장된 값을 읽어서 가격 조회 테스트 코드에 넣으면 된다.

 

import requests
import json
import time
from datetime import datetime

# 사전 발급 받은 토큰
ACCESS_TOKEN = "_ACCESS_TOKEN"

# 종목코드 예: 삼성전자 005930
SHCODE = "005930"

BASE_URL = "https://openapi.ls-sec.co.kr:8080"
PATH = "stock/market-data"
URL = f"{BASE_URL}/{PATH}"

headers = {
    "content-type": "application/json; charset=utf-8",
    "authorization": f"Bearer {ACCESS_TOKEN}",
    "tr_cd": "t1101",  # 현재가 API
    "tr_cont": "N",
    "tr_cont_key": "",
}

body = {
    "t1101InBlock": {
        "shcode": SHCODE
    }
}

def get_price():
    response = requests.post(URL, headers=headers, data=json.dumps(body))
    try:
        data = response.json()
        price = data["t1101OutBlock"]["price"]
        name = data["t1101OutBlock"]["hname"]
        now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"[{now}] {name}({SHCODE}): {price}원")
    except Exception as e:
        print("조회 실패:", e)

if __name__ == "__main__":
    while True:
        get_price()
        time.sleep(60)  # 1분 대기
반응형