English فارسی Suomi
Français Nederlands Translate
EDIT

airtime-ru-2-3

[view all chapters]

Экспорт программы вещания

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.


EDIT