- Add QUALITY parameter to youtube grabber, this allows download of high
authorRalf Ertzinger <sun@ryoko.camperquake.de>
Mon, 3 Mar 2008 21:36:45 +0000 (22:36 +0100)
committerRalf Ertzinger <sun@ryoko.camperquake.de>
Mon, 3 Mar 2008 21:36:45 +0000 (22:36 +0100)
  quality H264 video files

videosite/YouTubeGrabber.pm

index 617b65d..1a47049 100644 (file)
@@ -25,7 +25,7 @@ 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'} = {'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'], 'USERNAME' => ['', 'Username to use for YouTube login'], 'PASSWORD' => ['', 'Password to use for YouTube login']};
 
     bless($self, $class);
     $self->_prepare_parameters();
@@ -46,6 +46,8 @@ sub _parse {
     my $ua = LWP::UserAgent->new('agent' => 'Mozilla/5.0');
     my $r;
     my $videourl;
+    my $quality = $self->_getval('QUALITY');
+    my $append = '';
 
     $url =~ m|$pattern|;
     $url = $1;
@@ -57,7 +59,13 @@ sub _parse {
     $metadata->{'TITLE'} = undef;
     $metadata->{'DLURL'} = undef;
 
-    $videourl = sprintf('http://www.youtube.com/watch?v=%s', $2);
+    if ($quality eq 'high') {
+        $append = '&fmt=6';
+    } elsif ($quality eq 'h264') {
+        $append = '&fmt=18';
+    }
+
+    $videourl = sprintf('http://www.youtube.com/watch?v=%s%s', $2, $append);
 
     unless(defined($r = $ua->get($videourl))) {
         $self->error('Could not download %s', $url);
@@ -87,8 +95,8 @@ sub _parse {
             $e = $p->get_text();
             if ($e =~ m|/watch_fullscreen\?(.+)\x27|) {
                 my %args = map { split(/=/, $_, 2); } split(/&/, $1);
-                $metadata->{'DLURL'} = sprintf('http://www.youtube.com/get_video.php?video_id=%s&t=%s',
-                        $metadata->{'ID'}, $args{'t'});
+                $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]) {