Текущее время: 01 май 2025, 21:22 • Часовой пояс: UTC + 3 часа |
конвертер списка каналов из beholdtv в tvtime
Автор | Сообщение |
Zueuk
|
|
Зарегистрирован: 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: $!";
|
|
|
Madrack
|
Добавлено: 11 янв 2008, 19:09. Заголовок сообщения: |
|
|
Зарегистрирован: 11 дек 2007, 17:15 Сообщения: 4
|
Чет етот скрипт у меня не работает. Я конечно не знаток перла, но не переборщил ли ты с кавычками:
Код: $POSITION len=".length($_)." "; и print в етом вырианте будет выводить на терминал, а не в файл: Код: print "$COUNTRY"
А вобще был бы полезный скриптик
|
|
|
Zueuk
|
Добавлено: 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 Непонятно почему, дублирует сроки пустые.
|
|
|
Madrack
|
Добавлено: 12 янв 2008, 17:54. Заголовок сообщения: |
|
|
Зарегистрирован: 11 дек 2007, 17:15 Сообщения: 4
|
пасиба за оперативность, прийду домой проверю
|
|
|
MUSTANG
|
Добавлено: 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>
|
|
|
slaffka78
|
Добавлено: 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: $!";
#-- окончание скрипта
|
|
|
gentoo
|
Добавлено: 21 янв 2009, 09:36. Заголовок сообщения: |
|
|
Зарегистрирован: 21 янв 2009, 09:31 Сообщения: 25
|
Проверил. Скрипт работает замечательно! Спасибо!
|
|
|
XATRIX
|
Добавлено: 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>
как же быть то ?
|
|
|
DrLabRus
|
Добавлено: 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
|
|
|
MUSTANG
|
Добавлено: 03 фев 2009, 20:04. Заголовок сообщения: |
|
|
Зарегистрирован: 20 дек 2008, 20:41 Сообщения: 5
|
у меня вариант от slaffka78 прекрасно сработал
|
|
|
gentoo
|
Добавлено: 04 фев 2009, 12:27. Заголовок сообщения: |
|
|
Зарегистрирован: 21 янв 2009, 09:31 Сообщения: 25
|
Как и у меня, а то не уточнил ))
|
|
|
DrLabRus
|
Добавлено: 07 фев 2009, 14:58. Заголовок сообщения: |
|
|
Зарегистрирован: 03 фев 2009, 15:20 Сообщения: 2
|
MUSTANG , gentoo
Я же не от скуки правки внес, а потому что действительно не работало.
Буду рад, если укажете свои версии beholdtv (у меня 5.02) и приведете по одной секции описания каналов.
Beholder TV 509 fm | Ubuntu 8.10 + tvtime
|
|
|
gentoo
|
Добавлено: 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="Усадьба" active="1" position="64" band="Custom" channel="855,00MHz" finetune="0" norm="PAL" audio="bg"/>"
|
|
|
Raven
|
Добавлено: 06 июн 2010, 23:33. Заголовок сообщения: |
|
|
Зарегистрирован: 04 янв 2010, 21:17 Сообщения: 6
|
Скрипт сработал хорошо, но не пойму почему большинство каналов, которые работали в винде, в tvtime не показывают - пишет нет сигнала.
Kubuntu 10. Beholder 607 RDS
|
|
|
Raven
|
Добавлено: 16 июн 2010, 22:58. Заголовок сообщения: |
|
|
Зарегистрирован: 04 янв 2010, 21:17 Сообщения: 6
|
Идей нет?
Последний раз редактировалось Raven 16 июн 2010, 23:00, всего редактировалось 1 раз.
|
|
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|