Форум 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="Усадьба" 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 часа |