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)