1

Тема: Создание подкаста на примере stereotraker.ru

Мастер-класс для чайников

Установил HMSEditor, на WIN 7(64) автозапуск так и не получился, хотя путь в скрипте указывал где лежит (C:\Program Files (x86)\Home Media Server). При запуске вручную и активации "наблюдать за HMS" запустился.
В скрипте чтения списка ресурсов стало возможно вставлять шаблоны. Создал шаблон " скрипт чтения списка ресурсов с циклом загрузки страниц"
Вставил адрес : "gsUrlBase: String = 'http://stereotraker.ru'; // База ссылки, для создания полных ссылок из относительных"
А дальше уже сложнее, в IE открыл средства разработчика и ..... *WALL*
Чего конкретно там искать и куда в скрипт вставлять ?

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

2

Re: Создание подкаста на примере stereotraker.ru

Там есть дальше строчка:

  RegEx := TRegExpr.Create('<section>(.*?)</section>', PCRE_SINGLELINE);

Это создание объекта RegEx, с помощью которого можно организовать цикл поиска блоков текста, содержащих информацию о фильме.
В инструментах разработчика и в исходном коде страницы (по Ctrl+U) нужно найти эти блоки текста. Посмотрите, вроде они начинаются на

<div class="short-story">

и кончаются примерно

<div class="clear">

Между этими участками находится информация о фильме: ссылка на фильм, название, ссылка на картинку и прочее.

Так вот строку

RegEx := TRegExpr.Create('<section>(.*?)</section>', PCRE_SINGLELINE);

можно превратить в

RegEx := TRegExpr.Create('<div class="short-story">(.*?)<div class="clear">', PCRE_SINGLELINE);

после этого, в цикле

If RegEx.Search(sHtml) Then Repeat
...
Until Not RegEx.SearchAgain; // Повторять цикл пока SearchAgain возвращает True

RegEx.Match - будет содержать те блоки, которые мы указали в регулярном выражении (текст между <div class="short-story"> и <div class="clear">).

А внутри цикла, командами

HmsRegExMatch('<a[^>]+href=[''"](.*?)[''"]' , RegEx.Match, sLink);

мы выделяем из текста в RegEx.Match значение по указанному регулярному выражению в переменную, указанную третьим параметром, тут это sLink.

Спрашивайте, если что не очень понятно.

Sony Bravia KDL-32CX523

3

Re: Создание подкаста на примере stereotraker.ru

