vlc | branch: master | Pierre Ynard <[email protected]> | Wed Nov 11 16:14:21 
2015 +0100| [8074c41dc022bda1170fe4c4084bd37f17ddbba2] | committer: Pierre Ynard

youtube.lua: helper to extract signature descrambling javascript code

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

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

diff --git a/share/lua/playlist/youtube.lua b/share/lua/playlist/youtube.lua
index 7c0ee53..72abbb1 100644
--- a/share/lua/playlist/youtube.lua
+++ b/share/lua/playlist/youtube.lua
@@ -70,24 +70,33 @@ function buf_iter( s )
     return line
 end
 
+-- Helper to search and extract code from javascript stream
+function js_extract( js, pattern )
+    js.i = 0 -- Reset to beginning
+    for line in buf_iter, js do
+        local ex = string.match( line, pattern )
+        if ex then
+            return ex
+        end
+    end
+    vlc.msg.err( "Couldn't process youtube video URL, please check for updates 
to this script" )
+    return nil
+end
+
 -- Descramble the URL signature using the javascript code that does that
 -- in the web page
 function js_descramble( sig, js_url )
     -- Fetch javascript code
     local js = { stream = vlc.stream( js_url ), lines = {}, i = 0 }
     if not js.stream then
+        vlc.msg.err( "Couldn't process youtube video URL, please check for 
updates to this script" )
         return sig
     end
 
     -- Look for the descrambler function's name
-    local descrambler = nil
-    for line in buf_iter, js do
-        -- c&&a.set("signature",br(c));
-        descrambler = string.match( line, "%.set%(\"signature\",(.-)%(" )
-        if descrambler then break end
-    end
+    -- c&&a.set("signature",br(c));
+    local descrambler = js_extract( js, "%.set%(\"signature\",(.-)%(" )
     if not descrambler then
-        vlc.msg.err( "Couldn't process youtube video URL, please check for 
updates to this script" )
         return sig
     end
 
@@ -95,15 +104,9 @@ function js_descramble( sig, js_url )
     -- conveniently preceded by the definition of a helper object
     -- that it uses. Example:
     -- var Fo={TR:function(a){a.reverse()},TU:function(a,b){var 
c=a[0];a[0]=a[b%a.length];a[b]=c},sH:function(a,b){a.splice(0,b)}};function 
Go(a){a=a.split("");Fo.sH(a,2);Fo.TU(a,28);Fo.TU(a,44);Fo.TU(a,26);Fo.TU(a,40);Fo.TU(a,64);Fo.TR(a,26);Fo.sH(a,1);return
 a.join("")};
-    local transformations = nil
-    local rules = nil
-    js.i = 0 -- Reset to beginning
-    for line in buf_iter, js do
-        transformations, rules = string.match( line, "var ..={(.-)};function 
"..descrambler.."%([^)]*%){(.-)}" )
-        if transformations or rules then break end
-    end
+    local rules = js_extract( js, "function "..descrambler.."%([^)]*%){(.-)}" )
+    local transformations = js_extract( js, "var ..={(.-)};function 
"..descrambler.."%(" )
     if not transformations or not rules then
-        vlc.msg.err( "Couldn't process youtube video URL, please check for 
updates to this script" )
         return sig
     end
 

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to