Spaces:
openfree
/
Running on CPU Upgrade

File size: 4,443 Bytes
f2842d4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import gradio as gr
import requests
import json

API_KEY = "V38CNn4HXpLtynJQyOeoUensTEYoFy8PBUxKpDqAW1pawT1vfJ2BWtPQ98h6"

MAJOR_COUNTRIES = [
    "United States", "United Kingdom", "Canada", "Australia", "Germany", 
    "France", "Japan", "South Korea", "China", "India", 
    "Brazil", "Mexico", "Russia", "Italy", "Spain", 
    "Netherlands", "Sweden", "Switzerland", "Norway", "Denmark", 
    "Finland", "Belgium", "Austria", "New Zealand", "Ireland", 
    "Singapore", "Hong Kong", "Israel", "United Arab Emirates", "Saudi Arabia", 
    "South Africa", "Turkey", "Egypt", "Poland", "Czech Republic", 
    "Hungary", "Greece", "Portugal", "Argentina", "Chile", 
    "Colombia", "Peru", "Venezuela", "Thailand", "Malaysia", 
    "Indonesia", "Philippines", "Vietnam", "Pakistan", "Bangladesh"
]

def search_serphouse(query, country, page, num_result):
    url = "https://api.serphouse.com/serp/live"
    payload = {
        "data": {
            "q": query,
            "domain": "google.com",
            "loc": country,
            "lang": "en",
            "device": "desktop",
            "serp_type": "news",
            "page": str(page),
            "verbatim": "1",
            "num": str(num_result)
        }
    }
    
    headers = {
        "accept": "application/json",
        "content-type": "application/json",
        "authorization": f"Bearer {API_KEY}"
    }
    
    try:
        response = requests.post(url, json=payload, headers=headers)
        response.raise_for_status()
        return response.json()
    except requests.RequestException as e:
        return f"Error: {str(e)}"

def format_results(results):
    all_results = "## ๋ชจ๋“  ๋‰ด์Šค ๊ฒฐ๊ณผ\n\n"
    result_table = "## ๋‰ด์Šค ๊ฒฐ๊ณผ ํ‘œ\n\n"
    result_table += "| ์ œ๋ชฉ | ๋งํฌ | ์‹œ๊ฐ„ | ์ถœ์ฒ˜ | ๋””๋ฒ„๊ทธ ์ •๋ณด |\n"
    result_table += "|------|------|------|------|-------------|\n"
    
    debug_info = "## ๋””๋ฒ„๊ทธ ์ •๋ณด\n\n"
    debug_info += f"Raw API Response:\n```json\n{json.dumps(results, indent=2)}\n```\n\n"
    
    try:
        if not isinstance(results, dict):
            raise ValueError("๊ฒฐ๊ณผ๊ฐ€ ์‚ฌ์ „ ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.")
        
        if "results" not in results:
            raise ValueError("'results' ํ‚ค๊ฐ€ ์‘๋‹ต์— ์—†์Šต๋‹ˆ๋‹ค.")
        
        news_results = results["results"].get("news", [])
        debug_info += f"๋‰ด์Šค ๊ฒฐ๊ณผ ์ˆ˜: {len(news_results)}\n\n"
        
        for idx, result in enumerate(news_results):
            title = result.get("title", "์ œ๋ชฉ ์—†์Œ")
            url = result.get("url", "#")
            snippet = result.get("snippet", "๋‚ด์šฉ ์—†์Œ")
            channel = result.get("channel", "์•Œ ์ˆ˜ ์—†์Œ")
            time_str = result.get("time", "์•Œ ์ˆ˜ ์—†๋Š” ์‹œ๊ฐ„")
            
            single_debug_info = f"๋‰ด์Šค {idx + 1} - ์ œ๋ชฉ: {title}, ๋งํฌ: {url}, ์‹œ๊ฐ„: {time_str}, ์ถœ์ฒ˜: {channel}"
            
            result_table += f"| {title[:30]}... | [{url[:30]}...]({url}) | {time_str} | {channel} | {single_debug_info[:50]}... |\n"
            
            article_info = f"""
### [{title}]({url})
{snippet}
**์ถœ์ฒ˜:** {channel} - {time_str}
---
"""
            all_results += article_info
        
    except Exception as e:
        error_message = f"๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"
        debug_info += error_message + "\n"
        all_results = error_message + "\n\n"
        
        result_table += f"| ์˜ค๋ฅ˜ ๋ฐœ์ƒ | - | - | - | {error_message} |\n"
    
    return all_results, result_table + "\n\n" + debug_info


def serphouse_search(query, country, page, num_result):
    results = search_serphouse(query, country, page, num_result)
    all_results, result_table_and_debug = format_results(results)
    return all_results, result_table_and_debug

css = """
footer {
    visibility: hidden;
}
"""

iface = gr.Interface(
    fn=serphouse_search,
    inputs=[
        gr.Textbox(label="๊ฒ€์ƒ‰์–ด"),
        gr.Dropdown(MAJOR_COUNTRIES, label="๊ตญ๊ฐ€"),
        gr.Slider(1, 10, 1, label="ํŽ˜์ด์ง€"),
        gr.Slider(1, 100, 10, label="๊ฒฐ๊ณผ ์ˆ˜")
    ],
    outputs=[
        gr.Markdown(label="๋ชจ๋“  ๊ฒฐ๊ณผ"),
        gr.Markdown(label="๊ฒฐ๊ณผ ํ‘œ ๋ฐ ๋””๋ฒ„๊ทธ ์ •๋ณด")
    ],
    title="SERPHouse ๋‰ด์Šค ๊ฒ€์ƒ‰ ์ธํ„ฐํŽ˜์ด์Šค",
    description="๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊ตญ๊ฐ€๋ฅผ ์„ ํƒํ•˜์—ฌ SERPHouse API์—์„œ ๋‰ด์Šค ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.",
    theme="Nymbo/Nymbo_Theme",
    css=css
)

iface.launch()