Сделал, при обновлении подкаста появились картинки с ссылками, только названия полностью копируют ссылку (http://stereotraker.ru/multiki/1419-gol … fnaya.html).
На сайте есть такие строчки
<h2 class="short-title">Головоломка в 3Д / Inside Out 3D (60 fps Лицензия ) Горизонтальная анаморфная Стереопара торрент</h2>
Как исправить отображение названий и чего дальше ?

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

4

Re: Создание подкаста на примере stereotraker.ru

Всё верно, это он наименование получить не смог. За это отвечает строка
[code=hmspascal]HmsRegExMatch('(<h4.*</h4>)'                , RegEx.Match, sName); // Наименование[/code]
Которая по регулярному выражению

'(<h4.*</h4>)'

пытается вычленить из текста найденного блока значение в переменную sName.
'(<h4.*</h4>)' - регулярка, которая пытается получить группировку (то что попало по условию в скобки) весь текст, начиная от "<h4" и до "</h4>" включительно.

А как вы заметили выше, заголовок, в нашем случае, на сайте немного в других html тегах. Думаю понятно, что достаточно будет изменить регулярку на такую:

HmsRegExMatch('(<h2.*</h2>)'                , RegEx.Match, sName); // Наименование

и после этого в переменной sName должен попасть текст:
"<h2 class="short-title">Головоломка в 3Д / Inside Out 3D (60 fps Лицензия ) Горизонтальная анаморфная Стереопара торрент</h2>"

а ниже по коду в скрипте есть команда

sName := HmsHtmlToText(sName);            // Избавляемся от html тегов в названии

которая приведёт текст к виду просто:
"Головоломка в 3Д / Inside Out 3D (60 fps Лицензия ) Горизонтальная анаморфная Стереопара торрент"
т.е. без HTML тегов '<h2 class="short-title">' и '</h2>'

Sony Bravia KDL-32CX523

5

Re: Создание подкаста на примере stereotraker.ru

С названием всё ок, а вот с длительностью и годом выпуска не понятно, потому что на стартовой странице таких строчек не увидел, а если перейти на страницу с фильмом, то там вот такое есть :

style="color:red"><!--/colorstart--><b>2015</b><!--colorend--></span><!--/colorend--><br /><b>Страны</b>: США<br /><b>Жанры</b>:<!--colorstart:blue--><span style="color:blue"><!--/colorstart--> мультфильм, семейный, комедия<!--colorend--></span><!--/colorend--><br /><b>Продолжительность</b>: 01:34:50<br /><b>Перевод</b>: <!--colorstart:Red--><span style="color:Red"><!--/colorstart--><b>Профессиональный (полное дублирование) [Лицензия]</b><!--colorend--></span><!--/colorend--><br

Но для этого как я понимаю, надо делать каждый фильм в отдельной папке.
Куда дальше двигаться ?
Надо наверно вычислять настоящую ссылку.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

6

Re: Создание подкаста на примере stereotraker.ru

Leshiy71 пишет:

Но для этого как я понимаю, надо делать каждый фильм в отдельной папке.
Куда дальше двигаться ?
Надо наверно вычислять настоящую ссылку.

Да, нужно определиться. Если там есть сериалы или фильмы с несколькими вариантами файлов, то нужно бы делать каждый фильм не ссылкой, а папкой. Плюс действительно, инфы о продолжительности нет. И при заходе в такую папку, срабатывал бы скрипт получения ссылки на медиа-ресурс, где бы мы загружали страницу фильма и создавали бы ссылки на файлы и у нас была бы вся инфа о продолжительности и проч.
Но я посмотрел, там, вроде, только фильмы с одним файлом. Я бы оставил как есть - списком фильмов.
Но беда - нет продолжительности фильма. Можно у всех поставлять одну, а при запуске фильма - в скрипте получения ссылки на медиа-ресурс загружать страницу фильма, там искать и формировать реальную ссылку на файл и, заодно, уточнять длительность и тут же её устанавливать у текущего ресурса. С моим телеком такое проканывает и он при показе уже показывает реальную новую длительность. Но может не на всех телеках так будет. Слышал, что телек продолжал показывать первоначальную и помогало только второй запуск фильма, что не очень.

А вообще, решать вам.

Теперь нужно начинать писать скрипт получения ссылки на ресурс и там, для начала, написать главную процедуру и загрузку страницы по ссыке (храниться во встроенной переменной mpFilePath).

Sony Bravia KDL-32CX523

7

Re: Создание подкаста на примере stereotraker.ru

Думаю, что создавать для каждого фильма отдельную папку смысла нет, потому что 3D сериалов я ещё не встречал и для каждого фильма здесь только по 1 ссылке, и вообще так красивее (жёлтые папки без картинок на телеке портят всё впечатление от HMS). А не отображение года выпуска не проблема, потому что 3D фильмов можно по пальцам пересчитать. Продолжительность тоже не проблема, потому что в этом подкасте всё равно не будет работать перемотка, а по умолчанию ставится 1ч 40мин (всегда удивлялся этому значению, потому что давно фильмы в среднем от 2ч до 3ч).
Для начала охота создать подразделы с сайта. Есть возможность это автоматизировать ? или каждый создавать вручную (фильмы, мульты и тд) и как ?

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

8

Re: Создание подкаста на примере stereotraker.ru

Leshiy71 пишет:

Для начала охота создать подразделы с сайта. Есть возможность это автоматизировать ? или каждый создавать вручную (фильмы, мульты и тд) и как ?

Да, тогда надо с этого и начинать. Добавляем в базу программы не подкаст, а папку (которая и будет содержать подкасты категорий).
А у папки, можно ввести "Скрипт создания подкаст-лент", в котором будут создаваться автоматически подкасты (категории сайта).

А как там создавать подкасты - тоже два варианта. Можно загрузить страничку и там искать блоки текста с названием и ссылками категории и в цикле создавать.
Второй вариант - на самом деле полуавтоматический, на сайте посмотреть как выглядят категории и в скрипте написать простейший код, который бы эти категории создавал.

По моему опыту, второй вариант, хоть и полуавтоматический, но, чаще, менее энергетически и время-затратнее.
Вот пример кода "Скрипта создания подкаст-лент" папки:

Var
  gsUrlBase: String = "http://stereotraker.ru";
  Item: THmsScriptMediaItem;
  
///////////////////////////////////////////////////////////////////////////////
//                     Г Л А В Н А Я    П Р О Ц Е Д У Р А                    //
Begin
  
  Item := FolderItem.AddFolder(gsUrlBase+"/kino/");
  Item.Properties[mpiTitle] := "3D Фильмы";

  Item := FolderItem.AddFolder(gsUrlBase+"/multiki/");
  Item.Properties[mpiTitle] := "3D Мультфильмы";

  Item := FolderItem.AddFolder(gsUrlBase+"/doc/");
  Item.Properties[mpiTitle] := "3D Документальное ";

  Item := FolderItem.AddFolder(gsUrlBase+"/sport/");
  Item.Properties[mpiTitle] := "3D Спорт";

  Item := FolderItem.AddFolder(gsUrlBase+"/musikmuvi/");
  Item.Properties[mpiTitle] := "3D Концерты/Клипы";

  Item := FolderItem.AddFolder(gsUrlBase+"/treiler/");
  Item.Properties[mpiTitle] := "3D Трейлеры";

  Item := FolderItem.AddFolder(gsUrlBase+"/3dfullscreen/");
  Item.Properties[mpiTitle] := "3D Без черных полос (На весь экран)";

  Item := FolderItem.AddFolder(gsUrlBase+"/3d60fps/");
  Item.Properties[mpiTitle] := "3D 60fps";

End.

Запуск скрипта происходит нажатием правой клавишей мышки на папке и выбрать "Создать ленты подкастов".

Конечно, код выше туповат. Но для начала, чтобы было всё понятно, пойдёт. Потом можно усложнить.
Но идея, думаю, понятна и этот код легко подправить и переделать под себя. И читается легко и понятно что делает.


P.S.:
И в свойствах этой папки нужно добавить "Скрипт чтения списка ресурсов" из подкаста, который вы начали делать. Чтобы этот скрипт распространялся на все подкасты (подразделы) внутри этой папки.

Sony Bravia KDL-32CX523

9

Re: Создание подкаста на примере stereotraker.ru

Блин, а что делать с такими: http://stereotraker.ru/doc/880-podborka … fnaya.html ?
Там кучка файлов сразу.

Sony Bravia KDL-32CX523

10

Re: Создание подкаста на примере stereotraker.ru

Да это исключение, потом видно будет. Заработало наконец то, пытался сам создать главную процедуру и туда копировать - чего то не правильно получалось, скопировал полностью ваш пример, вписал адрес и название для папки, активировал специальный скрипт - всё пошло.
В скрипте выставил 10 страниц для загрузки, везде загружает по 10, а в добавленном подкасте "по рейтингу" только 4 фильма.
  Item := FolderItem.AddFolder(gsUrlBase+"/?do=top100&mode=rating/");
  Item.Properties[mpiTitle] := "Топ 100 3D по рейтингу";
И не пойму чего вписать для подкаста "главная страница"

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

11

Re: Создание подкаста на примере stereotraker.ru

С главной страницей разобрался
  Item := FolderItem.AddFolder(gsUrlBase);
  Item.Properties[mpiTitle] := "Главная страница";
Перехожу к скрипту получения ссылки на ресурс - создал шаблон главной процедуры, куда дальше двигать ?

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

12

Re: Создание подкаста на примере stereotraker.ru

Leshiy71 пишет:

Перехожу к скрипту получения ссылки на ресурс - создал шаблон главной процедуры, куда дальше двигать ?

Ок. Для начала немного теории.
Открываем в браузере страницу фильма и начинаем изучать. Вообще, на самом деле, прежде чем делать подкаст, нужно именно с этого начинать - посмотреть где взять реальную ссылку на сам файл видео. Потому как там всё может быть очень и очень запутанно.
Но не здесь.
Тут мы видим, что выкладывается ссылка для скачивания торрент файла.
У нас опять два варианта:
1) Торрент файлы теперь умеет проигрывать сам HMS, достаточно сформировать правильным образом параметры
2) Использовать AcePlayer - он вроде как тоже умеет их играть.

