Python: Consulta de Documentos Dinámicos en Dinaup
Este artículo explica cómo consultar documentos dinámicos en la API de Dinaup utilizando Python.
Antes de empezar, asegúrate de tener a mano tu clave API de Dinaup y la clave secreta utilizada para firmar las solicitudes. Es importante no hardcodear estas claves en tu código, especialmente en ambientes de producción o en código que será compartido o público. Considera utilizar variables de entorno o archivos de configuración seguros.
1. Dependencias
pip install requests
2. Firma de la Solicitud
La seguridad de las solicitudes a la API de Dinaup se garantiza mediante la firma de los parámetros de la solicitud. A continuación, se presenta cómo generar dicha firma:
import hmac
import hashlib
import requests
import json
import html
def calculate_hmac(secret_key, params):
if not params or len(params) == 0:
return ""
# Asegura que 'params' sea un diccionario
if not isinstance(params, dict):
raise ValueError("Params must be a dictionary.")
all_values = [f"{key}={value}" for key, value in sorted(params.items())]
data_string = "".join(all_values)
if isinstance(secret_key, str):
secret_key = secret_key.encode('utf8')
data_bytes = data_string.encode('utf8')
hmac_hash = hmac.new(secret_key, data_bytes, hashlib.sha256)
signature = hmac_hash.hexdigest()
return signature
def send_signed_request(endpoint, path, post_params, api_key, secret_key):
"""
Envía una solicitud POST firmada a la API de Dinaup.
:param endpoint: URL base de la API de Dinaup.
:param path: Ruta específica de la API para la solicitud.
:param post_params: Parámetros de la solicitud.
:param api_key: Clave API de Dinaup.
:param secret_key: Clave secreta para la firma.
:return: Respuesta de la API como texto.
"""
post_params['dinaup_apikey'] = api_key
post_params['dinaup_usuarioip'] = "local"
post_params['dinaup_usuarionavegador'] = "python"
post_params['signature'] = calculate_hmac(secret_key, post_params)
response = requests.post(f"{endpoint}/{path}", data=post_params)
return response.text
def process_response(response_json):
"""
Procesa la respuesta JSON de la API de Dinaup para extraer el documento HTML.
:param response_json: Respuesta JSON de la API.
:return: Documento HTML decodificado.
"""
response_data = json.loads(response_json)
document_html_encoded = response_data['respuesta']['documento']
return html.unescape(document_html_encoded)
3. Envío de solicitud
Una vez generada la firma, la incluimos en la solicitud junto con los demás parámetros requeridos:
# Configuración de ejemplo (Reemplaza con tus valores reales)
#@title Configuración de la API de Dinaup
endpoint = "https://..." #@param {type:"string"}
api_key = "" #@param {type:"string"}
secret_key = "" #@param {type:"string"}
docdinamico_Id = "" #@param {type:"string"}
#@markdown ### Parámetros de la API
#@markdown Por favor, introduce los detalles requeridos para la consulta:
#@markdown - Endpoint de la API
#@markdown - Clave API
#@markdown - Clave secreta
#@markdown - ID del documento dinámico
# Envío de la solicitud
response_json = send_signed_request(endpoint, "docdinamico", {'dinaup_dd_id': docdinamico_Id}, api_key, secret_key)
# Procesamiento de la respuesta
document_content = process_response(response_json)
# Visualización del documento
print(document_content)