Есть, сайт с пополняемым каталогом видео. Есть хозяин - слегка ПХПшный программер и есть желание выгружать динамический файл подкаста напрямую из базы сайта с прямым формированием файла ядром сайта, безо всякого парсинга.
Можно просто популярно разложить структуру XML для формирования файла, понятного HMS? Пока-что все мои попытки вывести из ядра читаемый список на основе подсмотренного в готовых HDR успехом не увенчались - HMS постоянно чего-то не видит или не понимает. Можно где-то увидеть доступный человеческому мозгу синтаксис? Мне не нужна обработка скриптов - я добровоьно отдаю данные.
А как насчет метода от противного?
Re: А как насчет метода от противного?
Структура XML файла подкаста (файл с расширением .hdf) довольна проста и по сути - сериализованный объект базы данных программы класса THmsScriptMediaItem (описан в справочнике редактора скриптов). Все свойства класса в XML как элементы (без атрибутов).jeamdany wrote:Можно просто популярно разложить структуру XML для формирования файла, понятного HMS? Пока-что все мои попытки вывести из ядра читаемый список на основе подсмотренного в готовых HDR успехом не увенчались - HMS постоянно чего-то не видит или не понимает. Можно где-то увидеть доступный человеческому мозгу синтаксис? Мне не нужна обработка скриптов - я добровоьно отдаю данные.
А на пальцах, примерно следующее.
Корневой элемент: HmsMediaItem. С него всё начинается. Это элемент базы данных.
У него есть свойства:
MediaType - тип медиа-ссылки. Значение перечисления {mtUnknown=0, mtAudio=1, mtImage=2, mtVideo=3, mtText=4, mtIsoDisk=5}
ClassID - Идентификатор класса элемента базы.
- 51 - папка подкастов раздела "Видео"
- 53 - подкаст раздела "Видео"
- 32 - динамическая папка скриптов
- 78 - папка подкастов раздела "Фото"
- 54 - папка подкастов раздела "Музыка"
- 3 - ссылка на музыкальный файл в разделе "Музыка"
- 4 - ссылка на файл фотографии в разделе "Фото"
- 5 - ссылка на видео файл в разделе "Видео"
- ...
ItemID - GUID элемента (уникальный идентификатор)
ItemPath - Ссылка (путь)
ParentID - GUID родителя. Значение ItemID элемента, содержащего данный. Properties - список свойств элемента. Где каждый элемент называется Property и имеет элементы ID и Value. ChildItems - список дочерних элементов. Элементы Item (вместо корневого названия HmsMediaItem) - по сути те же самые элементы, с точно такой-же структурой как здесь и описано. Только свойство MediaType могут не иметь.
Подозреваю, что почти со всем этим вы и так разобрались, изучая строение hdf файла.
Но тут есть некоторые нюансы. Есть особенности программы HMS. Из-за чего вполне можно нарваться на "невидимость" созданных элементов в программе.
Дело в том, что при сохранении подкаста из программы в файл, видимо, также и при загрузке его в программу - не всегда учитываются дочерние элементы медиа-ресурса.
У элемента с ClassID = 53 (подкаст, большой оранжевый полосатый значок в программе) хоть в программе и могут быть подчинённые элементы с папками и ссылками, то при сохранении или загрузке в программу они не читаются (не учитываются). Этот элемент - обновляемый и предназначен для динамического создания ссылок внутри себя. Т.е. создания ссылок при его обновлении.
Поэтому, если вы хотите создать файл .hdf с уже заложенными ссылками на файлы, то вам нужно создать папку подкастов (ClassID = 51). Вот в ней сохраняются и загружаются ссылки на видео файлы.
Т.е. Создать корневой элемент с ClassID=51, а в ней уже в ChildItems создавать дочерние элементы Item с ClassID=51 или ClassID=5 (папки или ссылки на файлы).
Как-то так.
Могу помочь в написании скрипта или функции на пэхэпе, или какими-то разъяснениями по программе или коду (насколько знаю).
Мне вот интересно, такой файл будет содержать тысячи ссылок на видео с разделами по категориям и прочим?
Может проще сделать API, чтобы внешние программы или скрипты могли не сильно нагружая сервер делать запросы и получать нужную сжатую информацию, например в виде JSON?
SONY KDL-32CX520
Re: А как насчет метода от противного?
А вот по поводу API и json гораздо интереснее, этому можно найти потом множество применений. Достаточно задокументировать структуру выдачи данных по критериям запроса. Писать скрипт для ПХП неразумно, учитывая что я не пользуюсь никакими движками и пишу все сайты под себя, то каждый раз разным мастерам удобоваримые скрипты не напишешься, а вот создать простой массив в переменной и вывести его в Json сможет любой ПХПисец.WendyH wrote: Могу помочь в написании скрипта или функции на пэхэпе, или какими-то разъяснениями по программе или коду (насколько знаю).
Мне вот интересно, такой файл будет содержать тысячи ссылок на видео с разделами по категориям и прочим?
Может проще сделать API, чтобы внешние программы или скрипты могли не сильно нагружая сервер делать запросы и получать нужную сжатую информацию, например в виде JSON?
Можно ли развить эту тему?
Re: А как насчет метода от противного?
Ещё как можно.jeamdany wrote:Можно ли развить эту тему?
Правда я не знаю структуру вашей базы данных, какие поля вообще есть. Но в базовом виде можно было бы предложить следующее.
Для начала, нужно определится со структурой отдаваемых данных клиенту. Методы:
GET https://site.com/api/categories // Получение списка категорий (ID и имя)
GET https://site.com/api/genres // Получение списка жанров (ID и имя)
GET https://site.com/api/videos.php // получения списка видео
Можно указывать параметры:
id=<ID> // Получение информации о конкретном видео по его ID
category=<ID> // Фильтрация видео по конкретной категории
year=<Num> // Фильтрация видео по году
genre=<ID> // Фильтрация видео по жанру
Пример:
https://site.com/api/videos.php?category=2 // Получение списка видео категории с ID=2
SONY KDL-32CX520
Re: А как насчет метода от противного?
Прекрасно! Структура запросов и вывода массива ясна, поля массива совпадают с полями базы и, уверен, что как и у большинства подобных сайтов.
Теперь чем бы этот ответ запросить из сервера и втянуть в него?
Я так понимаю, что наиболее удачным вариантом был бы файл скрипта подкастов, в котором в начальной переменной нужно указать путь к апи-запросам "http://site.com/api/" и раздавать этот файл всем желающим, которые, набросив его на сервер, сразу же получат список подкастов этого сайта.
Теперь чем бы этот ответ запросить из сервера и втянуть в него?
Я так понимаю, что наиболее удачным вариантом был бы файл скрипта подкастов, в котором в начальной переменной нужно указать путь к апи-запросам "http://site.com/api/" и раздавать этот файл всем желающим, которые, набросив его на сервер, сразу же получат список подкастов этого сайта.
Re: А как насчет метода от противного?
В вашей цитате я вставил в квадратных скобках то, как я понял вас.jeamdany wrote:Я так понимаю, что наиболее удачным вариантом был бы файл скрипта подкастов, в котором в начальной переменной нужно указать путь к апи-запросам "http://site.com/api/" и раздавать этот файл всем желающим, которые, набросив его на [Домашний медиа-]сервер, сразу же получат список подкастов этого сайта.
Если правильно понял, то - да.
Именно так. Потом на самом сайте можете выложить файл описания подкаста (.hdf) для Домашнего медиа-сервера, который можно будет закинуть в программу и при обновлении разделов получать свежие списки выложенных фильмов.
SONY KDL-32CX520
Re: А как насчет метода от противного?
Все верно, вы правы, такой API скрипт и нужен.
Re: А как насчет метода от противного?
Как сделаете работающий прототип API на сайте, скажите и я вам помогу сделать скрипт обновления подкастов (там всё не сложно).
SONY KDL-32CX520