Какой предпочитаете?

Sony Bravia KDL-32CX523

13

Re: Создание подкаста на примере stereotraker.ru

Обязательно AcePlayer т.к. планируется просмотр оригинального потока без транскода.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

14

Re: Создание подкаста на примере stereotraker.ru

В любом случае, нужно этот торрент файл скачать сначала и передавать потом как параметр, что в первом случае, что во втором.

Так что придётся заниматься программированием.

Смотрим исходный код страницы фильма и находим, что ссылка на скачивание торрент файла выглядит примерно следующим образом:

<a href='http://stereotraker.ru/engine/download.php?id=76'>

Значит, план такой:
1) Загрузить страницу сайта
2) Найти на ней ссылку на скачивание торрент-файла
3) Скачать торрент файл во временную папку
4) Сформировать ссылку на медиа-ресурс с указанием какой торрент файл проигрывать (наш скачанный)

Загрузить страницу можно командой:

sHtml := HmsDownloadURL(mpFilePath, "", True);

Тут переменная mpFilePath содержит ссылку текущего элемента в подкасте (т.е. ссылка нашего фильма).

Пользуйтесь отладчиком - клавиша F8.
Если открыть и закрыть окно "Вычислить выражение", то во время отладки значение переменной можно посмотреть просто наведя на неё мышкой.

