Spaces:
Sleeping
Sleeping
import subprocess | |
import sys | |
# Intentar instalar pytrends si no está presente | |
try: | |
from pytrends.request import TrendReq | |
except ImportError: | |
subprocess.check_call([sys.executable, "-m", "pip", "install", "git+https://github.com/GeneralMills/pytrends.git"]) | |
from pytrends.request import TrendReq | |
import requests | |
import pandas as pd | |
import gradio as gr | |
from time import sleep | |
from pytrends.request import TrendReq | |
# Configuración de pytrends | |
pytrends = TrendReq(hl='es-ES', tz=360) | |
# Mapa de códigos de países compatibles con pytrends | |
paises_codigos = { | |
"Estados Unidos": "united_states", | |
"Reino Unido": "united_kingdom", | |
"Alemania": "germany", | |
"Francia": "france", | |
"Italia": "italy", | |
"Japón": "japan", | |
"Australia": "australia", | |
"Canadá": "canada", | |
"Brasil": "brazil", | |
"India": "india", | |
"España": "spain" | |
} | |
# Función para obtener temas populares de Google Trends según el país seleccionado | |
def obtener_temas_populares(pais_codigo): | |
if pais_codigo == "spain": | |
tendencias = pytrends.top_charts(2023, hl='es-ES', geo='ES') | |
if not tendencias.empty and "title" in tendencias.columns: | |
temas_populares = tendencias["title"].tolist()[:20] # Ajustado para generar más temas | |
else: | |
temas_populares = ["No se encontraron temas populares para España."] | |
else: | |
tendencias = pytrends.trending_searches(pn=pais_codigo) | |
temas_populares = tendencias[0].tolist()[:20] if 0 in tendencias.columns else ["No se encontraron tendencias."] | |
return temas_populares | |
# Función para obtener el interés de búsqueda de keywords y filtrar por un umbral | |
def obtener_interes_keyword(keyword): | |
pytrends.build_payload([keyword], cat=0, timeframe='today 3-m') | |
interes = pytrends.interest_over_time() | |
if not interes.empty: | |
return interes[keyword].mean() | |
return 0 | |
# Función para realizar una búsqueda en Google usando la API de búsqueda personalizada | |
def buscar_en_google(keyword, api_key, cse_id): | |
url = f"https://www.googleapis.com/customsearch/v1?q={keyword}&key={api_key}&cx={cse_id}" | |
response = requests.get(url) | |
if response.status_code == 200: | |
return response.json() | |
else: | |
return None | |
# Función principal para buscar y filtrar keywords con interés mínimo y resultados en redes sociales | |
def buscar_keywords_redes(api_key, cse_id, pais_codigo, interes_minimo=50): | |
temas_populares = obtener_temas_populares(pais_codigo) | |
modificadores = ["ideas", "consejos", "tutorial", "guía", "fotos", "ejemplos", "tendencias", "mejores", "novedades", "noticias"] | |
keywords_automaticas = [f"{mod} de {tema}" for tema in temas_populares for mod in modificadores] | |
resultados_sociales = [] | |
for keyword in keywords_automaticas: | |
interes_promedio = obtener_interes_keyword(keyword) | |
if interes_promedio >= interes_minimo: | |
data = buscar_en_google(keyword, api_key, cse_id) | |
if data: | |
for item in data.get('items', []): | |
link = item['link'] | |
if any(dominio in link for dominio in ["pinterest.com", "facebook.com", "x.com"]): | |
resultados_sociales.append({ | |
'Keyword': keyword, | |
'Interés promedio': round(interes_promedio, 2), | |
'Enlace': link, | |
'Título': item['title'] | |
}) | |
break | |
sleep(1) | |
df_resultados_sociales = pd.DataFrame(resultados_sociales) | |
return df_resultados_sociales if not df_resultados_sociales.empty else "No se encontraron keywords con el interés mínimo en redes sociales." | |
# Función de Gradio para mostrar los resultados | |
def gradio_interface(api_key, cse_id, pais, interes_minimo): | |
pais_codigo = paises_codigos[pais] | |
# Mensaje inicial de "procesando" | |
resultados = buscar_keywords_redes(api_key, cse_id, pais_codigo, interes_minimo) | |
return resultados if isinstance(resultados, str) else resultados.to_html(index=False) | |
# Instrucciones detalladas para los usuarios | |
instrucciones = """ | |
<div style="display: flex;"> | |
<div style="flex: 1; padding-right: 10px;"> | |
<h3>Paso 1: Crear una API Key de Google</h3> | |
<ol> | |
<li>Accede a <a href="https://console.cloud.google.com/" target="_blank">Google Cloud Console</a>.</li> | |
<li>Crea un proyecto nuevo o selecciona uno existente: | |
<ul> | |
<li>En el menú superior, haz clic en el selector de proyectos y luego en “Nuevo proyecto”.</li> | |
<li>Asigna un nombre a tu proyecto y haz clic en <b>Crear</b>.</li> | |
<li>Una vez creado, asegúrate de que el proyecto esté seleccionado (debe mostrarse en la parte superior).</li> | |
</ul> | |
</li> | |
<li>Activar Custom Search API: | |
<ul> | |
<li>Dentro de tu proyecto, en la barra de búsqueda en la parte superior, escribe <b>Custom Search API</b> y selecciona la opción cuando aparezca.</li> | |
<li>En la página de la Custom Search API, haz clic en <b>Habilitar</b> para activarla en tu proyecto.</li> | |
</ul> | |
</li> | |
<li>Crea una API Key: | |
<ul> | |
<li>Ve al menú en el lado izquierdo y selecciona <b>APIs y servicios > Credenciales</b>.</li> | |
<li>Haz clic en <b>Crear credenciales</b> y selecciona <b>Clave de API</b>.</li> | |
<li>Google generará una nueva clave de API para ti. <b>Copia esta clave</b> y guárdala en un lugar seguro; la necesitarás para el script.</li> | |
</ul> | |
</li> | |
</ol> | |
</div> | |
<div style="flex: 1; padding-left: 10px;"> | |
<h3>Paso 2: Obtener el Custom Search Engine ID (CSE ID)</h3> | |
<ol> | |
<li>Ve a <a href="https://cse.google.com/cse/" target="_blank">Google Custom Search Engine</a>.</li> | |
<li>Crea un nuevo motor de búsqueda: | |
<ul> | |
<li>Haz clic en <b>Nuevo motor de búsqueda</b>.</li> | |
<li>En "Sitios a buscar", puedes ingresar cualquier URL (por ejemplo, "example.com") solo para completar el campo; este parámetro no es importante para nuestro propósito.</li> | |
<li>Asigna un nombre a tu motor de búsqueda y haz clic en <b>Crear</b>.</li> | |
</ul> | |
</li> | |
<li>Obtener el CSE ID: | |
<ul> | |
<li>Una vez creado el motor de búsqueda, serás dirigido al panel de control del motor.</li> | |
<li>Haz clic en el <b>nombre de tu motor de búsqueda</b>.</li> | |
<li>En la sección <b>Configuración</b> o <b>Detalles</b> (en el menú de la izquierda), encontrarás el <b>ID del motor de búsqueda</b>. Este es tu CSE ID.</li> | |
<li><b>Copia este ID</b> y guárdalo junto con tu API Key.</li> | |
</ul> | |
</li> | |
</ol> | |
</div> | |
</div> | |
""" | |
# Crear la interfaz de Gradio | |
iface = gr.Interface( | |
fn=gradio_interface, | |
inputs=[ | |
gr.Textbox(label="Google API Key", placeholder="Ingresa tu API Key de Google"), | |
gr.Textbox(label="Custom Search Engine ID (CSE ID)", placeholder="Ingresa tu CSE ID de Google"), | |
gr.Dropdown(label="Selecciona el país", choices=list(paises_codigos.keys()), value="España"), | |
gr.Slider(label="Interés mínimo (0-100)", minimum=0, maximum=100, step=1, value=50) | |
], | |
outputs="html", | |
title="Búsqueda de Keywords con Resultados de Redes Sociales", | |
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), | |
) | |
iface.launch(share=True) | |