x / app.py
tx3bas's picture
Update app.py
8a97b63 verified
raw
history blame
3.4 kB
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()