X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite%2FSevenloadGrabber.pm;h=c36070a62390ac44447515dfc60b96eb7a35fb5a;hb=0d9312d5cb6c5f0c3e8338e74a28e009fe0f7446;hp=83ba8f637623ebccdb616c6366b2bfc5375ee7ca;hpb=d738e03f4f2d70a41eba8b77177826d1ff62f42b;p=videosite.git diff --git a/videosite/SevenloadGrabber.pm b/videosite/SevenloadGrabber.pm index 83ba8f6..c36070a 100644 --- a/videosite/SevenloadGrabber.pm +++ b/videosite/SevenloadGrabber.pm @@ -1,25 +1,30 @@ -package SevenloadGrabber; +# (c) 2007 by Ralf Ertzinger +# licensed under GNU GPL v2 +# +# Grabber for sevenload.com/de -use GrabberBase; -@ISA = qw(GrabberBase); +package videosite::SevenloadGrabber; + +use videosite::GrabberBase; +@ISA = qw(videosite::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'} = 'sevenload'; - $self->{'PATTERNS'} = ['(http://(?:[-a-zA-Z0-9_.]+\.)*sevenload.com/videos/([^/]+)(?:/.*)*)']; - - bless($self, $class); - $self->_prepare_parameters(); - - return $self; + my $self = $class->SUPER::new( + NAME => 'sevenload', + _SELFTESTURL => 'http://www.sevenload.com/videos/twins-one-guitar-5122ed655a1cb35c41003c64', + _SELFTESTTITLE => 'Twins one guitar', + PATTERNS => ['(http://(?:[-a-zA-Z0-9_.]+\.)*sevenload\.com/videos/.+-([[:alnum:]]+))'], + @_, + ); + + return bless($self, $class); } sub _parse { @@ -28,7 +33,7 @@ sub _parse { my $pattern = shift; my $content; my $metadata = {}; - my $p = XML::Simple->new(); + my $p; my $t; $url =~ m|$pattern|; @@ -36,23 +41,40 @@ sub _parse { $metadata->{'URL'} = $url; $metadata->{'ID'} = $2; - $metadata->{'TYPE'} = 'sevenload'; + $metadata->{'TYPE'} = 'video'; + $metadata->{'SOURCE'} = $self->{'NAME'}; $metadata->{'TITLE'} = undef; $metadata->{'DLURL'} = undef; + # Get the HTML page for the title + unless(defined($content = $self->simple_get($url))) { + $self->error('Could not download HTM'); + return undef; + } + + $p = HTML::TokeParser->new(\$content); + while ($t = $p->get_tag('meta')) { + if ('meta' eq $t->[0]) { + if (exists($t->[1]->{'property'}) and ($t->[1]->{'property'} eq 'og:title')) { + $metadata->{'TITLE'} = $t->[1]->{'content'}; + } + } + } + # Get the XML file containing the video metadata - unless(defined($content = LWP::Simple::get(sprintf('http://api.sevenload.com/api/player/id/%s', $2)))) { + unless(defined($content = $self->simple_get(sprintf('http://player-services.sevenload.com/p/1/sp/1/playManifest/entryId/%s', $2)))) { $self->error('Could not download XML metadata'); return undef; } - unless(defined($t = $p->XMLin($content))) { + $p = XML::Simple->new(); + unless(defined($t = $p->XMLin($content, KeepRoot => 1))) { $self->error('Could not parse XML metadata'); return undef; } - $metadata->{'DLURL'} = $t->{'item'}->{'video'}->{'url'}; - $metadata->{'TITLE'} = $t->{'item'}->{'title'}; + # Loop through the video streams + $metadata->{'DLURL'} = $t->{'manifest'}->{'media'}->{'url'}; unless(defined($metadata->{'DLURL'}) && defined($metadata->{'TITLE'})) { $self->error('Could not extract download URL and title');