seawolf2357 commited on
Commit
359bc71
ยท
verified ยท
1 Parent(s): 4d359bc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -34
app.py CHANGED
@@ -3,7 +3,7 @@ import requests
3
  import json
4
  from datetime import datetime, timedelta
5
 
6
- API_KEY = "V38CNn4HXpLtynJQyOeoUensTEYoFy8PBUxKpDqAW1pawT1vfJ2BWtPQ98h6"
7
 
8
  MAJOR_COUNTRIES = [
9
  "United States", "United Kingdom", "Canada", "Australia", "Germany",
@@ -61,27 +61,35 @@ def format_results_from_raw(results):
61
  debug_info = f"<pre>Raw API Response:\n{json.dumps(results, indent=2, ensure_ascii=False)}</pre>"
62
 
63
  if isinstance(results, dict) and "error" in results:
64
- return "Error: " + results["error"] + debug_info
65
 
66
  if not isinstance(results, dict):
67
  raise ValueError("๊ฒฐ๊ณผ๊ฐ€ ์‚ฌ์ „ ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.")
68
 
69
- # 'results' ํ‚ค ๋‚ด๋ถ€์˜ ๊ตฌ์กฐ ํ™•์ธ
70
  if 'results' in results:
71
  results_content = results['results']
72
- # 'news' ํ‚ค ํ™•์ธ
73
- if 'news' in results_content:
74
- news_results = results_content['news']
 
 
 
 
75
  else:
76
  news_results = []
77
  else:
78
  news_results = []
79
 
80
  if not news_results:
81
- return "๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + debug_info
82
 
 
83
  formatted_articles = ""
84
- for result in news_results:
 
 
 
85
  title = result.get("title", "์ œ๋ชฉ ์—†์Œ")
86
  link = result.get("url", result.get("link", "#"))
87
  snippet = result.get("snippet", "๋‚ด์šฉ ์—†์Œ")
@@ -95,6 +103,7 @@ def format_results_from_raw(results):
95
  else:
96
  image_html = ''
97
 
 
98
  article_html = f"""
99
  <div style="margin-bottom: 20px; border-bottom: 1px solid #ccc; padding-bottom: 20px;">
100
  <h3><a href="{link}" target="_blank">{title}</a></h3>
@@ -105,20 +114,32 @@ def format_results_from_raw(results):
105
  """
106
  formatted_articles += article_html
107
 
108
- # ๋‰ด์Šค ๊ฒฐ๊ณผ์™€ ๋””๋ฒ„๊ทธ ์ •๋ณด๋ฅผ ํ•ฉ์นจ
 
 
 
 
 
 
 
 
 
 
 
 
109
  combined_output = formatted_articles + debug_info
110
 
111
- return combined_output
112
 
113
  except Exception as e:
114
  error_message = f"๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"
115
  debug_info = f"<pre>Error: {error_message}\n</pre>"
116
- return "Error: " + error_message + debug_info
117
 
118
  def serphouse_search(query, country, page, num_result):
119
  results = search_serphouse(query, country, page, num_result)
120
- combined_output = format_results_from_raw(results)
121
- return combined_output
122
 
123
  css = """
124
  footer {
@@ -127,7 +148,7 @@ footer {
127
  """
128
 
129
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ
130
- with gr.Blocks(css=css, title="24์‹œ๊ฐ„ ์ด๋‚ด ๋‰ด์Šค ๊ฒ€์ƒ‰ ์ธํ„ฐํŽ˜์ด์Šค") as iface:
131
  gr.Markdown("## 24์‹œ๊ฐ„ ์ด๋‚ด ๋‰ด์Šค ๊ฒ€์ƒ‰ ์ธํ„ฐํŽ˜์ด์Šค")
132
  gr.Markdown("๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊ตญ๊ฐ€๋ฅผ ์„ ํƒํ•˜์—ฌ 24์‹œ๊ฐ„ ์ด๋‚ด์˜ ๋‰ด์Šค ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.")
133
 
@@ -139,23 +160,4 @@ with gr.Blocks(css=css, title="24์‹œ๊ฐ„ ์ด๋‚ด ๋‰ด์Šค ๊ฒ€์ƒ‰ ์ธํ„ฐํŽ˜์ด์Šค") a
139
  page = gr.Slider(1, 10, 1, label="ํŽ˜์ด์ง€")
140
  num_result = gr.Slider(1, 100, 10, label="๊ฒฐ๊ณผ ์ˆ˜")
141
 
142
- search_button = gr.Button("๊ฒ€์ƒ‰")
143
-
144
- with gr.Tab("๋‰ด์Šค ๊ฒฐ๊ณผ"):
145
- news_output = gr.HTML(label="๋‰ด์Šค ๊ฒฐ๊ณผ")
146
-
147
- # ๋””๋ฒ„๊ทธ ์ •๋ณด ํƒญ ์ œ๊ฑฐ ๋˜๋Š” ์ฃผ์„ ์ฒ˜๋ฆฌ
148
- # with gr.Tab("๋””๋ฒ„๊ทธ ์ •๋ณด"):
149
- # debug_output = gr.Textbox(label="๋””๋ฒ„๊ทธ ์ •๋ณด", lines=10)
150
-
151
- def search_and_display(query, country, page, num_result):
152
- combined_output = serphouse_search(query, country, page, num_result)
153
- return {news_output: combined_output}
154
-
155
- search_button.click(
156
- search_and_display,
157
- inputs=[query, country, page, num_result],
158
- outputs=[news_output]
159
- )
160
-
161
- iface.launch(auth=("gini", "pick"))
 
3
  import json
4
  from datetime import datetime, timedelta
5
 
6
+ API_KEY = "YOUR_API_KEY_HERE" # ์—ฌ๊ธฐ์— ๋ณธ์ธ์˜ API ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.
7
 
8
  MAJOR_COUNTRIES = [
9
  "United States", "United Kingdom", "Canada", "Australia", "Germany",
 
61
  debug_info = f"<pre>Raw API Response:\n{json.dumps(results, indent=2, ensure_ascii=False)}</pre>"
62
 
63
  if isinstance(results, dict) and "error" in results:
64
+ return "Error: " + results["error"] + debug_info, "", debug_info
65
 
66
  if not isinstance(results, dict):
67
  raise ValueError("๊ฒฐ๊ณผ๊ฐ€ ์‚ฌ์ „ ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.")
68
 
69
+ # 'results' ํ‚ค ๋‚ด๋ถ€์˜ ๊ตฌ์กฐ ํ™•์ธ (์ค‘์ฒฉ๋œ 'results' ์ฒ˜๋ฆฌ)
70
  if 'results' in results:
71
  results_content = results['results']
72
+ if 'results' in results_content:
73
+ results_content = results_content['results']
74
+ # 'news' ํ‚ค ํ™•์ธ
75
+ if 'news' in results_content:
76
+ news_results = results_content['news']
77
+ else:
78
+ news_results = []
79
  else:
80
  news_results = []
81
  else:
82
  news_results = []
83
 
84
  if not news_results:
85
+ return "๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + debug_info, "", debug_info
86
 
87
+ # ๋‰ด์Šค ๊ฒฐ๊ณผ๋ฅผ HTML ํ˜•์‹์œผ๋กœ ํฌ๋งทํŒ…
88
  formatted_articles = ""
89
+ # ๋‰ด์Šค ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ํฌ๋งทํŒ…
90
+ list_output = ""
91
+
92
+ for idx, result in enumerate(news_results, 1):
93
  title = result.get("title", "์ œ๋ชฉ ์—†์Œ")
94
  link = result.get("url", result.get("link", "#"))
95
  snippet = result.get("snippet", "๋‚ด์šฉ ์—†์Œ")
 
103
  else:
104
  image_html = ''
105
 
106
+ # HTML ํ˜•์‹์˜ ๊ธฐ์‚ฌ
107
  article_html = f"""
108
  <div style="margin-bottom: 20px; border-bottom: 1px solid #ccc; padding-bottom: 20px;">
109
  <h3><a href="{link}" target="_blank">{title}</a></h3>
 
114
  """
115
  formatted_articles += article_html
116
 
117
+ # ๋ฆฌ์ŠคํŠธ ํ˜•์‹์˜ ๊ธฐ์‚ฌ
118
+ list_item = f"""
119
+ {idx}. ์ œ๋ชฉ: {title}
120
+ ๋งํฌ: {link}
121
+ ์š”์•ฝ: {snippet}
122
+ ์ถœ์ฒ˜: {channel}
123
+ ์‹œ๊ฐ„: {time}
124
+ ์ด๋ฏธ์ง€ URL: {image_url}
125
+ ------------------------------
126
+ """
127
+ list_output += list_item
128
+
129
+ # ๋‰ด์Šค ๊ฒฐ๊ณผ์™€ ๋””๋ฒ„๊ทธ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜
130
  combined_output = formatted_articles + debug_info
131
 
132
+ return combined_output, list_output, debug_info
133
 
134
  except Exception as e:
135
  error_message = f"๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"
136
  debug_info = f"<pre>Error: {error_message}\n</pre>"
137
+ return "Error: " + error_message + debug_info, "", debug_info
138
 
139
  def serphouse_search(query, country, page, num_result):
140
  results = search_serphouse(query, country, page, num_result)
141
+ combined_output, list_output, debug_info = format_results_from_raw(results)
142
+ return combined_output, list_output, debug_info
143
 
144
  css = """
145
  footer {
 
148
  """
149
 
150
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ
151
+ with gr.Blocks(theme="Nymbo/Nymbo_Theme",css=css, title="24์‹œ๊ฐ„ ์ด๋‚ด ๋‰ด์Šค ๊ฒ€์ƒ‰ ์ธํ„ฐํŽ˜์ด์Šค") as iface:
152
  gr.Markdown("## 24์‹œ๊ฐ„ ์ด๋‚ด ๋‰ด์Šค ๊ฒ€์ƒ‰ ์ธํ„ฐํŽ˜์ด์Šค")
153
  gr.Markdown("๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊ตญ๊ฐ€๋ฅผ ์„ ํƒํ•˜์—ฌ 24์‹œ๊ฐ„ ์ด๋‚ด์˜ ๋‰ด์Šค ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.")
154
 
 
160
  page = gr.Slider(1, 10, 1, label="ํŽ˜์ด์ง€")
161
  num_result = gr.Slider(1, 100, 10, label="๊ฒฐ๊ณผ ์ˆ˜")
162
 
163
+ search_button =