File size: 2,533 Bytes
83efdfc a1e7a46 83efdfc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | from typing import Any
from datetime import datetime
import yfinance as yf
from data.earnings import fetch_earnings_data
from data.finance_fetchers import fetch_fundamentals, fetch_news, fetch_price_data
from data.technicals import fetch_technicals
from llm.web_search import fetch_web_search
from utils.data_types import MarketData
def collect_data(client, intent, tools):
# ์ธํ
ํธ์ ์ ํ๋ ๋๊ตฌ ๋ชฉ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ์์ฅ ๋ฐ์ดํฐ ์์ง
ticker = intent.get("ticker", "")
period = intent.get("time_range", "1y")
print(f"[โข] ๋ฐ์ดํฐ ์์ง ์ค (ticker={ticker}, period={period})...")
price_data = {}
fundamentals = {}
technicals = {}
news_snippets = []
earnings_data = {}
web_search_results = []
if ticker:
if "price" in tools:
price_data = fetch_price_data(ticker, period)
print(f" โ ๊ฐ๊ฒฉ ๋ฐ์ดํฐ: {len(price_data)}๊ฐ ์งํ")
if "fundamentals" in tools:
fundamentals = fetch_fundamentals(ticker)
print(f" โ ํ๋๋ฉํธ: {len(fundamentals)}๊ฐ ์งํ")
if "technicals" in tools:
technicals = fetch_technicals(ticker, "6mo")
print(f" โ ๊ธฐ์ ์งํ: {len(technicals)}๊ฐ ์งํ")
if "news" in tools:
news_snippets = fetch_news(ticker)
print(f" โ ๋ด์ค: {len(news_snippets)}๊ฐ ํค๋๋ผ์ธ")
if "earnings" in tools:
earnings_data = fetch_earnings_data(
ticker,
target_year=intent.get("target_year"),
target_quarter=intent.get("target_quarter")
)
# fetch_web_search๋ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
# if "web_search" in tools:
# company_name = fundamentals.get("company_name", ticker) if fundamentals else ticker
# web_search_results = fetch_web_search(
# client=client,
# ticker=ticker,
# company_name=company_name,
# analysis_type=intent.get("analysis_type", "general"),
# language=intent.get("language", "ko"),
# target_year=intent.get("target_year"),
# target_quarter=intent.get("target_quarter"),
# )
return MarketData(
ticker=ticker,
price_data=price_data,
fundamentals=fundamentals,
technicals=technicals,
news_snippets=news_snippets,
earnings_data=earnings_data,
web_search_results=web_search_results,
)
|