sub new {
my $class = shift;
- my $self = $class->SUPER::new();
-
- $self->{'NAME'} = 'youtube';
- $self->{_SELFTESTURL} = 'http://www.youtube.com/watch?v=dMH0bHeiRNg';
- $self->{_SELFTESTTITLE} = 'Evolution of Dance - By Judson Laipply';
- $self->{'PATTERNS'} = ['(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/watch(?:_popup)?\?.*?v=([-a-zA-Z0-9_]+))',
- '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/watch\#\!v=([-a-zA-Z0-9_]+))',
- '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/v/([-a-zA-Z0-9_]+))',
- '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/embed/([-a-zA-Z0-9_]+))',
- '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/user/[[:alnum:]]+\?v=([-a-zA-Z0-9_]+))',
- '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/(?:user/)?[[:alnum:]]+#p/(?:\w+/)+\d+/([-a-zA-Z0-9_]+))',
- '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtu\.be/watch\?v=([-a-zA-Z0-9_]+))',
- '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtu\.be/([-a-zA-Z0-9_]+))',
- '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/user/\w+\?.*/([-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',
- 'hd' => 'HD720 resolution'}],
- 'USERNAME' => ['', 'Username to use for YouTube login'],
- 'PASSWORD' => ['', 'Password to use for YouTube login'],
- 'HTTPS' => [1, 'Whether to use HTTPS (if available) to connect to YouTube']};
-
- bless($self, $class);
- $self->_prepare_parameters();
-
- return $self;
+ my $self = $class->SUPER::new(
+ NAME => 'youtube',
+ _SELFTESTURL => 'http://www.youtube.com/watch?v=dMH0bHeiRNg',
+ _SELFTESTTITLE => 'Evolution of Dance - By Judson Laipply',
+ PATTERNS => ['(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/watch(?:_popup)?\?.*?v=([-a-zA-Z0-9_]+))',
+ '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/watch\#\!v=([-a-zA-Z0-9_]+))',
+ '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/v/([-a-zA-Z0-9_]+))',
+ '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/embed/([-a-zA-Z0-9_]+))',
+ '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/user/[[:alnum:]]+\?v=([-a-zA-Z0-9_]+))',
+ '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/(?:user/)?[[:alnum:]]+#p/(?:\w+/)+\d+/([-a-zA-Z0-9_]+))',
+ '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtu\.be/watch\?v=([-a-zA-Z0-9_]+))',
+ '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtu\.be/([-a-zA-Z0-9_]+))',
+ '(https?://(?:[-a-zA-Z0-9_.]+\.)*youtube\.(?:com|de|co.uk)/user/\w+\?.*/([-a-zA-Z0-9_]+))'],
+ _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'],
+ HTTPS => [1, 'Whether to use HTTPS (if available) to connect to YouTube']
+ },
+ @_,
+ );
+
+ return bless($self, $class);
}
sub _parse {
$e = $p->get_text();
$self->debug("Found script: %s", $e);
- if ($e =~ m|\x27PLAYER_CONFIG\x27:\s+(.+)(?:\}\);)?|) {
+ if ($e =~ m|ytplayer\.config\s*=\s*(.+);$|) {
my $args = $1;
$self->debug("Found PLAYER_CONFIG: %s", $args);
my $data = shift;
my $dataencoded = shift;
my @data;
+ my $h = {};
$data = $self->decode_hexurl($data) if $dataencoded;
# This will
# From each array entry, pick the itag and the url values and return that
# as a hash reference
- return { map { $_->{'itag'}, $_->{'url'} } @data };
+
+ foreach (@data) {
+ if (exists($_->{'sig'})) {
+ $h->{$_->{'itag'}} = sprintf('%s&signature=%s', $_->{'url'}, $_->{'sig'});
+ } else {
+ $h->{$_->{'itag'}} = $_->{'url'};
+ }
+ }
+
+ return $h;
}