Инструкция по созданию программы передач в формате XMLTV
XMLTV — это широко распространенный стандарт описания программ передач. Подробную спецификацию формата можно найти здесь: http://wiki.xmltv.org/index.php/XMLTVFormat, но т.к. она на английском языке, то приведем здесь краткое содержание этого документа.

Процедура подключения программы передач в XMLTV

Процедура подключения программы передач в формате XMLTV к каналам на вЭфире выглядит следующим образом:
1) Вы каким-либо образом (см. пример ниже) создаёте на сайте канала файл с программой передач — например, http://mydomain.ru/xmltv/;
2) сообщаете пользователю @admin, либо на admin@vefire.ru URL-адрес XMLTV-файла, если всё нормально — мы его подключаем к каналу и программа передач появляется на странице канала;
3) каждую ночь наш робот автоматически будет заходить на этот URL-адрес и обновлять программу передач.

Структура файла XMLTV


Файл XMLTV состоит из двух частей:
  • записи 'channel', содержащие информацию о каналах;
  • записи 'records', содержащие информацию о передачах.
Пример файла в формате XMLTV можно посмотреть здесь: http://www.prosveshenie.tv/schedule.xml

В этом примере видно, что в файле описывается один канал с идентификатором id равным Prosveshenie:


где display-name — название канала (опционально), а icon — логотип канала (опционально).


Дальше идет перечисление передач канала вида:


где title - название передачи, desc - описание передачи (опционально), category - категория передачи (опционально). 

Даты начала передачи (start) и окончания передачи (stop) описываются в формате "YmdHis P", где Y — год (4-значный), m — месяц (от 01 до 12), d — день (от 01 до 31), H — час (от 00 до 23), i — минута (от 00 до 59), s — секунда (от 00 до 59), P — смещение по часовому поясу (+0400 — соответствует Московскому времени).

Генерация XMLTV-файла на языке PHP

XMLTV — это стандарт для переноса данных из одного источника в другой. Сами исходные данные лучше хранить в каком-либо другом виде. Самый простой вариант — хранить программу передач в таблице в MySQL-базе данных. В данном примере, мы предположим, что программа передач хранится в таблице schedule, создать которую можно следующим запросом:

CREATE TABLE IF NOT EXISTS `schedule` (

  `start_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  `stop_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

  `category` varchar(32) NOT NULL,

  `title` varchar(128) NOT NULL,

  `desc` varchar(2048) NOT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Предположим, что эту таблицу Вы как-то заполнили расписанием (Вы можете заполнить её через формочки phpMyAdmin'а, сделать интерфейс для добавления записей через сайт/отдельную программу или же импортировать данные в эту таблицу из другого источника). Теперь нужно вывести содержимое этой таблички в виде XMLTV-файла. Создаём файл http://mydomain.ru/xmltv/index.php со следующим содержимым:

Эта программа будет выводить в XMLTV-формате все передачи из таблицы schedule, начиная с сегодняшнего дня. 

<?

 header("Content-type: text/xml;charset=utf-8");

 $channel_id = "MyChannelID"; // TODO: Замените на slug своего канала

 $XMLdoc = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><tv generator-info-name=\"вЭфире.ru\" generator-info-url=\"http://vefire.ru\"><channel id=\"".$channel_id."\"></channel></tv>");

 // TODO: укажите параметры соединения $db_host, $db_user, $db_password, $db_name

 $conn = mysql_connect($db_host, $db_user, $db_password);

 mysql_select_db($db_name) or die(mysql_error());

 $r = mysql_query("select * from schedule where start_date>=current_date order by start_date") or die(mysql_error());

 while ($f = mysql_fetch_assoc($r)) {

   $programme = $XMLdoc->addChild("programme");

   $programme->addAttribute("start", date_format(date_create($f["start_date"]), 'YmdHis +0400'));

   $programme->addAttribute("stop", date_format(date_create($f["stop_date"]), 'YmdHis +0400'));

   $programme->addAttribute("channel", $channel_id);

   $titleNode = $programme->addChild("title", trim($f["title"]));

   $titleNode->addAttribute("lang", "ru");

   $descNode = $programme->addChild("desc", trim($f["desc"]));

   $descNode->addAttribute("lang", "ru");

   $categoryNode = $programme->addChild("category", trim($f["category"]));

   $categoryNode->addAttribute("lang", "ru");

 }

 echo $XMLdoc->asXML();

?>

Замечания:

  • сетка канала не должна меняться после того как будет опубликована программа передач в XMLTV, т.к. иначе будет рассинхронизация между тем, что вещает канал и тем, что отображается в программе передач;
  • кодировка файла должна быть utf-8;
  • Вы можете использовать разметку Markdown в описаниях передач (desc);
  • импорт программ запускается каждую ночь в 00:01 MSK и на сегодняшний день эта процедура длится где-то 20 минут.
Помощь
Телезрителям и слушателям Представителям каналов
  1. Сколько стоит просмотр онлайн-телевидения и прослушивание интернет-радио?
  2. Какое программное обеспечение необходимо?
  3. Зачем нужен пульт и как им пользоваться?
  4. Что такое VIP-аккаунт и зачем он нужен?
  5. Как сделать просмотр трансляции на весь экран?
  6. Какая скорость подключения необходима для просмотра трансляций?
  7. Как протестировать скорость подключения?
  8. Флеш-трансляция очень часто прерывается — в чем причина?
  9. При открытии страницы с вещанием появляется заставка "Идет загрузка...", но видео не появляется. В чем причина?
  10. Как выбираются рекомендованные каналы на страницах каналов?
  11. Горячие клавиши на сайте
  1. Как организовать трансляцию своего онлайн тв/онлайн радиостанции?
  2. Как добавить канал в сеть вЭфире.ru и сколько это стоит?
  3. Как удалить трансляцию канала из вЭфире.ru?
  4. Как стать партнером вЭфире.ru?
  5. Как рассчитывается рейтинг каналов?
  6. Как подключить программу передач к каналу?
  7. Как добавлять новости/анонсы/пресс-релизы к каналам?
  8. Список ролей доступов, поддерживаемых вЭфире.ru.
  9. Что такое Индекс Цитирования Канала?
  10. Выход на Apple TV: Предложение для телеканалов и радиостанций
Вебмастерам и владельцам сайтов  Разное
  1. Приложения от вЭфире.ru
  2. Партнерская программа: IFrame-приложение от вЭфире
  3. Виджеты от вЭфире.ru
  4. Скринсейверы с онлайн телеканалами
  1. Канал техподдержки
  2. Как включить поддержку Cookies?
  3. Credits

Если Вы не нашли ответы на Ваши вопросы выше, то Вы можете задать их нашему инфу-консультанту по вЭфире.ru, которого можно найти ниже.

Предостережение: инфы — виртуальные создания, которые обучены отвечать на определенный круг вопросов и поддерживать разговор. Хотя наш инф и пытается иногда общаться на всякие отвлеченные темы, иногда он (вернее — она, т.к. это у нас девочка :)) может нагрубить, или даже обидеть! Мы её за это периодически ругаем и отправляем на курсы повышения квалификации, но т.к. инфы — это частично самообучаемые создания, то полностью гарантировать её корректное поведение мы не можем. Искусственный интеллект всё-таки! ;-)