Kims12 commited on
Commit
9c4b33c
Β·
verified Β·
1 Parent(s): 2da13b5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -19
app.py CHANGED
@@ -100,12 +100,12 @@ def get_keywords_data_chunk(chunk):
100
  def get_blog_count_parallel(keyword):
101
  return (keyword, get_blog_count(keyword))
102
 
103
- def get_monthly_search_volumes(keywords, include_related):
104
  all_data = []
105
  chunk_size = 10 # ν‚€μ›Œλ“œλ₯Ό 10κ°œμ”© λ‚˜λˆ„μ–΄ μš”μ²­
106
 
107
- if include_related:
108
- # 연관검색어 포함 μ‹œ, APIλ₯Ό 톡해 μ—°κ΄€ ν‚€μ›Œλ“œλ₯Ό κ°€μ Έμ˜΄
109
  with ThreadPoolExecutor(max_workers=5) as executor:
110
  futures = [executor.submit(get_keywords_data_chunk, keywords[i:i+chunk_size]) for i in range(0, len(keywords), chunk_size)]
111
  for future in futures:
@@ -116,8 +116,14 @@ def get_monthly_search_volumes(keywords, include_related):
116
  except Exception as e:
117
  print(f"Error fetching keywords data chunk: {e}")
118
  else:
119
- # 연관검색어 미포함 μ‹œ, μž…λ ₯ ν‚€μ›Œλ“œλ§Œ μ‚¬μš©
120
- all_data = [{'relKeyword': keyword, 'monthlyPcQcCnt': '0', 'monthlyMobileQcCnt': '0'} for keyword in keywords]
 
 
 
 
 
 
121
 
122
  if not all_data:
123
  return [("Error", "데이터가 λ°˜ν™˜λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ API 응닡이 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.", "", "", "")] # λΈ”λ‘œκ·Έ λ¬Έμ„œ 수 칼럼 μΆ”κ°€
@@ -139,19 +145,33 @@ def get_monthly_search_volumes(keywords, include_related):
139
  total_searches = monthly_pc + monthly_mobile
140
  results.append((keyword, monthly_pc, monthly_mobile, total_searches))
141
 
142
- if len(results) >= 100:
143
  break
144
 
145
- # λΈ”λ‘œκ·Έ λ¬Έμ„œ 수 병렬 μš”μ²­
146
- with ThreadPoolExecutor(max_workers=5) as executor:
147
- blog_futures = [executor.submit(get_blog_count_parallel, result[0]) for result in results]
148
- for i, future in enumerate(blog_futures):
149
- try:
150
- keyword, blog_count = future.result()
151
- results[i] = (results[i][0], results[i][1], results[i][2], results[i][3], blog_count)
152
- except Exception as e:
153
- print(f"Error fetching blog count for keyword '{results[i][0]}': {e}")
154
- results[i] = (results[i][0], results[i][1], results[i][2], results[i][3], "Error")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
 
156
  return results
157
 
@@ -166,7 +186,7 @@ def save_to_excel(results, keyword):
166
 
167
  def display_search_volumes(keywords, include_related):
168
  keyword_list = [keyword.strip() for keyword in keywords.split(',')]
169
- results = get_monthly_search_volumes(keyword_list, include_related)
170
  file_path = save_to_excel(results, keywords)
171
  return results, file_path
172
 
@@ -174,14 +194,14 @@ iface = gr.Interface(
174
  fn=display_search_volumes,
175
  inputs=[
176
  gr.Textbox(placeholder="ν‚€μ›Œλ“œλ₯Ό μž…λ ₯ν•˜μ„Έμš”"),
177
- gr.Checkbox(label="연관검색어 포함", value=True) # 연관검색어 ON/OFF μ²΄ν¬λ°•μŠ€ μΆ”κ°€
178
  ],
179
  outputs=[
180
  gr.Dataframe(headers=["ν‚€μ›Œλ“œ", "PCμ›”κ²€μƒ‰λŸ‰", "λͺ¨λ°”μΌμ›”κ²€μƒ‰λŸ‰", "ν† νƒˆμ›”κ²€μƒ‰λŸ‰", "λΈ”λ‘œκ·Έλ¬Έμ„œμˆ˜"]),
181
  gr.File(label="λ‹€μš΄λ‘œλ“œ μ—‘μ…€ 파일")
182
  ],
183
  title="넀이버 μ›”κ²€μƒ‰λŸ‰ 검색기",
184
- description="ν‚€μ›Œλ“œλ₯Ό μž…λ ₯ν•˜κ³  연관검색어 포함 μ—¬λΆ€λ₯Ό μ„ νƒν•˜μ„Έμš”."
185
  )
186
 
187
  iface.launch(share=True) # share=Trueλ₯Ό μΆ”κ°€ν•˜μ—¬ 곡개 링크 생성
 
100
  def get_blog_count_parallel(keyword):
101
  return (keyword, get_blog_count(keyword))
102
 
103
+ def get_monthly_search_volumes(keywords, include_related_keywords=True):
104
  all_data = []
105
  chunk_size = 10 # ν‚€μ›Œλ“œλ₯Ό 10κ°œμ”© λ‚˜λˆ„μ–΄ μš”μ²­
