import gradio as gr from freecurrencyapi import Client # Initialize the FreeCurrencyAPI client api_key = 'fca_live_TYFdDMZC9xmEEZPpTJCUdcJQIbdGwis1CHmmYF1d' # Replace with your actual API key client = Client(api_key) # Function to get current exchange rates def convert_currency(amount, from_currency, to_currency, historical=False, date=None): try: if historical and date: # Fetch historical data if needed result = client.historical(date=date) print(f"Historical data for {date}: {result}") # Debugging line to print the response rates = result.get('data', {}).get(date, {}) else: # Get the latest rates result = client.currencies(currencies=[from_currency, to_currency]) print(f"Latest rates: {result}") # Debugging line to print the response rates = result.get('data', {}).get('rates', {}) # Check if rates for the given currencies are available if from_currency in rates and to_currency in rates: conversion_rate = rates[to_currency] / rates[from_currency] converted_amount = float(amount) * conversion_rate return f"{amount} {from_currency} = {converted_amount:.2f} {to_currency}" else: return f"Error: Data not available for {from_currency} or {to_currency}." except Exception as e: return f"Error: {str(e)}" # Define the Gradio interface def create_interface(): with gr.Blocks() as interface: with gr.Row(): gr.Markdown("

Currency Converter

") with gr.Row(): amount = gr.Textbox(label="Amount", value="1", placeholder="Enter amount", elem_id="amount_input") with gr.Row(): from_currency = gr.Dropdown( choices=["USD", "EUR", "GBP", "INR", "JPY", "CAD", "AUD", "CNY", "BRL", "ZAR"], label="From Currency", value="USD", elem_id="from_currency_input" ) to_currency = gr.Dropdown( choices=["USD", "EUR", "GBP", "INR", "JPY", "CAD", "AUD", "CNY", "BRL", "ZAR"], label="To Currency", value="EUR", elem_id="to_currency_input" ) with gr.Row(): historical_checkbox = gr.Checkbox(label="Get Historical Data", value=False) historical_date = gr.Textbox(label="Select Date (YYYY-MM-DD)", visible=False) # Use Textbox for date with gr.Row(): convert_button = gr.Button("Convert") with gr.Row(): output = gr.Textbox(label="Converted Amount", interactive=False) # Update the visibility of the date picker based on historical checkbox historical_checkbox.change( lambda checked: historical_date.update(visible=checked), inputs=[historical_checkbox], outputs=[historical_date] ) # Function to trigger conversion with historical data if required convert_button.click( fn=convert_currency, inputs=[amount, from_currency, to_currency, historical_checkbox, historical_date], outputs=output ) return interface # Launch the interface interface = create_interface() interface.launch(share=True)