serialu.net (25.04.2014)

Готовые конфигурации подкастов (RSS и Web)
blue_shark
Posts: 6
Joined: Tue Feb 21, 2012 3:58 pm

Re: serialu.net (16.12.2012) ver.2

Post by blue_shark »

Что-то не так. В закладке "сериалы", похоже вообще скрипта нет.
tarzann5
Posts: 90
Joined: Wed Feb 29, 2012 4:41 pm

Re: serialu.net (16.12.2012) ver.2

Post by tarzann5 »

blue_shark wrote:Что-то не так. В закладке "сериалы", похоже вообще скрипта нет.
А кто тебе сказал что там он должен быть? Раз работает тебе не все равно где он? Он в serialu.net
blue_shark
Posts: 6
Joined: Tue Feb 21, 2012 3:58 pm

Re: serialu.net (16.12.2012) ver.2

Post by blue_shark »

Так ведь и не работает. Папка "фильмы" работает отлично, папка "выборочно" тоже. А "сериалы" не обновляются и там пустота... (serialu.net тоже обновлял)
tarzann5
Posts: 90
Joined: Wed Feb 29, 2012 4:41 pm

Re: serialu.net (23.02.2013)

Post by tarzann5 »

21.05.2013. Подправил скрипт для сериалов. Названии сериалов и сезонов выдавались иероглифами.
viktar
Posts: 1
Joined: Wed Dec 04, 2013 9:30 pm

Re: serialu.net (21.05.2013)

Post by viktar »

Сериалы перестали работать. Исчезла строка '-- adman_adcode_after --' с веб-страниц serialu.net
В скрипте чтения списка ресурсов после строки
HmsRegExMatch('<div class="content">(.*?)-- adman_adcode_after --', sWebPage, sWebPage1);
добавил несколько (на всяк случай)
if sWebPage1 = '' then HmsRegExMatch('<div class="content">(.*?)Сериал посмотрели?', sWebPage, sWebPage1);
if sWebPage1 = '' then HmsRegExMatch('<div class="content">(.*?)<noindex><nofollow><br/><table align', sWebPage, sWebPage1);
if sWebPage1 = '' then HmsRegExMatch('<div class="content">(.*?)<div class="clear">', sWebPage, sWebPage1);
if sWebPage1 = '' then HmsRegExMatch('<div class="content">(.*?)</div>', sWebPage, sWebPage1);
опять заработало.
Моя жена смотрит шоу Ледниковый период с самого начала - на других сайтах только последний сезон.

Может все-таки кто-нибудь просветит как загрузить свойства файла из скрипта (нужна длительность)? Мой Sony Blue-ray не парится по поводу запроса длительности с веб-сайта а пытается проиграть 40 минут указанные в скрипте по умолчанию.
WendyH
Posts: 393
Joined: Fri Apr 13, 2012 7:59 pm

Re: serialu.net (21.05.2013)

Post by WendyH »

viktar, спасибо, ваши подсказки работают.
viktar wrote:Может все-таки кто-нибудь просветит как загрузить свойства файла из скрипта (нужна длительность)? Мой Sony Blue-ray не парится по поводу запроса длительности с веб-сайта а пытается проиграть 40 минут указанные в скрипте по умолчанию.
Там на сайте или в плейлисте длительность взять абсолютно негде. Значит, есть два варианта.

Вариант №1: Прочитать MediaInfo.
У Eugene есть замечательный пост по поводу команды "HmsCreateMediaItemTags".
Так вот на основе того поста можно, например, добавить новую функцию
[+] GetDurationFromMediaInfo

Code: Select all