Чтобы начать отладку с того места, чтобы mpFilePath и другие переменные содержали правильные данные (данные которые будут в реальной работе), то нужно встать сначала на ссылку фильма (выделить в программе нужный элемент), а потом нажать Alt-4 и откроется окно редактирования скрипта получения ссылки на ресурс, а переменная mpFilePath при отладке будет содержать именно ссылку страницы выделенного фильма.

В общем, программа для поиска ссылки на торрент и скачивание торрент файла может быть такой:

Var
  gsUrlBase: String = "http://stereotraker.ru";
  sHtml, sLink, sFile: String;
  
///////////////////////////////////////////////////////////////////////////////
//                     Г Л А В Н А Я    П Р О Ц Е Д У Р А                    //
Begin
  
  sHtml := HmsDownloadURL(mpFilePath, "", True);
  sHtml := HmsRemoveLineBreaks(sHtml);
  HmsRegExMatch('(http://stereotraker.ru/engine/download.php\?id=\d+)', sHtml, sLink);
  sFile := HmsTranscodingTempDirectory+"\"+PodcastItem.ItemID+".torrent";
  HmsDownloadURLToFile(sLink, sFile);
  
End.

Тут всё понятно?

P.S.: Упс - поправил регулярку поиска ссылки - знаки вопросов нужно экранировать.

Sony Bravia KDL-32CX523

15

Re: Создание подкаста на примере stereotraker.ru

Кстати, потом смотрим что скачалось и видим, что вместо torrent файла там html текст. А значит тупо скачать не получилось, нужно смотреть как идёт скачивание файла браузером. Скорее всего нужно устанавливать Cookies.
А чтобы посмотреть, как идут запросы и какие ответы - есть хорошая прога Charles. Она может слушать да записывать.

Sony Bravia KDL-32CX523

16

Re: Создание подкаста на примере stereotraker.ru

