X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fyoutube.rb;h=abda9ca311fa88e5037f220c680a1583cd22a4fb;hb=7b792bea7a644309623d67b5d49528ae13da3e7b;hp=40922b7d39f5ddb3ec3d83cefd5bbadff6e33cf7;hpb=8f9e33c59a02f265b11b0c418fe58d5c7ddf21e5;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/youtube.rb b/data/rbot/plugins/youtube.rb index 40922b7d..abda9ca3 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, @@ -24,10 +24,14 @@ class YouTubePlugin < Plugin :default => true, :desc => "Should the bot display alternative URLs (swf, rstp) for YouTube videos?") + def help(plugin, topic="") + 'youtube [search] : searches youtube videos | youtube info : returns description and video links' + end + def youtube_filter(s) loc = Utils.check_location(s, /youtube\.com/) return nil unless loc - if s[:text].include? '
' + if s[:text].include? ' (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 +81,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" @@ -116,6 +120,7 @@ class YouTubePlugin < Plugin vids = [] title = nil begin +debug s.inspect doc = REXML::Document.new(s[:text]) title = doc.elements["feed/title"].text doc.elements.each("*/entry") { |e| @@ -148,8 +153,9 @@ class YouTubePlugin < Plugin debug id url = YOUTUBE_VIDEO % {:id => id} - resp, xml = @bot.httputil.get_response(url) - unless Net::HTTPSuccess === resp + resp = @bot.httputil.get_response(url) + xml = resp.body + unless resp.kind_of? Net::HTTPSuccess debug("error looking for movie %{id} on youtube: %{e}" % {:id => id, :e => xml}) return nil end @@ -198,8 +204,9 @@ class YouTubePlugin < Plugin what = params[:words].to_s searchfor = CGI.escape what url = YOUTUBE_SEARCH % {:words => searchfor} - resp, xml = @bot.httputil.get_response(url) - unless Net::HTTPSuccess === resp + resp = @bot.httputil.get_response(url) + xml = resp.body + unless resp.kind_of? Net::HTTPSuccess m.reply(_("error looking for %{what} on youtube: %{e}") % {:what => what, :e => xml}) return end @@ -235,3 +242,4 @@ plugin = YouTubePlugin.new plugin.map "youtube info :movie", :action => 'info', :threaded => true plugin.map "youtube [search] *words", :action => 'search', :threaded => true +