stock_dashboard / app.py
GoppyKrishna77's picture
Update app.py
a0586fa verified
import os
import shutil
import yfinance as yf
import gradio as gr
from GoogleNews import GoogleNews
download_folder = "downloads"
if not os.path.exists(download_folder):
os.makedirs(download_folder)
def fetch_stock_data(ticker="GOOGL", period="1mo"):
stock = yf.Ticker(ticker)
data = stock.history(period=period)
if data.empty:
raise ValueError(f"No data found for ticker: {ticker}")
data.reset_index(inplace=True)
data['Ticker'] = ticker
return data
def fetch_news(ticker):
googlenews = GoogleNews()
googlenews.search(f"{ticker} stock news")
news_items = googlenews.result()
news_cards = []
clean_news_link = lambda link: link[:link.find("&ved")]
for item in news_items:
news_cards.append(f"**[{item['title']}]({clean_news_link(item['link'])})** \n*{item['date']}*")
half = len(news_cards) // 2
news_column_1 = "\n\n".join(news_cards[:half])
news_column_2 = "\n\n".join(news_cards[half:])
return news_column_1, news_column_2
def update_graph(ticker="GOOGL", duration="1mo"):
try:
new_data = fetch_stock_data(ticker=ticker, period=duration)
company_name = new_data['Ticker'][0]
news_col1, news_col2 = fetch_news(ticker)
return new_data, news_col1, news_col2, f"{company_name} Stock Price"
except ValueError as ve:
raise gr.Error(str(ve))
except Exception as e:
raise gr.Error(f"An error occurred: {str(e)}")
def download_data(ticker, duration):
data = fetch_stock_data(ticker=ticker, period=duration)
csv_file = os.path.join(download_folder, f"{ticker}_{duration}.csv")
data.to_csv(csv_file, index=False)
return csv_file
def cleanup():
shutil.rmtree(download_folder)
with gr.Blocks() as stock_app:
gr.Markdown("# Stock Market Dashboard")
with gr.Row():
ticker = gr.Textbox(label="Stock Ticker:", value="GOOGL")
duration = gr.Radio(["1mo", "3mo", "6mo", "1y"], label="Duration", value="1mo")
apply_btn = gr.Button("Apply", scale=0)
gr.Examples(["NVDA", "INFY", "MSFT", "TSLA", "GOOGL", "TCS"], inputs=[ticker], label="Other Companies : ")
initial_data = fetch_stock_data(ticker="GOOGL", period="1mo")
stock_plot = gr.LinePlot(initial_data, x="Date", y="Close", label="Stock Price")
default_news_col1, default_news_col2 = fetch_news("GOOGL")
gr.Markdown("## Recent News")
with gr.Row():
news_display_col1 = gr.Markdown(default_news_col1)
news_display_col2 = gr.Markdown(default_news_col2)
apply_btn.click(fn=update_graph, inputs=[ticker, duration], outputs=[stock_plot, news_display_col1, news_display_col2])
download_btn = gr.Button("Download Data")
download_file = gr.File(label="Download Historical Data (CSV)")
download_btn.click(fn=download_data, inputs=[ticker, duration], outputs=download_file)
stock_app.title = "Stock Market Dashboard"
stock_app.launch(share=True)
cleanup()