Текущее время: 01 дек 2022, 02:22 • Часовой пояс: UTC + 3 часа
Сообщения без ответов | Активные темы

конвертер списка каналов из beholdtv в tvtime

Начать новую темуОтветить на тему Страница 1 из 2 [ Сообщений: 17 ] На страницу   1, 2  След.
Версия для печати Пред. тема | След. тема
АвторСообщение
Сообщение Добавлено: 20 дек 2007, 20:00. Заголовок сообщения:  конвертер списка каналов из beholdtv в tvtime
Зарегистрирован:
    07 янв 2007, 11:49
Сообщения: 4
У меня в Линуксе при сканировании каналов куча каналов не определяется, хотя что-то ловит 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: $!";
Профиль 
Сообщение Добавлено: 11 янв 2008, 19:09. Заголовок сообщения: 
Зарегистрирован:
    11 дек 2007, 17:15
Сообщения: 4
Чет етот скрипт у меня не работает. Я конечно не знаток перла, но не переборщил ли ты с кавычками:
Код:
$POSITION len=".length($_)." ";

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

А вобще был бы полезный скриптик
Профиль 
Сообщение Добавлено: 11 янв 2008, 22:58. Заголовок сообщения: 
Зарегистрирован:
    07 янв 2007, 11:49
Сообщения: 4
Вот поправленный вариант. Проверен минуту назад - рабочий :)

Код:
#!/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 Непонятно почему, дублирует сроки пустые.
Профиль 
Сообщение Добавлено: 12 янв 2008, 17:54. Заголовок сообщения: 
Зарегистрирован:
    11 дек 2007, 17:15
Сообщения: 4
пасиба за оперативность, прийду домой проверю
Профиль 
Сообщение Добавлено: 20 дек 2008, 23:01. Заголовок сообщения: 
Зарегистрирован:
    20 дек 2008, 20:41
Сообщения: 5
не работает. у меня выдал
Код:
<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>
Профиль ICQ 
Сообщение Добавлено: 08 янв 2009, 05:29. Заголовок сообщения: 
Зарегистрирован:
    08 янв 2009, 04:43
Сообщения: 1
Добрый день,
есть предположение, что проблемы со скриптом были вызваны особенностью форума - при посте часть символов пропадает. Решение - установить галочки "Отключить в этом сообщении 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: $!";


#-- окончание скрипта
Профиль 
Сообщение Добавлено: 21 янв 2009, 09:36. Заголовок сообщения: 
Аватара пользователя
Зарегистрирован:
    21 янв 2009, 09:31
Сообщения: 25
Проверил. Скрипт работает замечательно! Спасибо!
Профиль ICQ 
Сообщение Добавлено: 27 янв 2009, 22:59. Заголовок сообщения: 
Зарегистрирован:
    19 ноя 2008, 19:43
Сообщения: 1
Откуда: Киев
А у меня чего-то не заработало... всё сделал как написано в инструкции... а в файле только

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>

как же быть то ?
Профиль 
Сообщение Добавлено: 03 фев 2009, 15:33. Заголовок сообщения: 
Аватара пользователя
Зарегистрирован:
    03 фев 2009, 15:20
Сообщения: 2
Сделал несколько изменений в скрипте, после чего у меня он заработал.
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: $!";
Beholder TV 509 fm | Ubuntu 8.10 + tvtime
Профиль 
Сообщение Добавлено: 03 фев 2009, 20:04. Заголовок сообщения: 
Зарегистрирован:
    20 дек 2008, 20:41
Сообщения: 5
у меня вариант от slaffka78 прекрасно сработал
Профиль ICQ 
Сообщение Добавлено: 04 фев 2009, 12:27. Заголовок сообщения: 
Аватара пользователя
Зарегистрирован:
    21 янв 2009, 09:31
Сообщения: 25
Как и у меня, а то не уточнил ))
Профиль ICQ 
Сообщение Добавлено: 07 фев 2009, 14:58. Заголовок сообщения: 
Аватара пользователя
Зарегистрирован:
    03 фев 2009, 15:20
Сообщения: 2
MUSTANG , gentoo
Я же не от скуки правки внес, а потому что действительно не работало.
Буду рад, если укажете свои версии beholdtv (у меня 5.02) и приведете по одной секции описания каналов.
Beholder TV 509 fm | Ubuntu 8.10 + tvtime
Профиль 
Сообщение Добавлено: 03 июл 2009, 10:26. Заголовок сообщения: 
Аватара пользователя
Зарегистрирован:
    21 янв 2009, 09:31
Сообщения: 25
Версия 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"/>"
Профиль ICQ 
Сообщение Добавлено: 06 июн 2010, 23:33. Заголовок сообщения: 
Зарегистрирован:
    04 янв 2010, 21:17
Сообщения: 6
Скрипт сработал хорошо, но не пойму почему большинство каналов, которые работали в винде, в tvtime не показывают - пишет нет сигнала.

Kubuntu 10. Beholder 607 RDS
Профиль 
Сообщение Добавлено: 16 июн 2010, 22:58. Заголовок сообщения: 
Зарегистрирован:
    04 янв 2010, 21:17
Сообщения: 6
Идей нет?
Последний раз редактировалось Raven 16 июн 2010, 23:00, всего редактировалось 1 раз.
Профиль 
Показать сообщения за:  Поле сортировки:    
Начать новую темуОтветить на тему  Страница 1 из 2  [ Сообщений: 17 ]  На страницу   1, 2  След.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
Найти:  
Перейти:  
cron