# 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;
$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();
$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);
} 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;