SVN: toys/rsget.pl/Video/YouTube
glen
glen at pld-linux.org
Sun Aug 21 20:26:19 CEST 2011
Author: glen
Date: Sun Aug 21 20:26:19 2011
New Revision: 12332
Modified:
toys/rsget.pl/Video/YouTube
Log:
- update for youtube site changes
Modified: toys/rsget.pl/Video/YouTube
==============================================================================
--- toys/rsget.pl/Video/YouTube (original)
+++ toys/rsget.pl/Video/YouTube Sun Aug 21 20:26:19 2011
@@ -2,6 +2,7 @@
# Video::YouTube - Video getter plugin for rsget.pl
#
# 2009-2011 (c) Przemysław Iskra <sparky at pld-linux.org>
+# 2011 (c) Elan Ruusamäe <glen at pld-linux.org>
# This program is free software,
# you may distribute it under GPL v2 or newer.
@@ -10,7 +11,7 @@
web: "http://www.youtube.com/"
uri: qr{youtube\.com/watch\?v=.*}
slots: max
-status: OK 2011-03-25
+status: OK 2011-08-21
unify:
s/#.*//;
@@ -28,7 +29,7 @@
sub best_format
{
- /"fmt_map"\s*:\s*"(.*?)"/ or m{&fmt_map=(\S+?)&}
+ /"fmt_list"\s*:\s*"(.*?)"/ or m{&fmt_map=(\S+?)&}
or return undef;
my %fmts = map { m{(\d+)\\?/}; $1 => $_ } split ",", uri_unescape( $1 );
@@ -40,6 +41,33 @@
return undef;
}
+ # decodes urls for formats
+ # tries to put url together as seen in net console in browser
+ sub get_uris
+ {
+ my ($map) = @_;
+ my @uri = map { { map { split /=/, $_, 2 } split /&/, uri_unescape($_) } } split /,/, $map;
+ my %uri = ();
+ foreach my $p (@uri) {
+ # will not be added again to url
+ my $url = $p->{url};
+ undef $p->{url};
+
+ # we need just first part
+ my @id = split /\\u0026/, $p->{id};
+ $p->{id} = $id[0];
+
+ # rest of the keys go to url
+ while (my($k, $v) = each %$p) {
+ $url .= '&' . $k . '=' . $v if $v;
+ }
+
+ # itag is format id
+ $uri{$p->{itag}} = $url;
+ }
+ return %uri;
+ }
+
start:
GET( $-{_uri} );
@@ -73,17 +101,14 @@
my $t = $1;
my $fmt = $-{fmt};
- my $fmtstr = $fmt ? "&fmt=$fmt->[0]" : "";
$fmt ||= [ 5, "flv", "vLQ" ];
$-{fname} = $name . "." . $fmt->[1];
- /"fmt_url_map": "(.*?)"/;
- my %uri = map /(\d+)\|(.*)/, split /,/, $1;
+ /"url_encoded_fmt_stream_map": "(.*?)"/;
+ my %uri = get_uris($1);
my $uri = $uri{ $fmt->[0] };
- $uri =~ s#\\u0026#&#g;
- $uri =~ s#\\/#/#g;
- $-{file_uri} = uri_unescape( $uri );
+ $-{file_uri} = $uri;
GET( $-{file_uri}, headonly => 1 );
More information about the pld-cvs-commit
mailing list