X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite%2FMNCastGrabber.pm;fp=videosite%2FMNCastGrabber.pm;h=344bc2c40a7aa527cd0efc509ec26608ca13b975;hb=80046de1470f1960fda3fe24788d6bd29aee2013;hp=0000000000000000000000000000000000000000;hpb=459af70cec834289606d6856346a661178a7866d;p=videosite.git diff --git a/videosite/MNCastGrabber.pm b/videosite/MNCastGrabber.pm new file mode 100644 index 0000000..344bc2c --- /dev/null +++ b/videosite/MNCastGrabber.pm @@ -0,0 +1,93 @@ +# (c) 2008 by Ralf Ertzinger +# licensed under GNU GPL v2 +# +# Grabber for mncast.com + +package MNCastGrabber; + +use GrabberBase; +@ISA = qw(GrabberBase); + +use LWP::Simple qw(!get); +use XML::Simple; +use HTML::TokeParser; +use Data::Dumper; + +use strict; + +sub new { + my $class = shift; + my $self = $class->SUPER::new(); + + $self->{'NAME'} = 'mncast'; + $self->{'PATTERNS'} = ['(http://www\.mncast\.com/\?(\d+))']; + + bless($self, $class); + $self->_prepare_parameters(); + + return $self; +} + +sub _parse { + my $self = shift; + my $url = shift; + my $pattern = shift; + my $content; + my $metadata = {}; + my $p; + my $t; + my @accum; + my $vid; + + $url =~ m|$pattern|; + $url = $1; + + $metadata->{'URL'} = $url; + $metadata->{'ID'} = $2; + $metadata->{'TYPE'} = 'video'; + $metadata->{'SOURCE'} = $self->{'NAME'}; + $metadata->{'TITLE'} = undef; + $metadata->{'DLURL'} = undef; + + # First, get a webpage containing the video ID + unless(defined($content = LWP::Simple::get(sprintf('http://www.mncast.com/player/index.asp?mnum=%s', $2)))) { + $self->error('Could not download player page'); + return undef; + } + + $p = HTML::TokeParser->new(\$content); + + while ($t = $p->get_tag('script')) { + if ($p->get_text() =~ m|strMID = \x22([^\x22]+)\x22|s) { + $vid = $1; + last; + } + } + + # Get the XML file containing the video metadata + unless(defined($content = LWP::Simple::get(sprintf('http://www.mncast.com/_MovieInfo_/_MovieInfoXML_Tag_.asp?movieID=%s&loginPNum=-1&player=0', $vid)))) { + $self->error('Could not download XML metadata'); + return undef; + } + + # There is no XML header in the data, which makes XML::Simple unhappy + $content = '' . $content; + $p = XML::Simple->new(); + + unless(defined($t = $p->XMLin($content, KeepRoot => 1))) { + $self->error('Could not parse XML metadata'); + return undef; + } + + $metadata->{'DLURL'} = sprintf('http://%s.flv', $t->{'moviedata'}->{'url'}); + $metadata->{'TITLE'} = $t->{'moviedata'}->{'title'}; + + unless(defined($metadata->{'DLURL'}) && defined($metadata->{'TITLE'})) { + $self->error('Could not extract download URL and title'); + return undef; + } + + return $metadata; +} + +1;