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