Configura tu entorno

Genera una API Key en una cuenta verificada de DatosPerú. Define DATOSPERU_API_KEY y DATOSPERU_RUC en el entorno del proceso, utilizando un RUC cuya consulta tengas autorizada. No incluyas esos valores en notebooks compartidos o repositorios.

La solicitud POST envía JSON con ruc como cadena. Para consultar un DNI, utiliza /api/v1/dni y el campo dni con ocho dígitos. Revisa los schemas de ambas operaciones porque sus respuestas no son iguales.

Controla las respuestas HTTP

urllib levanta HTTPError para errores HTTP. Puedes leer el cuerpo JSON de ese error si necesitas distinguir error.code, pero evita registrar el cuerpo de consultas personales. La API proporciona códigos para autenticación, parámetros, cuotas y errores de la fuente.

Usa un tiempo máximo de espera. Si automatizas consultas, limita la concurrencia según tu plan, detén los intentos cuando se agota la cuota y no conviertas resultados ausentes en datos de relleno.

Ejemplo de código

import json
import os
import re
from urllib.request import Request, urlopen
from urllib.error import HTTPError

token = os.environ['DATOSPERU_API_KEY']
ruc = os.environ['DATOSPERU_RUC']
if not re.fullmatch(r'\d{11}', ruc):
    raise ValueError('El RUC debe tener once dígitos.')
request = Request(
    'https://api.datosperu.net/api/v1/ruc',
    data=json.dumps({'ruc': ruc}).encode('utf-8'),
    headers={
        'Authorization': 'Bearer ' + token,
        'Content-Type': 'application/json'
    },
    method='POST'
)
try:
    with urlopen(request, timeout=30) as response:
        result = json.load(response)
except HTTPError as error:
    raise RuntimeError(f'Consulta rechazada: HTTP {error.code}') from None
if not result.get('success'):
    raise RuntimeError('La consulta no se completó.')
empresa = result['data']

Este ejemplo realiza una solicitud real cuando configuras tus credenciales y lo ejecutas. No contiene resultados simulados.