[mythtv-users] ignyte replacement script that fetches from Google Movies for mythmovies
Jason Keirstead
jason at keirstead.org
Mon Jun 2 02:28:56 UTC 2008
The "ignyte" mythmovies grabber that ships with the mythmovies plugin
does not support non-US addresses, so I decided rather than not using
the plugin altogether, to write my own grabber that instead fetches the
data from Google Movies.
It is tested and working fine for me using my Canadian postal code.
hopefully others may find it useful. Some people in the US even may
prefer to use it instead of the ignyte script, because one thing I did
differently is I put the 'star rating' from Google's movie reviews into
the 'Rating' box instead of the MPAA rating, which I did not find useful.
Only takes one argument, zip / postal code. It is *VERY* hacky, and will
probably break at the slightest page format change, but it does the trick.
---------
#!/usr/bin/perl -w
#
my $zip = $ARGV[0];
@theatres = ();
@movies = ();
@showtimes = ();
@ratings = ();
@runningTimes = ();
my $page = "";
open( F, "wget --quiet -O -
'http://www.google.ca/movies?hl=en&near=$zip&sort=1'|" );
while(<F>)
{
$page .= $_;
}
close(F);
while( $page =~ /tid=\w+"><b>([^<]+)<\/b><\/a><br>([^\s<]+)/g )
{
push @theatres, "$1:$2";
}
while( $page =~ /mid=\w+"><b>([^<]+)<\/b>/g )
{
push @movies, $1;
}
while( $page =~ /alt="(Rated [^"]+)"/g )
{
push @ratings, $1;
}
while( $page =~ /\<br\>\<font size=-1\>([^\s<]+)/g )
{
push @runningTimes, $1;
}
while( $page =~ /<br>([^<]+)<\/font>/g )
{
push @showtimes, $1;
}
my %theatreMap = ();
for( my $i = 0; $i < scalar(@theatres); ++$i )
{
my $theatre = $theatres[$i];
my $movie = $movies[$i];
my $showtime = $showtimes[$i];
my $runningTime = $runningTimes[$i];
my $rating = $ratings[$i];
my $movieRef = undef;
if( $theatreMap{ $theatre } )
{
$movieRef = $theatreMap{ $theatre };
}
else
{
%empty = ();
$movieRef = \%empty;
$theatreMap{ $theatre } = $movieRef;
}
my @movieInfo = ( $showtime, $runningTime, $rating );
$movieRef->{ $movie } = \@movieInfo;
}
print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<MovieTimes>\n";
for my $theatre ( keys %theatreMap )
{
my ( $name, $address ) = split /:/, $theatre;
$address =~ s/ / /g;
print
"<Theatre>\n\t<Name>$name</Name>\n\t<Address>$address</Address>\n\t<Movies>\n";
my $movieRef = $theatreMap{ $theatre };
for my $movie( keys %{ $movieRef } )
{
print "\t\t<Movie>\n\t\t\t<Name>$movie</Name>\n";
my @movieInfo = @{ $movieRef->{ $movie } };
my ( $showtime, $runningTime, $rating ) = @movieInfo;
$showtime =~ s/ / |/g;
$showtime =~ s/(\d+:\d+)/$1pm/g;
print "\t\t\t<ShowTimes>$showtime</ShowTimes>\n";
if( $runningTime )
{
$runningTime =~ s/ / /g;
print
"\t\t\t<RunningTime>$runningTime</RunningTime>\n";
}
if( $rating )
{
print "\t\t\t<Rating>$rating</Rating>\n";
}
print "\t\t</Movie>\n";
}
print "\t</Movies>\n</Theatre>\n";
}
print "</MovieTimes>"
More information about the mythtv-users
mailing list