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