1 package NonameTV
::Importer
::Hallmark
;
8 Import data from Excel files delivered via e-mail.
17 use Spreadsheet
::ParseExcel
;
18 use File
::Temp qw
/tempfile/;
20 use NonameTV qw
/norm AddCategory MonthNumber/;
21 use NonameTV
::Log qw
/progress error/;
23 use NonameTV
::Importer
::BaseFile
;
25 use base
'NonameTV::Importer::BaseFile';
29 my $class = ref($proto) || $proto;
30 my $self = $class->SUPER::new
( @_ );
31 bless ($self, $class);
33 $self->{grabber_name
} = "Hallmark";
38 sub ImportContentFile
{
40 my( $file, $chd ) = @_;
42 $self->{fileerror
} = 0;
44 my $xmltvid = $chd->{xmltvid
};
45 my $channel_id = $chd->{id
};
46 my $ds = $self->{datastore
};
48 # Only process .xls files.
49 return if( $file !~ /\.xls$/i );
50 progress
( "Hallmark: $xmltvid: Processing $file" );
57 my $batch_id = $xmltvid . "_" . $file;
58 $ds->StartBatch( $batch_id , $channel_id );
60 my $oBook = Spreadsheet
::ParseExcel
::Workbook
->Parse( $file );
63 for(my $iSheet=0; $iSheet < $oBook->{SheetCount
} ; $iSheet++) {
65 my $oWkS = $oBook->{Worksheet
}[$iSheet];
66 progress
( "Hallmark: $chd->{xmltvid}: Processing worksheet: $oWkS->{Name}" );
69 for(my $iR = $oWkS->{MinRow
} ; defined $oWkS->{MaxRow
} && $iR <= $oWkS->{MaxRow
} ; $iR++) {
71 # get the names of the columns from the 1st row
73 for(my $iC = $oWkS->{MinCol
} ; defined $oWkS->{MaxCol
} && $iC <= $oWkS->{MaxCol
} ; $iC++) {
74 $columns{norm
($oWkS->{Cells
}[$iR][$iC]->Value)} = $iC;
78 #foreach my $col (%columns) {
82 # date - column 0 ('Date')
83 my $oWkC = $oWkS->{Cells
}[$iR][$columns{'Date'}];
86 $date = ParseDate
( $oWkC->Value );
89 # starttime - column ('Start')
90 $oWkC = $oWkS->{Cells
}[$iR][$columns{'Start'}];
92 my $starttime = create_dt
( $date , $oWkC->Value ) if( $oWkC->Value );
94 # endtime - column ('End')
95 $oWkC = $oWkS->{Cells
}[$iR][$columns{'End'}];
97 my $endtime = create_dt
( $date , $oWkC->Value ) if( $oWkC->Value );
99 # title - column ('Title')
100 $oWkC = $oWkS->{Cells
}[$iR][$columns{'Title'}];
102 my $title = $oWkC->Value if( $oWkC->Value );
104 my $type = $oWkS->{Cells
}[$iR][$columns{'Type'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Type'}];
105 my $prodno = $oWkS->{Cells
}[$iR][$columns{'Prod No.'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Prod No.'}];
106 my $episodetitle = $oWkS->{Cells
}[$iR][$columns{'Episode Title'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Episode Title'}];
107 my $slotlen = $oWkS->{Cells
}[$iR][$columns{'Slot Len'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Slot Len'}];
108 my $epino = $oWkS->{Cells
}[$iR][$columns{'Epi No.'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Epi No.'}];
109 my $cert = $oWkS->{Cells
}[$iR][$columns{'Cert'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Cert'}];
110 my $genre = $oWkS->{Cells
}[$iR][$columns{'Genre'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Genre'}];
111 my $year = $oWkS->{Cells
}[$iR][$columns{'Year'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Year'}];
112 my $director = $oWkS->{Cells
}[$iR][$columns{'Director'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Director'}];
113 my $actor = $oWkS->{Cells
}[$iR][$columns{'Actor'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Actor'}];
114 my $episodesynopsis = $oWkS->{Cells
}[$iR][$columns{'Episode Synopsis'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Episode Synopsis'}];
115 my $minisynopsis = $oWkS->{Cells
}[$iR][$columns{'Mini Synopsis'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Mini Synopsis'}];
116 my $synopsis = $oWkS->{Cells
}[$iR][$columns{'Synopsis'}]->Value if $oWkS->{Cells
}[$iR][$columns{'Synopsis'}];
118 progress
("Hallmark: $xmltvid: $starttime - $title");
121 channel_id
=> $channel_id,
122 start_time
=> $starttime->ymd("-") . " " . $starttime->hms(":"),
123 end_time
=> $endtime->ymd("-") . " " . $endtime->hms(":"),
129 $ce->{subtitle
} = $episodetitle;
134 $ce->{description
} = $synopsis;
139 $ce->{episode
} = sprintf( ". %d .", $epino-1 );
140 $ce->{program_type
} = 'series';
145 $ce->{program_type
} = $type;
150 my($program_type, $category ) = $ds->LookupCat( "Hallmark_genre", $genre );
151 AddCategory
( $ce, $program_type, $category );
156 $ce->{production_date
} = "$year-01-01";
161 $ce->{directors
} = $director;
166 $ce->{actors
} = $actor;
169 $ds->AddProgramme( $ce );
185 my( $day, $monthname, $year );
187 # format '033 03 Jul 2008'
188 if( $dinfo =~ /^\d+\s+\d+\s+\S+\s+\d+$/ ){
189 ( $day, $monthname, $year ) = ( $dinfo =~ /^\d+\s+(\d+)\s+(\S+)\s+(\d+)$/ );
192 } elsif( $dinfo =~ /^\d+-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-\d+$/i ){
193 ( $day, $monthname, $year ) = ( $dinfo =~ /^(\d+)-(\S+)-(\d+)$/ );
200 return undef if( ! $year);
202 $year+= 2000 if $year< 100;
204 my $mon = MonthNumber
( $monthname, "en" );
206 #print "DAY: $day\n";
207 #print "MON: $mon\n";
208 #print "YEA: $year\n";
210 my $dt = DateTime
->new( year
=> $year,
216 time_zone
=> 'Europe/Zagreb',
219 $dt->set_time_zone( "UTC" );
226 my( $date, $time ) = @_;
228 my( $hour, $min, $sec ) = ( $time =~ /(\d{2}):(\d{2}):(\d{2})/ );
230 my $dt = $date->clone()->add( hours
=> $hour , minutes
=> $min , seconds
=> $sec );
237 ### Setup coding system