|
import gradio as gr |
|
import requests |
|
import pandas as pd |
|
from io import BytesIO |
|
|
|
|
|
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() |
|
|
|
|
|
column_mapping = { |
|
"Palabra_clave": "keyword", |
|
"B煤squedas_mensuales": "searchVolume", |
|
"CPC": "cpc", |
|
"URL": "fullUrl", |
|
"Visibilidad_1": "potentialVisibilityScoreInc", |
|
"Visibilidad_2": "visibilityIndex", |
|
"Visibilidad_3": "visibilityIndexShare" |
|
} |
|
|
|
|
|
items = json_data.get("items", []) |
|
if not items: |
|
return None, "No se encontraron datos para el dominio proporcionado." |
|
|
|
|
|
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()) |
|
|
|
|
|
df["Palabra_clave"] = df["Palabra_clave"].apply( |
|
lambda x: f"{x} (隆Clave larga!)" if isinstance(x, str) and len(x.split()) > 4 else x |
|
) |
|
|
|
|
|
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) |
|
|
|
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)}" |
|
|
|
|
|
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 |
|
|
|
|
|
if __name__ == "__main__": |
|
interfaz().launch() |
|
|