Airtime 2.1 para estaciones de radio

Cómo exportar la programación

Airtime tiene una función que permite mostrar la información del programa en reproducción y los datos del usuario en sitios remotos. Esta función está incluida en Airtime porque no sería usual que invitaras al público en general a ingresar en el servidor directamente. Si tienes a muchas personas exigiendo los datos del servidor simultáneamente, podría sobrepasarse el tráfico de la red que permite el equipo, interrumpiendo tu transmisión. Si se desarrolla de la forma voluntaria, esta sobrecarga de la red se denomina un ataque de negación de servicio.

En lugar de eso, tu servidor público en la web puede recuperar la información del horario desde Airtime. Esta información aparecerá en tu estación transmisora y en los sitios afiliadosm por medio de un sistema de manejo de contenido, como Newscoop de Sourcefabric (http://newscoop.sourcefabric.org/). Puede presentarse con widgets de Javascript widgets, estilizados con CSS, en cualquier formato que desees.

Existen dos tipos de información que pueden recuperarse de manera remota desde Airtime: los metadatos del programa actual y el siguiente (live-info) o el horario de la semana corriente (week-info). Estos metadatos incluyen nombres de programa, horas, descripciones y direcciones individuales del programa en tu sitio público. Así, tu audiencia puede navegar en la información del horario para investigar más sobre un programa particular, o descargar una grabación del programa anterior que hayas hecho descargable.

Si tu servidor de Airtime está accesible en http://air1.example.com la información del programa en vivo puede recuperarse en tu servidor web con el URL siguiente:

http://air1.example.com/api/live-info/?callback

El texto de metadatos separado por comas regresará a tu servidor web de una manera similar a la siguiente:

({
"env":"development",
"schedulerTime":"2011-05-09 15:01:18",
"currentShow":[{"start_timestamp":"2011-05-09 16:00:00",
"end_timestamp":"2011-05-09 17:00:00",
"name":"Funk Show",
"id":"8",
"instance_id":"8",
"record":"0",
"url":"http:\/\/funk.example.com\/"}],
"nextShow":[{"id":"9","starts":"2011-05-09 17:00:00",
"ends":"2011-05-09 18:00:00",
"show_id":"9",
"record":"0",
"rebroadcast":"0",
"instance_id":null,
"file_id":null,
"soundcloud_id":null,
"time_filled":null,
"name":"Dance show",
"url":"http:\/\/dance.example.com",
"genre":"Dance",
"description":"Techno, techno, techno, techno!",
"color":"000000",
"background_color":"ffea00",
"start_timestamp":"2011-05-09 17:00:00",
"end_timestamp":"2011-05-09 18:00:00"}],
"timezone":"BST",
"timezoneOffset":"3600"
})

La información del horario de la semana actual puede recuperarse con este URL:

http://air1.example.com/api/week-info/?callback

En tal caso, los metadatos devueltos tendrán un formato diferente del anterior, y similar al siguiente. Para acortar el ejemplo, esta exportación solo muestra cuatro programas en un lunes. La exportación de un horario semanal tendrá mucho más texto:

({
"sunday":[],
"monday":[
{"show_starts":"2011-05-09 14:25:00",
"show_ends":"2011-05-09 14:35:00",
"show_name":"Elvis Show",
"url":"http:\/\/elvis.example.com\/"},
{"show_starts":"2011-05-09 14:50:00",
"show_ends":"2011-05-09 14:55:00",
"show_name":News",
"url":"http:\/\/news.example.com\/"},
{"show_starts":"2011-05-09 16:00:00",
"show_ends":"2011-05-09 17:00:00",
"show_name":"Funk Show",
"url":"http:\/\/funk.example.com\/"},
{"show_starts":"2011-05-09 17:00:00",
"show_ends":"2011-05-09 18:00:00",
"show_name":"Dance show",
"url":"http:\/\/dance.example.com"}
],
"tuesday":[],
"wednesday":[],
"thursday":[],
"friday":[],
"saturday":[]
})

Si aparece el mensaje You are not allowed to access this resource cuando intentas visualizar la información en tu navegador web, entra a la interfaz administradora de Airtime, haz clic en System dentro del menú principal y luego entra a Preferences. Habilita la opción Allow Remote Websites To Access "Schedule" Info? y haz clic en Submit. Luego, refresca la página con el URL de la exportación de horario.

 

Guardar información de horarios en cache   

Si el servidor de Airtime está contenido en un firewall, o quieres protegerlo de un alto número de solicitudes de horario, puede que debas guardar la información en un cache dentro del servidor inmediato o público. Puedes crear una regla de firewall que solo permita al servidor de horarios la conexión con el servidor de Airtime, además de los usuarios remotos de la interfaz web de Airtime.

Tu administrador del sistema puede fijar el almacenamiento de horarios en un servidor habilitado Apache o PHP con el programa curl instalado, usando los siguientes pasos: 

1. Crea un código bash en el servidor de horarios (schedule.example.com) que revise el servidor remoto de Airtime (air1.example.com)  y escriba los metadatos devueltos en un par de archivos temporales locales:

$ sudo nano /usr/local/bin/airtime-schedule.sh

El contenido de este archivo debe parecerse al código siguiente, reemplazando air1.example.comcon el nombre de tu servidor de Airtime: 

#!/bin/sh

curl -s "http://air1.example.com/api/live-info/?callback=***" > /tmp/live-info

curl -s "http://air1.example.com/api/week-info/?callback=***" > /tmp/week-info

2. Haz el código bash ejecutable:

$ sudo chmod +x /usr/local/bin/airtime-schedule.sh

3. Crea una configuración Apache VirtualHost para el servidor de usuario: 

$ sudo nano /etc/apache2/sites-available/schedule

Debe contener una definición como la siguiente, reemplazando schedule.example.com con el nombre de tu servidor de horario:

<VirtualHost *:80>
   ServerName schedule.example.com
   DocumentRoot /var/www/schedule/
</VirtualHost>
4. En la carpeta DocumentRoot del servidor de horario, crea las carpetas api/live-info/ yapi/week-info/

$ sudo mkdir -p /var/www/schedule/api/live-info/
$ sudo mkdir -p /var/www/schedule/api/week-info/

5. Crea un archivo index.php en la carpeta api/live-info/:

$ sudo nano /var/www/schedule/api/live-info/index.php

con este código:

<?php
$filename = '/tmp/live-info';  // define here the path and name of uploaded live-info file

header('Content-Type: text/javascript');
header("Expires: Thu, 01 Jan 1970 00:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");

$callback = empty($_GET['callback']) ? null : $_GET['callback'];
$content = file_get_contents($filename);
$content = str_replace('***', $callback, $content);
echo $content;
?>

6. Crea un archivo index.php en la carpeta api/week-info/:

$ sudo nano /var/www/schedule/api/week-info/index.php

que contenga el código:

<?php
$filename = '/tmp/week-info';  // define here the path and name of uploaded week-info file

header('Content-Type: text/javascript');
header("Expires: Thu, 01 Jan 1970 00:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");

$callback = empty($_GET['callback']) ? null : $_GET['callback'];
$content = file_get_contents($filename);
$content = str_replace('***', $callback, $content);
echo $content;
?>

7. Habilita la nueva configuración y recarga el servidor web Apache: 

$ sudo a2ensite schedule
$ sudo /etc/init.d/apache2 reload

8. Create un cronometrado para ejecutar el código bash cada minuto:

$ sudo nano /etc/cron.d/airtime-schedule

que contenga la línea: 

* * * * * www-data /usr/local/bin/airtime-schedule.sh

El servidor de horario ahora contendrá la misma información que el servidor de Airtime, con un cache de un minuto de existencia. Puedes ajustar el tiempo del cache al moderar la frecuencia con que el cronometrado revisa el servidor de Airtime.

Widgets de página web

Los códigos para HTML, Javascript y CSS de tu sitio público están provistos en la carpeta widgetsde tu código de instalación de Airtime.  Si realizaste una instalación avanzada en Debian y Ubuntu, los widgets puedes hallarlos en el directorio /usr/share/doc/airtime/examples/.

Para que los widgets funcionen en un típico servidor web, los vínculos a los códigos Javascript y CSS deben incluirse en la página HTML <head> element, como el siguiete ejemplo: 

<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Airtime widgets</title>
   <script src="js/jquery-1.6.1.min.js" type="text/javascript">
    </script>
   <script src="js/jquery-ui-1.8.10.custom.min.js" type="text/javascript">
    </script>
   <script src="js/jquery.showinfo.js" type="text/javascript">
    </script>
  <link href="css/airtime-widgets.css" rel="stylesheet" type="text/css" />
</head>

Un ejemplo completo aparece en el archivo widgets/sample_page.html en el código de instalación de Airtime, o el directorio /usr/share/doc/airtime/examples/ si instalaste el paquete Debian/Ubuntu de Airtime.

Este código es para un pequeño widget llamado airtimeLiveInfo que muestra la información del programa actual (tiempo transcurrido y tiempo restante), así como la información del siguiente programa (tiempo de inicio y de fin). En este ejemplo, la etiqueta de texto para onAirNowestá traducida al francés para soportar el lenguaje local: 

<script>
    $(document).ready(function() {
        $("#headerLiveHolder").airtimeLiveInfo({
            sourceDomain: "http://schedule.example.com/",
            text: {onAirNow:"Sur Les Antennes", offline:"Offline", current:"Current", next:"Next"},
            updatePeriod: 20 //seconds
        });
    });
</script>

En la página web, este widget puede verse de la siguiente forma:

 

Las propiedades de CSS como color: y text-transform:uppercase fueron usadas para estilizar la etiqueta de onAirNow. Hay ejemplos completos en el archivo CSS widgets/css/airtime-widgets.cssdel código instalador de Airtime  o el directorio /usr/share/doc/airtime/examples/.

El siguiente widget airtimeShowSchedule tiene tamaño mediano, y muestra el próximo horario del día.

<script>
    $(document).ready(function() {
        $("#onAirToday").airtimeShowSchedule({
            sourceDomain: "http://schedule.example.com/",
            text: {onAirToday:"On air today"},
            updatePeriod: 5 //seconds
        });
    });
</script>

 El código de widget anterior puede estilizarse para verse así:


Finalmente, el siguiente código crea un enorme widget airtimeWeekSchedule que permite a los visitantes navegar a lo largo del horario semanal. En este ejemplo, todas las etiquetas han sido traducidas al francés:

<script>    
    $(document).ready(function() {
        $("#scheduleTabs").airtimeWeekSchedule({
            sourceDomain:"http://schedule.example.com/",
            dowText:{monday:"Lundi", tuesday:"Mardi", wednesday:"Mercredi", thursday:"Jeudi", friday:"Vendredi", saturday:"Samedi", sunday:"Dimanche"},
            miscText:{time:"Temps", programName:"Nom du Programme", details:"Détails", readMore:"Lire La Suite"},
            updatePeriod: 600 //seconds
        });
    });
</script>

Con el código anterior y CSS, las primeras seis horas pueden estilizarse de esta forma: 

El valor de sourceDomain en los ejemplos de código anteriores debe coincidir con el URL del cual deseas servir la información de horarios al público. Si has usado el método de Guardar información de horario en cache, el URL debe ser el de su servidor de horario, no el servidor de Airtime directamente.