Bot en python para programar tu radio automyticamente

Bot en Python para Programar tu Radio Automáticamente

Cuando empezamos a escalar el contenido en La MIX Radio, nos dimos cuenta de que subir los archivos de audio y programar los horarios manualmente era una pérdida de tiempo total. El primer problema real apareció cuando queríamos lanzar bloques de Deep House y Electro Swing en horarios fijos sin tener que estar pegados al servidor a medianoche. Por eso decidimos crear un bot en Python para programar tu radio automáticamente, integrando la gestión de archivos con la emisión en tiempo real.

El problema de la gestión manual en el servidor

Si operas una radio online, sabes que el flujo de trabajo puede volverse tedioso. Pasar archivos por FTP, renombrarlos según la prioridad y subirlos a la carpeta de Icecast es un proceso propenso a errores. Lo peor ocurre cuando olvidas un archivo o el nombre no coincide con el script de rotación; el resultado es un silencio incómodo o que la radio repita la misma canción durante horas.

Esta falta de automatización genera un estrés innecesario. En nuestro caso, tener que entrar en la VM 111 cada vez que queríamos cambiar el género musical del día no era viable. Necesitábamos un sistema que leyera una base de datos o un archivo de configuración y moviera los audios a la carpeta de emisión en el momento exacto, sin intervención humana.

Lo que necesitamos antes de empezar

Para que este sistema funcione, no basta con el código; necesitas una infraestructura mínima donde el bot pueda ejecutarse sin interrupciones. Esto es lo que tenemos montado en nuestro homelab de Proxmox:

  • Una VM con Debian o Ubuntu (en nuestro caso, la VM 111).
  • Python 3.10 o superior instalado.
  • Acceso SSH al servidor donde corre Icecast.
  • Una carpeta organizada con la música separada por géneros (ej. /home/lamix/music/deep_house).
  • Cron instalado para manejar la ejecución temporal del script.

Cómo diseñamos la automatización paso a paso

La idea central es que el bot actúe como un director de orquesta. No emite el audio, sino que gestiona qué archivos deben estar disponibles para que el software de emisión los recoja. Para lograrlo, creamos un script que lee un archivo JSON con la programación semanal.

Primero, definimos la estructura de los horarios en un archivo llamado programacion.json. Este archivo nos permite cambiar la música de la semana sin tocar una sola línea de código Python.

{
"lunes": {
"00:00": "deep_house",
"08:00": "electro_swing",
"16:00": "deep_house"
},
"martes": {
"00:00": "electro_swing",
"12:00": "chill_out"
}
}

Una vez que tenemos el horario, necesitamos que el bot identifique el día y la hora actual para mover los archivos correctos. El siguiente bloque de código se encarga de leer el JSON y comparar el tiempo del sistema con la programación establecida.

import json
import os
from datetime import datetime

def obtener_genero_actual():
# Cargamos la programación desde el archivo JSON
with open('programacion.json', 'r') as f:
programacion = json.load(f)

dia_actual = datetime.now().strftime('%A').lower() 
# Ajustamos el día al español según nuestro JSON
dias_map = {
"monday": "lunes", "tuesday": "martes", "wednesday": "miercoles", 
"thursday": "jueves", "friday": "viernes", "saturday": "sabado", "sunday": "domingo"
}

dia_es = dias_map.get(dia_actual, "lunes")
hora_actual = datetime.now().strftime('%H:%M')

# Buscamos el género que corresponde a la hora actual
for hora, genero in programacion[dia_es].items():
if hora_actual >= hora:

return genero

return "general"

Con el género identificado, el bot debe limpiar la carpeta de emisión actual y mover los archivos del nuevo bloque. Para evitar que la radio se quede sin contenido mientras hacemos el cambio, usamos un enlace simbólico o movemos los archivos a una carpeta temporal antes de activarlos.

Aquí es donde el bot en Python para programar tu radio automáticamente hace el trabajo pesado de mover los archivos en la VM 111.

def actualizar_playlist(genero):
ruta_musica = f"/home/lamix/music/{
genero
}"
ruta_emision = "/home/lamix/icecast_playlist/"

# Limpiamos la carpeta de emisión actual
for archivo in os.listdir(ruta_emision):
os.remove(os.path.join(ruta_emision, archivo))

# Copiamos los archivos del género seleccionado
for archivo in os.listdir(ruta_musica):
if archivo.endswith(".mp3"):
os.system(f"
cp {
ruta_musica
}/{
archivo
} {
ruta_emision
}/")
print(f"Copiando {
archivo
} para el bloque de {
genero
}")

# Ejecución principal del bot
genero_seleccionado = obtener_genero_actual()
actualizar_playlist(genero_seleccionado)

Para que esto sea realmente automático, no podemos ejecutar el script a mano. Lo configuramos en el crontab de Linux para que se dispare cada hora y verifique si hay un cambio de género programado.

# Abrimos la configuración de cron
crontab -e

# Programamos la ejecución cada hora en el minuto 0
0 * * * * /usr/bin/
python3 /home/lamix/bots/programador_radio.py

Implementar un bot en Python para programar tu radio automáticamente no se trata de sustituir al locutor, sino de eliminar las tareas repetitivas que nos quitan tiempo de calidad en la selección musical.

Errores que nos costaron tiempo

No todo fue sencillo. Al principio, el bot cometió errores que nos dejaron la radio en silencio durante unos minutos. Estos fueron los fallos más críticos:

  • Permisos de archivos: El script fallaba al intentar borrar archivos en la carpeta de Icecast porque el usuario de Python no tenía permisos de escritura. Lo solucionamos asignando el ownership de la carpeta al usuario lamix mediante chown -R.
  • Formato de fecha: Usamos strftime('%A') que devuelve el día en inglés. Cuando el JSON estaba en español, el bot no encontraba el día y volvía siempre al género «general». Añadimos un diccionario de mapeo para traducir los días.
  • Carga de archivos pesados: Al copiar archivos muy grandes simultáneamente, el disco de la VM 111 sufría picos de I/O que congelaban el streaming. Cambiamos la copia directa por el uso de enlaces simbólicos (symlinks) para que el cambio fuera instantáneo.

Cómo saber que funciona

La verificación es simple. Primero, revisamos los logs del cron para asegurarnos de que el script se ejecutó sin errores. Luego, entramos en la carpeta /home/lamix/icecast_playlist/ y comprobamos que los archivos coincidan con el género programado en el JSON para esa hora exacta.

Finalmente, sintonizamos La MIX Radio y esperamos que la siguiente canción sea del género correspondiente. Si el cambio ocurre sin saltos y la música fluye, el bot está haciendo su trabajo correctamente.

Qué sigue ahora

Una vez dominado el movimiento de archivos, el siguiente paso lógico que estamos implementando es integrar el bot con n8n. Queremos que, cuando el bot cambie el género musical, envíe automáticamente un mensaje a Telegram avisando a los oyentes sobre el bloque que comienza. Así cerramos el círculo de automatización completa en nuestro homelab.

Compartir

“Post relacionados”

🤖
Asistente de Fabio Martínez
En línea
¡Hola! 👋 Soy el asistente virtual de
Fabio Martínez
Técnico de Radio · Dev Web · Servidores

¿Cómo te llamás?