Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -15,10 +15,10 @@ import gradio as gr
|
|
15 |
from time import sleep
|
16 |
from pytrends.request import TrendReq
|
17 |
|
18 |
-
#
|
19 |
pytrends = TrendReq(hl='es-ES', tz=360)
|
20 |
|
21 |
-
# Mapa de códigos de países compatibles
|
22 |
paises_codigos = {
|
23 |
"Estados Unidos": "united_states",
|
24 |
"Reino Unido": "united_kingdom",
|
@@ -38,7 +38,7 @@ def obtener_temas_populares(pais_codigo):
|
|
38 |
if pais_codigo == "spain":
|
39 |
tendencias = pytrends.top_charts(2023, hl='es-ES', geo='ES')
|
40 |
if not tendencias.empty and "title" in tendencias.columns:
|
41 |
-
temas_populares = tendencias["title"].tolist()[:15]
|
42 |
else:
|
43 |
temas_populares = ["No se encontraron temas populares para España."]
|
44 |
else:
|
@@ -49,11 +49,11 @@ def obtener_temas_populares(pais_codigo):
|
|
49 |
|
50 |
# Función para obtener el interés de búsqueda de keywords y filtrar por un umbral
|
51 |
def obtener_interes_keyword(keyword):
|
52 |
-
pytrends.build_payload([keyword], cat=0, timeframe='today 3-m')
|
53 |
interes = pytrends.interest_over_time()
|
54 |
if not interes.empty:
|
55 |
-
return interes[keyword].mean()
|
56 |
-
return 0
|
57 |
|
58 |
# Función para realizar una búsqueda en Google usando la API de búsqueda personalizada
|
59 |
def buscar_en_google(keyword, api_key, cse_id):
|
@@ -67,7 +67,7 @@ def buscar_en_google(keyword, api_key, cse_id):
|
|
67 |
# Función principal para buscar y filtrar keywords con interés mínimo y resultados en redes sociales
|
68 |
def buscar_keywords_redes(api_key, cse_id, pais_codigo, interes_minimo=50):
|
69 |
temas_populares = obtener_temas_populares(pais_codigo)
|
70 |
-
modificadores = ["ideas", "consejos", "tutorial", "guía", "fotos", "ejemplos", "tendencias", "mejores"
|
71 |
keywords_automaticas = [f"{mod} de {tema}" for tema in temas_populares for mod in modificadores]
|
72 |
|
73 |
resultados_sociales = []
|
@@ -89,22 +89,20 @@ def buscar_keywords_redes(api_key, cse_id, pais_codigo, interes_minimo=50):
|
|
89 |
})
|
90 |
break
|
91 |
|
92 |
-
sleep(1)
|
93 |
|
94 |
-
# Convertir a DataFrame y devolver los resultados
|
95 |
df_resultados_sociales = pd.DataFrame(resultados_sociales)
|
96 |
return df_resultados_sociales if not df_resultados_sociales.empty else "No se encontraron keywords con el interés mínimo en redes sociales."
|
97 |
|
98 |
# Función de Gradio para mostrar los resultados
|
99 |
def gradio_interface(api_key, cse_id, pais, interes_minimo):
|
|
|
|
|
100 |
pais_codigo = paises_codigos[pais]
|
101 |
-
with gr.update() as mensaje_procesando:
|
102 |
-
mensaje_procesando.set("Procesando...") # Mostrar mensaje de procesamiento
|
103 |
resultados = buscar_keywords_redes(api_key, cse_id, pais_codigo, interes_minimo)
|
104 |
-
mensaje_procesando.set("") # Limpiar mensaje de procesamiento
|
105 |
return resultados if isinstance(resultados, str) else resultados.to_html(index=False)
|
106 |
|
107 |
-
# Instrucciones detalladas para
|
108 |
instrucciones = """
|
109 |
<div style="display: flex;">
|
110 |
<div style="flex: 1; padding-right: 10px;">
|
@@ -158,24 +156,17 @@ instrucciones = """
|
|
158 |
"""
|
159 |
|
160 |
# Crear la interfaz de Gradio
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
boton = gr.Button("Enviar")
|
174 |
-
output = gr.HTML()
|
175 |
-
mensaje_procesando = gr.Textbox(visible=False) # Para mostrar mensaje de procesamiento
|
176 |
-
|
177 |
-
# Conectar el botón al evento de clic y mostrar el mensaje de procesamiento
|
178 |
-
boton.click(fn=gradio_interface, inputs=[api_key, cse_id, pais, interes_minimo], outputs=[mensaje_procesando, output])
|
179 |
|
180 |
-
# Lanzar la interfaz
|
181 |
iface.launch(share=True)
|
|
|
15 |
from time import sleep
|
16 |
from pytrends.request import TrendReq
|
17 |
|
18 |
+
# Configuración de pytrends
|
19 |
pytrends = TrendReq(hl='es-ES', tz=360)
|
20 |
|
21 |
+
# Mapa de códigos de países compatibles con pytrends
|
22 |
paises_codigos = {
|
23 |
"Estados Unidos": "united_states",
|
24 |
"Reino Unido": "united_kingdom",
|
|
|
38 |
if pais_codigo == "spain":
|
39 |
tendencias = pytrends.top_charts(2023, hl='es-ES', geo='ES')
|
40 |
if not tendencias.empty and "title" in tendencias.columns:
|
41 |
+
temas_populares = tendencias["title"].tolist()[:15]
|
42 |
else:
|
43 |
temas_populares = ["No se encontraron temas populares para España."]
|
44 |
else:
|
|
|
49 |
|
50 |
# Función para obtener el interés de búsqueda de keywords y filtrar por un umbral
|
51 |
def obtener_interes_keyword(keyword):
|
52 |
+
pytrends.build_payload([keyword], cat=0, timeframe='today 3-m')
|
53 |
interes = pytrends.interest_over_time()
|
54 |
if not interes.empty:
|
55 |
+
return interes[keyword].mean()
|
56 |
+
return 0
|
57 |
|
58 |
# Función para realizar una búsqueda en Google usando la API de búsqueda personalizada
|
59 |
def buscar_en_google(keyword, api_key, cse_id):
|
|
|
67 |
# Función principal para buscar y filtrar keywords con interés mínimo y resultados en redes sociales
|
68 |
def buscar_keywords_redes(api_key, cse_id, pais_codigo, interes_minimo=50):
|
69 |
temas_populares = obtener_temas_populares(pais_codigo)
|
70 |
+
modificadores = ["ideas", "consejos", "tutorial", "guía", "fotos", "ejemplos", "tendencias", "mejores"]
|
71 |
keywords_automaticas = [f"{mod} de {tema}" for tema in temas_populares for mod in modificadores]
|
72 |
|
73 |
resultados_sociales = []
|
|
|
89 |
})
|
90 |
break
|
91 |
|
92 |
+
sleep(1)
|
93 |
|
|
|
94 |
df_resultados_sociales = pd.DataFrame(resultados_sociales)
|
95 |
return df_resultados_sociales if not df_resultados_sociales.empty else "No se encontraron keywords con el interés mínimo en redes sociales."
|
96 |
|
97 |
# Función de Gradio para mostrar los resultados
|
98 |
def gradio_interface(api_key, cse_id, pais, interes_minimo):
|
99 |
+
with gr.Row() as fila:
|
100 |
+
gr.Markdown("### Procesando... Por favor, espera unos segundos.")
|
101 |
pais_codigo = paises_codigos[pais]
|
|
|
|
|
102 |
resultados = buscar_keywords_redes(api_key, cse_id, pais_codigo, interes_minimo)
|
|
|
103 |
return resultados if isinstance(resultados, str) else resultados.to_html(index=False)
|
104 |
|
105 |
+
# Instrucciones detalladas para los usuarios
|
106 |
instrucciones = """
|
107 |
<div style="display: flex;">
|
108 |
<div style="flex: 1; padding-right: 10px;">
|
|
|
156 |
"""
|
157 |
|
158 |
# Crear la interfaz de Gradio
|
159 |
+
iface = gr.Interface(
|
160 |
+
fn=gradio_interface,
|
161 |
+
inputs=[
|
162 |
+
gr.Textbox(label="Google API Key", placeholder="Ingresa tu API Key de Google"),
|
163 |
+
gr.Textbox(label="Custom Search Engine ID (CSE ID)", placeholder="Ingresa tu CSE ID de Google"),
|
164 |
+
gr.Dropdown(label="Selecciona el país", choices=list(paises_codigos.keys()), value="España"),
|
165 |
+
gr.Slider(label="Interés mínimo (0-100)", minimum=0, maximum=100, step=1, value=50)
|
166 |
+
],
|
167 |
+
outputs="html",
|
168 |
+
title="Búsqueda de Keywords con Resultados de Redes Sociales",
|
169 |
+
description=("Esta herramienta busca keywords para las que Google muestra resultados de redes sociales (Pinterest, Facebook, X) debido a la falta de contenido web especializado.\n\n" + instrucciones),
|
170 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
171 |
|
|
|
172 |
iface.launch(share=True)
|