Запускаем Charles, идём на сайт, нажимаем скачать файл торрента, он предлагает его сохранить.
Мы идём в Charles, смотрим запросы к нашему сайту и на вкладке Request (запрос) и выбрав внизу "Raw" для удобства смотрим что там да как. И видем примерно следующее:

GET /engine/download.php?id=76 HTTP/1.1
Host: stereotraker.ru
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
Referer: http://stereotraker.ru/kino/72-avatar-3d-avatar-3d.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: PHPSESSID=jbleubqc2viv53vsidhod5sls2

Ну, чаще всего, сайты проверяют заголовок "Referer", т.е. откуда пришёл запрос. И проверяют, типа чтобы этот файл запрашивали только с их ресурса. Но заголовки мы умеем подделывать и в некоторых функциях есть даже специальный параметр sHeaders. Поэтому изменим наш код на следующий:

Var
  gsUrlBase: String = "http://stereotraker.ru";
  sHeaders, sHtml, sLink, sFile: String;
  
///////////////////////////////////////////////////////////////////////////////
//                     Г Л А В Н А Я    П Р О Ц Е Д У Р А                    //
Begin
  sHeaders := "Referer: "+mpFilePath+#13#10;
  sHtml := HmsDownloadURL(mpFilePath, sHeaders, True);
  sHtml := HmsRemoveLineBreaks(sHtml);
  HmsRegExMatch('(http://stereotraker.ru/engine/download.php\?id=\d+)', sHtml, sLink);
  sFile := HmsTranscodingTempDirectory+"\"+PodcastItem.ItemID+".torrent";
  HmsDownloadURLToFile(sLink, sFile, sHeaders);
  
End.

Запустим или пошагово его выполним, пойдём по пути, который складывается в переменной sFile и убедимся, что там теперь реальный файл torrent.

(продолжение следует.. после того как я установлю AcePlayer. Ибо у меня его нет. Да и вообще накатаю ка я шаблон функции для получения параметров с использоваением AcePlayer для работы с torrent файлами)

Sony Bravia KDL-32CX523

17

Re: Создание подкаста на примере stereotraker.ru

Да, нужен перерыв, а то у меня голова лопнет как арбуз.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

18

Re: Создание подкаста на примере stereotraker.ru

Мудрёно тут как то получается, нашёл на странице ссылку
<a href='http://stereotraker.ru/engine/download.php?id=1571'>
наверно другая версия головоломки.
Во первых с ума сойдёшь, пока в коде её найдёшь
Во вторых когда на сайте ПКМ навёл на торрент и выбрал копировать адрес ссылки, то вставив её в браузер увидел что это именно она - зачем тогда искать её наобум.
В третьих, я думал что здесь можно как то плясать от обратного, т.е. может запустить торрент на просмотр в Ace Playere, а в нём уже посмотреть - откуда этот торрент прилетел, если конечно такое реально.
Например, когда выбираю для торрент ссылки на сайте - запустить с помощью mTorrent, то в проге в описании торрента уже другой адрес, как бы должен быть настоящий
http://kinozal.tv/details.php?id=1385892

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

19

Re: Создание подкаста на примере stereotraker.ru

Leshiy71 пишет:

Мудрёно тут как то получается, нашёл на странице ссылку
<a href='http://stereotraker.ru/engine/download.php?id=1571'>
наверно другая версия головоломки.
Во первых с ума сойдёшь, пока в коде её найдёшь
Во вторых когда на сайте ПКМ навёл на торрент и выбрал копировать адрес ссылки, то вставив её в браузер увидел что это именно она - зачем тогда искать её наобум.
В третьих, я думал что здесь можно как то плясать от обратного, т.е. может запустить торрент на просмотр в Ace Playere, а в нём уже посмотреть - откуда этот торрент прилетел, если конечно такое реально.
Например, когда выбираю для торрент ссылки на сайте - запустить с помощью mTorrent, то в проге в описании торрента уже другой адрес, как бы должен быть настоящий
http://kinozal.tv/details.php?id=1385892

