Cómo crear un script en Python para consultar datos de un DNI (usando apiperu.dev)

Cómo crear un script en Python para consultar datos de un DNI (usando apiperu.dev)

Hace poco estuve probando la API de apiperu.dev, que permite consultar información de un DNI directamente desde un script en Python.

En este post te muestro cómo hacerlo paso a paso, desde conseguir tu token hasta ejecutar el código.


Paso 1: Registrarse y obtener el token

Primero hay que crear una cuenta en apiperu.dev.

Después de registrarte, entra a tu panel y ve a la parte de Configuración → API Token.

Ahí verás tu token personal.

  • Si usas el token gratuito (Free), te mostrará los datos básicos del DNI.
  • Si tienes token Premium, verás información mucho más detallada como dirección, ubigeo, estado civil, etc.

Guarda tu token, porque lo vas a necesitar en el script.


Paso 2: Crear el archivo del script

Crea un archivo en tu proyecto llamado dni.py.

Este script usará la librería requests para conectarse a la API, así que si no la tienes instalada, ejecútalo en tu terminal:

pip install requests

Luego, dentro del archivo, importa las librerías necesarias:

import requests
import json

Paso 3: Crear el menú principal

Para hacerlo más interactivo, puedes usar un menú simple en consola que te permita elegir entre usar tu token Premium, el Free o salir del programa.

def menu_principal(): 
  print("\033[1;35m------------------------------------------\033[0m") 
  print("\033[1;36m CONSULTA DE DNI CON API DE PERU DEV\033[0m") 
  print("\033[1;35m------------------------------------------\033[0m") 
  print("\033[1;33m1.\033[0m TOKEN PREMIUM") 
  print("\033[1;33m2.\033[0m TOKEN FREE") 
  print("\033[1;33m3.\033[0m SALIR")

Los códigos \033[...] sirven para darle color al texto (rojo, azul, verde, etc.) y hacerlo más vistoso en la terminal.


Paso 4: Consultar datos con token Premium

Cuando elijas la opción “1”, el programa pedirá tu DNI y tu token Premium, y luego consultará el endpoint:

https://apiperu.dev/api/dni/{dni}?api_token={token}

Así puedes obtener toda la información detallada:

def accion1(): 
  dni = input("\033[1;32mIngresa el DNI: \033[0m") 
  token = input("\033[1;32mIngresa tu TOKEN PREMIUM: \033[0m") 
  url = f"https://apiperu.dev/api/dni/{dni}?api_token={token}" 
  response = requests.get(url) 
  data = response.json()['data'] 
  print("\033[1;36mNúmero:\033[0m", data['numero']) 
  print("\033[1;36mNombre Completo:\033[0m", data['nombre_completo']) 
  print("\033[1;36mDirección:\033[0m", data['direccion_completa'])

Con esto ya puedes ver toda la información real que devuelve la API (si tu token es premium, claro).


Paso 5: Consultar con token Free

Si solo tienes la versión gratuita, el script funciona igual, solo que mostrará menos datos.

def accion2(): 
  dni = input("\033[1;32mIngresa el DNI: \033[0m") 
  token = input("\033[1;32mIngresa tu TOKEN FREE: \033[0m") 
  url = f"https://apiperu.dev/api/dni/{dni}?api_token={token}" 
  response = requests.get(url) 
  data = response.json()['data'] 
  print("\033[1;36mNúmero:\033[0m", data['numero']) 
  print("\033[1;36mNombre Completo:\033[0m", data['nombre_completo'])

La diferencia es que solo te dará los nombres y apellidos.


Paso 6: Ejecutar el programa

Guarda el archivo y ejecútalo desde la terminal:

python3 dni.py

Vas a ver algo como esto:

-------------------------------------
   CONSULTA DE DNI CON API DE PERU DEV
------------------------------------------
1. TOKEN PREMIUM 
2. TOKEN FREE 
3. SALIR

Solo eliges la opción, colocas tu DNI y tu token, y listo.


Código completo

import requests
import json

print('\033[96m')
def mostrar_menu(opciones):
    print('Seleccione una opción:')
    print("")
    for clave in sorted(opciones):
        print(f' {clave}) {opciones[clave][0]}')


def leer_opcion(opciones):
	   
    while (a := input('Opción: ')) not in opciones:
        print('Opción incorrecta, vuelva a intentarlo.')
    return a


def ejecutar_opcion(opcion, opciones):
    opciones[opcion][1]()


def generar_menu(opciones, opcion_salida):
    opcion = None
    while opcion != opcion_salida:
        mostrar_menu(opciones)
        opcion = leer_opcion(opciones)
        ejecutar_opcion(opcion, opciones)
        print()


