x
File size: 3,396 Bytes
52e0635
 
8a97b63
 
52e0635
8a97b63
 
52e0635
 
 
 
 
 
 
 
8a97b63
52e0635
8a97b63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52e0635
8a97b63
 
 
52e0635
 
 
 
8a97b63
 
 
 
 
 
 
 
 
 
 
 
 
52e0635
 
 
 
 
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
import gradio as gr
import requests
import pandas as pd
from io import BytesIO

# Funci贸n para consultar la API y procesar datos
def obtener_datos_y_transformar(dominio, idioma="es", pais="es"):
    url = f"https://v7.authoritas.com/api/v3/visibility-explorer/ranking/keywords/{idioma}_{pais}?domains[]={dominio}&pageSize=5000"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
        "Accept": "application/json",
        "Connection": "keep-alive"
    }

    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            json_data = response.json()

            # Mapeo de columnas
            column_mapping = {
                "Palabra_clave": "keyword",
                "B煤squedas_mensuales": "searchVolume",
                "CPC": "cpc",
                "URL": "fullUrl",
                "Visibilidad_1": "potentialVisibilityScoreInc",
                "Visibilidad_2": "visibilityIndex",
                "Visibilidad_3": "visibilityIndexShare"
            }

            # Procesar datos
            items = json_data.get("items", [])
            if not items:
                return None, "No se encontraron datos para el dominio proporcionado."

            # Crear DataFrame con las columnas en orden
            data = []
            for item in items:
                row = {key: item.get(value, 0) for key, value in column_mapping.items()}
                data.append(row)

            df = pd.DataFrame(data, columns=column_mapping.keys())

            # Aplicar formato adicional (por ejemplo, palabras clave con m谩s de 4 palabras)
            df["Palabra_clave"] = df["Palabra_clave"].apply(
                lambda x: f"{x} (隆Clave larga!)" if isinstance(x, str) and len(x.split()) > 4 else x
            )

            # Generar archivo Excel
            output = BytesIO()
            with pd.ExcelWriter(output, engine="xlsxwriter") as writer:
                df.to_excel(writer, index=False, sheet_name="Datos")
                sheet = writer.sheets["Datos"]
                sheet.set_column(0, len(column_mapping) - 1, 20)  # Ajustar ancho de columnas

            output.seek(0)
            return output, "Archivo generado exitosamente. Desc谩rgalo abajo."
        else:
            return None, f"Error al consultar la API: HTTP {response.status_code}"
    except requests.RequestException as e:
        return None, f"Error en la conexi贸n: {str(e)}"

# Interfaz de Gradio
def interfaz():
    with gr.Blocks() as app:
        gr.Markdown("## Consulta de Keywords y Exportaci贸n a Excel")
        dominio_input = gr.Textbox(label="Dominio (ejemplo.com)", placeholder="psicologiaymente.com")
        idioma_input = gr.Textbox(label="Idioma (ej: es)", value="es")
        pais_input = gr.Textbox(label="Pa铆s (ej: es)", value="es")
        archivo_salida = gr.File(label="Archivo Excel", file_types=[".xlsx"])
        mensaje_salida = gr.Textbox(label="Estado", interactive=False)

        btn = gr.Button("Obtener Datos y Transformar")
        btn.click(
            fn=obtener_datos_y_transformar,
            inputs=[dominio_input, idioma_input, pais_input],
            outputs=[archivo_salida, mensaje_salida]
        )
    return app

# Ejecutar la aplicaci贸n
if __name__ == "__main__":
    interfaz().launch()