То, как я объясняю и что именно нужно сделать - это всё то, как именно я привык делать. В создании и изучении - креатив, по мне, так это главное.
В общем, вы молодец. Верно мыслите.
Во-первых, действительно, как именно найти ссылку - это дело каждого и необязательно так как я это сказал.
Можно и от обратного, верно. Запустить Charles, запустить просмотр на сайте в браузере и посмотреть, куда обращается плеер.
Во-вторых, скопировать по правой клавишей мышки ссылку - вполне себе решение в определённых случаях. В данном случае очень даже канает. И вообще, почему я об этом не догадался? ) Я делал как обычно я делаю, смотрю через инструменты разработчика, копирую оттуда часть кода, потом открываю весь исходный код страницы и там через поиск по Ctrl-F ищу этот участок (смотреть всё - глаза можно сломать, верно).

Но тут есть один нюанс: смотреть как выглядит ссылка в коде страницы - практически обязательно. Ибо скрипт не человек и он будет выискивать нужную ссылку в загруженной странице. И нужно посмотреть, какое регулярное выражение нужно написать, чтобы эту ссылку оттуда выдернуть.
Дело в том, что в коде, эта ссылка может выглядеть не так или подобных ссылок может быть не одна. Например, ссылка в коде страницы может быть не

<a href='http://stereotraker.ru/engine/download.php?id=1571'>

а вот такой:

<a href='/engine/download.php?id=1571'>

т.е. относительной. И регулярка для поиска и вычленения её из кода будет немного другой.

Sony Bravia KDL-32CX523

20

Re: Создание подкаста на примере stereotraker.ru

Все должно быть логично и по порядку (как пишет WendyH) иначе можно запутаться (особенно когда с программированием на ВЫ). А вот если уж запутался идя по порядку... то уже можно немного отвлечь мозги и зайти с конца  :D А еще лучше лечь спать и на следующий день увидеть как оно пойдет (если конечно пойдет :) )

21

Re: Создание подкаста на примере stereotraker.ru

Честно сказать, вообще я запутался чего сейчас делать - если можно поподробнее ещё раз.
Через браузеры у меня торренты не идут, могу запустить через Ace Player
С Charles ещё надо разобраться, допустим я там увижу откуда идёт поток, а ссылка в коде страницы на торрент в другое место, и чего создавать в скрипте получения ссылки на ресурс вообще не соображу т.е. выше вы пример выложили, но это всё вручную вписывать, специального шаблона нету ?

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

22

Re: Создание подкаста на примере stereotraker.ru

Leshiy71
Шаблон подходит где то под 80% сайтов, но уже в самом шаблоне нужно кучу корректировок, что бы подгонять шаблон под конкретный случай. В принципе могу попробовать объяснить хотя бы то что я понял в скайпе, но где то после 22,00 по Киеву.
Пользуюсь Cent Browser http://www.centbrowser.com/ очень похож на хром, все торренты показывает.

23

Re: Создание подкаста на примере stereotraker.ru

Чтобы понять как работает HMS и чего мы хотим добиться, давайте представим примерно такой диалог (утрировано и неправда):

Телек, крича в сеть: "Есть кто?"
HMS: "Есть. Я. Я сервер. Могу видео, фотку и музыку"
Телек: "Есть чё?"
HMS: "Да, вот список папок" (это мы зашли с телека в HMS)
Телек: "А в этой папке че?" (это мы заходим в наш подкаст)
HMS: "Вот список видео файлов" (это сервер предоставил список видео - на самом деле это список наших созданных ссылок в подкасте, только у них ссылка-то не на видео файл, а на страницу фильма)
Телек: "Запрашиваю вот это вот видео" (это мы выбрали и включаем фильм)
HMS: "Щас, погоди 5 сек... Вот. Передаю видео файл (поток), лови".

