Ir al contenido

API de código Morse

Cuatro puntos de acceso de solo lectura por HTTPS. Sin cuenta, sin clave, sin formulario de registro: solo una dirección que devuelve JSON.

Sin clave, pero no ilimitado. Las peticiones se cuentan por dirección y por punto de acceso. Las respuestas llevan una cabecera Cache-Control: si la respetas, nunca te acercarás al límite, porque la misma pregunta siempre tiene la misma respuesta.

Codificar

De texto a Morse. Las palabras se separan con una barra.

GET https://www.morse-code.info/api/encode?text=HOLA
{
  "ok": true,
  "text": "HOLA",
  "morse": ".... --- .-.. .-",
  "unbekannt": []
}

unbekannt enumera los caracteres que no tienen código Morse. Quedan fuera del resultado, pero se te avisa: un emoji que desapareciera en silencio convertiría una entrada equivocada en una respuesta aparentemente correcta.

Decodificar

De Morse a texto. Acepta la barra o tres espacios como separador de palabras.

GET /api/decode?morse=....%20---%20.-..%20.-
{
  "ok": true,
  "morse": ".... --- .-.. .-",
  "text": "HOLA",
  "unbekannt": []
}

Una secuencia sin significado se convierte en un signo de interrogación dentro de text y además aparece en unbekannt. Así se conserva la posición y sigues sabiendo qué falló. Todo lo que no sea punto, raya, barra o espacio se rechaza con 400 en lugar de interpretarse con benevolencia.

Tiempos

Cuánto dura un texto y cuánto duran sus partes. La velocidad sigue a PARIS: 50 unidades por palabra de referencia, una unidad son 1,2/PPM segundos.

GET /api/timing?text=PARIS&wpm=20
{
  "dit_ms": 60,
  "dah_ms": 180,
  "pause_zeichen_ms": 180,
  "pause_wort_ms": 420,
  "dauer_s": 2.58,
  "einheiten": { "punkte": 10, "striche": 4, "zeichen": 5, "woerter": 1 }
}

Con &effektiv= se activa Farnsworth: los caracteres mantienen su velocidad y las pausas entre ellos se alargan. effektiv se limita a wpm, porque Farnsworth estira pausas y nunca acorta caracteres.

dauer_s mide del primer sonido al último. No incluye una pausa de palabra final, por eso PARIS a 20 PPM da 43 unidades y no 50.

Alfabeto

Una tabla de código completa. Hay seis conjuntos: international (el predeterminado), american, wabun (japonés), thai, hangul (coreano) y russisch (cirílico).

GET /api/alphabet?set=international

La respuesta separa tres cosas: zeichen contiene los grupos de caracteres, zeit las proporciones de tiempo cuando el conjunto define las suyas, y hinweise la fuente y las notas. Cada tabla de este sitio procede de una fuente citada, y esa cita viaja con los datos.

Límites, CORS y errores

  • Frecuencia: 120 peticiones por minuto y dirección para codificar, decodificar y tiempos; 30 para el alfabeto, porque una respuesta ocupa varios kilobytes y casi nunca cambia. Por encima del límite llega un 429 con cabecera Retry-After.
  • CORS: abierto. Access-Control-Allow-Origin: *, así que puedes llamar directamente desde el navegador. Aquí hay datos públicos de consulta y ningún dato de usuario: no existe nada que una página ajena pudiera obtener en nombre de un visitante.
  • Métodos: GET y OPTIONS. Un POST recibe 405 en vez de aceptarse en silencio.
  • Los errores también son JSON, nunca una página HTML de error: {"ok": false, "fehler": "text-fehlt"}.
  • Longitud: 1000 caracteres por petición, 200 en los tiempos.

Si lo necesitas sin conexión o en mayor volumen, la librería JavaScript hace lo mismo en el navegador sin ninguna petición, y es el mismo código que corre aquí.

Preguntas frecuentes

  • ¿Necesito una clave de API?

    No. No hay registro ni clave. El límite funciona por dirección, y eso basta para un servicio que solo calcula y no guarda nada.

  • ¿Puedo usarla en un producto comercial?

    Sí, dentro del límite y sin dar a entender que este sitio respalda tu producto. Si tu volumen es mayor, usa la librería JavaScript: corre en tu lado y no tiene límite alguno.

  • ¿Por qué algunos nombres de campo están en alemán?

    Porque el código está escrito en alemán de principio a fin, y renombrar los campos solo en el borde crearía dos vocabularios para lo mismo. unbekannt es desconocido, zeichen caracteres, einheiten unidades, fehler error.

  • ¿Hay un punto de acceso para audio?

    Por la API no. La decodificación de sonido ocurre en el navegador, en un worker, sobre la señal en vivo. Enviar archivos de audio a un servidor sería más lento, peor, y supondría tratar grabaciones que no nos incumben.