55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
import os
|
|
import sys
|
|
import requests
|
|
from pathlib import Path
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv(Path(__file__).parent.parent / ".env")
|
|
AUTH_KEY = os.environ.get("KRX_API_KEY", "")
|
|
if not AUTH_KEY:
|
|
print("❌ KRX_API_KEY가 .env에 설정되지 않았습니다.")
|
|
sys.exit(1)
|
|
|
|
print("=== KRX OTP 테스트 ===")
|
|
|
|
# Step 1: OTP 발급
|
|
otp_params = {
|
|
"bld": "dbms/MDC/STAT/standard/MDCSTAT02301",
|
|
"name": "fileDown",
|
|
"filetype": "json",
|
|
"url": "dbms/MDC/STAT/standard/MDCSTAT02301",
|
|
"trdDd": "20260304",
|
|
"AUTH_KEY": AUTH_KEY
|
|
}
|
|
|
|
print("OTP 요청 중...")
|
|
otp_res = requests.post(
|
|
"https://openapi.krx.co.kr/contents/COM/GenerateOTP.cmd",
|
|
data=otp_params
|
|
)
|
|
print(f"OTP 상태코드: {otp_res.status_code}")
|
|
print(f"OTP 응답 전체: [{otp_res.text}]")
|
|
|
|
if otp_res.status_code != 200 or not otp_res.text.strip():
|
|
print("❌ OTP 발급 실패 — 여기서 중단")
|
|
exit(1)
|
|
|
|
# Step 2: 데이터 요청
|
|
print("\n데이터 요청 중...")
|
|
data_res = requests.post(
|
|
"https://openapi.krx.co.kr/contents/COM/GetData.cmd",
|
|
data={"code": otp_res.text}
|
|
)
|
|
print(f"데이터 상태코드: {data_res.status_code}")
|
|
|
|
try:
|
|
data = data_res.json()
|
|
items = data.get("OutBlock_1") or data.get("output") or []
|
|
print(f"✅ 종목 수: {len(items)}개")
|
|
if items:
|
|
print(f"첫 번째 항목 키: {list(items[0].keys())}")
|
|
print(f"첫 번째 종목: {items[0]}")
|
|
except Exception as e:
|
|
print(f"❌ JSON 파싱 실패: {e}")
|
|
print(f"응답 내용: {data_res.text[:500]}")
|