ksxt 0.0.8__py3-none-any.whl → 0.0.9__py3-none-any.whl

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.
Files changed (141) hide show
  1. ksxt/__init__.py +3 -1
  2. ksxt/__pycache__/__init__.cpython-312.pyc +0 -0
  3. ksxt/__pycache__/bithumb.cpython-312.pyc +0 -0
  4. ksxt/__pycache__/koreainvest.cpython-312.pyc +0 -0
  5. ksxt/__pycache__/upbit.cpython-312.pyc +0 -0
  6. ksxt/api/__init__.py +26 -0
  7. ksxt/api/__pycache__/__init__.cpython-312.pyc +0 -0
  8. ksxt/api/__pycache__/bithumb.cpython-312.pyc +0 -0
  9. ksxt/api/__pycache__/koreainvest.cpython-312.pyc +0 -0
  10. ksxt/api/__pycache__/upbit.cpython-312.pyc +0 -0
  11. ksxt/api/auto/api_generator.py +54 -0
  12. ksxt/api/auto/bithumb.py +35 -0
  13. ksxt/api/auto/koreainvest.py +49 -0
  14. ksxt/api/auto/upbit.py +39 -0
  15. ksxt/api/bithumb.py +42 -0
  16. ksxt/api/koreainvest.py +40 -0
  17. ksxt/api/upbit.py +54 -0
  18. ksxt/async_/__init__.py +4 -0
  19. ksxt/async_/__pycache__/__init__.cpython-312.pyc +0 -0
  20. ksxt/async_/__pycache__/bithumb.cpython-312.pyc +0 -0
  21. ksxt/async_/__pycache__/koreainvest.cpython-312.pyc +0 -0
  22. ksxt/async_/__pycache__/upbit.cpython-312.pyc +0 -0
  23. ksxt/async_/base/__init__.py +0 -0
  24. ksxt/async_/base/__pycache__/__init__.cpython-312.pyc +0 -0
  25. ksxt/async_/base/__pycache__/async_exchange.cpython-312.pyc +0 -0
  26. ksxt/async_/base/__pycache__/throttler.cpython-312.pyc +0 -0
  27. ksxt/async_/base/async_exchange.py +232 -0
  28. ksxt/async_/base/throttler.py +63 -0
  29. ksxt/async_/bithumb.py +455 -0
  30. ksxt/async_/koreainvest.py +849 -0
  31. ksxt/async_/upbit.py +488 -0
  32. ksxt/base/__pycache__/__init__.cpython-312.pyc +0 -0
  33. ksxt/base/__pycache__/errors.cpython-312.pyc +0 -0
  34. ksxt/base/__pycache__/exchange.cpython-312.pyc +0 -0
  35. ksxt/base/__pycache__/rest_exchange.cpython-312.pyc +0 -0
  36. ksxt/base/__pycache__/types.cpython-312.pyc +0 -0
  37. ksxt/base/com_exchange.py +2 -2
  38. ksxt/base/errors.py +10 -0
  39. ksxt/base/exchange.py +188 -497
  40. ksxt/base/rest_exchange.py +297 -113
  41. ksxt/base/types.py +1 -36
  42. ksxt/bithumb.py +504 -0
  43. ksxt/config/__init__.py +2 -1
  44. ksxt/config/__pycache__/__init__.cpython-312.pyc +0 -0
  45. ksxt/config/bithumb.toml +380 -0
  46. ksxt/config/koreainvest.toml +312 -0
  47. ksxt/config/token.toml +7 -0
  48. ksxt/config/upbit.toml +428 -0
  49. ksxt/koreainvest.py +409 -1055
  50. ksxt/market/__pycache__/base.cpython-312.pyc +0 -0
  51. ksxt/market/__pycache__/db.cpython-312.pyc +0 -0
  52. ksxt/market/__pycache__/logging.cpython-312.pyc +0 -0
  53. ksxt/market/__pycache__/manager.cpython-312.pyc +0 -0
  54. ksxt/market/__pycache__/markets.cpython-312.pyc +0 -0
  55. ksxt/market/base.py +50 -50
  56. ksxt/market/db.py +5 -4
  57. ksxt/market/krx/__pycache__/kosdaq.cpython-312.pyc +0 -0
  58. ksxt/market/krx/__pycache__/kospi.cpython-312.pyc +0 -0
  59. ksxt/market/krx/__pycache__/stock.cpython-312.pyc +0 -0
  60. ksxt/market/krx/kosdaq.py +150 -147
  61. ksxt/market/krx/kospi.py +179 -175
  62. ksxt/market/krx/stock.py +136 -134
  63. ksxt/market/logging.py +4 -4
  64. ksxt/market/manager.py +10 -12
  65. ksxt/market/markets.py +1 -1
  66. ksxt/market/us/__pycache__/amex.cpython-312.pyc +0 -0
  67. ksxt/market/us/__pycache__/nasdaq.cpython-312.pyc +0 -0
  68. ksxt/market/us/__pycache__/nyse.cpython-312.pyc +0 -0
  69. ksxt/market/us/__pycache__/stock.cpython-312.pyc +0 -0
  70. ksxt/market/us/amex.py +31 -31
  71. ksxt/market/us/nasdaq.py +31 -31
  72. ksxt/market/us/nyse.py +31 -31
  73. ksxt/market/us/stock.py +20 -28
  74. ksxt/models/__init__.py +16 -0
  75. ksxt/models/__pycache__/__init__.cpython-312.pyc +0 -0
  76. ksxt/models/__pycache__/balance.cpython-312.pyc +0 -0
  77. ksxt/models/__pycache__/cash.cpython-312.pyc +0 -0
  78. ksxt/models/__pycache__/common.cpython-312.pyc +0 -0
  79. ksxt/models/__pycache__/error.cpython-312.pyc +0 -0
  80. ksxt/models/__pycache__/historical.cpython-312.pyc +0 -0
  81. ksxt/models/__pycache__/market.cpython-312.pyc +0 -0
  82. ksxt/models/__pycache__/order.cpython-312.pyc +0 -0
  83. ksxt/models/__pycache__/orderbook.cpython-312.pyc +0 -0
  84. ksxt/models/__pycache__/ticker.cpython-312.pyc +0 -0
  85. ksxt/models/__pycache__/token.cpython-312.pyc +0 -0
  86. ksxt/models/__pycache__/transaction.cpython-312.pyc +0 -0
  87. ksxt/models/balance.py +30 -0
  88. ksxt/models/cash.py +15 -0
  89. ksxt/models/common.py +31 -0
  90. ksxt/models/error.py +13 -0
  91. ksxt/models/historical.py +26 -0
  92. ksxt/models/market.py +81 -0
  93. ksxt/models/order.py +42 -0
  94. ksxt/models/orderbook.py +32 -0
  95. ksxt/models/ticker.py +25 -0
  96. ksxt/models/token.py +14 -0
  97. ksxt/models/transaction.py +79 -0
  98. ksxt/parser/__pycache__/bithumb.cpython-312.pyc +0 -0
  99. ksxt/parser/__pycache__/koreainvest.cpython-312.pyc +0 -0
  100. ksxt/parser/__pycache__/parser.cpython-312.pyc +0 -0
  101. ksxt/parser/__pycache__/upbit.cpython-312.pyc +0 -0
  102. ksxt/parser/bithumb.py +300 -0
  103. ksxt/parser/koreainvest.py +323 -0
  104. ksxt/parser/parser.py +114 -0
  105. ksxt/parser/upbit.py +308 -0
  106. ksxt/upbit.py +499 -0
  107. ksxt/utils/__pycache__/safer.cpython-312.pyc +0 -0
  108. ksxt/utils/__pycache__/sorter.cpython-312.pyc +0 -0
  109. ksxt/utils/__pycache__/timer.cpython-312.pyc +0 -0
  110. ksxt/utils/safer.py +48 -0
  111. ksxt/utils/sorter.py +8 -0
  112. ksxt/utils/timer.py +47 -0
  113. {ksxt-0.0.8.dist-info → ksxt-0.0.9.dist-info}/METADATA +11 -1
  114. ksxt-0.0.9.dist-info/RECORD +119 -0
  115. {ksxt-0.0.8.dist-info → ksxt-0.0.9.dist-info}/WHEEL +1 -1
  116. ksxt/__pycache__/__init__.cpython-39.pyc +0 -0
  117. ksxt/__pycache__/koreainvest.cpython-39.pyc +0 -0
  118. ksxt/base/__pycache__/__init__.cpython-39.pyc +0 -0
  119. ksxt/base/__pycache__/exchange.cpython-39.pyc +0 -0
  120. ksxt/base/__pycache__/rest_exchange.cpython-39.pyc +0 -0
  121. ksxt/base/__pycache__/restexchange.cpython-39.pyc +0 -0
  122. ksxt/base/__pycache__/types.cpython-39.pyc +0 -0
  123. ksxt/base/api_response.py +0 -68
  124. ksxt/config/__pycache__/__init__.cpython-39.pyc +0 -0
  125. ksxt/config/tr_app.json +0 -381
  126. ksxt/config/tr_dev.json +0 -446
  127. ksxt/market/__pycache__/base.cpython-39.pyc +0 -0
  128. ksxt/market/__pycache__/db.cpython-39.pyc +0 -0
  129. ksxt/market/__pycache__/logging.cpython-39.pyc +0 -0
  130. ksxt/market/__pycache__/manager.cpython-39.pyc +0 -0
  131. ksxt/market/__pycache__/markets.cpython-39.pyc +0 -0
  132. ksxt/market/krx/__pycache__/kosdaq.cpython-39.pyc +0 -0
  133. ksxt/market/krx/__pycache__/kospi.cpython-39.pyc +0 -0
  134. ksxt/market/krx/__pycache__/stock.cpython-39.pyc +0 -0
  135. ksxt/market/us/__pycache__/amex.cpython-39.pyc +0 -0
  136. ksxt/market/us/__pycache__/nasdaq.cpython-39.pyc +0 -0
  137. ksxt/market/us/__pycache__/nyse.cpython-39.pyc +0 -0
  138. ksxt/market/us/__pycache__/stock.cpython-39.pyc +0 -0
  139. ksxt-0.0.8.dist-info/RECORD +0 -49
  140. {ksxt-0.0.8.dist-info → ksxt-0.0.9.dist-info}/LICENSE.txt +0 -0
  141. {ksxt-0.0.8.dist-info → ksxt-0.0.9.dist-info}/top_level.txt +0 -0
