missbaj's picture
app.py
7cce695 verified
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 = """
<iframe
src="https://www.tradingview.com/widgetembed/?frameElementId=tradingview_ea33b&symbol=BINANCE:BTCUSDT&interval=60"
width="800"
height="600"
frameborder="0"
allowtransparency="true"
scrolling="no"
allowfullscreen="true">
</iframe>
"""
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()