]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
youtube: fixes for older XML parsers
authorDavid Gadling <dave@toasterwaffles.com>
Mon, 18 May 2009 22:40:38 +0000 (15:40 -0700)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Mon, 18 May 2009 22:46:16 +0000 (00:46 +0200)
REXML in (at least) Ruby 1.8.6 doesn't support the @attr xpath to get
an attribute value. Use the slightly more verbose way of doing it.

data/rbot/plugins/youtube.rb

index 6d3248d9a00716364a1ab19d060d593f33c75f3e..49d33726357ceb0fa52558534806be0262170576 100644 (file)
@@ -62,11 +62,11 @@ class YouTubePlugin < Plugin
       :title =>  (e.elements["media:group/media:title"].text rescue nil),
       :desc =>   (e.elements["media:group/media:description"].text rescue nil),
       :cat => (e.elements["media:group/media:category"].text rescue nil),
-      :seconds => (e.elements["media:group/yt:duration/@seconds"].value.to_i rescue nil),
-      :url => (e.elements["media:group/media:player/@url"].value rescue nil),
-      :rating => (("%s/%s" % [e.elements["gd:rating/@average"].value, e.elements["gd:rating/@max"].value]) rescue nil),
-      :views => (e.elements["yt:statistics/@viewCount"].value rescue nil),
-      :faves => (e.elements["yt:statistics/@favoriteCount"].value rescue nil)
+      :seconds => (e.elements["media:group/yt:duration/"].attributes["seconds"].to_i rescue nil),
+      :url => (e.elements["media:group/media:player/"].attributes["url"] rescue nil),
+      :rating => (("%s/%s" % [e.elements["gd:rating"].attributes["average"], e.elements["gd:rating/@max"].value]) rescue nil),
+      :views => (e.elements["yt:statistics"].attributes["viewCount"] rescue nil),
+      :faves => (e.elements["yt:statistics"].attributes["favoriteCount"] rescue nil)
     }
     if vid[:desc]
       vid[:desc].gsub!(/\s+/m, " ")
@@ -77,12 +77,12 @@ class YouTubePlugin < Plugin
       vid[:duration] = _("unknown duration")
     end
     e.elements.each("media:group/media:content") { |c|
-      if url = (c.elements["@url"].value rescue nil)
-        type = c.elements["@type"].value rescue nil
-        medium = c.elements["@medium"].value rescue nil
-        expression = c.elements["@expression"].value rescue nil
-        seconds = c.elements["@duration"].value.to_i rescue nil
-        fmt = case num_fmt = (c.elements["@yt:format"].value rescue nil)
+      if url = (c.attributes["url"] rescue nil)
+        type = c.attributes["type"] rescue nil
+        medium = c.attributes["medium"] rescue nil
+        expression = c.attributes["expression"] rescue nil
+        seconds = c.attributes["duration"].to_i rescue nil
+        fmt = case num_fmt = (c.attributes["yt:format"] rescue nil)
               when "1"
                 "h263+amr"
               when "5"