#! /usr/bin/perl
#---------------------------------------------------------------------
# Example usage of PostScript::ScheduleGrid::XMLTV
# by Christopher J. Madsen
#
# This example script is in the public domain.
# Copy from it as you like.
#---------------------------------------------------------------------
use strict;
use warnings;
use 5.010;
use DateTime ();
use PostScript::ScheduleGrid::XMLTV ();
my $dataFile = $ARGV[0] // 'data.xml';
my $outFile = $ARGV[1] // 'listings.ps';
die "You must provide an XMLTV data file\n" unless -f $dataFile;
# Produce 3 days of listings starting tomorrow at 6am
my $start_date = DateTime->today(time_zone => 'local')
->add(days => 1, hours => 6);
my $end_date = $start_date->clone->add(days => 3);
#---------------------------------------------------------------------
# Customize listings through program_callback:
my %favoriteShow = map { $_ => 1 } (
'Castle',
'MythBusters',
'Person of Interest',
);
sub callback
{
my ($p) = shift;
$p->{category} = 'sports'
if $p->{dd_progid} =~ /^SP/ or
($p->{xml}{category} and
grep { $_->[0] =~ /^Sports.+(?:event|talk)$/ }
@{$p->{xml}{category}});
$p->{category} = 'fav' if $favoriteShow{$p->{show}}
or ($p->{parser}->get_text($p->{xml}{desc}) // '') =~ /Caviezel/;
# example of searching the description for specified text
} # end callback
#---------------------------------------------------------------------
my $tv = PostScript::ScheduleGrid::XMLTV->new(
program_callback => \&callback,
start_date => $start_date,
end_date => $end_date,
channel_settings => {
'285 EWTN' => { lines => 3 },
'I16374.labs.zap2it.com' => { lines => 1 },
},
);
$tv->parsefiles($dataFile);
#---------------------------------------------------------------------
say "Preparing grid";
my $grid = $tv->grid(
categories => { fav => 'Solid',
sports => [qw(Stripe direction right)] },
landscape => 1,
grid_hours => 6,
(map { $_ => 18 } qw(left_margin right_margin top_margin bottom_margin)),
cell_font_size => 8,
line_height => 11,
);
$grid->output($outFile);
# Local Variables:
# compile-command: "perl example.pl data.xml /tmp/listings.ps"
# End: