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 = """

Paso 1: Crear una API Key de Google

  1. Accede a Google Cloud Console.
  2. Crea un proyecto nuevo o selecciona uno existente:
    • En el menú superior, haz clic en el selector de proyectos y luego en “Nuevo proyecto”.
    • Asigna un nombre a tu proyecto y haz clic en Crear.
    • Una vez creado, asegúrate de que el proyecto esté seleccionado (debe mostrarse en la parte superior).
  3. Activar Custom Search API:
    • Dentro de tu proyecto, en la barra de búsqueda en la parte superior, escribe Custom Search API y selecciona la opción cuando aparezca.
    • En la página de la Custom Search API, haz clic en Habilitar para activarla en tu proyecto.
  4. Crea una API Key:
    • Ve al menú en el lado izquierdo y selecciona APIs y servicios > Credenciales.
    • Haz clic en Crear credenciales y selecciona Clave de API.
    • Google generará una nueva clave de API para ti. Copia esta clave y guárdala en un lugar seguro; la necesitarás para el script.

Paso 2: Obtener el Custom Search Engine ID (CSE ID)

  1. Ve a Google Custom Search Engine.
  2. Crea un nuevo motor de búsqueda:
    • Haz clic en Nuevo motor de búsqueda.
    • 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.
    • Asigna un nombre a tu motor de búsqueda y haz clic en Crear.
  3. Obtener el CSE ID:
    • Una vez creado el motor de búsqueda, serás dirigido al panel de control del motor.
    • Haz clic en el nombre de tu motor de búsqueda.
    • En la sección Configuración o Detalles (en el menú de la izquierda), encontrarás el ID del motor de búsqueda. Este es tu CSE ID.
    • Copia este ID y guárdalo junto con tu API Key.
""" # 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)