Форум Beholder
http://beholder.ru/bb/

конвертер списка каналов из beholdtv в tvtime
http://beholder.ru/bb/viewtopic.php?f=11&t=5988
Страница 1 из 2

Автор:  Zueuk [ 20 дек 2007, 20:00 ]
Заголовок сообщения:  конвертер списка каналов из beholdtv в tvtime

У меня в Линуксе при сканировании каналов куча каналов не определяется, хотя что-то ловит tvtime-scanner. При этом в оффтопике все каналы ловятся. :)
Однако, возиться и вручную переписывать - очень лень :)
Поэтому, наваял простенький скрипт на Перле по переводу из одного формата в другой.

Замечания, предложения приветствуются :)

Код:
#!/usr/bin/perl

#Скрипт для конвертирования настроек
#тв-каналов из формата BeholdTV в формат tvtime

#имя файла в формате BeholdTV
$BEHOLD="beholdtv_utf8.ini";
#имя файла в формате tvtime
$TVTIME="stationlist.xml";

$TV_VIDEO="SECAM";

open (BEHOLDTV, $BEHOLD) || die "Can't open $BEHOLD: $!";
open (TVTIME, "> $TVTIME") || die "Can't create $TVTIME: $!";

  print TVTIME "\<xml>\n";
  print TVTIME "\<DOCTYPE>\n";

  print TVTIME "\<stationlist>\n";
  print TVTIME "  \<list>";
   while (<BEHOLDTV>) {
      ##$_ =~ s/\r//;
      $_ =~ s/\r(?=\n)//;
      chomp ($_);
      if ( length($_) > 0) {
      if (substr($_,1, 2 ) eq "TV") {
         $POSITION = substr($_,3, -1 );
 $POSITION len=".length($_)." ";
      };
      ($VAR,$VAL)= split (/=/,$_);

      if ( $VAR eq "Country" ) { 
         $COUNTRY = $VAL;
         chomp ($COUNTRY);
         print "$COUNTRY"
      };
      if ( $VAR eq "CountTVChannel" ) { 
         $TVCHANNELS = $VAL;
      }
      if ( $VAR eq "Name" ) { 
         $STATION_NAME = $VAL;
      }
      if ( $VAR eq "TVFrequency" ) { 
         $TV_FREQ = $VAL;
         $TV_FREQ = $TV_FREQ / 1000000; print "$TV_FREQ\n";
      }
      } else { print TVTIME "\t\<station>\n"; };
   }
  print TVTIME "  \</list>\n";
  print TVTIME "\</stationlist>\n";
  print TVTIME "\n";

close (BEHOLDTV) || die "couldn't close $BEHOLD: $!";
close (TVTIME) || die "couldn't close $TVTIME: $!";

Автор:  Madrack [ 11 янв 2008, 19:09 ]
Заголовок сообщения: 

Чет етот скрипт у меня не работает. Я конечно не знаток перла, но не переборщил ли ты с кавычками:
Код:
$POSITION len=".length($_)." ";

и print в етом вырианте будет выводить на терминал, а не в файл:
Код:
print "$COUNTRY"

А вобще был бы полезный скриптик

Автор:  Zueuk [ 11 янв 2008, 22:58 ]
Заголовок сообщения: 

Вот поправленный вариант. Проверен минуту назад - рабочий :)

Код:
#!/usr/bin/perl

#Скрипт для конвертирования настроек
#тв-каналов из формата BeholdTV в формат tvtime

#имя файла в формате BeholdTV
$BEHOLD="beholdtv_utf8.ini";
#имя файла в формате tvtime
$TVTIME="stationlist.xml";

$TV_VIDEO="SECAM";

open (BEHOLDTV, $BEHOLD) || die "Can't open $BEHOLD: $!";
open (TVTIME, "> $TVTIME") || die "Can't create $TVTIME: $!";

  print TVTIME "\<xml>\n";
  print TVTIME "\<DOCTYPE>\n";

  print TVTIME "\<stationlist>\n";
  print TVTIME "  \<list>";
   while (<BEHOLDTV>) {
      $_ =~ s/\r(?=\n)//; #удаляет последние левые символы
      chomp ($_);
      if ( length($_) > 0) {
      if (substr($_,1, 2 ) eq "TV") {
         $POSITION = substr($_,3, -1 );
      };
      ($VAR,$VAL)= split (/=/,$_);
      if ( $VAR eq "Country" ) { 
         $COUNTRY = $VAL;
         chomp ($COUNTRY);
         print "$COUNTRY"
      };
      if ( $VAR eq "CountTVChannel" ) { 
         $TVCHANNELS = $VAL;
      }
      if ( $VAR eq "Name" ) { 
         $STATION_NAME = $VAL;
      }
      if ( $VAR eq "TVFrequency" ) { 
         $TV_FREQ = $VAL;
         $TV_FREQ = $TV_FREQ / 1000000; print "$TV_FREQ\n";
      }
      } else { print TVTIME "\t\<station>\n"; };
   }
  print TVTIME "  \</list>\n";
  print TVTIME "\</stationlist>\n";
  print TVTIME "\n";

