Files
finestock/finestock/api_factory.py
T
shinalokandClaude Sonnet 5 361b560624 Add NH(나무) broker integration and fix balance/holds parsing
- 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
2026-08-31 14:35:30 +09:00

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