def menu_principal():
	  
    opciones = {
        
        '1': ('\033[96mTOKEN PREMIUM', accion1),
        '2': ('\033[96mTOKEN FREE', accion2),
        '3': ('\033[96mSALIR', salir)
    }

    generar_menu(opciones, '3')


def accion1():
    dni = input('\033[92mINGRESA EL DNI: \033[93m')
    token = input('\033[92mINGRESA TU TOKEN: \033[93m')

    response = requests.get("https://apiperu.dev/api/dni/" + dni + "?api_token=" + token)

    numero = response.json()['data']['numero']
    nombre_completo = response.json()['data']['nombre_completo']
    nombres = response.json()['data']['nombres']
    apellido_paterno = response.json()['data']['apellido_paterno']
    apellido_materno = response.json()['data']['apellido_materno']
    codigo_verificacion = response.json()['data']['codigo_verificacion']
    fecha_nacimiento = response.json()['data']['fecha_nacimiento']
    sexo = response.json()['data']['sexo']
    estado_civil = response.json()['data']['estado_civil']
    departamento = response.json()['data']['departamento']
    provincia = response.json()['data']['provincia']
    distrito = response.json()['data']['distrito']
    direccion = response.json()['data']['direccion']
    direccion_completa = response.json()['data']['direccion_completa']
    ubigeo_reniec = response.json()['data']['ubigeo_reniec']
    ubigeo_sunat = response.json()['data']['ubigeo_sunat']
    ubigeo = response.json()['data']['ubigeo']
    
    print("")
    print("\033[91mDNI: \033[94m" + numero)
    print("\033[91mNOMBRE COMPLETO: \033[94m" + nombre_completo)
    print("\033[91mNOMBRES: \033[94m" + nombres)
    print("\033[91mAPELLIDO PATERNO: \033[94m" + apellido_paterno)
    print("\033[91mAPELLI: \033[94m" + apellido_materno)
    print("\033[91mCODIGO VERIFICACION: \033[94m" + str(codigo_verificacion))
    print("\033[91mFECHA NACIMIENTO: \033[94m" + fecha_nacimiento)
    print("\033[91mSEXO: \033[94m" + sexo)
    print("\033[91mESTADO CIVIL: \033[94m" + estado_civil)
    print("\033[91mDEPARTAMENTO: \033[94m" + departamento)
    print("\033[91mPROVINCIA: \033[94m" + provincia)
    print("\033[91mDISTRITO: \033[94m" + distrito)
    print("\033[91mDIRECCION: \033[94m" + direccion)
    print("\033[91mDIRECCION COMPLETA: \033[94m" + direccion_completa)
    print("\033[91mUBIGEO RENIEC: \033[94m" + ubigeo_reniec)
    print("\033[91mUBIGEO SUNAT: \033[94m" + ubigeo_sunat)
    print("\033[91mUBIGEO: \033[94m" + str(ubigeo))
    print('\033[96m')    
 
def accion2():

   dni = input('\033[92mINGRESA EL DNI: \033[93m')
   token = input('\033[92mINGRESA TU TOKEN: \033[93m')

   response = requests.get("https://apiperu.dev/api/dni/" + dni + "?api_token=" + token)

   numero = response.json()['data']['numero']
   nombre_completo = response.json()['data']['nombre_completo']
   nombres = response.json()['data']['nombres']
   apellido_paterno = response.json()['data']['apellido_paterno']
   apellido_materno = response.json()['data']['apellido_materno']
   ubigeo_sunat = response.json()['data']['ubigeo_sunat']
   ubigeo = response.json()['data']['ubigeo']
   print("")
   print("\033[91mDNI: \033[94m" + numero)
   print("\033[91mNOMBRE COMPLETO: \033[94m" + nombre_completo)
   print("\033[91mNOMBRES: \033[94m" + nombres)
   print("\033[91mAPELLIDO PATERNO: \033[94m" + apellido_paterno)
   print("\033[91mAPELLIDO MATERNO: \033[94m" + apellido_materno)
   print('\033[96m')

def salir():
    print('Saliendo')


if __name__ == '__main__':
    menu_principal()


Y listo. Con esto ya tienes un pequeño programa en consola para probar la API de DNI de apiperu.dev, sin depender de interfaces web ni herramientas externas.

Si quieres, puedes agregar más colores, menús o incluso conectarlo con una base de datos para guardar las consultas.

Comentarios
¿Quieres comentar?

Inicia sesión o regístrate para participar en la conversación


Comentarios (0)

Aún no hay comentarios. ¡Sé el primero en comentar!