Dinaup - Base de Conocimientos Help

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)

Notebook

Puedes descargar Notebook en Github: consulta_documentos_dinamicos_dinaup-ipynb

Last modified: 28 November 2024