seawolf2357 commited on
Commit
0656da2
·
verified ·
1 Parent(s): d6b6fc1

Update app-backup.py

Browse files
Files changed (1) hide show
  1. app-backup.py +49 -53
app-backup.py CHANGED
@@ -5,7 +5,6 @@ from datetime import datetime, timedelta
5
 
6
  API_KEY = "V38CNn4HXpLtynJQyOeoUensTEYoFy8PBUxKpDqAW1pawT1vfJ2BWtPQ98h6"
7
 
8
-
9
  MAJOR_COUNTRIES = [
10
  "United States", "United Kingdom", "Canada", "Australia", "Germany",
11
  "France", "Japan", "South Korea", "China", "India",
@@ -19,7 +18,7 @@ MAJOR_COUNTRIES = [
19
  "Indonesia", "Philippines", "Vietnam", "Pakistan", "Bangladesh"
20
  ]
21
 
22
- def search_serphouse(query, country, page, num_result):
23
  url = "https://api.serphouse.com/serp/live"
24
 
25
  now = datetime.utcnow()
@@ -59,10 +58,11 @@ def search_serphouse(query, country, page, num_result):
59
 
60
  def format_results_from_raw(results):
61
  try:
62
- debug_info = f"<pre>Raw API Response:\n{json.dumps(results, indent=2, ensure_ascii=False)}</pre>"
 
63
 
64
  if isinstance(results, dict) and "error" in results:
65
- return "Error: " + results["error"] + debug_info, "", debug_info
66
 
67
  if not isinstance(results, dict):
68
  raise ValueError("결과가 사전 형식이 아닙니다.")
@@ -83,11 +83,9 @@ def format_results_from_raw(results):
83
  news_results = []
84
 
85
  if not news_results:
86
- return "검색 결과가 없습니다." + debug_info, "", debug_info
87
 
88
- # 뉴스 결과를 HTML 형식으로 포맷팅
89
- formatted_articles = ""
90
- # 뉴스 결과를 리스트 형태로 포맷팅
91
  list_output = ""
92
 
93
  for idx, result in enumerate(news_results, 1):
@@ -100,52 +98,48 @@ def format_results_from_raw(results):
100
 
101
  # base64로 인코딩된 이미지를 처리하지 않음
102
  if image_url and not image_url.startswith("data:image"):
103
- image_html = f'<img src="{image_url}" alt="Image" style="max-width: 100%; height: auto;">'
104
  else:
105
- image_html = ''
106
-
107
- # HTML 형식의 기사
108
- article_html = f"""
109
- <div style="margin-bottom: 20px; border-bottom: 1px solid #ccc; padding-bottom: 20px;">
110
- <h3><a href="{link}" target="_blank">{title}</a></h3>
111
- <p><strong>{channel}</strong> - {time}</p>
112
- {image_html}
113
- <p>{snippet}</p>
114
- </div>
115
- """
116
- formatted_articles += article_html
117
 
118
- # 리스트 형식의 기사
119
  list_item = f"""
120
- {idx}. 제목: {title}
121
- 링크: {link}
122
- 요약: {snippet}
123
- 출처: {channel}
124
- 시간: {time}
125
- 이미지 URL: {image_url}
126
- ------------------------------
127
- """
128
  list_output += list_item
129
 
130
- # 뉴스 결과와 디버그 정보를 반환
131
- combined_output = formatted_articles + debug_info
132
-
133
- return combined_output, list_output, debug_info
134
 
135
  except Exception as e:
136
  error_message = f"결과 처리 중 오류 발생: {str(e)}"
137
- debug_info = f"<pre>Error: {error_message}\n</pre>"
138
- return "Error: " + error_message + debug_info, "", debug_info
139
 
140
- def serphouse_search(query, country, page, num_result):
 
 
 
141
  results = search_serphouse(query, country, page, num_result)
142
- combined_output, list_output, debug_info = format_results_from_raw(results)
143
- return combined_output, list_output, debug_info
144
 
145
  css = """
146
  footer {
147
  visibility: hidden;
148
  }
 
 
 
 
 
 
 
 
149
  """
150
 
151
  # Gradio 인터페이스 구성
@@ -157,29 +151,31 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css, title="24시간 이내 뉴스
157
  with gr.Row():
158
  query = gr.Textbox(label="검색어")
159
  country = gr.Dropdown(MAJOR_COUNTRIES, label="국가", value="South Korea")
160
- with gr.Row():
161
- page = gr.Slider(1, 10, 1, label="페이지")
162
- num_result = gr.Slider(1, 100, 100, label="결과 수")
 
163
 
164
- search_button = gr.Button("검색") # 누락된 부분 추가
165
 
166
- with gr.Tab("뉴스 결과"):
167
- news_output = gr.HTML(label="뉴스 결과")
 
168
 
169
  with gr.Tab("리스트"):
170
- list_output = gr.Textbox(label="리스트 결과", lines=20)
171
 
172
- with gr.Tab("디버그 정보"):
173
- debug_output = gr.Textbox(label="디버그 정보", lines=10)
174
 
175
- def search_and_display(query, country, page, num_result):
176
- combined_output, list_output_text, debug_info = serphouse_search(query, country, page, num_result)
177
- return {news_output: combined_output, list_output: list_output_text, debug_output: debug_info}
178
 
179
  search_button.click(
180
  search_and_display,
181
- inputs=[query, country, page, num_result],
182
- outputs=[news_output, list_output, debug_output]
183
  )
184
 
185
  iface.launch(auth=("gini", "pick"))
 
5
 
6
  API_KEY = "V38CNn4HXpLtynJQyOeoUensTEYoFy8PBUxKpDqAW1pawT1vfJ2BWtPQ98h6"
7
 
 
8
  MAJOR_COUNTRIES = [
9
  "United States", "United Kingdom", "Canada", "Australia", "Germany",
10
  "France", "Japan", "South Korea", "China", "India",
 
18
  "Indonesia", "Philippines", "Vietnam", "Pakistan", "Bangladesh"
19
  ]
20
 
21
+ def search_serphouse(query, country, page=1, num_result=100):
22
  url = "https://api.serphouse.com/serp/live"
23
 
24
  now = datetime.utcnow()
 
58
 
59
  def format_results_from_raw(results):
60
  try:
61
+ # 디버그 정보 생략
62
+ debug_info = ""
63
 
64
  if isinstance(results, dict) and "error" in results:
65
+ return "Error: " + results["error"], ""
66
 
67
  if not isinstance(results, dict):
68
  raise ValueError("결과가 사전 형식이 아닙니다.")
 
83
  news_results = []
84
 
85
  if not news_results:
86
+ return "검색 결과가 없습니다.", ""
87
 
88
+ # 뉴스 결과를 리스트 형태로 포맷팅 (이미지 썸네일 포함)
 
 
89
  list_output = ""
90
 
91
  for idx, result in enumerate(news_results, 1):
 
98
 
99
  # base64로 인코딩된 이미지를 처리하지 않음
100
  if image_url and not image_url.startswith("data:image"):
101
+ thumbnail_html = f'<img src="{image_url}" alt="Thumbnail" style="width: 100px; height: auto;">'
102
  else:
103
+ thumbnail_html = ''
 
 
 
 
 
 
 
 
 
 
 
104
 
105
+ # 리스트 형식의 기사 (이미지 썸네일 포함)
106
  list_item = f"""
107
+ <div style="margin-bottom: 20px;">
108
+ <h4>{idx}. <a href="{link}" target="_blank">{title}</a></h4>
109
+ <p>{thumbnail_html}</p>
110
+ <p>요약: {snippet}</p>
111
+ <p>출처: {channel} | 시간: {time}</p>
112
+ <hr>
113
+ </div>
114
+ """
115
  list_output += list_item
116
 
117
+ return list_output, ""
 
 
 
118
 
119
  except Exception as e:
120
  error_message = f"결과 처리 중 오류 발생: {str(e)}"
121
+ return "Error: " + error_message, ""
 
122
 
123
+ def serphouse_search(query, country):
124
+ # 페이지와 결과 수의 기본값을 설정합니다.
125
+ page = 1
126
+ num_result = 100
127
  results = search_serphouse(query, country, page, num_result)
128
+ list_output, debug_info = format_results_from_raw(results)
129
+ return list_output
130
 
131
  css = """
132
  footer {
133
  visibility: hidden;
134
  }
135
+ /* '뉴스 결과'와 '디버그 정보' 탭 숨기기 */
136
+ #tab-뉴스_결과, #tab-디버그_정보 {
137
+ display: none !important;
138
+ }
139
+ /* '페이지'와 '결과 수' 입력 요소 숨기기 */
140
+ .slider-container {
141
+ display: none !important;
142
+ }
143
  """
144
 
145
  # Gradio 인터페이스 구성
 
151
  with gr.Row():
152
  query = gr.Textbox(label="검색어")
153
  country = gr.Dropdown(MAJOR_COUNTRIES, label="국가", value="South Korea")
154
+ # '페이지'와 '결과 수' 입력 요소 제거
155
+ # with gr.Row():
156
+ # page = gr.Slider(1, 10, 1, label="페이지")
157
+ # num_result = gr.Slider(1, 100, 100, label="결과 수")
158
 
159
+ search_button = gr.Button("검색")
160
 
161
+ # '뉴스 결과'와 '디버그 정보' 탭 제거
162
+ # with gr.Tab("뉴스 결과"):
163
+ # news_output = gr.HTML(label="뉴스 결과")
164
 
165
  with gr.Tab("리스트"):
166
+ list_output = gr.HTML(label="리스트 결과") # HTML로 변경
167
 
168
+ # with gr.Tab("디버그 정보"):
169
+ # debug_output = gr.Textbox(label="디버그 정보", lines=10)
170
 
171
+ def search_and_display(query, country):
172
+ list_output_text = serphouse_search(query, country)
173
+ return {list_output: list_output_text}
174
 
175
  search_button.click(
176
  search_and_display,
177
+ inputs=[query, country],
178
+ outputs=[list_output]
179
  )
180
 
181
  iface.launch(auth=("gini", "pick"))