import gradio as gr import requests import pandas as pd import plotly.graph_objects as go # Define your CryptoCompare API key API_KEY = 'c1e07b0b9a72b6f5ea096763a17a2a1eec7a925a10faadd615b2d152f208a98d' # Function to fetch historical price data from CryptoCompare def fetch_historical_data(coin_id, from_date, to_date): try: url = "https://min-api.cryptocompare.com/data/v2/histoday" params = { 'fsym': coin_id, 'tsym': 'USD', 'limit': 2000, # Maximum number of data points 'toTs': pd.Timestamp(to_date).timestamp(), 'api_key': API_KEY } response = requests.get(url, params=params) response.raise_for_status() data = response.json() df = pd.DataFrame(data['Data']['Data']) df['time'] = pd.to_datetime(df['time'], unit='s') df = df[['time', 'close']].rename(columns={'time': 'timestamp', 'close': 'price'}) return df except Exception as e: return f"Error fetching historical data for {coin_id}: {e}" # Function to fetch current prices from CryptoCompare def fetch_current_price(coin_id): try: url = "https://min-api.cryptocompare.com/data/price" params = { 'fsym': coin_id, 'tsyms': 'USD', 'api_key': API_KEY } response = requests.get(url, params=params) response.raise_for_status() data = response.json() return f"${data['USD']}" except Exception as e: return f"Error fetching current price for {coin_id}: {e}" # Function to provide TradingView widget HTML def get_tradingview_chart(): widget_html = """ """ return widget_html # Function to fetch real-time trade data from CryptoCompare def get_real_time_trade_data(): try: return fetch_current_price('BTC') except Exception as e: return f"Error fetching real-time trade data: {e}" # Function to plot historical prices using Plotly def plot_historical_prices(coin_name, from_date, to_date): df = fetch_historical_data(coin_name, from_date, to_date) if isinstance(df, str): # In case of error return df fig = go.Figure() fig.add_trace(go.Scatter(x=df['timestamp'], y=df['price'], mode='lines', name=coin_name)) fig.update_layout(title=f'{coin_name.capitalize()} Prices from {from_date} to {to_date}', xaxis_title='Date', yaxis_title='Price (USD)') return fig # Function to analyze Bitcoin based on the prompt def analyze_btc(prompt): """Analyze the prompt and provide information.""" prompt = prompt.lower() if "price" in prompt: return f"Current Bitcoin price: {fetch_current_price('BTC')}" elif "trade data" in prompt: return get_real_time_trade_data() elif "chart" in prompt: return get_tradingview_chart() # Use HTML component for TradingView chart return "Try asking about the Bitcoin price, real-time trade data, or TradingView chart." # Gradio Interface Setup # AI BTC Analysis Interface btc_analysis_interface = gr.Interface( fn=analyze_btc, inputs="text", outputs="html", # Ensure output is HTML title="Bitcoin Analyzer", description="Ask about the current Bitcoin price, real-time trade data, or TradingView chart." ) # TradingView Interface for live charts tradingview_interface = gr.Interface( fn=get_tradingview_chart, inputs=[], outputs=gr.HTML(label="TradingView Chart"), title="Live TradingView Chart" ) # Real-time Trade Data Interface real_time_trade_interface = gr.Interface( fn=get_real_time_trade_data, inputs=[], outputs=gr.Textbox(label="Real-Time Trade Data"), title="Real-Time Cryptocurrency Trade Data" ) # Price Chart Interface crypto_price_chart_interface = gr.Interface( fn=plot_historical_prices, inputs=[ gr.Dropdown(choices=['BTC'], label="Cryptocurrency"), gr.Textbox(value="2024-01-01", label="From Date (YYYY-MM-DD)"), gr.Textbox(value="2025-12-31", label="To Date (YYYY-MM-DD)") ], outputs=gr.Plot(label="Cryptocurrency Price Chart"), title="Cryptocurrency Price Chart (2024-2025)" ) # Current Price Interface current_price_interface = gr.Interface( fn=fetch_current_price, inputs=gr.Dropdown(choices=['BTC'], label="Cryptocurrency"), outputs=gr.Textbox(label="Current Price"), title="Current Cryptocurrency Price" ) # Combining all interfaces into a single tabbed app gr.TabbedInterface( [crypto_price_chart_interface, current_price_interface, real_time_trade_interface, btc_analysis_interface, tradingview_interface], tab_names=["Price Chart", "Current Price", "Real-Time Trade Data", "AI BTC Analysis", "TradingView Chart"] ).launch()