tx3bas commited on
Commit
8a97b63
verified
1 Parent(s): 52e0635

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -16
app.py CHANGED
@@ -1,8 +1,10 @@
1
  import gradio as gr
2
  import requests
 
 
3
 
4
- # Funci贸n para realizar la solicitud a la API
5
- def obtener_keywords(dominio, pais, idioma):
6
  url = f"https://v7.authoritas.com/api/v3/visibility-explorer/ranking/keywords/{idioma}_{pais}?domains[]={dominio}&pageSize=5000"
7
  headers = {
8
  "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",
@@ -11,26 +13,69 @@ def obtener_keywords(dominio, pais, idioma):
11
  }
12
 
13
  try:
14
- response = requests.get(url, headers=headers, cookies={})
15
  if response.status_code == 200:
16
- return response.json() # Devuelve el resultado en formato JSON
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  else:
18
- return {"error": f"HTTP code {response.status_code}"}
19
- except requests.exceptions.RequestException as e:
20
- return {"error": str(e)}
21
 
22
  # Interfaz de Gradio
23
  def interfaz():
24
  with gr.Blocks() as app:
25
- gr.Markdown("## Consulta de Keywords en Authoritas")
26
- dominio_input = gr.Textbox(label="Dominio (ejemplo.com)")
27
- pais_input = gr.Textbox(label="Pa铆s (ej: ES)")
28
- idioma_input = gr.Textbox(label="Idioma (ej: es)")
29
- output = gr.JSON(label="Resultados")
30
-
31
- btn = gr.Button("Obtener Keywords")
32
- btn.click(fn=obtener_keywords, inputs=[dominio_input, pais_input, idioma_input], outputs=output)
33
-
 
 
 
 
34
  return app
35
 
36
  # Ejecutar la aplicaci贸n
 
1
  import gradio as gr
2
  import requests
3
+ import pandas as pd
4
+ from io import BytesIO
5
 
6
+ # Funci贸n para consultar la API y procesar datos
7
+ def obtener_datos_y_transformar(dominio, idioma="es", pais="es"):
8
  url = f"https://v7.authoritas.com/api/v3/visibility-explorer/ranking/keywords/{idioma}_{pais}?domains[]={dominio}&pageSize=5000"
9
  headers = {
10
  "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",
 
13
  }
14
 
15
  try:
16
+ response = requests.get(url, headers=headers)
17
  if response.status_code == 200:
18
+ json_data = response.json()
19
+
20
+ # Mapeo de columnas
21
+ column_mapping = {
22
+ "Palabra_clave": "keyword",
23
+ "B煤squedas_mensuales": "searchVolume",
24
+ "CPC": "cpc",
25
+ "URL": "fullUrl",
26
+ "Visibilidad_1": "potentialVisibilityScoreInc",
27
+ "Visibilidad_2": "visibilityIndex",
28
+ "Visibilidad_3": "visibilityIndexShare"
29
+ }
30
+
31
+ # Procesar datos
32
+ items = json_data.get("items", [])
33
+ if not items:
34
+ return None, "No se encontraron datos para el dominio proporcionado."
35
+
36
+ # Crear DataFrame con las columnas en orden
37
+ data = []
38
+ for item in items:
39
+ row = {key: item.get(value, 0) for key, value in column_mapping.items()}
40
+ data.append(row)
41
+
42
+ df = pd.DataFrame(data, columns=column_mapping.keys())
43
+
44
+ # Aplicar formato adicional (por ejemplo, palabras clave con m谩s de 4 palabras)
45
+ df["Palabra_clave"] = df["Palabra_clave"].apply(
46
+ lambda x: f"{x} (隆Clave larga!)" if isinstance(x, str) and len(x.split()) > 4 else x
47
+ )
48
+
49
+ # Generar archivo Excel
50
+ output = BytesIO()
51
+ with pd.ExcelWriter(output, engine="xlsxwriter") as writer:
52
+ df.to_excel(writer, index=False, sheet_name="Datos")
53
+ sheet = writer.sheets["Datos"]
54
+ sheet.set_column(0, len(column_mapping) - 1, 20) # Ajustar ancho de columnas
55
+
56
+ output.seek(0)
57
+ return output, "Archivo generado exitosamente. Desc谩rgalo abajo."
58
  else:
59
+ return None, f"Error al consultar la API: HTTP {response.status_code}"
60
+ except requests.RequestException as e:
61
+ return None, f"Error en la conexi贸n: {str(e)}"
62
 
63
  # Interfaz de Gradio
64
  def interfaz():
65
  with gr.Blocks() as app:
66
+ gr.Markdown("## Consulta de Keywords y Exportaci贸n a Excel")
67
+ dominio_input = gr.Textbox(label="Dominio (ejemplo.com)", placeholder="psicologiaymente.com")
68
+ idioma_input = gr.Textbox(label="Idioma (ej: es)", value="es")
69
+ pais_input = gr.Textbox(label="Pa铆s (ej: es)", value="es")
70
+ archivo_salida = gr.File(label="Archivo Excel", file_types=[".xlsx"])
71
+ mensaje_salida = gr.Textbox(label="Estado", interactive=False)
72
+
73
+ btn = gr.Button("Obtener Datos y Transformar")
74
+ btn.click(
75
+ fn=obtener_datos_y_transformar,
76
+ inputs=[dominio_input, idioma_input, pais_input],
77
+ outputs=[archivo_salida, mensaje_salida]
78
+ )
79
  return app
80
 
81
  # Ejecutar la aplicaci贸n