
Airtime имеет опцию, благодаря которой еженедельная программа вещания вашей станции и информация о передаче в эфире отображается на удаленных веб-сайтах. Эта функция включена в Airtime в связи с тем, что, как правило, у широкой публики нет доступа напрямую к вашему серверу Airtime. Если очень большое количество людей одновременно будет запрашивать данные с вашего сервера Airtime, сетевой трафик может перегрузить сервер, что может помешать вещанию. Подобная перегрузка сети, осуществляемая намеренно, известна как DDoS-атака.
Вместо этого ваш веб-сервер, предназначенный для общего доступа, может загружать сведения о расписании вещания из Airtime. Эта информация может затем отображаться на веб-сайте вашей станции или партнерских веб-сайтах системой управления контентом, такой как система Newscoop, созданная Sourcefabric Newscoop (http://newscoop.sourcefabric.org/). Она может отображаться при помощи виджетов Javascript и каскадных таблиц стилей в любом требующемся формате.
Есть два вида информации, которая может быть получена удаленно из Airtime; метаданные о текущей программе в эфире, а также о следующей передаче, или программа вещания на текущую неделю. Эти метаданные включают название программы, время выхода в эфир, описание и индивидуальный URL-адрес программы на вашем общедоступном веб-сайте. Таким образом, аудитория вашей станции может переходить по баннерам от информации о программе вещания к более подробной информации о конкретной программе, или скачивать запись предыдущей программы, которую вы выложили для общего доступа.
Если ваш сервер Airtime доступен на http://air1.example.com, информация о передаче в эфире может быть получена вашим веб-сервером с помощью следующего URL:
http://air1.example.com/api/live-info/?callback
Разделенные запятыми текстовые метаданные, возвращаемые на ваш веб-сервер, могут выглядеть примерно так:
({
"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"
})
Информация о расписании вещания на текущую неделю может быть получена при помощи следующего URL:
http://air1.example.com/api/week-info/?callback
В этом случае метаданные будут получены в формате, отличном от приведенного выше примера, и могут приблизительно выглядеть, как показано ниже. Для краткости данный пример экспорта программы вещания включает только четыре передачи понедельника. Экспорт полной еженедельной программы вещания будет содержать гораздо больше текста.
({
"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":[]
})
Если при попытке показать информацию о программе в вашем браузере вы увидели сообщение У вас нет прав доступа к данному ресурсу, войдите в административный интерфейс Airtime, выберите Configure в главном меню, затем Preferences. Разрешите (enable) Удаленным вебсайтам доступ к информации о программе вещания (Allow Remote Websites To Access "Schedule" Info, кликните Отправить, затем обновите окно браузера, открытое на странице экспорта программы вещания.
Если сервер Airtime защищен брандмауэром или, в случае, если вы хотите защитить сервер Airtime от слишком большого числа запросов о программе вещания, вы можете пожелать кэшировать данную информацию на общедоступном или промежуточном сервере. Затем вы можете создать правило для брандмауэра, согласно которому помимо любых удаленных пользователей веб-интерфейса Airtime связаться с сервером Airtime может только сервер для программы вещания.
Ваш системный администратор может настроить кэширование программы на стандартном веб-сервере с Apache и PHP, на котором установлена программа curl, следующим образом:
1. Создайте bash-скрипт на сервере с программой вещания (schedule.example.com), который будет запрашивать сервер Airtime (air1.example.com) и записывать метаданные в виде пары временных файлов:
sudo nano /usr/local/bin/airtime-schedule.sh
Содержимое этого файла должно быть таким, как этот скрипт, но air1.example.com заменено именем вашего сервера 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. Сделайте bash-скрипт исполняемым:
sudo chmod +x /usr/local/bin/airtime-schedule.sh
3. Создайте конфигурацию Apache VirtualHost для сервера с программой вещания:
sudo nano /etc/apache2/sites-available/schedule
содержащую следующий код, заменяя schedule.example.com именем вашего сервера с программой вещания:
<VirtualHost *:80> ServerName schedule.example.com DocumentRoot /var/www/schedule/ </VirtualHost>4. В папке DocumentRoot сервера с программой вещания создайте папки api/live-info/ и api/week-info/
sudo mkdir -p /var/www/schedule/api/live-info/ sudo mkdir -p /var/www/schedule/api/week-info/
5. Создайте файл index.php в папке api/live-info/:
sudo nano /var/www/schedule/api/live-info/index.php
содержащий следующий код:
<?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. Создайте файл index.php в папке api/week-info/:
sudo nano /var/www/schedule/api/week-info/index.php
содержащий следующий код:
<?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. Запустите новую конфигурацию и перезагрузите веб-сервер Apache:
sudo a2ensite schedule sudo /etc/init.d/apache2 reload
8. Создайте функцию запуск задач по расписанию для запуска bash-скрипта ежеминутно:
sudo nano /etc/cron.d/airtime-schedule
содержащую следующую строку:
* * * * * www-data /usr/local/bin/airtime-schedule.sh
Сервер программы вещания начнет обслуживать ту же информацию о вещании, что и сервер Airtime со временем сохранения кэша - одна минута. Вы можете настраивать время сохранения, изменяя функцию запуска задач, которая посылает запросы на сервер Airtime.
Образцы кодов HTML, Javascript и CSS для вашего общедоступного сайта приведены в папке widgets установочного архива Airtime. Если вы реализовали автоматизированную установку на Debian или Ubuntu, виджеты будут находиться в папке /usr/share/doc/airtime/examples/.
Чтобы виджеты работали на типичном веб-сервере, ссылки на коды Javascript и CSS должны быть вставлены в <head> HTML страницы, например:
<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>
Полный пример дан в файле widgets/sample_page.html в установочном архиве Airitme. Или в папке /usr/share/doc/airtime/examples/ если вы установили Debian/Ubuntu пакет Airtime.
TКод в примере ниже предназначен для виджета airtimeLiveInfo, который отображает информацию о текущей передаче (пройденное время и время до окончания) и информацию о следующей передаче (время начала и время окончания). В этом примере текст метки для onAirNow переведен на французский для поддержки местного языка:
<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>
На общедоступном сайте этот виджет может выглядеть следующим образом:

Свойства CSS color: и text-transform:uppercase были использованы для создания тиля метки onAirNow. Полный пример CPP файла widgets/css/airtime-widgets.css находится в установочном архиве Airtime или в папке /usr/share/doc/airtime/examples/.
Следующий виджет airtimeShowSchedule среднего размера. Он показывает следующие программы этого дня.
<script>
$(document).ready(function() {
$("#onAirToday").airtimeShowSchedule({
sourceDomain: "http://schedule.example.com/",
text: {onAirToday:"On air today"},
updatePeriod: 5 //seconds
});
});
</script>
Данный выше код виджета можно оформить следующим образом:

И наконец, следующий код создает виджет больших размеров airtimeWeekSchedule,который позволяет пользователям изучить программу вещания недели. В данном примере все метки виджета переведены на французский:
<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>
При помощи указанного выше кода и CSS первые шесть часов ежедневной программы вещания можно оформить следующим образом:
Значение sourceDomain в данном примере должно совпадать с тем адресом, по которому, согласно вашим планам, должна быть размещена информация о программе вещания. Если вы применили метод Кэширования информации о программе вещания, о котором мы подробно написали выше, то данным адресом будет адрес вашего сервера программы вещания, а не сервер Airtime.