File size: 1,510 Bytes
16a610b
 
 
 
4b109de
16a610b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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()