close (BEHOLDTV) || die "couldn't close $BEHOLD: $!";
close (TVTIME) || die "couldn't close $TVTIME: $!";


PS Непонятно почему, дублирует сроки пустые.

Автор:  Madrack [ 12 янв 2008, 17:54 ]
Заголовок сообщения: 

пасиба за оперативность, прийду домой проверю

Автор:  MUSTANG [ 20 дек 2008, 23:01 ]
Заголовок сообщения: 

не работает. у меня выдал
Код:
<xml>
<DOCTYPE>
<stationlist>
  <list>   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
   <station>
  </list>
</stationlist>

Автор:  slaffka78 [ 08 янв 2009, 05:29 ]
Заголовок сообщения: 

Добрый день,
есть предположение, что проблемы со скриптом были вызваны особенностью форума - при посте часть символов пропадает. Решение - установить галочки "Отключить в этом сообщении HTML" и BBCode.

ниже приведен слегка отредактированный скрипт конвертера.

Инструкция:
1. в MS Windows в программе Beholder настроить телеканалы так как надо Вам (желательно четко указать стандарт канала - PAL или SECAM, телеканалам можно давать названия в кириллице)
2. файл Moscow.ini с телеканалами (я нашел в \Program Files\BeholdTV\Channels\TV) скопировать куда требуется с именем beholdtv_utf8.ini
3. в GNU/Linux перекодировать файл beholdtv_utf8.ini в кодировку UTF-8 (если потребуется),
для этого воспользоваться командой recode cp1251..utf8 beholdtv_utf8.ini
(мне потребовалось, тк. винда сохранила его в cp1251)
4. скопипастить нижеследующий листинг скрипта в файл (напр.: tvtime.pl) в том же каталоге что и beholdtv_utf8.ini.
5. в терминале выполнить
perl tvtime.pl
6. файл tvtime.xml в каталоге ~/.tvtime отредактировать:
в строке <option name="Frequencies" value="указать тут Custom"
7. запустить tvtime, налить чайку. ))

#-- начало скрипта

#!/usr/bin/perl

#Скрипт для конвертирования настроек
#тв-каналов из формата BeholdTV в формат tvtime
#имя файла в формате BeholdTV

$BEHOLD="beholdtv_utf8.ini";

#имя файла в формате tvtime

$TVTIME="stationlist.xml";

$TV_VIDEO="SECAM";

open (BEHOLDTV, $BEHOLD) || die "Can't open $BEHOLD: $!";
open (TVTIME, "> $TVTIME") || die "Can't create $TVTIME: $!";

print TVTIME "\<?xml version=\"1.0\"?>\n";
print TVTIME "\<!DOCTYPE stationlist PUBLIC \"-//tvtime//DTD stationlist 1.0//EN\" \"http://tvtime.sourceforge.net/DTD/stationlist1.dtd\">\n";
print TVTIME "\<stationlist xmlns=\"http://tvtime.sourceforge.net/DTD/\">\n";
print TVTIME " \<list norm=\"SECAM\" frequencies=\"Custom\" audio=\"bg\">\n";
while (<BEHOLDTV>) {

$_ =~ s/\r(?=\n)//; #удаляет последние левые символы
chomp;
next unless length;
if (substr($_,1,2) eq "TV") {$POSITION = substr($_,3,-1)};
my ($var,$value) = split(/\s*=\s*/, $_, 2);
$TVvar{$var} = $value;

if ($TVvar{VideoStand} eq "2") {$NORM = "PAL";} else {$NORM = "SECAM";};
if ($TVvar{SkipThis} eq "0") {$ACTIVE = "1";} else {$ACTIVE = "0";};
if ($_ =~ m/TTxCharset=/) {print TVTIME " \<station name=\"",$TVvar{Name},"\" active=\"", $ACTIVE, "\" position=\"", $POSITION, "\" band=\"Custom\" channel=\"", $TVvar{TVFrequency} /1000000, "MHz\" finetune=\"0\" norm=\"",$NORM,"\" audio=\"auto\"/>\n";};

}
print TVTIME " \</list>\n";
print TVTIME "\</stationlist>\n";
print TVTIME "\n";
close (BEHOLDTV) || die "couldn't close $BEHOLD: $!";
close (TVTIME) || die "couldn't close $TVTIME: $!";


#-- окончание скрипта

Автор:  gentoo [ 21 янв 2009, 09:36 ]
Заголовок сообщения: 

Проверил. Скрипт работает замечательно! Спасибо!

Автор:  XATRIX [ 27 янв 2009, 22:59 ]
Заголовок сообщения: 

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

XATRIX-GATEWAY ~ # cat stationlist.xml
<?xml version="1.0"?>
<!DOCTYPE stationlist PUBLIC "-//tvtime//DTD stationlist 1.0//EN" "http://tvtime.sourceforge.net/DTD/stationlist1.dtd">
<stationlist xmlns="http://tvtime.sourceforge.net/DTD/">
<list norm="SECAM" frequencies="Custom" audio="bg">
</list>
</stationlist>

как же быть то ?

Автор:  DrLabRus [ 03 фев 2009, 15:33 ]
Заголовок сообщения: 

