Hi,

General improvements of the tool, previous patch integrated upstream:

http://cpansearch.perl.org/src/XAICRON/WWW-YouTube-Download-0.54/Changes

also, new patch for better signatures support, sent upstream.




Index: Makefile
===================================================================
RCS file: /cvs/ports/www/p5-WWW-YouTube-Download/Makefile,v
retrieving revision 1.10
diff -u -r1.10 Makefile
--- Makefile    27 Apr 2013 14:29:08 -0000      1.10
+++ Makefile    8 Jul 2013 01:10:10 -0000
@@ -3,7 +3,7 @@
 COMMENT =      simple YouTube interface for downloading videos
 
 MODULES =      cpan
-DISTNAME =     WWW-YouTube-Download-0.50
+DISTNAME =     WWW-YouTube-Download-0.54
 CATEGORIES =   www
 
 MAINTAINER =   Mikolaj Kucharski <miko...@kucharski.name>
Index: distinfo
===================================================================
RCS file: /cvs/ports/www/p5-WWW-YouTube-Download/distinfo,v
retrieving revision 1.8
diff -u -r1.8 distinfo
--- distinfo    27 Apr 2013 14:29:08 -0000      1.8
+++ distinfo    8 Jul 2013 01:10:10 -0000
@@ -1,2 +1,2 @@
-SHA256 (WWW-YouTube-Download-0.50.tar.gz) = 
n1w2E5c7wSdkGv7eroQcctZCPpXTzS8F9g0wqqYu9yE=
-SIZE (WWW-YouTube-Download-0.50.tar.gz) = 19826
+SHA256 (WWW-YouTube-Download-0.54.tar.gz) = 
eq816OYty7oukfZZuw9XzqU6Ld2ubsIvx2czJYK34OM=
+SIZE (WWW-YouTube-Download-0.54.tar.gz) = 21556
Index: patches/patch-lib_WWW_YouTube_Download_pm
===================================================================
RCS file: 
/cvs/ports/www/p5-WWW-YouTube-Download/patches/patch-lib_WWW_YouTube_Download_pm,v
retrieving revision 1.5
diff -u -r1.5 patch-lib_WWW_YouTube_Download_pm
--- patches/patch-lib_WWW_YouTube_Download_pm   27 Apr 2013 14:29:09 -0000      
1.5
+++ patches/patch-lib_WWW_YouTube_Download_pm   8 Jul 2013 01:10:10 -0000
@@ -1,15 +1,75 @@
-$OpenBSD: patch-lib_WWW_YouTube_Download_pm,v 1.5 2013/04/27 14:29:09 sthen 
Exp $
+$OpenBSD$
 
-- support one more url type
+- better encoded signatures support, based on yt-dl.org
 
---- lib/WWW/YouTube/Download.pm.orig   Fri Apr 19 18:50:43 2013
-+++ lib/WWW/YouTube/Download.pm        Sat Apr 27 12:33:16 2013
-@@ -271,7 +271,7 @@ sub _suffix {
+--- lib/WWW/YouTube/Download.pm.orig   Fri Jul  5 19:29:59 2013
++++ lib/WWW/YouTube/Download.pm        Mon Jul  8 01:45:43 2013
+@@ -244,25 +244,43 @@ sub _parse_fmt_map {
+     return $fmt_map;
+ }
  
- sub _video_id {
-     my $stuff = shift;
--    if ($stuff =~ m{/.*?[?&;!]v=([^&#?=/;]+)}) {
-+    if ($stuff =~ m{/.*?[?&;!](?:v|video_id)=([^&#?=/;]+)}) {
-         return $1;
+-sub _swapelement {
+-    my ($pos, @list) = @_;
+-    my $first = $list[0];
+-    my $other = $list[$pos % scalar(@list)];
+-    $list[0] = $other;
+-    $list[$pos] = $first;
+-    return @list;
++sub _sigdecode {
++    my @s = @_;
++
++    # based on youtube_dl/extractor/youtube.py from yt-dl.org
++    if (@s == 88) {
++        return ($s[48], reverse(@s[68..81]), $s[82], reverse(@s[63..66]), 
$s[85],
++                reverse(@s[49..61]), $s[67], reverse(@s[13..47]), $s[3], 
++                reverse(@s[4..11]), $s[2], $s[12]);
++    } elsif (@s == 87) {
++        return ($s[62], reverse(@s[63..82]), $s[83], reverse(@s[53..61]), 
$s[0],
++                reverse(@s[3..51]));
++    } elsif (@s == 86) {
++        return (@s[2..62], $s[82], @s[64..81], $s[63]);
++    } elsif (@s == 85) {
++       return ($s[76], reverse(@s[77..82]), $s[83], reverse(@s[61..75]), 
$s[0],
++               reverse(@s[51..59]), $s[1], reverse(@s[3..49]));
++    } elsif (@s == 84) {
++        return (reverse(@s[37..83]), $s[2], reverse(@s[27..35]), $s[3],
++                reverse(@s[4..25]), $s[26]);
++    } elsif (@s == 83) {
++        return ($s[52], reverse(@s[56..81]), $s[2], reverse(@s[53..54]), 
$s[82],
++                reverse(@s[37..51]), $s[55], reverse(@s[3..35]), $s[36]);
++    } elsif (@s == 82) {
++        return ($s[36], reverse(@s[68..79]), $s[81], reverse(@s[41..66]), 
$s[33],
++                reverse(@s[37..39]), $s[40], $s[35], $s[0], $s[67],
++                reverse(@s[1..32]), $s[34]);
++    }
++
++    return ();    # fail
+ }
+ 
+-# taken from https://gist.github.com/anonymous/e40cb4a1ba3c71f16c05
+-sub _sigdecode {
++sub _getsig {
+     my $sig = shift;
+-    Carp::croak 'Unable to find signature.' unless $sig;
+-    my @sig = split(//, $sig);
+-    @sig = reverse(_swapelement(52, @sig));
+-    @sig = @sig[3..$#sig];
+-    @sig = reverse(_swapelement(21, @sig));
+-    @sig = @sig[3..$#sig];
+-    return join('', reverse(@sig));
++    croak 'Unable to find signature' unless $sig;
++    my @sig = _sigdecode(split(//, $sig));
++    croak "Unable to decode signature $sig" unless @sig;
++    return join('', @sig);
+ }
+ 
+ sub _parse_stream_map {
+@@ -272,7 +290,7 @@ sub _parse_stream_map {
+         my $uri = URI->new;
+         $uri->query($stuff);
+         my $query = +{ $uri->query_form };
+-        my $sig = $query->{sig} || _sigdecode($query->{s});
++        my $sig = $query->{sig} || _getsig($query->{s});
+         my $url = $query->{url};
+         $fmt_url_map->{$query->{itag}} = $url.'&signature='.$sig;
      }
-     elsif ($stuff =~ m{/(?:e|v|embed)/([^&#?=/;]+)}) {



-- 
best regards
q#

Reply via email to