X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=videosite%2FYouTubeGrabber.pm;h=174f76d2dd94e7e5ecba3aee927cdafa70eb918b;hb=77303721994d561545a7a6457de9377292f7710f;hp=701a578a1e9b7d58f10d607b194628a50226ff0b;hpb=075b16a89d7b76ed8112c6fbce81f5517695fa9d;p=videosite.git diff --git a/videosite/YouTubeGrabber.pm b/videosite/YouTubeGrabber.pm index 701a578..174f76d 100644 --- a/videosite/YouTubeGrabber.pm +++ b/videosite/YouTubeGrabber.pm @@ -6,10 +6,10 @@ # download strategy revised using # http://www.kde-apps.org/content/show.php?content=41456 -package YouTubeGrabber; +package videosite::YouTubeGrabber; -use GrabberBase; -@ISA = qw(GrabberBase); +use videosite::GrabberBase; +@ISA = qw(videosite::GrabberBase); use LWP::UserAgent; use HTTP::Cookies; @@ -25,7 +25,14 @@ sub new { $self->{'NAME'} = 'youtube'; $self->{'PATTERNS'} = ['(http://(?:[-a-zA-Z0-9_.]+\.)*youtube.(?:com|de|co.uk)/watch\?(?:.+=.+&)*v=([-a-zA-Z0-9_]+))', '(http://(?:[-a-zA-Z0-9_.]+\.)*youtube.(?:com|de|co.uk)/v/([-a-zA-Z0-9_]+))']; - $self->{'_PARAMS'} = {'QUALITY' => ['normal', 'Quality of the video to download. normal = standard resolution flash video, high = higher resolution flash video, h264 = high resolution MPEG4 video'], 'USERNAME' => ['', 'Username to use for YouTube login'], 'PASSWORD' => ['', 'Password to use for YouTube login']}; + $self->{'_PARAMS'} = { + 'QUALITY' => ['normal', 'Quality of the video to download.', { + 'normal' => 'standard resolution flash video', + 'high' => 'higher resolution flash video', + 'h264' => 'high resolution MPEG4 video', + 'hd' => 'HD720 resolution'}], + 'USERNAME' => ['', 'Username to use for YouTube login'], + 'PASSWORD' => ['', 'Password to use for YouTube login']}; bless($self, $class); $self->_prepare_parameters(); @@ -63,6 +70,8 @@ sub _parse { $append = '&fmt=6'; } elsif ($quality eq 'h264') { $append = '&fmt=18'; + } elsif ($quality eq 'hd') { + $append = '&fmt=22'; } $videourl = sprintf('http://www.youtube.com/watch?v=%s%s', $2, $append); @@ -94,13 +103,13 @@ sub _parse { } elsif ('script' eq $tag->[0]) { $e = $p->get_text(); if ($e =~ m|/watch_fullscreen\?(.+)\x27|) { - my %args = map { split(/=/, $_, 2); } split(/&/, $1); + my %args = map { split(/=/, $_, 2); } split(/&(?!amp;)/, $1); $metadata->{'DLURL'} = sprintf('http://www.youtube.com/get_video.php?video_id=%s&t=%s%s', $metadata->{'ID'}, $args{'t'}, $append); $self->debug('URL found: %s', $metadata->{'DLURL'}); } } elsif ('div' eq $tag->[0]) { - if ('errorBox' eq $tag->[1]->{'class'}) { + if (exists($tag->[1]->{'class'}) and ('errorBox' eq $tag->[1]->{'class'})) { $self->error("Could not get video data for youtube %s: %s", $metadata->{'ID'}, $p->get_trimmed_text()); return undef;