[vlc-commits] youtube.lua: split URL signature parameter parsing into reusable helper

Pierre Ynard git at videolan.org
Sun Dec 1 10:03:09 CET 2019


vlc/vlc-3.0 | branch: master | Pierre Ynard <linkfanel at yahoo.fr> | Sun Dec  1 09:27:34 2019 +0100| [a6713c2b18414c8979ed7848afc09a506ce7f9cb] | committer: Pierre Ynard

youtube.lua: split URL signature parameter parsing into reusable helper

(cherry picked from commit 8467ed616ba36859b0fc784f1458fa376ad7b7e1)
Signed-off-by: Pierre Ynard <linkfanel at yahoo.fr>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=a6713c2b18414c8979ed7848afc09a506ce7f9cb
---

 share/lua/playlist/youtube.lua | 62 ++++++++++++++++++++++--------------------
 1 file changed, 33 insertions(+), 29 deletions(-)

diff --git a/share/lua/playlist/youtube.lua b/share/lua/playlist/youtube.lua
index 984da72a4d..1f109b5e92 100644
--- a/share/lua/playlist/youtube.lua
+++ b/share/lua/playlist/youtube.lua
@@ -1,7 +1,7 @@
 --[[
  $Id$
 
- Copyright © 2007-2018 the VideoLAN team
+ Copyright © 2007-2019 the VideoLAN team
 
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
@@ -189,41 +189,45 @@ function js_descramble( sig, js_url )
     return sig
 end
 
+-- Parse and assemble video stream URL
+function stream_url( params, js_url )
+    local url = string.match( params, "url=([^&]+)" )
+    if not url then
+        return nil
+    end
+    url = vlc.strings.decode_uri( url )
+
+    -- Descramble any scrambled signature and append it to URL
+    local s = string.match( params, "s=([^&]+)" )
+    if s then
+        s = vlc.strings.decode_uri( s )
+        vlc.msg.dbg( "Found "..string.len( s ).."-character scrambled signature for youtube video URL, attempting to descramble... " )
+        if js_url then
+            s = js_descramble( s, js_url )
+        else
+            vlc.msg.err( "Couldn't process youtube video URL, please check for updates to this script" )
+        end
+
+        local sp = string.match( params, "sp=([^&]+)" )
+        if not sp then
+            vlc.msg.warn( "Couldn't extract signature parameters for youtube video URL, guessing" )
+            sp = "signature"
+        end
+        url = url.."&"..sp.."="..vlc.strings.encode_uri_component( s )
+    end
+
+    return url
+end
+
 -- Parse and pick our video URL
 function pick_url( url_map, fmt, js_url )
-    local path = nil
     for stream in string.gmatch( url_map, "[^,]+" ) do
         local itag = string.match( stream, "itag=(%d+)" )
         if not fmt or not itag or tonumber( itag ) == tonumber( fmt ) then
-            local url = string.match( stream, "url=([^&,]+)" )
-            if url then
-                url = vlc.strings.decode_uri( url )
-
-                -- Descramble any scrambled signature and append it to URL
-                local s = string.match( stream, "s=([^&,]+)" )
-                if s then
-                    s = vlc.strings.decode_uri( s )
-                    vlc.msg.dbg( "Found "..string.len( s ).."-character scrambled signature for youtube video URL, attempting to descramble... " )
-                    if js_url then
-                        s = js_descramble( s, js_url )
-                    else
-                        vlc.msg.err( "Couldn't process youtube video URL, please check for updates to this script" )
-                    end
-
-                    local sp = string.match( stream, "sp=([^&,]+)" )
-                    if not sp then
-                        vlc.msg.warn( "Couldn't extract signature parameters for youtube video URL, guessing" )
-                        sp = "signature"
-                    end
-                    url = url.."&"..sp.."="..vlc.strings.encode_uri_component( s )
-                end
-
-                path = url
-                break
-            end
+            return stream_url( stream, js_url )
         end
     end
-    return path
+    return nil
 end
 
 -- Probe function.



More information about the vlc-commits mailing list