Spaces:
Sleeping
Sleeping
File size: 7,978 Bytes
2647d58 d63e084 6aee01e aaf2b21 6aee01e aaf2b21 f7b60dc c332dca fd4872e f7b60dc fd4872e f7b60dc fd4872e 5523e0b 20ea232 69c47d2 20ea232 c332dca 69c47d2 20ea232 6aee01e d63e084 5523e0b aaf2b21 5523e0b aaf2b21 d63e084 593bbf2 5523e0b f7b60dc 69c47d2 6aee01e d63e084 5523e0b d63e084 5523e0b d63e084 aaf2b21 d63e084 5523e0b d63e084 5523e0b f7b60dc b3787fe 1e61f26 0dfe9b9 aaf2b21 5545b4f 1e61f26 aaf2b21 1e61f26 c278b0e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
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)
|