Сделал несколько изменений в скрипте, после чего у меня он заработал.
1) убрал
$_ =~ s/\r(?=\n)//; #удаляет последние левые символы
2) изменил
chomp;
на
chomp($_);
3) в строке
if ($_ =~ m/TVGuideOffset=0/) {print TVTIME " \<station>\n";};
поменял условие на указанное. Поясню: смотрите в исходный файл behold_utf8.ini и чем заканчивается каждая из секций параметров каналов. Вот эту строчку между m/ / и надо ставить, чтобы вовремя строку занести в файл.

Примечание: что-то на перле разбирал в первый раз, так что... но у меня заработало...

Сам скрипт целиком:

#!/usr/bin/perl

#Скрипт для конвертирования настроек
#тв-каналов из формата BeholdTV в формат tvtime
#имя файла в формате BeholdTV

$BEHOLD="beholdtv_utf8.ini";

#имя файла в формате tvtime

$TVTIME="stationlist.xml";

$TV_VIDEO="SECAM";

open (BEHOLDTV, $BEHOLD) || die "Can't open $BEHOLD: $!";
open (TVTIME, "> $TVTIME") || die "Can't create $TVTIME: $!";

print TVTIME "\<?xml version=\"1.0\"?>\n";
print TVTIME "\<!DOCTYPE stationlist PUBLIC \"-//tvtime//DTD stationlist 1.0//EN\" \"http://tvtime.sourceforge.net/DTD/stationlist1.dtd\">\n";
print TVTIME "\<stationlist xmlns=\"http://tvtime.sourceforge.net/DTD/\">\n";
print TVTIME " \<list norm=\"SECAM\" frequencies=\"Custom\" audio=\"bg\">\n";
while (<BEHOLDTV>) {

#$_ =~ s/\r(?=\n)//; #удаляет последние левые символы
chomp($_);
next unless length;
if (substr($_,1,2) eq "TV") {$POSITION = substr($_,3,-1)};
my ($var,$value) = split(/\s*=\s*/, $_, 2);
$TVvar{$var} = $value;

if ($TVvar{VideoStand} eq "2") {$NORM = "PAL";} else {$NORM = "SECAM";};
if ($TVvar{SkipThis} eq "0") {$ACTIVE = "1";} else {$ACTIVE = "0";};
if ($_ =~ m/TVGuideOffset=0/) {print TVTIME " \<station name=\"",$TVvar{Name},"\" active=\"", $ACTIVE, "\" position=\"", $POSITION, "\" band=\"Custom\" channel=\"", $TVvar{TVFrequency} /1000000, "MHz\" finetune=\"0\" norm=\"",$NORM,"\" audio=\"auto\"/>\n";};

}
print TVTIME " \</list>\n";
print TVTIME "\</stationlist>\n";
print TVTIME "\n";
close (BEHOLDTV) || die "couldn't close $BEHOLD: $!";
close (TVTIME) || die "couldn't close $TVTIME: $!";

Автор:  MUSTANG [ 03 фев 2009, 20:04 ]
Заголовок сообщения: 

у меня вариант от slaffka78 прекрасно сработал

Автор:  gentoo [ 04 фев 2009, 12:27 ]
Заголовок сообщения: 

Как и у меня, а то не уточнил ))

Автор:  DrLabRus [ 07 фев 2009, 14:58 ]
Заголовок сообщения: 

MUSTANG , gentoo
Я же не от скуки правки внес, а потому что действительно не работало.
Буду рад, если укажете свои версии beholdtv (у меня 5.02) и приведете по одной секции описания каналов.

Автор:  gentoo [ 03 июл 2009, 10:26 ]
Заголовок сообщения: 

Версия BeholdTV 5.05.
Moscow.ini:
Код:
...
[TV64]
Index=-4313288719073054873
SkipThis=0
Name=Усадьба
TVFrequency=855500000
AGC=3
VideoStand=0
HPLLMode=2
AudioMode=0
AudioChannel=1
Brightness=128
Contrast=64
Hue=0
Saturation=64
Sharpness=0
VideoGain=150
AutoGain=0
Balance=32768
Volume=51400
Bass=0
Treble=0
VirtualEffect=0
Zoom=0
LeftOffSet=0
TopOffSet=0
TVGuide=Усадьба
TVGuideOffset=0
TTxPage=256
TTxCharset=69380


stationlist.xml:
Код:
...
<station name="&#x423;&#x441;&#x430;&#x434;&#x44C;&#x431;&#x430;" active="1" position="64" band="Custom" channel="855,00MHz" finetune="0" norm="PAL" audio="bg"/>"

Автор:  Raven [ 06 июн 2010, 23:33 ]
Заголовок сообщения: 

Скрипт сработал хорошо, но не пойму почему большинство каналов, которые работали в винде, в tvtime не показывают - пишет нет сигнала.

Kubuntu 10. Beholder 607 RDS

Автор:  Raven [ 16 июн 2010, 22:58 ]
Заголовок сообщения: 

Идей нет?

Страница 1 из 2 Часовой пояс: UTC + 3 часа