openfree commited on
Commit
17082b6
ยท
verified ยท
1 Parent(s): 7ab2f8a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -10
app.py CHANGED
@@ -32,7 +32,7 @@ def create_deepseek_interface():
32
  "messages": [
33
  {
34
  "role": "system",
35
- "content": "์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์—์„œ ์›น ๊ฒ€์ƒ‰์— ํšจ๊ณผ์ ์ธ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ 3-5๊ฐœ๋ฅผ ์ถ”์ถœํ•˜์„ธ์š”. ํ‚ค์›Œ๋“œ๋งŒ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๊ณ  ๋‹ค๋ฅธ ์„ค๋ช…์ด๋‚˜ ๋ถ€๊ฐ€ ์ •๋ณด๋Š” ์ œ๊ณตํ•˜์ง€ ๋งˆ์„ธ์š”."
36
  },
37
  {
38
  "role": "user",
@@ -55,7 +55,7 @@ def create_deepseek_interface():
55
  keywords = result["choices"][0]["message"]["content"].strip()
56
 
57
  # ํ‚ค์›Œ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๊ฑฐ๋‚˜ ํ˜•์‹์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ ์›๋ณธ ์ฟผ๋ฆฌ ์‚ฌ์šฉ
58
- if len(keywords) > 100 or "," not in keywords:
59
  return f"์ถ”์ถœ๋œ ํ‚ค์›Œ๋“œ: {keywords}", query
60
 
61
  return f"์ถ”์ถœ๋œ ํ‚ค์›Œ๋“œ: {keywords}", keywords
@@ -75,17 +75,22 @@ def create_deepseek_interface():
75
  print(f"์›๋ณธ ์ฟผ๋ฆฌ: {query}")
76
  print(extraction_result)
77
 
 
 
 
 
 
78
  # SerpHouse API ํ˜ธ์ถœ ์‹คํ–‰ - GET ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
79
  base_url = "https://api.serphouse.com/serp/live"
80
 
81
- # ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
82
  params = {
83
- "q": search_query,
84
  "domain": "google.com",
85
- "lang": "en",
86
  "device": "desktop",
87
  "serp_type": "web",
88
- "loc": "us", # ์œ„์น˜ ์ฝ”๋“œ
89
  "page": "1",
90
  "num": "5" # ์ƒ์œ„ 5๊ฐœ ๊ฒฐ๊ณผ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ
91
  }
@@ -94,8 +99,8 @@ def create_deepseek_interface():
94
  "Authorization": f"Bearer {serphouse_api_key}"
95
  }
96
 
97
- print(f"SerpHouse API ํ˜ธ์ถœ ์ค‘... ๊ฒ€์ƒ‰์–ด: {search_query}")
98
- print(f"์š”์ฒญ URL: {base_url}?q={search_query}&domain=google.com&...")
99
 
100
  # GET ์š”์ฒญ ์ˆ˜ํ–‰
101
  response = requests.get(base_url, headers=headers, params=params)
@@ -104,10 +109,16 @@ def create_deepseek_interface():
104
  print(f"SerpHouse API ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ: {response.status_code}")
105
  search_results = response.json()
106
 
 
 
 
 
 
107
  # ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํŒŒ์‹ฑ ๋ฐ ํฌ๋งทํŒ…
108
  formatted_results = []
109
- formatted_results.append(f"๊ฒ€์ƒ‰์–ด: {search_query}\n\n")
110
 
 
111
  if "results" in search_results and "organic" in search_results["results"] and len(search_results["results"]["organic"]) > 0:
112
  for result in search_results["results"]["organic"][:5]: # ์ƒ์œ„ 5๊ฐœ ๊ฒฐ๊ณผ๋งŒ ์‚ฌ์šฉ
113
  title = result.get("title", "์ œ๋ชฉ ์—†์Œ")
@@ -117,10 +128,20 @@ def create_deepseek_interface():
117
 
118
  print(f"๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ {len(search_results['results']['organic'])}๊ฐœ ์ฐพ์Œ")
119
  return "".join(formatted_results)
 
 
 
 
 
 
 
 
 
 
120
  else:
121
  print("๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์—†์Œ ๋˜๋Š” ์‘๋‹ต ํ˜•์‹ ๋ถˆ์ผ์น˜")
122
  print(f"์‘๋‹ต ๋‚ด์šฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ: {str(search_results)[:300]}...")
123
- return f"๊ฒ€์ƒ‰์–ด '{search_query}'์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†๊ฑฐ๋‚˜ API ์‘๋‹ต ํ˜•์‹์ด ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค."
124
 
125
  except Exception as e:
126
  error_msg = f"๊ฒ€์ƒ‰ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"
 
32
  "messages": [
33
  {
34
  "role": "system",
35
+ "content": "์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์—์„œ ์›น ๊ฒ€์ƒ‰์— ํšจ๊ณผ์ ์ธ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”์ถœํ•˜์„ธ์š”. ํ‚ค์›Œ๋“œ ์‚ฌ์ด์— ์‰ผํ‘œ๋‚˜ ๊ณต๋ฐฑ์„ ๋„ฃ์ง€ ๋ง๊ณ  ํ•˜๋‚˜์˜ ๊ฒ€์ƒ‰์–ด์ฒ˜๋Ÿผ ์ˆ˜์ •ํ•ด์„œ ์ œ๊ณตํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด 'ํ•œ๋•์ˆ˜ ๊ตญ๋ฌด์ด๋ฆฌ ํƒ„ํ•ต ๊ฒฐ๊ณผ'์ฒ˜๋Ÿผ ๊ณต๋ฐฑ์œผ๋กœ๋งŒ ๊ตฌ๋ถ„ํ•˜์„ธ์š”."
36
  },
37
  {
38
  "role": "user",
 
55
  keywords = result["choices"][0]["message"]["content"].strip()
56
 
57
  # ํ‚ค์›Œ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๊ฑฐ๋‚˜ ํ˜•์‹์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ ์›๋ณธ ์ฟผ๋ฆฌ ์‚ฌ์šฉ
58
+ if len(keywords) > 100:
59
  return f"์ถ”์ถœ๋œ ํ‚ค์›Œ๋“œ: {keywords}", query
60
 
61
  return f"์ถ”์ถœ๋œ ํ‚ค์›Œ๋“œ: {keywords}", keywords
 
75
  print(f"์›๋ณธ ์ฟผ๋ฆฌ: {query}")
76
  print(extraction_result)
77
 
78
+ # ํ•œ๊ธ€ ๊ฒ€์ƒ‰์–ด๋Š” loc ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Œ
79
+ # ํ•œ๊ธ€ ์‚ฌ์šฉ ์‹œ ํ•œ๊ตญ(kr) ๋กœ์ผ€์ผ๋กœ ๋ณ€๊ฒฝ
80
+ is_korean = any('\uAC00' <= c <= '\uD7A3' for c in search_query)
81
+ locale = "kr" if is_korean else "us"
82
+
83
  # SerpHouse API ํ˜ธ์ถœ ์‹คํ–‰ - GET ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
84
  base_url = "https://api.serphouse.com/serp/live"
85
 
86
+ # URL ์ธ์ฝ”๋”ฉ๋œ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ (๊ณต๋ฐฑ์€ +๋กœ ๋ณ€ํ™˜)
87
  params = {
88
+ "q": search_query.replace(',', ' ').strip(), # ์‰ผํ‘œ ์ œ๊ฑฐํ•˜๊ณ  ๊ณต๋ฐฑ์œผ๋กœ ๋Œ€์ฒด
89
  "domain": "google.com",
90
+ "lang": "ko" if is_korean else "en", # ํ•œ๊ธ€์ด๋ฉด ํ•œ๊ตญ์–ด ์„ค์ •
91
  "device": "desktop",
92
  "serp_type": "web",
93
+ "loc": locale, # ์œ„์น˜ ์ฝ”๋“œ
94
  "page": "1",
95
  "num": "5" # ์ƒ์œ„ 5๊ฐœ ๊ฒฐ๊ณผ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ
96
  }
 
99
  "Authorization": f"Bearer {serphouse_api_key}"
100
  }
101
 
102
+ print(f"SerpHouse API ํ˜ธ์ถœ ์ค‘... ๊ฒ€์ƒ‰์–ด: {params['q']}")
103
+ print(f"์š”์ฒญ URL: {base_url}?q={params['q']}&domain=google.com&lang={params['lang']}&loc={locale}...")
104
 
105
  # GET ์š”์ฒญ ์ˆ˜ํ–‰
106
  response = requests.get(base_url, headers=headers, params=params)
 
109
  print(f"SerpHouse API ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ: {response.status_code}")
110
  search_results = response.json()
111
 
112
+ # ์‘๋‹ต ๊ตฌ์กฐ ํ™•์ธ์„ ์œ„ํ•œ ๋กœ๊น…
113
+ print(f"์‘๋‹ต ๊ตฌ์กฐ: {list(search_results.keys())}")
114
+ if "results" in search_results:
115
+ print(f"results ๊ตฌ์กฐ: {list(search_results['results'].keys()) if isinstance(search_results['results'], dict) else '๋ฆฌ์ŠคํŠธ'}")
116
+
117
  # ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํŒŒ์‹ฑ ๋ฐ ํฌ๋งทํŒ…
118
  formatted_results = []
119
+ formatted_results.append(f"๊ฒ€์ƒ‰์–ด: {params['q']}\n\n")
120
 
121
+ # ์‘๋‹ต ๊ตฌ์กฐ์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ํŒŒ์‹ฑ
122
  if "results" in search_results and "organic" in search_results["results"] and len(search_results["results"]["organic"]) > 0:
123
  for result in search_results["results"]["organic"][:5]: # ์ƒ์œ„ 5๊ฐœ ๊ฒฐ๊ณผ๋งŒ ์‚ฌ์šฉ
124
  title = result.get("title", "์ œ๋ชฉ ์—†์Œ")
 
128
 
129
  print(f"๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ {len(search_results['results']['organic'])}๊ฐœ ์ฐพ์Œ")
130
  return "".join(formatted_results)
131
+ elif "organic" in search_results and len(search_results["organic"]) > 0:
132
+ # ๋‹ค๋ฅธ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ
133
+ for result in search_results["organic"][:5]:
134
+ title = result.get("title", "์ œ๋ชฉ ์—†์Œ")
135
+ snippet = result.get("snippet", "๋‚ด์šฉ ์—†์Œ")
136
+ link = result.get("link", "#")
137
+ formatted_results.append(f"์ œ๋ชฉ: {title}\n๋‚ด์šฉ: {snippet}\n๋งํฌ: {link}\n\n")
138
+
139
+ print(f"๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ {len(search_results['organic'])}๊ฐœ ๏ฟฝ๏ฟฝ๏ฟฝ์Œ")
140
+ return "".join(formatted_results)
141
  else:
142
  print("๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์—†์Œ ๋˜๋Š” ์‘๋‹ต ํ˜•์‹ ๋ถˆ์ผ์น˜")
143
  print(f"์‘๋‹ต ๋‚ด์šฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ: {str(search_results)[:300]}...")
144
+ return f"๊ฒ€์ƒ‰์–ด '{params['q']}'์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†๊ฑฐ๋‚˜ API ์‘๋‹ต ํ˜•์‹์ด ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค."
145
 
146
  except Exception as e:
147
  error_msg = f"๊ฒ€์ƒ‰ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"