krxon 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
krxon-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,173 @@
1
+ Metadata-Version: 2.4
2
+ Name: krxon
3
+ Version: 0.1.0
4
+ Summary: KRX (Korea Exchange) Open API Python SDK - auto-generated by krxon
5
+ Project-URL: Homepage, https://github.com/seungdols/krxon
6
+ Project-URL: Repository, https://github.com/seungdols/krxon
7
+ Project-URL: Issues, https://github.com/seungdols/krxon/issues
8
+ Author: seungdols
9
+ License: MIT
10
+ Keywords: api,finance,korea-exchange,krx,sdk
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: Financial and Insurance Industry
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Office/Business :: Financial
21
+ Requires-Python: >=3.10
22
+ Requires-Dist: httpx>=0.24.0
23
+ Description-Content-Type: text/markdown
24
+
25
+ # krxon
26
+
27
+ CLI tool for the KRX (Korea Exchange) Open API.
28
+
29
+ ## Features
30
+
31
+ - **fetch** - Query KRX market data from the command line
32
+ - **generate** - Generate Python and TypeScript SDK clients from the API spec
33
+
34
+ ## Installation
35
+
36
+ ### Cargo (Rust)
37
+
38
+ ```bash
39
+ cargo install krxon
40
+ ```
41
+
42
+ ### Python SDK (PyPI)
43
+
44
+ ```bash
45
+ pip install krxon
46
+ ```
47
+
48
+ ### TypeScript SDK (npm)
49
+
50
+ ```bash
51
+ npm install @krxon/krx
52
+ ```
53
+
54
+ ### From source
55
+
56
+ ```bash
57
+ git clone https://github.com/seungdols/krxon.git
58
+ cd krxon
59
+ cargo build --release
60
+ ```
61
+
62
+ ## Getting Started
63
+
64
+ ### Prerequisites
65
+
66
+ - A KRX Open API key from [openapi.krx.co.kr](https://openapi.krx.co.kr)
67
+
68
+ ### Setup
69
+
70
+ ```bash
71
+ # Store your API key
72
+ krxon init
73
+
74
+ # Or set via environment variable
75
+ export KRX_API_KEY=your_key_here
76
+ ```
77
+
78
+ ### Usage
79
+
80
+ #### Fetch Index Data
81
+
82
+ ```bash
83
+ krxon fetch index krx --date 20250301
84
+ krxon fetch index kospi --date 20250301
85
+ krxon fetch index kosdaq --date 20250301
86
+ krxon fetch index derivatives --date 20250301
87
+ ```
88
+
89
+ #### Fetch Stock Data
90
+
91
+ ```bash
92
+ krxon fetch stock kospi --date 20250301
93
+ krxon fetch stock kosdaq --date 20250301
94
+ krxon fetch stock kospi-info --date 20250301
95
+ krxon fetch stock kosdaq-info --date 20250301
96
+
97
+ # Filter by ISIN code
98
+ krxon fetch stock kospi --date 20250301 --isin KR7005930003
99
+ ```
100
+
101
+ #### Fetch ETP Data
102
+
103
+ ```bash
104
+ krxon fetch etp etf --date 20250301
105
+ krxon fetch etp etn --date 20250301
106
+
107
+ # Filter by ISIN code
108
+ krxon fetch etp etf --date 20250301 --isin KR7069500007
109
+ ```
110
+
111
+ #### Fetch Derivatives Data
112
+
113
+ ```bash
114
+ # Futures
115
+ krxon fetch derivatives futures --date 20250301
116
+ krxon fetch derivatives stock-futures-kospi --date 20250301
117
+ krxon fetch derivatives stock-futures-kosdaq --date 20250301
118
+
119
+ # Options
120
+ krxon fetch derivatives options --date 20250301
121
+ krxon fetch derivatives stock-options-kospi --date 20250301
122
+ krxon fetch derivatives stock-options-kosdaq --date 20250301
123
+
124
+ # Table output
125
+ krxon fetch derivatives futures --date 20250301 --output table
126
+ ```
127
+
128
+ #### Generate SDK Clients
129
+
130
+ ```bash
131
+ # Generate Python SDK
132
+ krxon generate python --out ./sdk/python
133
+
134
+ # Generate TypeScript SDK
135
+ krxon generate typescript --out ./sdk/typescript
136
+ ```
137
+
138
+ ### Common Options
139
+
140
+ - `--date` (required): Base date in YYYYMMDD format
141
+ - `--key`: API key (overrides `KRX_API_KEY` env var)
142
+ - `--output`: `json` (default) or `table`
143
+
144
+ ## SDK Usage
145
+
146
+ ### Python
147
+
148
+ ```python
149
+ from krx import KrxClient
150
+
151
+ client = KrxClient(api_key="your_key")
152
+ records = client.get_kospi_stock_daily(basDd="20250301")
153
+ for r in records:
154
+ print(r["ISU_NM"], r["TDD_CLSPRC"])
155
+ ```
156
+
157
+ ### TypeScript
158
+
159
+ ```typescript
160
+ import { KrxClient } from "@krxon/krx";
161
+
162
+ const client = new KrxClient({ apiKey: "your_key" });
163
+ const records = await client.getKospiStockDaily("20250301");
164
+ records.forEach((r) => console.log(r.ISU_NM, r.TDD_CLSPRC));
165
+ ```
166
+
167
+ ## Project Structure
168
+
169
+ See [AGENT.md](AGENT.md) for the full project structure and conventions.
170
+
171
+ ## License
172
+
173
+ MIT
krxon-0.1.0/README.md ADDED
@@ -0,0 +1,149 @@
1
+ # krxon
2
+
3
+ CLI tool for the KRX (Korea Exchange) Open API.
4
+
5
+ ## Features
6
+
7
+ - **fetch** - Query KRX market data from the command line
8
+ - **generate** - Generate Python and TypeScript SDK clients from the API spec
9
+
10
+ ## Installation
11
+
12
+ ### Cargo (Rust)
13
+
14
+ ```bash
15
+ cargo install krxon
16
+ ```
17
+
18
+ ### Python SDK (PyPI)
19
+
20
+ ```bash
21
+ pip install krxon
22
+ ```
23
+
24
+ ### TypeScript SDK (npm)
25
+
26
+ ```bash
27
+ npm install @krxon/krx
28
+ ```
29
+
30
+ ### From source
31
+
32
+ ```bash
33
+ git clone https://github.com/seungdols/krxon.git
34
+ cd krxon
35
+ cargo build --release
36
+ ```
37
+
38
+ ## Getting Started
39
+
40
+ ### Prerequisites
41
+
42
+ - A KRX Open API key from [openapi.krx.co.kr](https://openapi.krx.co.kr)
43
+
44
+ ### Setup
45
+
46
+ ```bash
47
+ # Store your API key
48
+ krxon init
49
+
50
+ # Or set via environment variable
51
+ export KRX_API_KEY=your_key_here
52
+ ```
53
+
54
+ ### Usage
55
+
56
+ #### Fetch Index Data
57
+
58
+ ```bash
59
+ krxon fetch index krx --date 20250301
60
+ krxon fetch index kospi --date 20250301
61
+ krxon fetch index kosdaq --date 20250301
62
+ krxon fetch index derivatives --date 20250301
63
+ ```
64
+
65
+ #### Fetch Stock Data
66
+
67
+ ```bash
68
+ krxon fetch stock kospi --date 20250301
69
+ krxon fetch stock kosdaq --date 20250301
70
+ krxon fetch stock kospi-info --date 20250301
71
+ krxon fetch stock kosdaq-info --date 20250301
72
+
73
+ # Filter by ISIN code
74
+ krxon fetch stock kospi --date 20250301 --isin KR7005930003
75
+ ```
76
+
77
+ #### Fetch ETP Data
78
+
79
+ ```bash
80
+ krxon fetch etp etf --date 20250301
81
+ krxon fetch etp etn --date 20250301
82
+
83
+ # Filter by ISIN code
84
+ krxon fetch etp etf --date 20250301 --isin KR7069500007
85
+ ```
86
+
87
+ #### Fetch Derivatives Data
88
+
89
+ ```bash
90
+ # Futures
91
+ krxon fetch derivatives futures --date 20250301
92
+ krxon fetch derivatives stock-futures-kospi --date 20250301
93
+ krxon fetch derivatives stock-futures-kosdaq --date 20250301
94
+
95
+ # Options
96
+ krxon fetch derivatives options --date 20250301
97
+ krxon fetch derivatives stock-options-kospi --date 20250301
98
+ krxon fetch derivatives stock-options-kosdaq --date 20250301
99
+
100
+ # Table output
101
+ krxon fetch derivatives futures --date 20250301 --output table
102
+ ```
103
+
104
+ #### Generate SDK Clients
105
+
106
+ ```bash
107
+ # Generate Python SDK
108
+ krxon generate python --out ./sdk/python
109
+
110
+ # Generate TypeScript SDK
111
+ krxon generate typescript --out ./sdk/typescript
112
+ ```
113
+
114
+ ### Common Options
115
+
116
+ - `--date` (required): Base date in YYYYMMDD format
117
+ - `--key`: API key (overrides `KRX_API_KEY` env var)
118
+ - `--output`: `json` (default) or `table`
119
+
120
+ ## SDK Usage
121
+
122
+ ### Python
123
+
124
+ ```python
125
+ from krx import KrxClient
126
+
127
+ client = KrxClient(api_key="your_key")
128
+ records = client.get_kospi_stock_daily(basDd="20250301")
129
+ for r in records:
130
+ print(r["ISU_NM"], r["TDD_CLSPRC"])
131
+ ```
132
+
133
+ ### TypeScript
134
+
135
+ ```typescript
136
+ import { KrxClient } from "@krxon/krx";
137
+
138
+ const client = new KrxClient({ apiKey: "your_key" });
139
+ const records = await client.getKospiStockDaily("20250301");
140
+ records.forEach((r) => console.log(r.ISU_NM, r.TDD_CLSPRC));
141
+ ```
142
+
143
+ ## Project Structure
144
+
145
+ See [AGENT.md](AGENT.md) for the full project structure and conventions.
146
+
147
+ ## License
148
+
149
+ MIT
@@ -0,0 +1,8 @@
1
+ # AUTO-GENERATED -- DO NOT EDIT
2
+ # Generated by krxon from spec/endpoints.yaml
3
+
4
+ """KRX Open API Python SDK."""
5
+
6
+ from krx.client import KrxClient
7
+
8
+ __all__ = ["KrxClient"]
@@ -0,0 +1,73 @@
1
+ # AUTO-GENERATED -- DO NOT EDIT
2
+ # Generated by krxon from spec/endpoints.yaml
3
+
4
+ """KRX API client."""
5
+
6
+ from __future__ import annotations
7
+
8
+ import os
9
+ from typing import Any, Optional
10
+
11
+ import httpx
12
+
13
+ from krx.endpoints.index import IndexMixin
14
+ from krx.endpoints.stock import StockMixin
15
+ from krx.endpoints.etp import EtpMixin
16
+ from krx.endpoints.derivatives import DerivativesMixin
17
+
18
+
19
+ class KrxClient(
20
+ IndexMixin,
21
+ StockMixin,
22
+ EtpMixin,
23
+ DerivativesMixin,
24
+ ):
25
+ """KRX Open API client.
26
+
27
+ Args:
28
+ api_key: API key for authentication (AUTH_KEY header).
29
+ Falls back to KRX_API_KEY environment variable if not provided.
30
+ base_url: Base URL for the KRX API.
31
+ timeout: Request timeout in seconds.
32
+ """
33
+
34
+ BASE_URL = "https://data-dbg.krx.co.kr/svc/apis"
35
+
36
+ def __init__(
37
+ self,
38
+ api_key: Optional[str] = None,
39
+ base_url: str = BASE_URL,
40
+ timeout: float = 30.0,
41
+ ) -> None:
42
+ resolved_key = api_key or os.environ.get("KRX_API_KEY", "")
43
+ if not resolved_key:
44
+ raise ValueError(
45
+ "API key is required. Pass api_key or set KRX_API_KEY environment variable."
46
+ )
47
+ self.api_key = resolved_key
48
+ self.base_url = base_url.rstrip("/")
49
+ self._client = httpx.Client(
50
+ headers={
51
+ "AUTH_KEY": resolved_key,
52
+ "Content-Type": "application/json",
53
+ },
54
+ timeout=timeout,
55
+ )
56
+
57
+ def _post(self, path: str, body: dict[str, Any]) -> list[Any]:
58
+ """Send a POST request and extract OutBlock_1 from the response."""
59
+ url = f"{self.base_url}{path}"
60
+ response = self._client.post(url, json=body)
61
+ response.raise_for_status()
62
+ data = response.json()
63
+ return data.get("OutBlock_1", [])
64
+
65
+ def close(self) -> None:
66
+ """Close the underlying HTTP client."""
67
+ self._client.close()
68
+
69
+ def __enter__(self) -> KrxClient:
70
+ return self
71
+
72
+ def __exit__(self, *args: Any) -> None:
73
+ self.close()
@@ -0,0 +1,4 @@
1
+ # AUTO-GENERATED -- DO NOT EDIT
2
+ # Generated by krxon from spec/endpoints.yaml
3
+
4
+ """Endpoint mixin modules."""
@@ -0,0 +1,125 @@
1
+ # AUTO-GENERATED -- DO NOT EDIT
2
+ # Generated by krxon from spec/endpoints.yaml
3
+
4
+ """Derivatives (Futures/Options) endpoints."""
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import TYPE_CHECKING
9
+
10
+ if TYPE_CHECKING:
11
+ from krx.types import (
12
+ FuturesDailyRecord,
13
+ OptionsDailyRecord,
14
+ StockFuturesKosdaqDailyRecord,
15
+ StockFuturesKospiDailyRecord,
16
+ StockOptionsKosdaqDailyRecord,
17
+ StockOptionsKospiDailyRecord,
18
+ )
19
+
20
+
21
+ class DerivativesMixin:
22
+ """Mixin providing derivatives endpoint methods."""
23
+
24
+ def get_futures_daily(
25
+ self,
26
+ basDd: str,
27
+ ) -> list[FuturesDailyRecord]:
28
+ """선물 일별 시세
29
+
30
+ Args:
31
+ basDd: 기준일자 (YYYYMMDD)
32
+
33
+ Returns:
34
+ List of FuturesDailyRecord records.
35
+ """
36
+ body: dict[str, str] = {
37
+ "basDd": basDd,
38
+ }
39
+ return self._post("/drv/fut_bydd_trd", body) # type: ignore[attr-defined]
40
+
41
+ def get_options_daily(
42
+ self,
43
+ basDd: str,
44
+ ) -> list[OptionsDailyRecord]:
45
+ """옵션 일별 시세
46
+
47
+ Args:
48
+ basDd: 기준일자 (YYYYMMDD)
49
+
50
+ Returns:
51
+ List of OptionsDailyRecord records.
52
+ """
53
+ body: dict[str, str] = {
54
+ "basDd": basDd,
55
+ }
56
+ return self._post("/drv/opt_bydd_trd", body) # type: ignore[attr-defined]
57
+
58
+ def get_stock_futures_kosdaq_daily(
59
+ self,
60
+ basDd: str,
61
+ ) -> list[StockFuturesKosdaqDailyRecord]:
62
+ """KOSDAQ 주식선물 일별 시세
63
+
64
+ Args:
65
+ basDd: 기준일자 (YYYYMMDD)
66
+
67
+ Returns:
68
+ List of StockFuturesKosdaqDailyRecord records.
69
+ """
70
+ body: dict[str, str] = {
71
+ "basDd": basDd,
72
+ }
73
+ return self._post("/drv/eqkfu_ksq_bydd_trd", body) # type: ignore[attr-defined]
74
+
75
+ def get_stock_futures_kospi_daily(
76
+ self,
77
+ basDd: str,
78
+ ) -> list[StockFuturesKospiDailyRecord]:
79
+ """KOSPI 주식선물 일별 시세
80
+
81
+ Args:
82
+ basDd: 기준일자 (YYYYMMDD)
83
+
84
+ Returns:
85
+ List of StockFuturesKospiDailyRecord records.
86
+ """
87
+ body: dict[str, str] = {
88
+ "basDd": basDd,
89
+ }
90
+ return self._post("/drv/eqsfu_stk_bydd_trd", body) # type: ignore[attr-defined]
91
+
92
+ def get_stock_options_kosdaq_daily(
93
+ self,
94
+ basDd: str,
95
+ ) -> list[StockOptionsKosdaqDailyRecord]:
96
+ """KOSDAQ 주식옵션 일별 시세
97
+
98
+ Args:
99
+ basDd: 기준일자 (YYYYMMDD)
100
+
101
+ Returns:
102
+ List of StockOptionsKosdaqDailyRecord records.
103
+ """
104
+ body: dict[str, str] = {
105
+ "basDd": basDd,
106
+ }
107
+ return self._post("/drv/eqkop_bydd_trd", body) # type: ignore[attr-defined]
108
+
109
+ def get_stock_options_kospi_daily(
110
+ self,
111
+ basDd: str,
112
+ ) -> list[StockOptionsKospiDailyRecord]:
113
+ """KOSPI 주식옵션 일별 시세
114
+
115
+ Args:
116
+ basDd: 기준일자 (YYYYMMDD)
117
+
118
+ Returns:
119
+ List of StockOptionsKospiDailyRecord records.
120
+ """
121
+ body: dict[str, str] = {
122
+ "basDd": basDd,
123
+ }
124
+ return self._post("/drv/eqsop_bydd_trd", body) # type: ignore[attr-defined]
125
+
@@ -0,0 +1,53 @@
1
+ # AUTO-GENERATED -- DO NOT EDIT
2
+ # Generated by krxon from spec/endpoints.yaml
3
+
4
+ """ETP (ETF/ETN) endpoints."""
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import TYPE_CHECKING
9
+
10
+ if TYPE_CHECKING:
11
+ from krx.types import (
12
+ EtfDailyRecord,
13
+ EtnDailyRecord,
14
+ )
15
+
16
+
17
+ class EtpMixin:
18
+ """Mixin providing etp endpoint methods."""
19
+
20
+ def get_etf_daily(
21
+ self,
22
+ basDd: str,
23
+ ) -> list[EtfDailyRecord]:
24
+ """ETF 일별 시세
25
+
26
+ Args:
27
+ basDd: 기준일자 (YYYYMMDD)
28
+
29
+ Returns:
30
+ List of EtfDailyRecord records.
31
+ """
32
+ body: dict[str, str] = {
33
+ "basDd": basDd,
34
+ }
35
+ return self._post("/etp/etf_bydd_trd", body) # type: ignore[attr-defined]
36
+
37
+ def get_etn_daily(
38
+ self,
39
+ basDd: str,
40
+ ) -> list[EtnDailyRecord]:
41
+ """ETN 일별 시세
42
+
43
+ Args:
44
+ basDd: 기준일자 (YYYYMMDD)
45
+
46
+ Returns:
47
+ List of EtnDailyRecord records.
48
+ """
49
+ body: dict[str, str] = {
50
+ "basDd": basDd,
51
+ }
52
+ return self._post("/etp/etn_bydd_trd", body) # type: ignore[attr-defined]
53
+
@@ -0,0 +1,89 @@
1
+ # AUTO-GENERATED -- DO NOT EDIT
2
+ # Generated by krxon from spec/endpoints.yaml
3
+
4
+ """Index (KRX/KOSPI/KOSDAQ/Derivatives) endpoints."""
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import TYPE_CHECKING
9
+
10
+ if TYPE_CHECKING:
11
+ from krx.types import (
12
+ DerivativesIndexDailyRecord,
13
+ KosdaqIndexDailyRecord,
14
+ KospiIndexDailyRecord,
15
+ KrxIndexDailyRecord,
16
+ )
17
+
18
+
19
+ class IndexMixin:
20
+ """Mixin providing index endpoint methods."""
21
+
22
+ def get_derivatives_index_daily(
23
+ self,
24
+ basDd: str,
25
+ ) -> list[DerivativesIndexDailyRecord]:
26
+ """파생상품 지수 일별 시세
27
+
28
+ Args:
29
+ basDd: 기준일자 (YYYYMMDD)
30
+
31
+ Returns:
32
+ List of DerivativesIndexDailyRecord records.
33
+ """
34
+ body: dict[str, str] = {
35
+ "basDd": basDd,
36
+ }
37
+ return self._post("/idx/drvprod_dd_trd", body) # type: ignore[attr-defined]
38
+
39
+ def get_kosdaq_index_daily(
40
+ self,
41
+ basDd: str,
42
+ ) -> list[KosdaqIndexDailyRecord]:
43
+ """KOSDAQ 지수 일별 시세
44
+
45
+ Args:
46
+ basDd: 기준일자 (YYYYMMDD)
47
+
48
+ Returns:
49
+ List of KosdaqIndexDailyRecord records.
50
+ """
51
+ body: dict[str, str] = {
52
+ "basDd": basDd,
53
+ }
54
+ return self._post("/idx/kosdaq_dd_trd", body) # type: ignore[attr-defined]
55
+
56
+ def get_kospi_index_daily(
57
+ self,
58
+ basDd: str,
59
+ ) -> list[KospiIndexDailyRecord]:
60
+ """KOSPI 지수 일별 시세
61
+
62
+ Args:
63
+ basDd: 기준일자 (YYYYMMDD)
64
+
65
+ Returns:
66
+ List of KospiIndexDailyRecord records.
67
+ """
68
+ body: dict[str, str] = {
69
+ "basDd": basDd,
70
+ }
71
+ return self._post("/idx/kospi_dd_trd", body) # type: ignore[attr-defined]
72
+
73
+ def get_krx_index_daily(
74
+ self,
75
+ basDd: str,
76
+ ) -> list[KrxIndexDailyRecord]:
77
+ """KRX 지수 일별 시세
78
+
79
+ Args:
80
+ basDd: 기준일자 (YYYYMMDD)
81
+
82
+ Returns:
83
+ List of KrxIndexDailyRecord records.
84
+ """
85
+ body: dict[str, str] = {
86
+ "basDd": basDd,
87
+ }
88
+ return self._post("/idx/krx_dd_trd", body) # type: ignore[attr-defined]
89
+
@@ -0,0 +1,89 @@
1
+ # AUTO-GENERATED -- DO NOT EDIT
2
+ # Generated by krxon from spec/endpoints.yaml
3
+
4
+ """Stock (KOSPI/KOSDAQ daily trading and info) endpoints."""
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import TYPE_CHECKING
9
+
10
+ if TYPE_CHECKING:
11
+ from krx.types import (
12
+ KosdaqStockDailyRecord,
13
+ KosdaqStockInfoRecord,
14
+ KospiStockDailyRecord,
15
+ KospiStockInfoRecord,
16
+ )
17
+
18
+
19
+ class StockMixin:
20
+ """Mixin providing stock endpoint methods."""
21
+
22
+ def get_kosdaq_stock_daily(
23
+ self,
24
+ basDd: str,
25
+ ) -> list[KosdaqStockDailyRecord]:
26
+ """KOSDAQ 주식 일별 시세
27
+
28
+ Args:
29
+ basDd: 기준일자 (YYYYMMDD)
30
+
31
+ Returns:
32
+ List of KosdaqStockDailyRecord records.
33
+ """
34
+ body: dict[str, str] = {
35
+ "basDd": basDd,
36
+ }
37
+ return self._post("/sto/ksq_bydd_trd", body) # type: ignore[attr-defined]
38
+
39
+ def get_kosdaq_stock_info(
40
+ self,
41
+ basDd: str,
42
+ ) -> list[KosdaqStockInfoRecord]:
43
+ """KOSDAQ 종목 기본 정보
44
+
45
+ Args:
46
+ basDd: 기준일자 (YYYYMMDD)
47
+
48
+ Returns:
49
+ List of KosdaqStockInfoRecord records.
50
+ """
51
+ body: dict[str, str] = {
52
+ "basDd": basDd,
53
+ }
54
+ return self._post("/sto/ksq_isu_base_info", body) # type: ignore[attr-defined]
55
+
56
+ def get_kospi_stock_daily(
57
+ self,
58
+ basDd: str,
59
+ ) -> list[KospiStockDailyRecord]:
60
+ """KOSPI 주식 일별 시세
61
+
62
+ Args:
63
+ basDd: 기준일자 (YYYYMMDD)
64
+
65
+ Returns:
66
+ List of KospiStockDailyRecord records.
67
+ """
68
+ body: dict[str, str] = {
69
+ "basDd": basDd,
70
+ }
71
+ return self._post("/sto/stk_bydd_trd", body) # type: ignore[attr-defined]
72
+
73
+ def get_kospi_stock_info(
74
+ self,
75
+ basDd: str,
76
+ ) -> list[KospiStockInfoRecord]:
77
+ """KOSPI 종목 기본 정보
78
+
79
+ Args:
80
+ basDd: 기준일자 (YYYYMMDD)
81
+
82
+ Returns:
83
+ List of KospiStockInfoRecord records.
84
+ """
85
+ body: dict[str, str] = {
86
+ "basDd": basDd,
87
+ }
88
+ return self._post("/sto/stk_isu_base_info", body) # type: ignore[attr-defined]
89
+
@@ -0,0 +1,548 @@
1
+ # AUTO-GENERATED -- DO NOT EDIT
2
+ # Generated by krxon from spec/endpoints.yaml
3
+
4
+ """Response types for KRX API endpoints.
5
+
6
+ All fields are strings as returned by the KRX API.
7
+ Numeric fields may contain commas (e.g., "1,000,000").
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from typing import TypedDict
13
+
14
+
15
+ class DerivativesIndexDailyRecord(TypedDict):
16
+ """파생상품 지수 일별 시세"""
17
+
18
+ BAS_DD: str # 기준일자
19
+
20
+ IDX_CLSS: str # 계열구분
21
+
22
+ IDX_NM: str # 지수명
23
+
24
+ CLSPRC_IDX: str # 종가
25
+
26
+ CMPPREVDD_IDX: str # 대비 (전일 대비 변동)
27
+
28
+ FLUC_RT: str # 등락률 (%)
29
+
30
+ OPNPRC_IDX: str # 시가
31
+
32
+ HGPRC_IDX: str # 고가
33
+
34
+ LWPRC_IDX: str # 저가
35
+
36
+
37
+
38
+ class KosdaqIndexDailyRecord(TypedDict):
39
+ """KOSDAQ 지수 일별 시세"""
40
+
41
+ BAS_DD: str # 기준일자
42
+
43
+ IDX_CLSS: str # 계열구분
44
+
45
+ IDX_NM: str # 지수명
46
+
47
+ CLSPRC_IDX: str # 종가
48
+
49
+ CMPPREVDD_IDX: str # 대비 (전일 대비 변동)
50
+
51
+ FLUC_RT: str # 등락률 (%)
52
+
53
+ OPNPRC_IDX: str # 시가
54
+
55
+ HGPRC_IDX: str # 고가
56
+
57
+ LWPRC_IDX: str # 저가
58
+
59
+ ACC_TRDVOL: str # 거래량
60
+
61
+ ACC_TRDVAL: str # 거래대금
62
+
63
+ MKTCAP: str # 상장시가총액
64
+
65
+
66
+
67
+ class KospiIndexDailyRecord(TypedDict):
68
+ """KOSPI 지수 일별 시세"""
69
+
70
+ BAS_DD: str # 기준일자
71
+
72
+ IDX_CLSS: str # 계열구분
73
+
74
+ IDX_NM: str # 지수명
75
+
76
+ CLSPRC_IDX: str # 종가
77
+
78
+ CMPPREVDD_IDX: str # 대비 (전일 대비 변동)
79
+
80
+ FLUC_RT: str # 등락률 (%)
81
+
82
+ OPNPRC_IDX: str # 시가
83
+
84
+ HGPRC_IDX: str # 고가
85
+
86
+ LWPRC_IDX: str # 저가
87
+
88
+ ACC_TRDVOL: str # 거래량
89
+
90
+ ACC_TRDVAL: str # 거래대금
91
+
92
+ MKTCAP: str # 상장시가총액
93
+
94
+
95
+
96
+ class KrxIndexDailyRecord(TypedDict):
97
+ """KRX 지수 일별 시세"""
98
+
99
+ BAS_DD: str # 기준일자
100
+
101
+ IDX_CLSS: str # 계열구분
102
+
103
+ IDX_NM: str # 지수명
104
+
105
+ CLSPRC_IDX: str # 종가
106
+
107
+ CMPPREVDD_IDX: str # 대비 (전일 대비 변동)
108
+
109
+ FLUC_RT: str # 등락률 (%)
110
+
111
+ OPNPRC_IDX: str # 시가
112
+
113
+ HGPRC_IDX: str # 고가
114
+
115
+ LWPRC_IDX: str # 저가
116
+
117
+ ACC_TRDVOL: str # 거래량
118
+
119
+ ACC_TRDVAL: str # 거래대금
120
+
121
+ MKTCAP: str # 상장시가총액
122
+
123
+
124
+
125
+ class KosdaqStockDailyRecord(TypedDict):
126
+ """KOSDAQ 주식 일별 시세"""
127
+
128
+ BAS_DD: str # 기준일자
129
+
130
+ ISU_CD: str # 종목코드 (ISIN)
131
+
132
+ ISU_NM: str # 종목명
133
+
134
+ MKT_NM: str # 시장구분
135
+
136
+ SECT_TP_NM: str # 소속부
137
+
138
+ TDD_CLSPRC: str # 종가
139
+
140
+ CMPPREVDD_PRC: str # 대비 (전일 대비 변동)
141
+
142
+ FLUC_RT: str # 등락률 (%)
143
+
144
+ TDD_OPNPRC: str # 시가
145
+
146
+ TDD_HGPRC: str # 고가
147
+
148
+ TDD_LWPRC: str # 저가
149
+
150
+ ACC_TRDVOL: str # 거래량
151
+
152
+ ACC_TRDVAL: str # 거래대금
153
+
154
+ MKTCAP: str # 시가총액
155
+
156
+ LIST_SHRS: str # 상장주식수
157
+
158
+
159
+
160
+ class KosdaqStockInfoRecord(TypedDict):
161
+ """KOSDAQ 종목 기본 정보"""
162
+
163
+ ISU_CD: str # 표준코드 (ISIN)
164
+
165
+ ISU_SRT_CD: str # 단축코드
166
+
167
+ ISU_NM: str # 한글 종목명
168
+
169
+ ISU_ABBRV: str # 한글 종목약명
170
+
171
+ ISU_ENG_NM: str # 영문 종목명
172
+
173
+ LIST_DD: str # 상장일
174
+
175
+ MKT_TP_NM: str # 시장구분
176
+
177
+ SECUGRP_NM: str # 증권구분
178
+
179
+ SECT_TP_NM: str # 소속부
180
+
181
+ KIND_STKCERT_TP_NM: str # 주식종류
182
+
183
+ PARVAL: str # 액면가
184
+
185
+ LIST_SHRS: str # 상장주식수
186
+
187
+
188
+
189
+ class KospiStockDailyRecord(TypedDict):
190
+ """KOSPI 주식 일별 시세"""
191
+
192
+ BAS_DD: str # 기준일자
193
+
194
+ ISU_CD: str # 종목코드 (ISIN)
195
+
196
+ ISU_NM: str # 종목명
197
+
198
+ MKT_NM: str # 시장구분
199
+
200
+ SECT_TP_NM: str # 소속부
201
+
202
+ TDD_CLSPRC: str # 종가
203
+
204
+ CMPPREVDD_PRC: str # 대비 (전일 대비 변동)
205
+
206
+ FLUC_RT: str # 등락률 (%)
207
+
208
+ TDD_OPNPRC: str # 시가
209
+
210
+ TDD_HGPRC: str # 고가
211
+
212
+ TDD_LWPRC: str # 저가
213
+
214
+ ACC_TRDVOL: str # 거래량
215
+
216
+ ACC_TRDVAL: str # 거래대금
217
+
218
+ MKTCAP: str # 시가총액
219
+
220
+ LIST_SHRS: str # 상장주식수
221
+
222
+
223
+
224
+ class KospiStockInfoRecord(TypedDict):
225
+ """KOSPI 종목 기본 정보"""
226
+
227
+ ISU_CD: str # 표준코드 (ISIN)
228
+
229
+ ISU_SRT_CD: str # 단축코드
230
+
231
+ ISU_NM: str # 한글 종목명
232
+
233
+ ISU_ABBRV: str # 한글 종목약명
234
+
235
+ ISU_ENG_NM: str # 영문 종목명
236
+
237
+ LIST_DD: str # 상장일
238
+
239
+ MKT_TP_NM: str # 시장구분
240
+
241
+ SECUGRP_NM: str # 증권구분
242
+
243
+ SECT_TP_NM: str # 소속부
244
+
245
+ KIND_STKCERT_TP_NM: str # 주식종류
246
+
247
+ PARVAL: str # 액면가
248
+
249
+ LIST_SHRS: str # 상장주식수
250
+
251
+
252
+
253
+ class EtfDailyRecord(TypedDict):
254
+ """ETF 일별 시세"""
255
+
256
+ BAS_DD: str # 기준일자
257
+
258
+ ISU_CD: str # 종목코드
259
+
260
+ ISU_NM: str # 종목명
261
+
262
+ TDD_CLSPRC: str # 종가
263
+
264
+ CMPPREVDD_PRC: str # 대비 (전일 대비 변동)
265
+
266
+ FLUC_RT: str # 등락률 (%)
267
+
268
+ TDD_OPNPRC: str # 시가
269
+
270
+ TDD_HGPRC: str # 고가
271
+
272
+ TDD_LWPRC: str # 저가
273
+
274
+ ACC_TRDVOL: str # 거래량
275
+
276
+ ACC_TRDVAL: str # 거래대금
277
+
278
+ MKTCAP: str # 시가총액
279
+
280
+ LIST_SHRS: str # 상장주식수
281
+
282
+ NAV: str # 순자산가치 (Net Asset Value)
283
+
284
+ IDX_IND_NM: str # 기초지수명
285
+
286
+ OBJ_STKPRC_IDX: str # 목적지수
287
+
288
+ CMPPREVDD_IDX: str # 지수대비
289
+
290
+ FLUC_RT_IDX: str # 지수등락률
291
+
292
+ INVSTASST_NETASST_TOTAMT: str # 투자자산순자산총액
293
+
294
+
295
+
296
+ class EtnDailyRecord(TypedDict):
297
+ """ETN 일별 시세"""
298
+
299
+ BAS_DD: str # 기준일자
300
+
301
+ ISU_CD: str # 종목코드
302
+
303
+ ISU_NM: str # 종목명
304
+
305
+ TDD_CLSPRC: str # 종가
306
+
307
+ CMPPREVDD_PRC: str # 대비 (전일 대비 변동)
308
+
309
+ FLUC_RT: str # 등락률 (%)
310
+
311
+ TDD_OPNPRC: str # 시가
312
+
313
+ TDD_HGPRC: str # 고가
314
+
315
+ TDD_LWPRC: str # 저가
316
+
317
+ ACC_TRDVOL: str # 거래량
318
+
319
+ ACC_TRDVAL: str # 거래대금
320
+
321
+ MKTCAP: str # 시가총액
322
+
323
+ LIST_SHRS: str # 상장주식수
324
+
325
+ IDX_IND_NM: str # 기초지수명
326
+
327
+ OBJ_STKPRC_IDX: str # 목적지수
328
+
329
+ CMPPREVDD_IDX: str # 지수대비
330
+
331
+ FLUC_RT_IDX: str # 지수등락률
332
+
333
+ INDIC_VAL_AMT: str # 지시가격금액
334
+
335
+ PER1SECU_INDIC_VAL: str # 1증권당 지시가격
336
+
337
+
338
+
339
+ class FuturesDailyRecord(TypedDict):
340
+ """선물 일별 시세"""
341
+
342
+ BAS_DD: str # 기준일자
343
+
344
+ ISU_CD: str # 종목코드
345
+
346
+ ISU_NM: str # 종목명
347
+
348
+ PROD_NM: str # 상품명
349
+
350
+ MKT_NM: str # 시장구분
351
+
352
+ TDD_CLSPRC: str # 종가
353
+
354
+ TDD_OPNPRC: str # 시가
355
+
356
+ TDD_HGPRC: str # 고가
357
+
358
+ TDD_LWPRC: str # 저가
359
+
360
+ SETL_PRC: str # 정산가격
361
+
362
+ SPOT_PRC: str # 현물가격
363
+
364
+ CMPPREVDD_PRC: str # 대비 (전일 대비 변동)
365
+
366
+ ACC_TRDVOL: str # 거래량
367
+
368
+ ACC_TRDVAL: str # 거래대금
369
+
370
+ ACC_OPNINT_QTY: str # 미결제약정수량
371
+
372
+
373
+
374
+ class OptionsDailyRecord(TypedDict):
375
+ """옵션 일별 시세"""
376
+
377
+ BAS_DD: str # 기준일자
378
+
379
+ ISU_CD: str # 종목코드
380
+
381
+ ISU_NM: str # 종목명
382
+
383
+ PROD_NM: str # 상품명
384
+
385
+ RGHT_TP_NM: str # 권리구분 (콜/풋)
386
+
387
+ TDD_CLSPRC: str # 종가
388
+
389
+ TDD_OPNPRC: str # 시가
390
+
391
+ TDD_HGPRC: str # 고가
392
+
393
+ TDD_LWPRC: str # 저가
394
+
395
+ CMPPREVDD_PRC: str # 대비 (전일 대비 변동)
396
+
397
+ ACC_TRDVOL: str # 거래량
398
+
399
+ ACC_TRDVAL: str # 거래대금
400
+
401
+ ACC_OPNINT_QTY: str # 미결제약정수량
402
+
403
+ IMP_VOLT: str # 내재변동성 (Implied Volatility)
404
+
405
+ NXTDD_BAS_PRC: str # 익일기준가격
406
+
407
+
408
+
409
+ class StockFuturesKosdaqDailyRecord(TypedDict):
410
+ """KOSDAQ 주식선물 일별 시세"""
411
+
412
+ BAS_DD: str # 기준일자
413
+
414
+ PROD_NM: str # 상품명
415
+
416
+ MKT_NM: str # 시장구분
417
+
418
+ ISU_CD: str # 종목코드
419
+
420
+ ISU_NM: str # 종목명
421
+
422
+ TDD_CLSPRC: str # 종가
423
+
424
+ CMPPREVDD_PRC: str # 대비 (전일 대비 변동)
425
+
426
+ TDD_OPNPRC: str # 시가
427
+
428
+ TDD_HGPRC: str # 고가
429
+
430
+ TDD_LWPRC: str # 저가
431
+
432
+ SPOT_PRC: str # 현물가격
433
+
434
+ SETL_PRC: str # 정산가격
435
+
436
+ ACC_TRDVOL: str # 거래량
437
+
438
+ ACC_TRDVAL: str # 거래대금
439
+
440
+ ACC_OPNINT_QTY: str # 미결제약정수량
441
+
442
+
443
+
444
+ class StockFuturesKospiDailyRecord(TypedDict):
445
+ """KOSPI 주식선물 일별 시세"""
446
+
447
+ BAS_DD: str # 기준일자
448
+
449
+ PROD_NM: str # 상품명
450
+
451
+ MKT_NM: str # 시장구분
452
+
453
+ ISU_CD: str # 종목코드
454
+
455
+ ISU_NM: str # 종목명
456
+
457
+ TDD_CLSPRC: str # 종가
458
+
459
+ CMPPREVDD_PRC: str # 대비 (전일 대비 변동)
460
+
461
+ TDD_OPNPRC: str # 시가
462
+
463
+ TDD_HGPRC: str # 고가
464
+
465
+ TDD_LWPRC: str # 저가
466
+
467
+ SPOT_PRC: str # 현물가격
468
+
469
+ SETL_PRC: str # 정산가격
470
+
471
+ ACC_TRDVOL: str # 거래량
472
+
473
+ ACC_TRDVAL: str # 거래대금
474
+
475
+ ACC_OPNINT_QTY: str # 미결제약정수량
476
+
477
+
478
+
479
+ class StockOptionsKosdaqDailyRecord(TypedDict):
480
+ """KOSDAQ 주식옵션 일별 시세"""
481
+
482
+ BAS_DD: str # 기준일자
483
+
484
+ ISU_CD: str # 종목코드
485
+
486
+ ISU_NM: str # 종목명
487
+
488
+ PROD_NM: str # 상품명
489
+
490
+ RGHT_TP_NM: str # 권리구분 (콜/풋)
491
+
492
+ TDD_CLSPRC: str # 종가
493
+
494
+ TDD_OPNPRC: str # 시가
495
+
496
+ TDD_HGPRC: str # 고가
497
+
498
+ TDD_LWPRC: str # 저가
499
+
500
+ CMPPREVDD_PRC: str # 대비 (전일 대비 변동)
501
+
502
+ ACC_TRDVOL: str # 거래량
503
+
504
+ ACC_TRDVAL: str # 거래대금
505
+
506
+ ACC_OPNINT_QTY: str # 미결제약정수량
507
+
508
+ IMP_VOLT: str # 내재변동성 (Implied Volatility)
509
+
510
+ NXTDD_BAS_PRC: str # 익일기준가격
511
+
512
+
513
+
514
+ class StockOptionsKospiDailyRecord(TypedDict):
515
+ """KOSPI 주식옵션 일별 시세"""
516
+
517
+ BAS_DD: str # 기준일자
518
+
519
+ ISU_CD: str # 종목코드
520
+
521
+ ISU_NM: str # 종목명
522
+
523
+ PROD_NM: str # 상품명
524
+
525
+ RGHT_TP_NM: str # 권리구분 (콜/풋)
526
+
527
+ TDD_CLSPRC: str # 종가
528
+
529
+ TDD_OPNPRC: str # 시가
530
+
531
+ TDD_HGPRC: str # 고가
532
+
533
+ TDD_LWPRC: str # 저가
534
+
535
+ CMPPREVDD_PRC: str # 대비 (전일 대비 변동)
536
+
537
+ ACC_TRDVOL: str # 거래량
538
+
539
+ ACC_TRDVAL: str # 거래대금
540
+
541
+ ACC_OPNINT_QTY: str # 미결제약정수량
542
+
543
+ IMP_VOLT: str # 내재변동성 (Implied Volatility)
544
+
545
+ NXTDD_BAS_PRC: str # 익일기준가격
546
+
547
+
548
+
@@ -0,0 +1,38 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "krxon"
7
+ version = "0.1.0"
8
+ description = "KRX (Korea Exchange) Open API Python SDK - auto-generated by krxon"
9
+ readme = "README.md"
10
+ license = { text = "MIT" }
11
+ requires-python = ">=3.10"
12
+ authors = [
13
+ { name = "seungdols" },
14
+ ]
15
+ keywords = ["krx", "korea-exchange", "finance", "api", "sdk"]
16
+ classifiers = [
17
+ "Development Status :: 3 - Alpha",
18
+ "Intended Audience :: Developers",
19
+ "Intended Audience :: Financial and Insurance Industry",
20
+ "License :: OSI Approved :: MIT License",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Topic :: Office/Business :: Financial",
27
+ ]
28
+ dependencies = [
29
+ "httpx>=0.24.0",
30
+ ]
31
+
32
+ [project.urls]
33
+ Homepage = "https://github.com/seungdols/krxon"
34
+ Repository = "https://github.com/seungdols/krxon"
35
+ Issues = "https://github.com/seungdols/krxon/issues"
36
+
37
+ [tool.hatch.build.targets.wheel]
38
+ packages = ["krx"]