// ----------------------------- Получение длительности видео из MeiaInfo ----
Function GetDurationFromMediaInfo(var MediaItem: THmsScriptMediaItem): string;
  var
    FileTags: THmsScriptFileTags; nTimeInSec: Integer;  
  begin
    Result := '00:45:00.000';
    FileTags := HmsCreateMediaItemTags('MediaInfo', MediaItem);
    if FileTags <> nil then try
      //Result := FileTags.GetTagValue('Duration/String3');
      nTimeInSec := FileTags.GetTagValue('Duration')/1000;
      Result := HmsTimeFormat(nTimeInSec)+'.000';
    finally  
      FileTags.Free
    end
  end;
В нашем случае, в скрипте, там где:

Code: Select all

var
  name, kat,id,pap,pap1,pl,abc_dir: string;
нужно добавить глобальную переменную gsTime, чтобы получилось

Code: Select all

var
  name, kat,id,pap,pap1,pl,abc_dir,gsTime: string;
а там где создаётся ссылка

Code: Select all

      Item := HmsCreateMediaItem(sItemLink, FolderItem.ItemID , pap1);  //ссылка
      Item.Properties[mpiTitle] := Format('%.3d', [j]) + '. ' + sItemName;  //название
      Item.Properties[mpiThumbnail] := sItemImg;  //картинка
      Item.Properties[mpiTimeLength] :=  '00:45:00.000';  //длительность
добавить пару строк:

Code: Select all

      Item := HmsCreateMediaItem(sItemLink, FolderItem.ItemID , pap1);  //ссылка
      Item.Properties[mpiTitle] := Format('%.3d', [j]) + '. ' + sItemName;  //название
      Item.Properties[mpiThumbnail] := sItemImg;  //картинка
      //Item.Properties[mpiTimeLength] :=  '00:45:00.000';  //длительность
      
      if Trim(gsTime)="" then gsTime := GetDurationFromMediaInfo(Item);
      Item.Properties[mpiTimeLength] := gsTime;  //длительность
(Комадна Trim нам компенсирует беспроблемность неициализированной переменной)
Будет делаться всего одна попытка получения длительности первой серии, а потом эта длительность будет устанавливаться на всех остальных сериях. Как правило, серии примерно одинаковой длительности обычно. Правда не всегда, но в основном. А для вашего случая с Sony Blue-ray я бы к переменной nTimeInSec добавил бы ещё пару минут, ибо чтобы не получалось что в конце обрезает.

Вариант №2: Вместо нашей функции "GetDurationFromMediaInfo" можно попробовать мой экспериментальный подход для получения длительности flv и вставить функцию
[+] GetFlvDuration

Code: Select all

// ----------------------------- Получение длительности видео из файла flv ----
Function GetFlvDuration(var sLink: string; sReferer: string = ''): string;
  var
    s, sHeaders, sHeadersOut, sServ: string; nLastBlockSize, n1, n2, n3: Integer;
  begin
  sHeadersOut := ''; Result := '00:45:00.000';
  
  // Преобразуем ссылку в часть сервер / объект загрузки
  if (not HmsRegExMatch2('//(.*?)(/.*)', sLink, sServ, sLink)) then Exit;
  if (sReferer='') then sReferer := 'http://'+sServ+'/';
  
  // Проверяем, flv ли это файл и поддерживается ли Range (докачка)
  HmsSendRequestEx(sServ, sLink, 'HEAD', '', sHeaders, '', 80, 0, sHeadersOut, true);
  if (not HmsRegExMatch('Content-Type: video/x-flv.*?Accept-Ranges: bytes', sHeadersOut, '', 1, PCRE_SINGLELINE)) then Exit;

  // Берём последние 4 байта flv файла - это размер последнего блока
  sHeaders := sReferer+#10#13+'Range: bytes=-4'+#10#13;
  s := HmsSendRequestEx(sServ, sLink, 'GET', '', sHeaders, '', 80, 0, sHeadersOut, true);
  if (Length(s) <> 4) then Exit;
  nLastBlockSize := Ord(s[3]) * 256 + Ord(s[4]);

  // Берём весь последний блок flv
  sHeaders := sReferer+#10#13+'Range: bytes=-'+IntToStr(nLastBlockSize)+#10#13;
  s := HmsSendRequestEx(sServ, sLink, 'GET', '', sHeaders, '', 80, 0, sHeadersOut, true);
  // Первые три с половиной байта (тут беру только целых три) - это длительность в миллисикундах
  n1 := Ord(s[1]) * 256 * 256;
  n2 := Ord(s[2]) * 256;
  n3 := Ord(s[3]);
  Result := HmsTimeFormat(Int((n1+n2+n3)/1000))+'.000';
