drvikasgaur's picture
Update app.py
4fef53c verified
raw
history blame
2.18 kB
import gradio as gr
import pandas as pd
import requests
import os
from datetime import datetime
from docx import Document
def search_api(query):
url = f"https://api.duckduckgo.com/?q={query}&format=json&no_redirect=1"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
related_topics = data.get("RelatedTopics", [])
results = []
for topic in related_topics:
if "Text" in topic and "FirstURL" in topic:
results.append({
"Title": topic["Text"],
"URL": topic["FirstURL"]
})
return pd.DataFrame(results)
else:
return pd.DataFrame([{"Title": "Error", "URL": "Failed to fetch results"}])
# Save results
def export_csv(df):
file_path = "search_results.csv"
df.to_csv(file_path, index=False)
return file_path
def export_docx(df):
doc = Document()
doc.add_heading("Search Results", 0)
for _, row in df.iterrows():
doc.add_paragraph(f"{row['Title']}\n{row['URL']}")
file_path = "search_results.docx"
doc.save(file_path)
return file_path
# Set up Gradio Blocks
with gr.Blocks() as demo:
gr.Markdown("## πŸ”Ž Simple Search with Export Options")
query_input = gr.Textbox(label="Search Query", placeholder="Enter a topic...")
search_button = gr.Button("Search")
results_df = gr.Dataframe(label="Search Results", interactive=False)
with gr.Row():
export_csv_button = gr.Button("Export as CSV")
export_docx_button = gr.Button("Export as Word DOCX")
csv_output = gr.File(label="Download CSV")
docx_output = gr.File(label="Download DOCX")
# Logic
def handle_search(q):
df = search_api(q)
return df
def handle_csv_export(df):
return export_csv(df)
def handle_docx_export(df):
return export_docx(df)
search_button.click(handle_search, inputs=query_input, outputs=results_df)
export_csv_button.click(handle_csv_export, inputs=results_df, outputs=csv_output)
export_docx_button.click(handle_docx_export, inputs=results_df, outputs=docx_output)
demo.launch()