mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
112 lines
3.9 KiB
Perl
Executable File
112 lines
3.9 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
# A simple EPG to HTML converter
|
|
#
|
|
# Converts the EPG data written by 'vdr' into the file /video/epg.data
|
|
# into a simple HTML programme listing, consisting of one file per channel
|
|
# plus an 'index.htm' file. All output files are written into the current
|
|
# directory.
|
|
#
|
|
# Usage: epg2html < /video/epg.data
|
|
#
|
|
# See the main source file 'vdr.c' for copyright information and
|
|
# how to reach the author.
|
|
#
|
|
# $Id: epg2html 2.2 2013/03/04 12:13:11 kls Exp $
|
|
|
|
@Index = ();
|
|
($Charset = $ENV{LANG}) =~ s/^[^.]*\.?(.*)/$1/;
|
|
$Charset = "utf-8" unless $Charset || $ENV{LANG} == 'C';
|
|
|
|
sub GetDay
|
|
{
|
|
return substr(localtime(shift), 0, 10);
|
|
}
|
|
|
|
sub GetTime
|
|
{
|
|
return substr(localtime(shift), 11, 5);
|
|
}
|
|
|
|
sub Tags
|
|
{
|
|
my $s = shift;
|
|
$s =~ s/\&/&/g;
|
|
$s =~ s/</</g;
|
|
$s =~ s/>/>/g;
|
|
return $s;
|
|
}
|
|
|
|
while (<>) {
|
|
chomp;
|
|
if (/^C ([^ ]+) *(.*)/) {
|
|
my $Channel = $2;
|
|
(my $Page = $Channel) =~ y/\/ /-_/;
|
|
$Page .= ".htm";
|
|
$Channel = Tags($Channel);
|
|
push(@Index, qq{<a href="$Page">$Channel</a><br>\n});
|
|
my %Events = ();
|
|
while (<>) {
|
|
if (/^E (.*?) (.*?) ([^ ]*)/) {
|
|
(my $Time, $Duration) = ($2, $3);
|
|
my $Title = "", $Subtitle = "", $Description = "", $Vps = 0;
|
|
while (<>) {
|
|
if (/^T (.*)/) { $Title = Tags($1); }
|
|
elsif (/^S (.*)/) { $Subtitle = Tags($1); }
|
|
elsif (/^D (.*)/) { $Description = Tags($1); $Description =~ s/\|/<br>/g; }
|
|
elsif (/^V (.*)/) { $Vps = $1; }
|
|
elsif (/^e/) {
|
|
$Events{$Time} = [($Duration, $Title, $Subtitle, $Description, $Vps)];
|
|
last;
|
|
}
|
|
}
|
|
}
|
|
elsif (/^c/) {
|
|
my @Schedule = ();
|
|
my $Day = "";
|
|
for $t (sort keys %Events) {
|
|
(my $Duration, $Title, $Subtitle, $Description, $Vps) = @{$Events{$t}};
|
|
my $d = GetDay($t);
|
|
if ($d ne $Day) {
|
|
push(@Schedule, "</table>\n") if ($Day && @Schedule);
|
|
push(@Schedule, "<h2>$d</h2>\n");
|
|
push(@Schedule, "<table cellspacing=2>\n");
|
|
$Day = $d;
|
|
}
|
|
my $Entry = $Title;
|
|
$Entry .= "<br><i>$Subtitle</i>" if $Subtitle;
|
|
$Entry .= "<br>$Description" if $Description;
|
|
$Entry .= "<br>(VPS = " . scalar localtime($Vps) . ")" if $Vps && $Vps != $t;
|
|
push(@Schedule, "<tr><td valign=top>" . GetTime($t) . "</td><td>$Entry</td></tr>\n");
|
|
}
|
|
push(@Schedule, "</table>\n") if (@Schedule);
|
|
open(PAGE, ">$Page") or die "$Page: $!\n";
|
|
print PAGE "<html>\n";
|
|
print PAGE "<head>\n";
|
|
print PAGE "<title>$Channel</title>\n";
|
|
print PAGE "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=$Charset\">\n";
|
|
print PAGE "</head>\n";
|
|
print PAGE "<body>\n";
|
|
print PAGE "<h1>$Channel</h1>\n";
|
|
print PAGE @Schedule;
|
|
print PAGE "</body>\n";
|
|
print PAGE "</html>\n";
|
|
close(PAGE);
|
|
last;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
open(INDEX, ">index.htm") or die "index.htm: $!\n";
|
|
print INDEX "<html>\n";
|
|
print INDEX "<head>\n";
|
|
print INDEX "<title>EPG Index</title>\n";
|
|
print INDEX "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=$Charset\">\n";
|
|
print INDEX "</head>\n";
|
|
print INDEX "<body>\n";
|
|
print INDEX sort { lc($a) cmp lc($b) } @Index;
|
|
print INDEX "</body>\n";
|
|
print INDEX "</html>\n";
|
|
close(INDEX);
|