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]}")