end;
и в скрипте сделать вызов

Code: Select all

      Item := HmsCreateMediaItem(sItemLink, FolderItem.ItemID , pap1);  //ссылка
      Item.Properties[mpiTitle] := Format('%.3d', [j]) + '. ' + sItemName;  //название
      Item.Properties[mpiThumbnail] := sItemImg;  //картинка
      //Item.Properties[mpiTimeLength] :=  '00:45:00.000';  //длительность
      
      if Trim(gsTime)="" then gsTime := GetFlvDuration(sItemLink, 'http://serialu.net/');
      //if Trim(gsTime)="" then gsTime := GetDurationFromMediaInfo(Item);
      Item.Properties[mpiTimeLength] := gsTime;  //длительность
Вот.
Делать вещи, наподобие
Item.Properties[mpiTimeLength] := GetFlvDuration(sItemLink, 'http://serialu.net/');
не рекомендую. Ибо это не только сильное увеличение времени получения плейлиста серий (ведь для каждой ссылки будет делаться запросы на сервер), но и закидывание множеством мелких, но запросов самого сервера. А ведь подкастом могут пользоваться тысячи людей, шквал запросов на сервер обеспечен. Нужно делать их как можно меньше.
С фильмами это вообще проблема, как раз. Получать для каждого фильма длительность таким образом - это не годится.
Поэтому я обычно и предпочитаю через обновление подкаста создавать только папки с ссылками на фильмы, а при заходе в такие папки создавать уже там ссылки на видео-файлы.
Такие дела.
SONY KDL-32CX520
tarzann5
Posts: 90
Joined: Wed Feb 29, 2012 4:41 pm

serialu.net (15.01.2014)

Post by tarzann5 »

Исправил подкаст в первом посте. serialu.net (15.01.2014). Большое Спасибо viktar и WendyH.
WendyH
Posts: 393
Joined: Fri Apr 13, 2012 7:59 pm

Re: serialu.net (15.01.2014)

Post by WendyH »

Сериал "Аббатство Даунтон" как-то странно обновляет.
P.S.: в строке
ItemsRegExpr2 := TRegExpr.Create('>(.*?)/a',PCRE_SINGLELINE); //создать объект с содерж. между кавычек
нужно уточнить регулярку:
ItemsRegExpr2 := TRegExpr.Create('>(.*?<)/a',PCRE_SINGLELINE); //создать объект с содерж. между кавычек
Чтобы именно закрывающийся тег </a> искал, а то все где в ссылках после слеша начинающиеся на "a" будут косячить, как например в
<a href="http://serialu.net/abbatstvo-daunton/">
SONY KDL-32CX520
tarzann5
Posts: 90
Joined: Wed Feb 29, 2012 4:41 pm

Re: serialu.net (15.01.2014)

Post by tarzann5 »

По просьбе westers пере залил подкаст http://homemediaserver.ru/forum/viewtop ... =20&t=2368. Проверь и отпишись.
WendyH
Posts: 393
Joined: Fri Apr 13, 2012 7:59 pm

Re: serialu.net (31.01.2014)

Post by WendyH »

Всё хорошо работает. Только на папке "Сериалы" принудительно стоит профиль транскодирования "Фильмы (Ремуксирование)", у меня с ним не идёт. Меняю на "Наследовать" и всё отлично.
SONY KDL-32CX520
Post Reply