use HTTP::Cookies;
use HTML::TokeParser;
use Data::Dumper;
+use List::Util;
use strict;
my $r;
my $videourl;
my $quality = $self->_getval('QUALITY');
- my $append = '';
+ my %preflist = (
+ 'hd' => [22, 35, 18, 34, 6, 5],
+ 'h264' => [18, 34, 22, 35, 6, 5],
+ 'high' => [34, 35, 18, 22, 6, 5],
+ 'normal' => [6, 5, 34, 35, 18, 22]);
+ my $preflist;
$url =~ m|$pattern|;
$url = $1;
$metadata->{'TITLE'} = undef;
$metadata->{'DLURL'} = undef;
- if ($quality eq 'high') {
- $append = '&fmt=6';
- } elsif ($quality eq 'h264') {
- $append = '&fmt=18';
- } elsif ($quality eq 'hd') {
- $append = '&fmt=22';
- }
+ $preflist = $preflist{$quality};
+ $self->debug("Quality: %s, preflist: [%s]", $quality, join(", ", @{$preflist}));
- $videourl = sprintf('http://www.youtube.com/watch?v=%s%s', $2, $append);
+ $videourl = sprintf('http://www.youtube.com/watch?v=%s', $2);
unless(defined($r = $ua->get($videourl))) {
$self->error('Could not download %s', $url);
$self->debug("Found fmt_url_map: %s", $1);
my $urls = $1;
my @urls;
+ my %urls;
$urls =~ s/%(..)/chr(hex($1))/ge;
- @urls = split(/\|/, $urls);
-
- if ($urls[0] == 5) {
- $metadata->{'DLURL'} = $urls[1];
- } elsif ($urls[0] == 18) {
- $metadata->{'DLURL'} = $urls[3];
- } elsif ($urls[0] == 34) {
- $metadata->{'DLURL'} = $urls[2];
- } else {
- $self->error("Unknown video type in fmt_url_map: %s", $urls[0]);
- next;
+ @urls = split(/,/, $urls);
+ foreach (@urls) {
+ my ($tag, $url) = split(/\|/);
+ if ($tag == 35) {
+ $self->debug('Found flv,h264,large: %s', $url);
+ } elsif ($tag == 34) {
+ $self->debug('Found flv,h264: %s', $url);
+ } elsif ($tag == 22) {
+ $self->debug('Found mp4,h264,large: %s', $url);
+ } elsif ($tag == 18) {
+ $self->debug('Found mp4,h264: %s', $url);
+ } elsif ($tag == 5) {
+ $self->debug('Found flv,flv: %s', $url);
+ } else {
+ $self->error('Unknown tag %s: %s', $tag, $url);
+ next;
+ }
+ $urls{$tag} = $url;
+ }
+
+ foreach (@{$preflist}) {
+ if (exists($urls{$_})) {
+ $self->debug("Selected URL with quality level %s", $_);
+ $metadata->{'DLURL'} = $urls{$_};
+ last;
+ }
}
+
$self->debug('URL found: %s', $metadata->{'DLURL'});
}
} elsif ('div' eq $tag->[0]) {