X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fyoutube.rb;h=aede86e82e516d1970b25f1f20b2205518dbb0c9;hb=fc0c682cbf7a68b8ccd458ac776770fccf9e59f4;hp=947156bc4f40472b8447624a508094ba4e27bda6;hpb=78ccfb89403dc2fd2c06d4bbaca2129e2ba4c968;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git
diff --git a/data/rbot/plugins/youtube.rb b/data/rbot/plugins/youtube.rb
index 947156bc..aede86e8 100644
--- a/data/rbot/plugins/youtube.rb
+++ b/data/rbot/plugins/youtube.rb
@@ -12,7 +12,7 @@ class YouTubePlugin < Plugin
YOUTUBE_SEARCH = "http://gdata.youtube.com/feeds/api/videos?vq=%{words}&orderby=relevance"
YOUTUBE_VIDEO = "http://gdata.youtube.com/feeds/api/videos/%{id}"
- YOUTUBE_VIDEO_URLS = %r{youtube.com/(?:watch\?v=|v/)(.*?)(&.*)?$}
+ YOUTUBE_VIDEO_URLS = %r{youtube.com/(?:watch\?(?:.*&)?v=|v/)(.*?)(&.*)?$}
Config.register Config::IntegerValue.new('youtube.hits',
:default => 3,
@@ -27,7 +27,7 @@ class YouTubePlugin < Plugin
def youtube_filter(s)
loc = Utils.check_location(s, /youtube\.com/)
return nil unless loc
- if s[:text].include? '
'
+ if s[:text].include? '
]*>/.match(s[:text]).post_match.ircify_html
+ dm = /
]*>/.match(s[:text])
+ content ||= dm ? dm.post_match.ircify_html : '(no description found)'
return {:title => s[:text].ircify_html_title, :content => content}
end
@@ -61,35 +62,27 @@ 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, " ")
end
if secs = vid[:seconds]
- mins, secs = secs.divmod 60
- hours, mins = mins.divmod 60
- if hours > 0
- vid[:duration] = "%s:%s:%s" % [hours, mins, secs]
- elsif mins > 0
- vid[:duration] = "%s'%s\"" % [mins, secs]
- else
- vid[:duration] = "%ss" % [secs]
- end
+ vid[:duration] = Utils.secs_to_short(secs)
else
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"
@@ -109,15 +102,7 @@ class YouTubePlugin < Plugin
:format => fmt
}.delete_if { |k, v| v.nil? }
if seconds
- mins, secs = seconds.divmod 60
- hours, mins = mins.divmod 60
- if hours > 0
- vid[:formats].last[:duration] = "%s:%s:%s" % [hours, mins, secs]
- elsif mins > 0
- vid[:formats].last[:duration] = "%s'%s\"" % [mins, secs]
- else
- vid[:formats].last[:duration] = "%ss" % [secs]
- end
+ vid[:formats].last[:duration] = Utils.secs_to_short(seconds)
else
vid[:formats].last[:duration] = _("unknown duration")
end