openfree commited on
Commit
bc6d987
ยท
verified ยท
1 Parent(s): 371a9fc

Update app-backup.py

Browse files
Files changed (1) hide show
  1. app-backup.py +63 -16
app-backup.py CHANGED
@@ -40,7 +40,7 @@ def extract_keywords(text: str, top_k: int = 5) -> str:
40
  return " ".join(key_tokens)
41
 
42
  ##############################################################################
43
- # SERPHouse Live endpoint ํ˜ธ์ถœ
44
  # - ์ƒ์œ„ 20๊ฐœ ๊ฒฐ๊ณผ JSON์„ LLM์— ๋„˜๊ธธ ๋•Œ link, snippet ๋“ฑ ๋ชจ๋‘ ํฌํ•จ
45
  ##############################################################################
46
  def do_web_search(query: str) -> str:
@@ -50,30 +50,77 @@ def do_web_search(query: str) -> str:
50
  """
51
  try:
52
  url = "https://api.serphouse.com/serp/live"
 
 
53
  params = {
54
  "q": query,
55
  "domain": "google.com",
56
- "lang": "en",
57
  "device": "desktop",
58
- "serp_type": "web",
59
- "num_result": "20",
60
- "api_token": SERPHOUSE_API_KEY,
61
  }
62
- resp = requests.get(url, params=params, timeout=30)
63
- resp.raise_for_status()
64
- data = resp.json()
65
-
 
 
 
 
 
 
 
 
 
 
 
 
66
  results = data.get("results", {})
67
- organic = results.get("results", {}).get("organic", [])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  if not organic:
69
- return "No web search results found."
70
-
 
 
 
 
 
 
 
 
 
71
  summary_lines = []
72
- for idx, item in enumerate(organic[:20], start=1):
73
- item_json = json.dumps(item, ensure_ascii=False, indent=2)
74
- summary_lines.append(f"Result {idx}:\n{item_json}\n")
75
-
 
 
 
 
 
 
 
 
 
 
76
  return "\n".join(summary_lines)
 
77
  except Exception as e:
78
  logger.error(f"Web search failed: {e}")
79
  return f"Web search failed: {str(e)}"
 
40
  return " ".join(key_tokens)
41
 
42
  ##############################################################################
43
+ # SerpHouse Live endpoint ํ˜ธ์ถœ
44
  # - ์ƒ์œ„ 20๊ฐœ ๊ฒฐ๊ณผ JSON์„ LLM์— ๋„˜๊ธธ ๋•Œ link, snippet ๋“ฑ ๋ชจ๋‘ ํฌํ•จ
45
  ##############################################################################
46
  def do_web_search(query: str) -> str:
 
50
  """
51
  try:
52
  url = "https://api.serphouse.com/serp/live"
53
+
54
+ # ๊ธฐ๋ณธ GET ๋ฐฉ์‹์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ๊ฒฐ๊ณผ ์ˆ˜๋ฅผ 20๊ฐœ๋กœ ์ œํ•œ
55
  params = {
56
  "q": query,
57
  "domain": "google.com",
58
+ "serp_type": "web", # ๊ธฐ๋ณธ ์›น ๊ฒ€์ƒ‰
59
  "device": "desktop",
60
+ "lang": "en",
61
+ "num": "20" # ์ตœ๋Œ€ 20๊ฐœ ๊ฒฐ๊ณผ๋งŒ ์š”์ฒญ
 
62
  }
63
+
64
+ headers = {
65
+ "Authorization": f"Bearer {SERPHOUSE_API_KEY}"
66
+ }
67
+
68
+ logger.info(f"SerpHouse API ํ˜ธ์ถœ ์ค‘... ๊ฒ€์ƒ‰์–ด: {query}")
69
+ logger.info(f"์š”์ฒญ URL: {url} - ํŒŒ๋ผ๋ฏธํ„ฐ: {params}")
70
+
71
+ # GET ์š”์ฒญ ์ˆ˜ํ–‰
72
+ response = requests.get(url, headers=headers, params=params, timeout=30)
73
+ response.raise_for_status()
74
+
75
+ logger.info(f"SerpHouse API ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ: {response.status_code}")
76
+ data = response.json()
77
+
78
+ # ๋‹ค์–‘ํ•œ ์‘๋‹ต ๊ตฌ์กฐ ์ฒ˜๋ฆฌ
79
  results = data.get("results", {})
80
+ organic = None
81
+
82
+ # ๊ฐ€๋Šฅํ•œ ์‘๋‹ต ๊ตฌ์กฐ 1
83
+ if isinstance(results, dict) and "organic" in results:
84
+ organic = results["organic"]
85
+
86
+ # ๊ฐ€๋Šฅํ•œ ์‘๋‹ต ๊ตฌ์กฐ 2 (์ค‘์ฒฉ๋œ results)
87
+ elif isinstance(results, dict) and "results" in results:
88
+ if isinstance(results["results"], dict) and "organic" in results["results"]:
89
+ organic = results["results"]["organic"]
90
+
91
+ # ๊ฐ€๋Šฅํ•œ ์‘๋‹ต ๊ตฌ์กฐ 3 (์ตœ์ƒ์œ„ organic)
92
+ elif "organic" in data:
93
+ organic = data["organic"]
94
+
95
  if not organic:
96
+ logger.warning("์‘๋‹ต์—์„œ organic ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.")
97
+ logger.debug(f"์‘๋‹ต ๊ตฌ์กฐ: {list(data.keys())}")
98
+ if isinstance(results, dict):
99
+ logger.debug(f"results ๊ตฌ์กฐ: {list(results.keys())}")
100
+ return "No web search results found or unexpected API response structure."
101
+
102
+ # ๊ฒฐ๊ณผ ์ˆ˜ ์ œํ•œ ๋ฐ ์ปจํ…์ŠคํŠธ ๊ธธ์ด ์ตœ์ ํ™”
103
+ max_results = min(20, len(organic))
104
+ limited_organic = organic[:max_results]
105
+
106
+ # ๊ฒฐ๊ณผ ํ˜•์‹ ๊ฐ„์†Œํ™” - ์ „์ฒด JSON ๋Œ€์‹  ์ค‘์š” ํ•„๋“œ๋งŒ ํฌํ•จ
107
  summary_lines = []
108
+ for idx, item in enumerate(limited_organic, start=1):
109
+ title = item.get("title", "No title")
110
+ link = item.get("link", "#")
111
+ snippet = item.get("snippet", "No description")
112
+
113
+ # ๊ฐ„์†Œํ™”๋œ ํ˜•์‹
114
+ summary_lines.append(
115
+ f"Result {idx}:\n"
116
+ f"- Title: {title}\n"
117
+ f"- Link: {link}\n"
118
+ f"- Snippet: {snippet}\n"
119
+ )
120
+
121
+ logger.info(f"๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ {len(limited_organic)}๊ฐœ ์ฒ˜๋ฆฌ ์™„๋ฃŒ")
122
  return "\n".join(summary_lines)
123
+
124
  except Exception as e:
125
  logger.error(f"Web search failed: {e}")
126
  return f"Web search failed: {str(e)}"