106
 
107
+ if include_related_keywords:
108
+ # API 병렬 μš”μ²­
109
  with ThreadPoolExecutor(max_workers=5) as executor:
110
  futures = [executor.submit(get_keywords_data_chunk, keywords[i:i+chunk_size]) for i in range(0, len(keywords), chunk_size)]
111
  for future in futures:
 
116
  except Exception as e:
117
  print(f"Error fetching keywords data chunk: {e}")
118
  else:
119
+ # 연관검색어λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μž…λ ₯ ν‚€μ›Œλ“œλ§Œ 처리
120
+ for keyword in keywords:
121
+ # κ°€μƒμ˜ 데이터 ꡬ쑰을 λ§žμΆ”κΈ° μœ„ν•΄
122
+ all_data.append({
123
+ 'relKeyword': keyword,
124
+ 'monthlyPcQcCnt': '0', # μ‹€μ œ APIμ—μ„œ 값을 κ°€μ Έμ˜€λ €λ©΄ 별도 μš”μ²­ ν•„μš”
125
+ 'monthlyMobileQcCnt': '0'
126
+ })
127
 
128
  if not all_data:
129
  return [("Error", "데이터가 λ°˜ν™˜λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ API 응닡이 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.", "", "", "")] # λΈ”λ‘œκ·Έ λ¬Έμ„œ 수 칼럼 μΆ”κ°€
 
145
  total_searches = monthly_pc + monthly_mobile
146
  results.append((keyword, monthly_pc, monthly_mobile, total_searches))
147
 
148
+ if len(results) >= 100 and include_related_keywords:
149
  break
150
 
151
+ if include_related_keywords:
152
+ # λΈ”λ‘œκ·Έ λ¬Έμ„œ 수 병렬 μš”μ²­
153
+ with ThreadPoolExecutor(max_workers=5) as executor:
154
+ blog_futures = [executor.submit(get_blog_count_parallel, result[0]) for result in results]
155
+ for i, future in enumerate(blog_futures):
156
+ try:
157
+ keyword, blog_count = future.result()
158
+ results[i] = (results[i][0], results[i][1], results[i][2], results[i][3], blog_count)
159
+ except Exception as e:
160
+ print(f"Error fetching blog count for keyword '{results[i][0]}': {e}")
161
+ results[i] = (results[i][0], results[i][1], results[i][2], results[i][3], "Error")
162
+ else:
163
+ # λΈ”λ‘œκ·Έ λ¬Έμ„œ 수 병렬 μš”μ²­ (연관검색어가 아닐 경우 각 ν‚€μ›Œλ“œμ— λŒ€ν•΄)
164
+ with ThreadPoolExecutor(max_workers=5) as executor:
165
+ blog_futures = [executor.submit(get_blog_count_parallel, keyword) for keyword in results]
166
+ temp_results = []
167
+ for future in blog_futures:
168
+ try:
169
+ keyword, blog_count = future.result()
170
+ temp_results.append((keyword, 0, 0, 0, blog_count))
171
+ except Exception as e:
172
+ print(f"Error fetching blog count for keyword '{keyword}': {e}")
173
+ temp_results.append((keyword, 0, 0, 0, "Error"))
174
+ results = temp_results
175
 
176
  return results
177
 
 
186
 
187
  def display_search_volumes(keywords, include_related):
188
  keyword_list = [keyword.strip() for keyword in keywords.split(',')]
189
+ results = get_monthly_search_volumes(keyword_list, include_related_keywords=include_related)
190
  file_path = save_to_excel(results, keywords)
191
  return results, file_path
192
 
 
194
  fn=display_search_volumes,
195
  inputs=[
196
  gr.Textbox(placeholder="ν‚€μ›Œλ“œλ₯Ό μž…λ ₯ν•˜μ„Έμš”"),
197
+ gr.Checkbox(label="연관검색어 포함", value=True) # 연관검색어 ν† κΈ€ μΆ”κ°€
198
  ],
199
  outputs=[
200
  gr.Dataframe(headers=["ν‚€μ›Œλ“œ", "PCμ›”κ²€μƒ‰λŸ‰", "λͺ¨λ°”μΌμ›”κ²€μƒ‰λŸ‰", "ν† νƒˆμ›”κ²€μƒ‰λŸ‰", "λΈ”λ‘œκ·Έλ¬Έμ„œμˆ˜"]),
201
  gr.File(label="λ‹€μš΄λ‘œλ“œ μ—‘μ…€ 파일")
202
  ],
203
  title="넀이버 μ›”κ²€μƒ‰λŸ‰ 검색기",
204
+ description="ν‚€μ›Œλ“œμ˜ μ›” κ²€μƒ‰λŸ‰κ³Ό λΈ”λ‘œκ·Έ λ¬Έμ„œ 수λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 연관검색어λ₯Ό 포함할지 μ„ νƒν•˜μ„Έμš”.",
205
  )
206
 
207
  iface.launch(share=True) # share=Trueλ₯Ό μΆ”κ°€ν•˜μ—¬ 곡개 링크 생성