Spaces:
Sleeping
Sleeping
| from typing import Dict | |
| import gradio as gr | |
| import yfinance as yf | |
| def get_stocks_info(ticker: str) -> Dict[str, str]: | |
| """ | |
| Fetches the current stock price and daily change for a stock ticker. | |
| Args: | |
| ticker: The stock ticker to get information for. | |
| Returns: | |
| A dictionary containing the stock price and daily change. | |
| """ | |
| financial_data: Dict[str, str] = {} | |
| # Filter out invalid tickers upfront | |
| ticker = ticker.upper().strip() | |
| if not ticker or ticker in ["N/A", "NA", ""]: | |
| return {ticker: "No financial data"} | |
| try: | |
| stock = yf.Ticker(ticker) | |
| info = stock.info | |
| price = info.get("currentPrice") or info.get("regularMarketPrice") | |
| change_percent = info.get("regularMarketChangePercent") | |
| if price is not None and change_percent is not None: | |
| change_str = f"{change_percent * 100:+.2f}%" | |
| financial_data[ticker] = f"${price:.2f} ({change_str})" | |
| else: | |
| financial_data[ticker] = "Price data not available." | |
| return financial_data | |
| except Exception: | |
| return {ticker: "Invalid Ticker or Data Error"} | |
| demo = gr.Interface( | |
| fn=get_stocks_info, | |
| inputs=gr.Textbox(placeholder="Enter a stock ticker", label="Stock Ticker"), | |
| outputs=gr.JSON(label="Output"), | |
| title="YFinance MCP", | |
| description="Get the current stock price and daily change for a stock ticker", | |
| examples=[ | |
| ["AAPL"], | |
| ["GOOG"], | |
| ["MSFT"], | |
| ], | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch(mcp_server=True) | |