vlc/vlc-2.2 | branch: master | Jean-Baptiste Kempf <[email protected]> | 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 <[email protected]> > 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 _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
