import csv import gradio as gr from duckduckgo_search import DDGS def search_duckduckgo(query: str, max_results: int = 1000): results = [] with DDGS() as ddgs: for r in ddgs.text(query, max_results=max_results): results.append(r['href']) return results def save_urls_to_csv(urls, filename="duckduckgo_search_urls.csv"): with open(filename, mode='w', newline='', encoding='utf-8') as file: writer = csv.writer(file) writer.writerow(["URL"]) for url in urls: writer.writerow([url]) return filename def search_and_save(query, max_results): urls = search_duckduckgo(query, max_results) csv_file = save_urls_to_csv(urls) return urls, csv_file with gr.Blocks() as demo: gr.Markdown("## 🔍 DuckDuckGo Search Interface") with gr.Row(): query_input = gr.Textbox(label="Search Query", placeholder="Enter your search query here") max_results_input = gr.Slider(minimum=1, maximum=100, value=10, step=1, label="Max Results") search_button = gr.Button("Search") results_output = gr.Dataframe(headers=["URL"], label="Search Results") download_output = gr.File(label="Download CSV") def on_search_click(query, max_results): urls, csv_file = search_and_save(query, max_results) return [urls], csv_file search_button.click( fn=on_search_click, inputs=[query_input, max_results_input], outputs=[results_output, download_output] ) demo.launch()