ksxt/config/upbit.toml ADDED
@@ -0,0 +1,428 @@
1
+ #######################################################
2
+ # Upbit API
3
+ # Lastested update time : 2024.07.31
4
+ #######################################################
5
+
6
+ id = 'upbit'
7
+ name = 'Upbit'
8
+ countries = ['KR']
9
+ rate_limit = 1000
10
+ enableRateLimit = false
11
+ www = 'https://www.upbit.com'
12
+ doc = 'https://docs.upbit.com'
13
+
14
+ #######################################################
15
+ # rest api
16
+ #######################################################
17
+ [apis.rest]
18
+ hostname = "https://api.upbit.com"
19
+ version = "v1"
20
+
21
+ #######################################################
22
+ # rest api - stock
23
+ #######################################################
24
+ [apis.rest.stock]
25
+ url_market = ""
26
+
27
+ #######################################################
28
+ # 자산
29
+ #######################################################
30
+ [apis.rest.stock.fetch_balance]
31
+ url = "accounts"
32
+ method = 'GET'
33
+ api = 'private'
34
+ activate = true
35
+ __comment__ = "전체 계좌 조회"
36
+
37
+ [apis.rest.stock.fetch_cash]
38
+ url = "accounts"
39
+ method = 'GET'
40
+ api = 'private'
41
+ activate = true
42
+ __comment__ = "전체 계좌 조회"
43
+
44
+ #######################################################
45
+ # 주문
46
+ #######################################################
47
+ [apis.rest.stock.fetch_security_info]
48
+ url = "orders/chance"
49
+ method = 'GET'
50
+ api = 'private'
51
+ activate = true
52
+ __comment__ = "주문 가능 정보"
53
+
54
+ [apis.rest.stock.fetch_trade_fee]
55
+ url = "orders/chance"
56
+ method = 'GET'
57
+ api = 'private'
58
+ activate = true
59
+ __comment__ = "주문 가능 정보"
60
+
61
+ # ksxt 미지원 기능
62
+ [apis.rest.stock.TBD2]
63
+ url = "order"
64
+ method = 'GET'
65
+ api = 'private'
66
+ activate = false
67
+ __comment__ = "개별 주문 조회"
68
+
69
+ [apis.rest.stock.DEPRECATED1]
70
+ url = "orders"
71
+ method = 'GET'
72
+ api = 'private'
73
+ activate = false
74
+ __comment__ = "주문 리스트 조회"
75
+
76
+ [apis.rest.stock.fetch_closed_order_detail]
77
+ url = "order/uuids"
78
+ method = 'GET'
79
+ api = 'private'
80
+ activate = true
81
+ __comment__ = "id로 주문리스트 조회"
82
+
83
+ [apis.rest.stock.fetch_opened_order_detail]
84
+ url = "order/uuids"
85
+ method = 'GET'
86
+ api = 'private'
87
+ activate = true
88
+ __comment__ = "id로 주문리스트 조회"
89
+
90
+ [apis.rest.stock.fetch_opened_order]
91
+ url = "orders/open"
92
+ method = 'GET'
93
+ api = 'private'
94
+ activate = true
95
+ __comment__ = "체결 대기 주문 (Open Order) 조회"
96
+
97
+ [apis.rest.stock.fetch_closed_order]
98
+ url = "orders/closed"
99
+ method = 'GET'
100
+ api = 'private'
101
+ activate = true
102
+ __comment__ = "종료된 주문 (Closed Order) 조회"
103
+
104
+ [apis.rest.stock.send_cancel_order]
105
+ url = "order"
106
+ method = 'DELETE'
107
+ api = 'private'
108
+ activate = true
109
+ __comment__ = "주문 취소 접수"
110
+
111
+ [apis.rest.stock.send_order_entry]
112
+ url = "orders"
113
+ method = 'POST'
114
+ api = 'private'
115
+ activate = true
116
+ __comment__ = "주문하기"
117
+
118
+ [apis.rest.stock.send_order_entry_market]
119
+ url = "orders"
120
+ method = 'POST'
121
+ api = 'private'
122
+ activate = true
123
+ __comment__ = "주문하기"
124
+
125
+ [apis.rest.stock.send_order_exit]
126
+ url = "orders"
127
+ method = 'POST'
128
+ api = 'private'
129
+ activate = true
130
+ __comment__ = "주문하기"
131
+
132
+ [apis.rest.stock.send_order_exit_market]
133
+ url = "orders"
134
+ method = 'POST'
135
+ api = 'private'
136
+ activate = true
137
+ __comment__ = "주문하기"
138
+
139
+ #######################################################
140
+ # 출금
141
+ #######################################################
142
+ [apis.rest.stock.fetch_withdrawal_history]
143
+ url = "withdraws"
144
+ method = 'GET'
145
+ api = 'private'
146
+ activate = true
147
+ __comment__ = "출금 리스트 조회"
148
+
149
+ # ksxt 미지원 기능
150
+ [apis.rest.stock.TBD3]
151
+ url = "withdraw"
152
+ method = 'GET'
153
+ api = 'private'
154
+ activate = false
155
+ __comment__ = "개별 출금 조회"
156
+
157
+ # ksxt 미지원 기능
158
+ [apis.rest.stock.TBD4]
159
+ url = "withdraws/chance"
160
+ method = 'GET'
161
+ api = 'private'
162
+ activate = false
163
+ __comment__ = "출금 가능 정보"
164
+
165
+ # ksxt 미지원 기능
166
+ [apis.rest.stock.TBD5]
167
+ url = "withdraws/coin"
168
+ method = 'GET'
169
+ api = 'private'
170
+ activate = false
171
+ __comment__ = "출금 가능 정보"
172
+
173
+ # ksxt 미지원 기능
174
+ [apis.rest.stock.TBD6]
175
+ url = "withdraws/coin"
176
+ method = 'POST'
177
+ api = 'private'
178
+ activate = false
179
+ __comment__ = "디지털 자산 출금하기"
180
+
181
+ # ksxt 미지원 기능
182
+ [apis.rest.stock.TBD7]
183
+ url = "withdraws/krw"
184
+ method = 'POST'
185
+ api = 'private'
186
+ activate = false
187
+ __comment__ = "원화 출금하기"
188
+
189
+ # ksxt 미지원 기능
190
+ [apis.rest.stock.TBD8]
191
+ url = "withdraws/coin_addresses"
192
+ method = 'GET'
193
+ api = 'private'
194
+ activate = false
195
+ __comment__ = "출금 허용 주소 리스트 조회"
196
+
197
+ #######################################################
198
+ # 입금
199
+ #######################################################
200
+ [apis.rest.stock.fetch_deposit_history]
201
+ url = "deposits"
202
+ method = 'GET'
203
+ api = 'private'
204
+ activate = true
205
+ __comment__ = "입금 리스트 조회"
206
+
207
+ # ksxt 미지원 기능
208
+ [apis.rest.stock.TBD9]
209
+ url = "deposit"
210
+ method = 'GET'
211
+ api = 'private'
212
+ activate = false
213
+ __comment__ = "개별 입금 조회"
214
+
215
+ # ksxt 미지원 기능
216
+ [apis.rest.stock.TBD10]
217
+ url = "deposits/generate_coin_address"
218
+ method = 'POST'
219
+ api = 'private'
220
+ activate = false
221
+ __comment__ = "입금 주소 생성 요청"
222
+
223
+ # ksxt 미지원 기능
224
+ [apis.rest.stock.TBD11]
225
+ url = "deposits/coin_addresses"
226
+ method = 'GET'
227
+ api = 'private'
228
+ activate = false
229
+ __comment__ = "전체 입금 주소 조회"
230
+
231
+ # ksxt 미지원 기능
232
+ [apis.rest.stock.TBD12]
233
+ url = "deposits/coin_address"
234
+ method = 'GET'
235
+ api = 'private'
236
+ activate = false
237
+ __comment__ = "개별 입금 주소 조회"
238
+
239
+ # ksxt 미지원 기능
240
+ [apis.rest.stock.TBD13]
241
+ url = "deposits/krw"
242
+ method = 'POST'
243
+ api = 'private'
244
+ activate = false
245
+ __comment__ = "원화 입금하기"
246
+
247
+ #######################################################
248
+ # 입금 - 해외거래소 입금 시 계정주 확인 하기(트래블룰 검증)
249
+ #######################################################
250
+ # ksxt 미지원 기능
251
+ [apis.rest.stock.TBD14]
252
+ url = "travel_rule/vasps"
253
+ method = 'GET'
254
+ api = 'private'
255
+ activate = false
256
+ __comment__ = "계정주 확인(트래블룰 검증)가능 거래소 리스트 조회"
257
+
258
+ # ksxt 미지원 기능
259
+ [apis.rest.stock.TBD15]
260
+ url = "travel_rule/deposit/uuid"
261
+ method = 'POST'
262
+ api = 'private'
263
+ activate = false
264
+ __comment__ = "입금 UUID로 트래블룰 검증하기"
265
+
266
+ # ksxt 미지원 기능
267
+ [apis.rest.stock.TBD16]
268
+ url = "travel_rule/deposit/txid"
269
+ method = 'POST'
270
+ api = 'private'
271
+ activate = false
272
+ __comment__ = "입금 TxID로 트래블룰 검증하기"
273
+
274
+ #######################################################
275
+ # 서비스 정보
276
+ #######################################################
277
+ # ksxt 미지원 기능
278
+ [apis.rest.stock.TBD17]
279
+ url = "status/wallet"
280
+ method = 'GET'
281
+ api = 'private'
282
+ activate = false
283
+ __comment__ = "입금 TxID로 트래블룰 검증하기"
284
+
285
+ # ksxt 미지원 기능
286
+ [apis.rest.stock.TBD18]
287
+ url = "api_keys"
288
+ method = 'GET'
289
+ api = 'private'
290
+ activate = false
291
+ __comment__ = "API 키 리스트 조회"
292
+
293
+ #######################################################
294
+ # 시세 종목 조회
295
+ #######################################################
296
+ [apis.rest.stock.fetch_markets]
297
+ url = "market/all"
298
+ method = 'GET'
299
+ api = 'public'
300
+ activate = true
301
+ __comment__ = "마켓 코드 조회"
302
+
303
+ #######################################################
304
+ # 시세 캐들 조회
305
+ #######################################################
306
+ [apis.rest.stock.fetch_security_ohlcv_minute]
307
+ url = "candles/minutes/{unit}"
308
+ method = 'GET'
309
+ api = 'public'
310
+ activate = true
311
+ __comment__ = "분(Minute) 캔들"
312
+
313
+ [apis.rest.stock.fetch_security_ohlcv_day]
314
+ url = "candles/days"
315
+ method = 'GET'
316
+ api = 'public'
317
+ activate = true
318
+ __comment__ = "일(Day) 캔들"
319
+
320
+ [apis.rest.stock.fetch_security_ohlcv_week]
321
+ url = "candles/weeks"
322
+ method = 'GET'
323
+ api = 'public'
324
+ activate = true
325
+ __comment__ = "주(Week) 캔들"
326
+
327
+ [apis.rest.stock.fetch_security_ohlcv_month]
328
+ url = "candles/months"
329
+ method = 'GET'
330
+ api = 'public'
331
+ activate = true
332
+ __comment__ = "월(Month) 캔들"
333
+
334
+ #######################################################
335
+ # 시세 체결 조회
336
+ #######################################################
337
+ # ksxt 미지원 기능
338
+ [apis.rest.stock.TBD19]
339
+ url = "trades/ticks"
340
+ method = 'GET'
341
+ api = 'private'
342
+ activate = false
343
+ __comment__ = "최근 체결 내역"
344
+
345
+ #######################################################
346
+ # 시세 현재가(Ticker) 조회
347
+ #######################################################
348
+ [apis.rest.stock.fetch_ticker_price]
349
+ url = "ticker"
350
+ method = 'GET'
351
+ api = 'public'
352
+ activate = true
353
+ __comment__ = "현재가 정보"
354
+
355
+ [apis.rest.stock.fetch_tickers_price]
356
+ url = "ticker"
357
+ method = 'GET'
358
+ api = 'public'
359
+ activate = true
360
+ __comment__ = "현재가 정보"
361
+
362
+ #######################################################
363
+ # 시세 호가 정보(Orderbook) 조회
364
+ #######################################################
365
+ [apis.rest.stock.fetch_orderbook]
366
+ url = "orderbook"
367
+ method = 'GET'
368
+ api = 'public'
369
+ activate = true
370
+ __comment__ = "호가 정보 조회"
371
+
372
+ [apis.rest.stock.fetch_orderbooks]
373
+ url = "orderbook"
374
+ method = 'GET'
375
+ api = 'public'
376
+ activate = true
377
+ __comment__ = "호가 정보 조회"
378
+
379
+ # ksxt 미지원 기능
380
+ [apis.rest.stock.TBD20]
381
+ url = "orderbook/supported_levels"
382
+ method = 'GET'
383
+ api = 'private'
384
+ activate = false
385
+ __comment__ = "호가 모아보기 단위 정보 조회"
386
+
387
+ #######################################################
388
+ # websocket api
389
+ #######################################################
390
+ [apis.websocket]
391
+ hostname = "api.upbit.com/websocket"
392
+ version = "v1"
393
+
394
+ [apis.websocket.stock.public]
395
+ url_market = ""
396
+
397
+ [apis.websocket.stock.public.subscribe_ticker]
398
+ url = "“ticker”"
399
+ activate = true
400
+ __comment__ = "현재가 (스냅샷, 실시간 정보 제공)"
401
+
402
+ [apis.websocket.stock.public.subscribe_trade]
403
+ url = "“trade”"
404
+ activate = true
405
+ __comment__ = "체결 (스냅샷, 실시간 정보 제공)"
406
+
407
+ [apis.websocket.stock.public.subscribe_orderbook]
408
+ url = "“orderbook”"
409
+ activate = true
410
+ __comment__ = "호가 (스냅샷, 실시간 정보 제공)"
411
+
412
+ [apis.websocket.stock.public.subscribe_order]
413
+ url = "“myTrade”"
414
+ activate = true
415
+ __comment__ = "내 체결 (실시간 정보 제공)"
416
+
417
+ [apis.websocket.stock.private]
418
+ url_market = "private"
419
+
420
+ [apis.websocket.stock.private.subscribe_ticker]
421
+ url = "myOrder"
422
+ activate = true
423
+ __comment__ = "내 주문 (실시간 정보 제공)"
424
+
425
+ [apis.websocket.stock.private.subscribe_trade]
426
+ url = "myAsset"
427
+ activate = true
428
+ __comment__ = "내 자산 (실시간 정보 제공)"