Los que me conocéis sabéis que me encantan las cosas del tiempo, hace poco escribí sobre el paquete weather de Debian. Hoy he estado jugando con el servidor Asterisk y he hecho un pequeño script para descargar las previsiones del tiempo del INM. Tras descargar las previsiones del tiempo, gracias a Festival creamos un pequeño fichero de alaw para que nuestros usuarios de Asterisk puedan ver el la previsión de hoy.
A pesar de la integración de Festival con Asterisk he decidido separar la descarga de la información y la creación del fichero de audio usando un script bash de lo que es Asterisk propiamente, puesto que dicha operación requiere cierto tiempo de proceso que considero inaceptable para cada vez que se quiera escuchar la previsión del tiempo. Por tanto creo que la mejor opción es programar la creación del fichero de audio mediante una entrada en cron que podemos ejecutar diariamente a la hora que más nos convenga (aunque considero que lo más apropiado sería que se ejecutara a primera hora de la mañana).
Sin más preámbulos vamos allá con la receta:
El primer paso será instalar festival, en Debian nos bastará con un apt-get. Luego nos bajaremos las voces en español (yo he elegido la femenina pero esto va a gustos) y las instalaremos. Gracias a Elio Rojano por notificar de las voces en español.
apt-get install festival wget forja.guadalinex.org/repositorio/frs/download.php/154/festvox-sflpc16k_1.0-1_all.deb dpkg -i festvox-sflpc16k_1.0-1_all.deb
Una vez tenemos instalado Festival, creamos el pequeño script. Yo lo he colocado en /opt/weatherget:
#!/bin/sh wget -O /opt/wthget www.inm.es/cgi-bin/p07hesp1.sh.2001 cat /opt/wthget | paste -s | sed -e 's/<PRE CLASS="textopredClass">/$/' | sed -e 's/<\/PRE>/$/' | cut -d$ -f2 > /opt/weather rm /opt/wthget /usr/bin/text2wave /opt/weather -o /var/lib/asterisk/sounds/prevtiempo.ulaw -otype ulaw rm /opt/weather
Probamos a ejecutar el script para comprobar su correcto funcionamiento, si no observamos ningún problema podemos proceder a crear ya una entrada en el cron.
./weatherget --19:29:39-- http://www.inm.es/cgi-bin/p07hesp1.sh.2001 => `/opt/wthget' Resolviendo www.inm.es... 193.144.152.138 Connecting to www.inm.es|193.144.152.138|:80... conectado. Petición HTTP enviada, esperando respuesta... 200 OK Longitud: no especificado [text/html] [ <=> ] 12,577 65.67K/s 19:29:40 (65.57 KB/s) - `/opt/wthget' saved [12577] Duration tree extreme for d 3.05406 Duration tree extreme for l 3.82722 Duration tree extreme for d 3.39688 Duration tree extreme for m 3.39688 Duration tree extreme for i 3.39766 Duration tree extreme for n 3.54519 Duration tree extreme for b 3.39688 Duration tree extreme for e 3.2419 Duration tree extreme for o 3.39766 Duration tree extreme for m 3.39688 Duration tree extreme for i 3.39766 Duration tree extreme for i 3.39766 Duration tree extreme for e 3.2419 Duration tree extreme for e 3.2419 Duration tree extreme for e 3.2419 Duration tree extreme for n 3.54519 Duration tree extreme for l 3.82722 Duration tree extreme for e 3.2419 Duration tree extreme for n 3.54519 Duration tree extreme for r 3.82722 Duration tree extreme for l 3.82722 Duration tree extreme for b 3.05406 Duration tree extreme for l 3.05406
Probaremos de reproducir el archivo de audio que hemos creado desde Asterisk, para el tiempo yo he usado la extensión 003 que he creado en un nuevo contexto weather-ext pero podéis usar la que más os convenga:
[weather-ext] exten => 003,1,Answer exten => 003,2,Playback(prevtiempo) exten => 003,3,Hangup()
Espero que os lo hayáis pasado tan bien como yo. Acepto sugerencias. Ahora tan solo nos falta descolgar nuestra extensión y marcar 003, la voz es muy robótica pero es posible llegar a entenderla. Cruzaremos los dedos y estaremos atentos esperando que haga buen tiempo y podamos salir a dar una vuelta en la moto