#!/usr/bin/perl -w use XML::DOM; use strict; my $parser = new XML::DOM::Parser; # a bug my $dateNow = `date +'%Y-%m-%d'`; my $timeNow = `date +'%Y%m%d%H%m'`; chomp $dateNow; chomp $timeNow; #open(FD, "wget -q -O - 'http://xlife.dhs.org/tv/xml.php?fetchdate=" . `date +'%Y-%m-%d'` . "&channels=tv1,tv2,tv3,tv4,tvtv' |"); my $dir = "$ENV{HOME}/log"; if (-d $dir) { $dir = "$dir/tv"; } else { $dir = "$ENV{HOME}/tv"; } mkdir "$dir", 0700; my $fileName = "$dir/$dateNow.gz"; if (-e $fileName) { open(FD, "zcat $fileName | "); } else { open(FD, "/bin/zsh -c \"wget -q -O - 'http://xlife.dhs.org/tv/xml.php?fetchdate=$dateNow&channels=tv1,tv2,tv3,tv4,tvtv' | tee >(gzip -9 > $fileName)\" | "); } #open(FD, "< tvscan.xml"); #print "wget -q -O - 'http://xlife.dhs.org/tv/xml.php?fetchdate=$dateNow&channels=tv1,tv2,tv3,tv4,tvtv' |\n"; my @channels; my $doc = $parser->parse(*FD, ProtocolEncoding => 'ISO-8859-1'); my $top = $doc->getDocumentElement(); @channels = $top->getChildNodes(); for my $chan (@channels) { if ($chan->getNodeName() eq "channel") { print $chan->getAttribute("code"), "\n"; my @channelProgs = $chan->getChildNodes(); my $programs = 0; for my $prog (@channelProgs) { if ($prog->getNodeName() eq "program") { my ($start, $end, $name) = ($prog->getAttribute("start"), $prog->getAttribute("end"), $prog->getElementsByTagName("name")); if (($start <= $timeNow && $end >= $timeNow) || ($start >= $timeNow)) { my $str = (substr($start, 8) . "-" . substr(coalesce($end, " "), 8) . " " . $name->getFirstChild()->toString() . "\n"); print $str; if (++$programs >= 3) { last; } } } } } } close(FD); $parser = 0; exit; sub coalesce (@) { my $answer = shift; while (!defined $answer && @_ > 0) { $answer = shift; } return $answer; }