[vlc-commits] Lua: support HTTPS and live for Dailymotion

Jean-Baptiste Kempf git at videolan.org
Mon Nov 17 09:34:17 CET 2014


vlc/vlc-2.2 | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Thu Nov 13 12:15:05 2014 +0100| [416d829bb5a02deaee5fa7054bcc04c14fea642a] | committer: Jean-Baptiste Kempf

Lua: support HTTPS and live for Dailymotion

Close #12753

Thanks to Ruito

(cherry picked from commit fcef78e37a5bffd23693e898ab5ff41a0d8a6d51)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=416d829bb5a02deaee5fa7054bcc04c14fea642a
---

 share/lua/playlist/dailymotion.lua |  114 +++++++++++++++++++++---------------
 1 file changed, 67 insertions(+), 47 deletions(-)

diff --git a/share/lua/playlist/dailymotion.lua b/share/lua/playlist/dailymotion.lua
index 847ca31..b985fea 100644
--- a/share/lua/playlist/dailymotion.lua
+++ b/share/lua/playlist/dailymotion.lua
@@ -29,68 +29,88 @@ function get_prefres()
             prefres = -1
         end
     end
+
     return prefres
 end
 
 -- Probe function.
 function probe()
-    return vlc.access == "http"
-        and string.match( vlc.path, "www.dailymotion.com/video" )
-end
+	if vlc.access ~= "http" and vlc.access ~= "https" then
+        return false
+    end
 
-function find( haystack, needle )
-    local _,_,ret = string.find( haystack, needle )
-    return ret
+    return ( string.match( vlc.path, "www.dailymotion.com/video" ) )
 end
 
 -- Parse function.
 function parse()
-    prefres = get_prefres()
-    while true
+	prefres = get_prefres()
+
+
+	while true
     do
         line = vlc.readline()
-        if not line then
-            break
-        end
-        if string.match( line, "sequence=")
-        then
-            line = vlc.strings.decode_uri(line):gsub("\\/", "/")
-
-            arturl = find( line, "\"videoPreviewURL\":\"([^\"]*)\"")
-            name = find( line, "\"videoTitle\":\"([^\"]*)\"")
-            if name then
-                name = string.gsub( name, "+", " " )
-            end
-            description = find( line, "\"videoDescription\":\"([^\"]*)\"")
-            if description then
-                description = string.gsub( description, "+", " " )
+        if not line then break end
+		if string.match( line, "<meta property=\"og:title\"" ) then
+			_,_,name = string.find( line, "content=\"(.-)\"" )
+			name = vlc.strings.resolve_xml_special_chars( name )
+		end
+		if string.match( line, "<meta name=\"description\"" ) then
+			_,_,description = string.find( line, "content=\"(.-)\"" )
+            if (description ~= nil) then
+                description = vlc.strings.resolve_xml_special_chars( description )
             end
+		end
+		if string.match( line, "<meta name=\"author\"" ) then
+			_,_,artist = string.find( line, "content=\"(.-)\"" )
+			artist = vlc.strings.resolve_xml_special_chars( artist )
+		end
+		if string.match( line, "<link rel=\"thumbnail\" type=\"image/jpeg\"" ) then
+			_,_,arturl = string.find( line, "href=\"(.-)\"" )
+		end
+    end
 
-            for _,param in ipairs({ "hd1080URL", "hd720URL", "hqURL", "sdURL", "video_url" }) do
-                path = string.match( line, "\""..param.."\":\"([^\"]*)\"" )
-                if path then
-                    path = vlc.strings.decode_uri(path)
-                    if prefres < 0 then
-                        break
-                    end
-                    height = string.match( path, "/cdn/%w+%-%d+x(%d+)/video/" )
-                    if not height then
-                        height = string.match( param, "(%d+)" )
-                    end
-                    if not height or tonumber(height) <= prefres then
-                        break
-                    end
-                end
-            end
+	page_embed = string.gsub(vlc.path, "dailymotion.com/video/", "dailymotion.com/embed/video/")
+	page_url = vlc.stream(vlc.access .. "://" .. page_embed )
+	if not page_url then return nil end
+    page = page_url:read( 65653 )
 
-            if not path then
-                break
-            end
 
-            return { { path = path; name = name; description = description; url = vlc.path; arturl = arturl } }
-        end
-    end
+	hd1080url = string.match( page, "\"stream_h264_hd1080_url\"%s*:%s*\"([^\"]*)\"")
+	hdurl = string.match( page, "\"stream_h264_hd_url\"%s*:%s*\"([^\"]*)\"")
+	hqurl = string.match( page, "\"stream_h264_hq_url\"%s*:%s*\"([^\"]*)\"")
+	baseurl = string.match( page, "\"stream_h264_url\"%s*:%s*\"([^\"]*)\"")
+	ldurl = string.match( page, "\"stream_h264_ld_url\"%s*:%s*\"([^\"]*)\"")
+	livehlsurl = string.match( page, "\"stream_live_hls_url\"%s*:%s*\"([^\"]*)\"")
+
+
+	arr_videos_urls = {}
+	if hd1080url then	table.insert(arr_videos_urls,hd1080url)	end
+	if hdurl then table.insert(arr_videos_urls,hdurl) end
+	if hqurl then	table.insert(arr_videos_urls,hqurl)	end
+	if baseurl then table.insert(arr_videos_urls,baseurl) end
+	if ldurl then table.insert(arr_videos_urls,baseurl) end
+
+
+	if livehlsurl then
+		return { { path = livehlsurl:gsub("\\/", "/"); name = name; description = description; url = vlc.path; arturl = arturl ; artist = artist} }
+	else
+		if table.getn(arr_videos_urls) > 0 then
+			for i=1 , table.getn(arr_videos_urls)  do
+				video_url_out = arr_videos_urls[i]:gsub("\\/", "/")
 
-    vlc.msg.err("Couldn't extract the video URL from dailymotion")
-    return { }
+				if prefres < 0 then
+					break
+				end
+				height = string.match( video_url_out, "/cdn/%w+%-%d+x(%d+)/video/" )
+				if not height or tonumber(height) <= prefres then
+					break
+				end
+			end
+			return { { path = video_url_out; name = name; description = description; url = vlc.path; arturl = arturl; artist = artist} }
+		else
+			vlc.msg.err("Couldn't extract the video URL from dailymotion")
+			return { }
+		end
+	end
 end



More information about the vlc-commits mailing list