Spaces:
Runtime error
Runtime error
| 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() | |