Fix google video playlist script.
authorAntoine Cellerier <dionoea@videolan.org>
Thu, 4 Sep 2008 23:51:31 +0000 (01:51 +0200)
committerAntoine Cellerier <dionoea@videolan.org>
Thu, 4 Sep 2008 23:51:31 +0000 (01:51 +0200)
share/lua/playlist/googlevideo.lua

index 297dd21..42b031d 100644 (file)
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 --]]
 
+function get_url_param( url, name )
+    return string.gsub( url, "^.*[&?]"..name.."=([^&]*).*$", "%1" )
+end
+
 -- Probe function.
 function probe()
     return vlc.access == "http"
         and string.match( vlc.path, "video.google.com" ) 
-        and string.match( vlc.path, "videoplay" )
+        and ( string.match( vlc.path, "videoplay" )
+            or string.match( vlc.path, "videofeed" ) )
+end
+
+function get_arg( line, arg )
+    return string.gsub( line, "^.*"..arg.."=\"(.-)\".*$", "%1" )
 end
 
 -- Parse function.
 function parse()
-    while true
-    do
-        line = vlc.readline()
-        if not line then break end
-        if string.match( line, "^<title>" ) then
-            title = string.gsub( line, "<title>([^<]*).*", "%1" )
-        end
-        if string.match( line, "src=\"/googleplayer.swf" ) then
-            url = string.gsub( line, ".*videoUrl=([^&]*).*" ,"%1" )
-            arturl = string.gsub( line, ".*thumbnailUrl=([^\"]*).*", "%1" )
-            return { { path = vlc.strings.decode_uri(url), title = title, arturl = vlc.strings.decode_uri(arturl) } }
+    local docid = get_url_param( vlc.path, "docid" ) 
+    if string.match( vlc.path, "videoplay" ) then
+        return { { path = "http://video.google.com/videofeed?docid=" .. docid } }
+    elseif string.match( vlc.path, "videofeed" ) then
+        local path = nil
+        local arturl
+        local duration
+        local name
+        local description
+        while true
+        do
+            local line = vlc.readline()
+            if not line then break end
+            if string.match( line, "media:content.*flv" )
+            then
+                local s = string.gsub( line, "^.*<media:content(.-)/>.*$", "%1" )
+                path = vlc.strings.resolve_xml_special_chars(get_arg( s, "url" ))
+                duration = get_arg( s, "duration" )
+            end
+            if string.match( line, "media:thumbnail" )
+            then
+                local s = string.gsub( line, "^.*<media:thumbnail(.-)/>.*$", "%1" )
+                arturl = vlc.strings.resolve_xml_special_chars(get_arg( s, "url" ))
+                vlc.msg.err( tostring(arturl))
+            end
+            if string.match( line, "media:title" )
+            then
+                name = string.gsub( line, "^.*<media:title>(.-)</media:title>.*$", "%1" )
+            end
+            if string.match( line, "media:description" )
+            then
+                description = string.gsub( line, "^.*<media:description>(.-)</media:description>.*$", "%1" )
+            end
         end
+        return { { path = path; name = name; arturl = arturl; duration = duration; description = description } }
     end
 end