1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00
vdr/epg2html

112 lines
3.9 KiB
Plaintext
Raw Permalink Normal View History

2000-11-26 15:23:39 +01:00
#!/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
2000-11-26 15:23:39 +01:00
#
# 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 $
2000-11-26 15:23:39 +01:00
@Index = ();
($Charset = $ENV{LANG}) =~ s/^[^.]*\.?(.*)/$1/;
$Charset = "utf-8" unless $Charset || $ENV{LANG} == 'C';
2000-11-26 15:23:39 +01:00
sub GetDay
{
return substr(localtime(shift), 0, 10);
}
sub GetTime
{
return substr(localtime(shift), 11, 5);
}
sub Tags
{
my $s = shift;
$s =~ s/\&/&amp;/g;
$s =~ s/</&lt;/g;
$s =~ s/>/&gt;/g;
return $s;
}
while (<>) {
chomp;
if (/^C ([^ ]+) *(.*)/) {
my $Channel = $2;
(my $Page = $Channel) =~ y/\/ /-_/;
$Page .= ".htm";
2000-11-26 15:23:39 +01:00
$Channel = Tags($Channel);
push(@Index, qq{<a href="$Page">$Channel</a><br>\n});
2000-11-26 15:23:39 +01:00
my %Events = ();
while (<>) {
2002-05-30 09:50:19 +02:00
if (/^E (.*?) (.*?) ([^ ]*)/) {
2000-11-26 15:23:39 +01:00
(my $Time, $Duration) = ($2, $3);
my $Title = "", $Subtitle = "", $Description = "", $Vps = 0;
2000-11-26 15:23:39 +01:00
while (<>) {
if (/^T (.*)/) { $Title = Tags($1); }
elsif (/^S (.*)/) { $Subtitle = Tags($1); }
elsif (/^D (.*)/) { $Description = Tags($1); $Description =~ s/\|/<br>/g; }
elsif (/^V (.*)/) { $Vps = $1; }
2000-11-26 15:23:39 +01:00
elsif (/^e/) {
$Events{$Time} = [($Duration, $Title, $Subtitle, $Description, $Vps)];
2000-11-26 15:23:39 +01:00
last;
}
}
}
elsif (/^c/) {
my @Schedule = ();
my $Day = "";
for $t (sort keys %Events) {
(my $Duration, $Title, $Subtitle, $Description, $Vps) = @{$Events{$t}};
2000-11-26 15:23:39 +01:00
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;
2000-11-26 15:23:39 +01:00
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";
2000-11-26 15:23:39 +01:00
print PAGE "<h1>$Channel</h1>\n";
print PAGE @Schedule;
print PAGE "</body>\n";
print PAGE "</html>\n";
2000-11-26 15:23:39 +01:00
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";
2000-11-26 15:23:39 +01:00
print INDEX sort { lc($a) cmp lc($b) } @Index;
print INDEX "</body>\n";
print INDEX "</html>\n";
2000-11-26 15:23:39 +01:00
close(INDEX);