[vlc-commits] commit: fixes dailymotion parser ( Rafaël Carré )

git at videolan.org git at videolan.org
Mon Jul 12 00:27:42 CEST 2010


vlc | branch: master | Rafaël Carré <rafael.carre at gmail.com> | Mon Jul 12 00:26:00 2010 +0200| [e778af8bb60ba6a67c47e8b30c175874726414ee] | committer: Rafaël Carré 

fixes dailymotion parser

get the SD video (in flv), the HD and HQ videos (in mp4) causes seeking
back and forth and the video is unplayable

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

 share/lua/playlist/dailymotion.lua |   79 ++++++++++++++----------------------
 1 files changed, 30 insertions(+), 49 deletions(-)

diff --git a/share/lua/playlist/dailymotion.lua b/share/lua/playlist/dailymotion.lua
index fd88028..5a69d86 100644
--- a/share/lua/playlist/dailymotion.lua
+++ b/share/lua/playlist/dailymotion.lua
@@ -24,7 +24,7 @@
 -- Probe function.
 function probe()
     return vlc.access == "http"
-        and string.match( vlc.path, "dailymotion." ) 
+        and string.match( vlc.path, "dailymotion." )
         and string.match( vlc.peek( 2048 ), "<!DOCTYPE.*video_type" )
 end
 
@@ -36,58 +36,39 @@ end
 -- Parse function.
 function parse()
     while true
-    do 
+    do
         line = vlc.readline()
-        if not line then break end
-        if string.match( line, "param name=\"flashvars\" value=\".*video=" )
+        if not line
         then
-            arturl = find( line, "param name=\"flashvars\" value=\".*preview=([^&]*)" )
-            videos = vlc.strings.decode_uri( find( line, "param name=\"flashvars\" value=\".*video=([^&]*)" ) )
-       --[[ we get a list of different streams available, at various codecs
-            and resolutions:
-            /A@@spark||/B@@spark-mini||/C@@vp6-hd||/D@@vp6||/E@@h264
-            Not everybody can decode HD, not everybody has a 80x60 screen,
-            H264/MP4 is buggy , so i choose VP6 as the highest priority
-
-            Ideally, VLC would propose the different streams available, codecs
-            and resolutions (the resolutions are part of the URL)
-
-            For now we just built a list of preferred codecs : lowest value
-            means highest priority
-         ]]
-            local pref = { ["vp6"]=0, ["spark"]=1, ["h264"]=2, ["vp6-hd"]=3, ["spark-mini"]=4 }
-            local available = {}
-            for n in string.gmatch(videos, "[^|]+") do
-                i = string.find(n, "@@")
-                if i then
-                    available[string.sub(n, i+2)] = string.sub(n, 0, i-1)
-                end
-            end
-            local score = 666
-            local bestcodec
-            for codec,_ in pairs(available) do
-                if pref[codec] == nil then
-                    vlc.msg.warn( "Unknown codec: " .. codec )
-                    pref[codec] = 42 -- try the 1st unknown codec if other fail
-                end
-                if pref[codec] < score then
-                    bestcodec = codec
-                    score = pref[codec]
-                end
-            end
-            if bestcodec then
-                path = "http://dailymotion.com" .. available[bestcodec]
-            end
-        end
-        if string.match( line, "<meta name=\"title\"" )
-        then
-            name = vlc.strings.resolve_xml_special_chars( find( line, "name=\"title\" content=\"(.-)\"" ) )
+            vlc.msg.err("Couldn't extract the video URL from dailymotion")
+            return { }
         end
-        if string.match( line, "<meta name=\"description\"" )
+        if string.match( line, "\"sequence\",")
         then
-            description = vlc.strings.resolve_xml_special_chars( vlc.strings.resolve_xml_special_chars( find( line, "name=\"description\" lang=\".-\" content=\"(.-)\"" ) ) )
+            line = vlc.strings.decode_uri(line):gsub("\\/", "/")
+
+            arturl = find( line, "\"videoPreviewURL\":\"([^\"]*)\"")
+            name = find( line, "\"videoTitle\":\"([^\"]*)\"")
+            description = find( line, "\"videoDescription\":\"([^\"]*)\"")
+
+           --[[ we get a list of different streams available, at various codecs
+                and resolutions:
+
+                Ideally, VLC would propose the different streams available,
+                codecs and resolutions (the resolutions are part of the URL)
+
+                For now we just built a list of preferred codecs : lowest value
+                means highest priority
+             ]]--
+
+            -- FIXME: the hd/hq versions (in mp4) cause a lot of seeks,
+            -- for now we only get the sd (in flv) URL
+
+            -- if not path then path = find( line, "\"hqURL\":\"([^\"]*)\"") end
+            -- if not path then path = find( line, "\"hdURL\":\"([^\"]*)\"") end
+            if not path then path = find( line, "\"sdURL\":\"([^\"]*)\"") end
+
+            return { { path = path; name = name; description = description; url = vlc.path; arturl = arturl } }
         end
-        if path and name and description and arturl then break end
     end
-    return { { path = path; name = name; description = description; url = vlc.path; arturl = arturl } }
 end



More information about the vlc-commits mailing list