]> git.sesse.net Git - vlc/commitdiff
Lua: support HTTPS and live for Dailymotion
authorJean-Baptiste Kempf <jb@videolan.org>
Thu, 13 Nov 2014 11:15:05 +0000 (12:15 +0100)
committerJean-Baptiste Kempf <jb@videolan.org>
Thu, 13 Nov 2014 11:15:40 +0000 (12:15 +0100)
Close #12753

Thanks to Ruito

share/lua/playlist/dailymotion.lua

index 847ca31d4046272a1afa59300ac88bcd9716c8b4..b985fea90498773e616334b079dca127abb406b8 100644 (file)
@@ -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