Так вот тут в этом диалоге, в двух последних фразах происходит много делов. Если запрашиваемый элемент - это элемент подкаста и там включена соответствующая настройка , то срабатывает "Скрипт получения ссылки на медиа-ресурс". Где мы стараемся получить реальный видео файл или поток.
Если в подкасте или в настройках указано "Транскодирование" и выбран соответствующий профиль, то HMS на себя берёт "переработку" исходного формата (скачивает из интернета) файла в тот формат, который телек поддерживает и передаёт ему.

Саму "переработку" делает "Транскодер" - это отдельная программа.

Профили транскодирования для этого и предназначены - в них указано какую программу для "переработки" использовать (какой "Транскодер") и с какими параметрами (выставляются в зависимости от настроек устройства, высота там, ширина и проч).

Вот. Это краткая суть в случае использования подкастов и профилей транскодирования. Тут всё просто.

Так вот вернёмся именно к нашему подкасту. Мы составили список видео, у которых ссылка - это ссылка на страницу фильма в интернете. Её телеку не передашь - не поймёт. Нам бы ссылку на видео файл найти. Но у нас на странице - ссылка на торрент-файл только.
Хмм..
Но тут есть выход. Использовать в качестве "Транскодера" наш AceStream плеер - он умеет "проигрывать" такие файлы.
Т.е. в качестве входных параметров можно указать торрент-файл и он будет по торрент протоколу скачивать да показывать. Ок.
Но также мы ему (также как и VLC плееру, ибо он на его основе сделан) можем указать параметрах запуска не показывать нам видео, а перенаправлять (например в именованный PIPE канал, который HMS специально для этого дела создаст и перенаправит телеку).

Вот такую нам замуту и нужно сделать. На самом деле всё не так страшно. В "Скрипте получения ссылки на медиа-ресурс", по окончании его выполнения, в переменной MediaResourceLink можно указать как ссылку на видео, так и параметры для транскодирования. И даже указать какую программу запускать для транскодирования.

Вот этим и займёмся. Итого перед нами, как мне видится, стоят такие задачи:
1) Загрузить страницу сайта выбранного фильма
2) Найти там ссылку на torrent файл
3) Скачать его во временную папку
4) В переменную MediaResourceLink занести параметры, где бы мы указали запуск AceStream и в качестве параметра путь до нашего скачанного торрент-файла.

После того как сработает данный скрипт, HMS запустит AceStream с указанными параметрами, тот начнёт закачку самого видео файла и HMS весть поток изображения будет отдавать телеку. А тот показывать, ничего не подозревая откуда и каким трудом достался. Единственное условие телека - "Не люблю долго ждать видео файла, жду максимум 30 сек."
Типа того.

Сразу скажу, что если занести в переменную такую волшебную строку:

MediaResourceLink := 'cmd://"{1}" --no-crashdump --play-and-exit --language en -Idummy --demuxdump-file="<OUTPUT FILE>" vlc://pause:4 --access=p2p_access "{2}" :demux=dump'

Где вместо {1} подставить путь до AceStream плеера, а вместо {2} подставить путь до нашего torrent файла,
то HMS это дело всё запустит и будет использовать AceStream как "Транскодер".
Но это потом, в самом конце.

Вот.
Так что начать нужно с того, чтобы написать код программы, где мы загрузим html код странички, там, с помощью регулярного выражения найдём ссылку на торрент-файл, скачаем и пол дела сделано.

Да. mch прав, никакие шаблоны не сделают всю работу. И от сайта к сайту абсолютно свои проблемы и заморочки. Так что нужно писать код руками - программировать. На самом деле, скриптинг - это просто. Зато как приятно осознавать потом, что это сделал ты и ты вообще можешь сделать себе удобно. Как именно ты хочешь.

По поводу команд - если не понятно, спрашивайте. Плюс в HMSEditor есть подсказки для всех функций и краткие описания. И отладчик в программе очень помогает.

