Update app.py
Browse files
app.py
CHANGED
|
@@ -10,6 +10,20 @@ import unicodedata
|
|
| 10 |
def normalize_keyword(keyword):
|
| 11 |
return ''.join(c for c in unicodedata.normalize('NFD', keyword.lower()) if unicodedata.category(c) != 'Mn')
|
| 12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
# Función para obtener sugerencias de Brave
|
| 14 |
def fetch_brave_suggestions(query, lang_code="es"):
|
| 15 |
encoded_query = urllib.parse.quote(query)
|
|
@@ -63,20 +77,6 @@ def fetch_duckduckgo_suggestions(query, lang_code="es"):
|
|
| 63 |
else:
|
| 64 |
return []
|
| 65 |
|
| 66 |
-
# Función para obtener sugerencias de Google
|
| 67 |
-
def fetch_google_suggestions(query, lang_code="es"):
|
| 68 |
-
encoded_query = urllib.parse.quote(query)
|
| 69 |
-
url = f"http://suggestqueries.google.com/complete/search?client=firefox&hl={lang_code}&q={encoded_query}"
|
| 70 |
-
response = requests.get(url)
|
| 71 |
-
if response.status_code == 200:
|
| 72 |
-
try:
|
| 73 |
-
return [normalize_keyword(suggestion) for suggestion in response.json()[1]]
|
| 74 |
-
except ValueError:
|
| 75 |
-
print("Error decodificando JSON de Google")
|
| 76 |
-
return []
|
| 77 |
-
else:
|
| 78 |
-
return []
|
| 79 |
-
|
| 80 |
# Función para obtener sugerencias de YouTube usando la API anterior
|
| 81 |
def fetch_youtube_suggestions(query, lang_code="es"):
|
| 82 |
encoded_query = urllib.parse.quote(query)
|
|
@@ -177,19 +177,25 @@ def main(keyword):
|
|
| 177 |
qwant_suggestions_all = []
|
| 178 |
brave_suggestions_all = []
|
| 179 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
# Obtener sugerencias de DuckDuckGo
|
| 181 |
for exp_keyword in expanded_keywords:
|
| 182 |
suggestions = fetch_duckduckgo_suggestions(exp_keyword)
|
| 183 |
duckduckgo_suggestions_all.extend(suggestions)
|
| 184 |
for suggestion in suggestions:
|
| 185 |
-
all_suggestions.setdefault(suggestion, set())
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
for exp_keyword in expanded_keywords:
|
| 189 |
-
suggestions = fetch_google_suggestions(exp_keyword)
|
| 190 |
-
google_suggestions_all.extend(suggestions)
|
| 191 |
-
for suggestion in suggestions:
|
| 192 |
-
all_suggestions.setdefault(suggestion, set()).add('Google')
|
| 193 |
|
| 194 |
# Obtener sugerencias de YouTube (API anterior y nueva)
|
| 195 |
for exp_keyword in expanded_keywords:
|
|
@@ -198,35 +204,48 @@ def main(keyword):
|
|
| 198 |
new_suggestions = fetch_youtube_suggestions_new(exp_keyword)
|
| 199 |
youtube_suggestions_all.extend(new_suggestions)
|
| 200 |
for suggestion in suggestions + new_suggestions:
|
| 201 |
-
all_suggestions.setdefault(suggestion, set())
|
|
|
|
|
|
|
| 202 |
|
| 203 |
# Obtener sugerencias de Bing
|
| 204 |
for exp_keyword in expanded_keywords:
|
| 205 |
suggestions = fetch_bing_suggestions(exp_keyword)
|
| 206 |
bing_suggestions_all.extend(suggestions)
|
| 207 |
for suggestion in suggestions:
|
| 208 |
-
all_suggestions.setdefault(suggestion, set())
|
|
|
|
|
|
|
| 209 |
|
| 210 |
# Obtener sugerencias de Amazon
|
| 211 |
for exp_keyword in expanded_keywords:
|
| 212 |
suggestions = fetch_amazon_suggestions(exp_keyword)
|
| 213 |
amazon_suggestions_all.extend(suggestions)
|
| 214 |
for suggestion in suggestions:
|
| 215 |
-
all_suggestions.setdefault(suggestion, set())
|
|
|
|
|
|
|
| 216 |
|
| 217 |
# Obtener sugerencias de Qwant
|
| 218 |
for exp_keyword in expanded_keywords:
|
| 219 |
suggestions = fetch_qwant_suggestions(exp_keyword)
|
| 220 |
qwant_suggestions_all.extend(suggestions)
|
| 221 |
for suggestion in suggestions:
|
| 222 |
-
all_suggestions.setdefault(suggestion, set())
|
|
|
|
|
|
|
| 223 |
|
| 224 |
# Obtener sugerencias de Brave
|
| 225 |
for exp_keyword in expanded_keywords:
|
| 226 |
suggestions = fetch_brave_suggestions(exp_keyword)
|
| 227 |
brave_suggestions_all.extend(suggestions)
|
| 228 |
for suggestion in suggestions:
|
| 229 |
-
all_suggestions.setdefault(suggestion, set())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 230 |
|
| 231 |
# Obtener las top 3 de cada plataforma
|
| 232 |
google_top_3 = get_top_suggestions(google_suggestions_all, top_n=3)
|
|
@@ -237,21 +256,18 @@ def main(keyword):
|
|
| 237 |
qwant_top_3 = get_top_suggestions(qwant_suggestions_all, top_n=3)
|
| 238 |
brave_top_3 = get_top_suggestions(brave_suggestions_all, top_n=3)
|
| 239 |
|
| 240 |
-
#
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
all_suggestions_str = "<table><tr><th>Keyword</th><th>Buscadores</th></tr>"
|
| 245 |
-
for suggestion, platforms in sorted(all_suggestions.items(), key=lambda item: len(item[1]), reverse=True):
|
| 246 |
-
all_suggestions_str += f"<tr><td>{suggestion}</td><td>{', '.join(platforms)}</td></tr>"
|
| 247 |
all_suggestions_str += "</table>"
|
| 248 |
|
| 249 |
# Crear el HTML de salida
|
| 250 |
html_output = f"""
|
| 251 |
<div>
|
| 252 |
-
<h3>Top 10 combinadas (basado en la cantidad de buscadores):</h3>
|
| 253 |
<ul>
|
| 254 |
-
{''.join([f'<li>{sug} (
|
| 255 |
</ul>
|
| 256 |
|
| 257 |
<h4>Top 3 Sugerencias de Google:</h4>
|
|
@@ -289,7 +305,7 @@ def main(keyword):
|
|
| 289 |
{''.join([f'<li>{sug} ({freq})</li>' for sug, freq in brave_top_3])}
|
| 290 |
</ul>
|
| 291 |
|
| 292 |
-
<h4>Tabla completa de palabras clave y
|
| 293 |
{all_suggestions_str}
|
| 294 |
</div>
|
| 295 |
"""
|
|
@@ -302,7 +318,7 @@ iface = gr.Interface(
|
|
| 302 |
inputs="text",
|
| 303 |
outputs=gr.HTML(),
|
| 304 |
title="Sugerencias Combinadas de Múltiples Motores de Búsqueda",
|
| 305 |
-
description="Ingrese una palabra clave para obtener sugerencias de búsqueda relacionadas de Google, DuckDuckGo, YouTube, Bing, Amazon, Qwant y Brave.",
|
| 306 |
)
|
| 307 |
|
| 308 |
iface.launch()
|
|
|
|
| 10 |
def normalize_keyword(keyword):
|
| 11 |
return ''.join(c for c in unicodedata.normalize('NFD', keyword.lower()) if unicodedata.category(c) != 'Mn')
|
| 12 |
|
| 13 |
+
# Función para obtener sugerencias de Google con un client específico (firefox o chrome)
|
| 14 |
+
def fetch_google_suggestions(query, lang_code="es", client="firefox"):
|
| 15 |
+
encoded_query = urllib.parse.quote(query)
|
| 16 |
+
url = f"http://suggestqueries.google.com/complete/search?client={client}&hl={lang_code}&q={encoded_query}"
|
| 17 |
+
response = requests.get(url)
|
| 18 |
+
if response.status_code == 200:
|
| 19 |
+
try:
|
| 20 |
+
return [normalize_keyword(suggestion) for suggestion in response.json()[1]]
|
| 21 |
+
except ValueError:
|
| 22 |
+
print("Error decodificando JSON de Google")
|
| 23 |
+
return []
|
| 24 |
+
else:
|
| 25 |
+
return []
|
| 26 |
+
|
| 27 |
# Función para obtener sugerencias de Brave
|
| 28 |
def fetch_brave_suggestions(query, lang_code="es"):
|
| 29 |
encoded_query = urllib.parse.quote(query)
|
|
|
|
| 77 |
else:
|
| 78 |
return []
|
| 79 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
# Función para obtener sugerencias de YouTube usando la API anterior
|
| 81 |
def fetch_youtube_suggestions(query, lang_code="es"):
|
| 82 |
encoded_query = urllib.parse.quote(query)
|
|
|
|
| 177 |
qwant_suggestions_all = []
|
| 178 |
brave_suggestions_all = []
|
| 179 |
|
| 180 |
+
# Obtener sugerencias de Google con dos clients (firefox y chrome)
|
| 181 |
+
for exp_keyword in expanded_keywords:
|
| 182 |
+
google_firefox_suggestions = fetch_google_suggestions(exp_keyword, client="firefox")
|
| 183 |
+
google_chrome_suggestions = fetch_google_suggestions(exp_keyword, client="chrome")
|
| 184 |
+
combined_google_suggestions = google_firefox_suggestions + google_chrome_suggestions
|
| 185 |
+
google_suggestions_all.extend(combined_google_suggestions)
|
| 186 |
+
for suggestion in combined_google_suggestions:
|
| 187 |
+
all_suggestions.setdefault(suggestion, {"count": 0, "sources": set()})
|
| 188 |
+
all_suggestions[suggestion]["count"] += 1
|
| 189 |
+
all_suggestions[suggestion]["sources"].add('Google')
|
| 190 |
+
|
| 191 |
# Obtener sugerencias de DuckDuckGo
|
| 192 |
for exp_keyword in expanded_keywords:
|
| 193 |
suggestions = fetch_duckduckgo_suggestions(exp_keyword)
|
| 194 |
duckduckgo_suggestions_all.extend(suggestions)
|
| 195 |
for suggestion in suggestions:
|
| 196 |
+
all_suggestions.setdefault(suggestion, {"count": 0, "sources": set()})
|
| 197 |
+
all_suggestions[suggestion]["count"] += 1
|
| 198 |
+
all_suggestions[suggestion]["sources"].add('DuckDuckGo')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 199 |
|
| 200 |
# Obtener sugerencias de YouTube (API anterior y nueva)
|
| 201 |
for exp_keyword in expanded_keywords:
|
|
|
|
| 204 |
new_suggestions = fetch_youtube_suggestions_new(exp_keyword)
|
| 205 |
youtube_suggestions_all.extend(new_suggestions)
|
| 206 |
for suggestion in suggestions + new_suggestions:
|
| 207 |
+
all_suggestions.setdefault(suggestion, {"count": 0, "sources": set()})
|
| 208 |
+
all_suggestions[suggestion]["count"] += 1
|
| 209 |
+
all_suggestions[suggestion]["sources"].add('YouTube')
|
| 210 |
|
| 211 |
# Obtener sugerencias de Bing
|
| 212 |
for exp_keyword in expanded_keywords:
|
| 213 |
suggestions = fetch_bing_suggestions(exp_keyword)
|
| 214 |
bing_suggestions_all.extend(suggestions)
|
| 215 |
for suggestion in suggestions:
|
| 216 |
+
all_suggestions.setdefault(suggestion, {"count": 0, "sources": set()})
|
| 217 |
+
all_suggestions[suggestion]["count"] += 1
|
| 218 |
+
all_suggestions[suggestion]["sources"].add('Bing')
|
| 219 |
|
| 220 |
# Obtener sugerencias de Amazon
|
| 221 |
for exp_keyword in expanded_keywords:
|
| 222 |
suggestions = fetch_amazon_suggestions(exp_keyword)
|
| 223 |
amazon_suggestions_all.extend(suggestions)
|
| 224 |
for suggestion in suggestions:
|
| 225 |
+
all_suggestions.setdefault(suggestion, {"count": 0, "sources": set()})
|
| 226 |
+
all_suggestions[suggestion]["count"] += 1
|
| 227 |
+
all_suggestions[suggestion]["sources"].add('Amazon')
|
| 228 |
|
| 229 |
# Obtener sugerencias de Qwant
|
| 230 |
for exp_keyword in expanded_keywords:
|
| 231 |
suggestions = fetch_qwant_suggestions(exp_keyword)
|
| 232 |
qwant_suggestions_all.extend(suggestions)
|
| 233 |
for suggestion in suggestions:
|
| 234 |
+
all_suggestions.setdefault(suggestion, {"count": 0, "sources": set()})
|
| 235 |
+
all_suggestions[suggestion]["count"] += 1
|
| 236 |
+
all_suggestions[suggestion]["sources"].add('Qwant')
|
| 237 |
|
| 238 |
# Obtener sugerencias de Brave
|
| 239 |
for exp_keyword in expanded_keywords:
|
| 240 |
suggestions = fetch_brave_suggestions(exp_keyword)
|
| 241 |
brave_suggestions_all.extend(suggestions)
|
| 242 |
for suggestion in suggestions:
|
| 243 |
+
all_suggestions.setdefault(suggestion, {"count": 0, "sources": set()})
|
| 244 |
+
all_suggestions[suggestion]["count"] += 1
|
| 245 |
+
all_suggestions[suggestion]["sources"].add('Brave')
|
| 246 |
+
|
| 247 |
+
# Calcular relevancia combinada: basándonos en cuántos buscadores mencionan una palabra y cuántas veces se repite
|
| 248 |
+
combined_suggestions = sorted(all_suggestions.items(), key=lambda item: (len(item[1]["sources"]), item[1]["count"]), reverse=True)
|
| 249 |
|
| 250 |
# Obtener las top 3 de cada plataforma
|
| 251 |
google_top_3 = get_top_suggestions(google_suggestions_all, top_n=3)
|
|
|
|
| 256 |
qwant_top_3 = get_top_suggestions(qwant_suggestions_all, top_n=3)
|
| 257 |
brave_top_3 = get_top_suggestions(brave_suggestions_all, top_n=3)
|
| 258 |
|
| 259 |
+
# Crear una tabla con todas las sugerencias, su relevancia y el número de buscadores
|
| 260 |
+
all_suggestions_str = "<table><tr><th>Keyword</th><th>Buscadores</th><th>Relevancia (Total)</th></tr>"
|
| 261 |
+
for suggestion, data in combined_suggestions:
|
| 262 |
+
all_suggestions_str += f"<tr><td>{suggestion}</td><td>{', '.join(data['sources'])}</td><td>{data['count']}</td></tr>"
|
|
|
|
|
|
|
|
|
|
| 263 |
all_suggestions_str += "</table>"
|
| 264 |
|
| 265 |
# Crear el HTML de salida
|
| 266 |
html_output = f"""
|
| 267 |
<div>
|
| 268 |
+
<h3>Top 10 combinadas (basado en la cantidad de buscadores y repeticiones):</h3>
|
| 269 |
<ul>
|
| 270 |
+
{''.join([f'<li>{sug} (en {len(data["sources"])} buscadores, {data["count"]} repeticiones)</li>' for sug, data in combined_suggestions[:10]])}
|
| 271 |
</ul>
|
| 272 |
|
| 273 |
<h4>Top 3 Sugerencias de Google:</h4>
|
|
|
|
| 305 |
{''.join([f'<li>{sug} ({freq})</li>' for sug, freq in brave_top_3])}
|
| 306 |
</ul>
|
| 307 |
|
| 308 |
+
<h4>Tabla completa de palabras clave y su relevancia:</h4>
|
| 309 |
{all_suggestions_str}
|
| 310 |
</div>
|
| 311 |
"""
|
|
|
|
| 318 |
inputs="text",
|
| 319 |
outputs=gr.HTML(),
|
| 320 |
title="Sugerencias Combinadas de Múltiples Motores de Búsqueda",
|
| 321 |
+
description="Ingrese una palabra clave para obtener sugerencias de búsqueda relacionadas de Google (Firefox y Chrome), DuckDuckGo, YouTube, Bing, Amazon, Qwant y Brave.",
|
| 322 |
)
|
| 323 |
|
| 324 |
iface.launch()
|