mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00: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);
 |