Итак наш код:

  sHtml := HmsDownloadURL(mpFilePath, "", True); // Скачиваем страницу сайта в переменную sHtml
  sHtml := HmsRemoveLineBreaks(sHtml); // Убираем переносы строк - облегчает работу с регулярными выражениями, чтобы не писать дополнительные флаги. Кстати, именно тут это не обязательно.
  HmsRegExMatch('(http://stereotraker.ru/engine/download.php\?id=\d+)', sHtml, sLink); // С помощью регулярного выражения ищем совпадения и всё что попадёт в скобках, занесётся в переменную sLink. Тут \d+ означает "любые цифры".
  sFile := HmsTranscodingTempDirectory+"\"+PodcastItem.ItemID+".torrent"; // Формируем путь и имя файла (PodcastItem.ItemID - чтобы быть просто уникальным)
  HmsDownloadURLToFile(sLink, sFile); // Скачиваем по указанной ссылке в указанный файл.


именно то и делает. Прежде чем двигаться дальше, нужно чтобы вы прекрасно понимали что происходит. И что этот код понятен.

Если трудности с регулярными выражениями - их понять или требуется подсказка для конкретной задачи - всегда подскажем.

Sony Bravia KDL-32CX523

24

Re: Создание подкаста на примере stereotraker.ru

Уже понятнее, только не пойму как по науке надо вписывать данные в шаблон скрипта в HMS, т.е. у меня то и дело слева то лишние пробелы то не достаёт, и при проверке скрипта пишет ошибки.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

25

Re: Создание подкаста на примере stereotraker.ru

Ошибка проверки синтаксиса была, потому что в заголовке не вписал
sHeaders, sHtml, sLink, sFile: String;
А сейчас при проверке скрипта по шагам в последней строчке
HmsDownloadURLToFile(sLink, sFile); // Скачиваем по указанной ссылке в указанный файл
постоянно выдаёт ошибку
Параметр задан не верно (87)

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

26

Re: Создание подкаста на примере stereotraker.ru

При отладке, посмотрите что содержат переменные sLink и sFile.

Sony Bravia KDL-32CX523

27

Re: Создание подкаста на примере stereotraker.ru

sFile -
D:\Временные файлы HMS\HmsTemp\\638ca0b9-b9f4-4002-bbe3-018d2296d83e.torrent
sLink - пустой

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

28

Re: Создание подкаста на примере stereotraker.ru

Leshiy71 пишет:

sLink - пустой

Тээкс, значит не срабатывает

HmsRegExMatch('(http://stereotraker.ru/engine/download.php\?id=\d+)', sHtml, sLink);

Посмотрите что в mpFilePath (должна быть ссылка на страницу фильма, думаю в этом всё и дело, об этом ниже).
Посмотрите, что в sHtml (хотя бы удостовериться, что туда загружен html код).

На самом деле, чтобы ссылка текущего запускаемого элемента была во встроенной переменной mpFilePath, нужно встать на саму эту ссылку (вделить мышкой) и нажать Alt+4. Тогда откроется скрипт, и переменные mpFilePath, там PodcastItem (текущий элемент) только тогда будут содержать нам нужные значения - то есть значения запускаемой ссылки. Иначе, нажимая на подкасте правой клавишей мышки и заходя в скрипты через свойства, автоматом текущий элемент становиться не ссылка, а сам подкаст. Можете убедиться в отладчике, посмотрев значение переменной mpFilePath.

Это мне нужно было вам сказать заранее.

Sony Bravia KDL-32CX523

29

Re: Создание подкаста на примере stereotraker.ru

При наведении мышки на mpFilePath сначала отображалась ссылка и в sHtml отображался код, но ошибку писало в последней строчке.
Сейчас закрыл скрипт, открыл заново и уже ничего не отображает.
Не пойму где  нужно встать на саму эту ссылку (вделить мышкой) и нажать Alt+4
ничего не реагирует.

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!

30

Re: Создание подкаста на примере stereotraker.ru

И не понял надо вставлять сюда http://stereotraker.ru/ промеж кавычек ?
sHtml := HmsDownloadURL(mpFilePath, "", True); // Скачиваем страницу сайта в переменную sHtml

LG 42LM640T
Профиль  Универсальный
Видишь суслика ? Нет ! И я нет ! А он есть !!!