Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -118,12 +118,29 @@ def fetch_financial_news(keyword):
|
|
| 118 |
|
| 119 |
|
| 120 |
# --------------------------
|
| 121 |
-
#
|
|
|
|
| 122 |
# --------------------------
|
| 123 |
@st.cache_data(ttl=3600)
|
| 124 |
def fetch_stock_price(symbol):
|
| 125 |
try:
|
| 126 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
df = df.reset_index()[["Date", "Close"]]
|
| 128 |
df.rename(columns={"Date": "date", "Close": "price"}, inplace=True)
|
| 129 |
df["date"] = pd.to_datetime(df["date"])
|
|
@@ -134,7 +151,7 @@ def fetch_stock_price(symbol):
|
|
| 134 |
|
| 135 |
|
| 136 |
# --------------------------
|
| 137 |
-
# MAIN APP
|
| 138 |
# --------------------------
|
| 139 |
def main():
|
| 140 |
st.title("📰 SentimentSync NewsAI")
|
|
@@ -194,9 +211,9 @@ def main():
|
|
| 194 |
future_dates = [df_sorted["date"].max() + timedelta(days=i) for i in range(1, future_days + 1)]
|
| 195 |
future_preds = model.predict(future_timestamps.reshape(-1, 1))
|
| 196 |
|
| 197 |
-
# ดึงราคาหุ้น
|
| 198 |
_, symbol = resolve_company_symbol(keyword)
|
| 199 |
-
stock_df = fetch_stock_price(symbol)
|
| 200 |
|
| 201 |
# Plot
|
| 202 |
fig = go.Figure()
|
|
@@ -212,9 +229,9 @@ def main():
|
|
| 212 |
mode="lines+markers", name="Predicted Sentiment (7-day Forecast)",
|
| 213 |
line=dict(color="orange", dash="dash")
|
| 214 |
))
|
| 215 |
-
# Stock price
|
| 216 |
if not stock_df.empty:
|
| 217 |
-
fig.
|
| 218 |
x=stock_df["date"], y=stock_df["price"],
|
| 219 |
mode="lines+markers", name=f"{symbol} Stock Price",
|
| 220 |
line=dict(color="green"), yaxis="y2"
|
|
@@ -238,4 +255,4 @@ def main():
|
|
| 238 |
|
| 239 |
if __name__ == "__main__":
|
| 240 |
nltk.download("stopwords", quiet=True)
|
| 241 |
-
main()
|
|
|
|
| 118 |
|
| 119 |
|
| 120 |
# --------------------------
|
| 121 |
+
# (*** ส่วนที่แก้ไข ***)
|
| 122 |
+
# ดึงราคาหุ้นย้อนหลัง (แก้ไขให้ตรงกับช่วงข่าว)
|
| 123 |
# --------------------------
|
| 124 |
@st.cache_data(ttl=3600)
|
| 125 |
def fetch_stock_price(symbol):
|
| 126 |
try:
|
| 127 |
+
# --- (เริ่มการแก้ไข) ---
|
| 128 |
+
# ดึงข้อมูลย้อนหลัง 8 วัน (เพื่อให้ครอบคลุมช่วงข่าว 7 วัน)
|
| 129 |
+
# เราใช้ start/end ที่ชัดเจน แทน period="14d"
|
| 130 |
+
# เพื่อให้แน่ใจว่าช่วงเวลาตรงกับข่าวที่เพิ่งดึงมา
|
| 131 |
+
end_date = datetime.now()
|
| 132 |
+
start_date = end_date - timedelta(days=8)
|
| 133 |
+
|
| 134 |
+
df = yf.download(symbol,
|
| 135 |
+
start=start_date.strftime('%Y-%m-%d'),
|
| 136 |
+
end=end_date.strftime('%Y-%m-%d'),
|
| 137 |
+
interval="1d")
|
| 138 |
+
# --- (สิ้นสุดการแก้ไข) ---
|
| 139 |
+
|
| 140 |
+
if df.empty:
|
| 141 |
+
st.warning("ไม่พบข้อมูลราคาหุ้นในช่วง 8 วันที่ผ่านมา")
|
| 142 |
+
return pd.DataFrame()
|
| 143 |
+
|
| 144 |
df = df.reset_index()[["Date", "Close"]]
|
| 145 |
df.rename(columns={"Date": "date", "Close": "price"}, inplace=True)
|
| 146 |
df["date"] = pd.to_datetime(df["date"])
|
|
|
|
| 151 |
|
| 152 |
|
| 153 |
# --------------------------
|
| 154 |
+
# MAIN APP (เหมือนเดิมทุกประการ)
|
| 155 |
# --------------------------
|
| 156 |
def main():
|
| 157 |
st.title("📰 SentimentSync NewsAI")
|
|
|
|
| 211 |
future_dates = [df_sorted["date"].max() + timedelta(days=i) for i in range(1, future_days + 1)]
|
| 212 |
future_preds = model.predict(future_timestamps.reshape(-1, 1))
|
| 213 |
|
| 214 |
+
# ดึงราคาหุ้น (นี่จะเรียกใช้ฟังก์ชันที่แก้ไขแล้ว)
|
| 215 |
_, symbol = resolve_company_symbol(keyword)
|
| 216 |
+
stock_df = fetch_stock_price(symbol)
|
| 217 |
|
| 218 |
# Plot
|
| 219 |
fig = go.Figure()
|
|
|
|
| 229 |
mode="lines+markers", name="Predicted Sentiment (7-day Forecast)",
|
| 230 |
line=dict(color="orange", dash="dash")
|
| 231 |
))
|
| 232 |
+
# Stock price (ตอนนี้จะแสดงผลตรงช่วงเวลาแล้ว)
|
| 233 |
if not stock_df.empty:
|
| 234 |
+
fig.add_trac(go.Scatter(
|
| 235 |
x=stock_df["date"], y=stock_df["price"],
|
| 236 |
mode="lines+markers", name=f"{symbol} Stock Price",
|
| 237 |
line=dict(color="green"), yaxis="y2"
|
|
|
|
| 255 |
|
| 256 |
if __name__ == "__main__":
|
| 257 |
nltk.download("stopwords", quiet=True)
|
| 258 |
+
main()
|