[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