- finestock/nh/: Nh/NhV 브로커 클래스 추가 (시세/주문/잔고/실시간 WS)
- api_factory.py, path.py: APIProvider.NH/NHV 등록, 도메인/엔드포인트 매핑
- kis.py: get_holds/get_ohlcv_min/get_index_min/get_stock_list 스텁 추가,
oauth() Content-Type 헤더 수정
- get_balance()의 실전 디버깅으로 드러난 버그 수정:
- Hold.total(매입금액)이 존재하지 않는 byn_amt 필드를 참조해 항상 0이던 것을
eal_amt - eal_pls_amt로 계산하도록 수정
- rsp_cd를 "00000" 단일 값으로만 성공 판정해 정상 응답('00218' 연속조회 중,
'00166' 마지막 페이지 등)을 실패로 오판하던 것을 Output_0 존재 여부로 판정
- 응답 헤더의 cts/cts_flag로 연속조회를 재귀 처리해 10건 넘는 보유종목도
전부 합쳐서 반환하도록 구현
- doc/, tests/, example_*.py, setup.py, requirements.txt, CLAUDE.md 등 추가
- README.md에 .env 환경변수 설정 가이드 추가
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01225Lu4Fc2UpMz6QixEcNT8
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
from enum import Enum
|
|
|
|
class APIProvider(Enum):
|
|
EBEST = "EBEST"
|
|
LS = "LS"
|
|
LSV = "LSV"
|
|
KIS = "KIS"
|
|
KISV = "KISV"
|
|
KIWOOM = "KIWOOM"
|
|
KIWOOMV = "KIWOOMV"
|
|
NH = "NH"
|
|
NHV = "NHV"
|
|
|
|
class APIFactory:
|
|
@staticmethod
|
|
def create_api(api_provider: APIProvider):
|
|
if api_provider == APIProvider.EBEST:
|
|
from .ebest import EBest
|
|
return EBest()
|
|
elif api_provider == APIProvider.LS:
|
|
from .ls import LS
|
|
return LS()
|
|
elif api_provider == APIProvider.LSV:
|
|
from .ls import LSV
|
|
return LSV()
|
|
elif api_provider == APIProvider.KIS:
|
|
from .kis import Kis
|
|
return Kis()
|
|
elif api_provider == APIProvider.KISV:
|
|
from .kis import KisV
|
|
return KisV()
|
|
elif api_provider == APIProvider.KIWOOM:
|
|
from .kiwoom import Kiwoom
|
|
return Kiwoom()
|
|
elif api_provider == APIProvider.KIWOOMV:
|
|
from .kiwoom import KiwoomV
|
|
return KiwoomV()
|
|
elif api_provider == APIProvider.NH:
|
|
from .nh import Nh
|
|
return Nh()
|
|
elif api_provider == APIProvider.NHV:
|
|
from .nh import NhV
|
|
return NhV()
|
|
else:
|
|
raise ValueError("Unsupported API provider") |