X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Furl.rb;h=b04beb871be52588c98d45145b030eb1fe8d915d;hb=59dce593cbb73af44d26b143837154e786a2012a;hp=1e72a3a14f4a6be39e980576caa632253c9ed3ed;hpb=590379e94b8e4a17414cf6ed6895c35d3123cc2e;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/url.rb b/data/rbot/plugins/url.rb index 1e72a3a1..b04beb87 100644 --- a/data/rbot/plugins/url.rb +++ b/data/rbot/plugins/url.rb @@ -275,7 +275,7 @@ class UrlPlugin < Plugin :default => 100, :validate => Proc.new{|v| v > 0}, :desc => "Maximum number of urls to store. New urls replace oldest ones.") BotConfig.register BotConfigBooleanValue.new('url.display_link_info', - :default => true, + :default => false, :desc => "Get the title of any links pasted to the channel and display it (also tells if the link is broken or the site is down)") def initialize @@ -312,31 +312,31 @@ class UrlPlugin < Plugin title = title[0..255] if title.length > 255 "[Link Info] title: #{title}" end - - def read_data_from_response(response, amount) - - amount_read = 0 - chunks = [] - - response.read_body do |chunk| # read body now - - amount_read += chunk.length - - if amount_read > amount - amount_of_overflow = amount_read - amount - chunk = chunk[0...-amount_of_overflow] - end - - chunks << chunk - - break if amount_read >= amount - - end - - chunks.join('') - - end - + + def read_data_from_response(response, amount) + + amount_read = 0 + chunks = [] + + response.read_body do |chunk| # read body now + + amount_read += chunk.length + + if amount_read > amount + amount_of_overflow = amount_read - amount + chunk = chunk[0...-amount_of_overflow] + end + + chunks << chunk + + break if amount_read >= amount + + end + + chunks.join('') + + end + def get_title_for_url(uri_str, depth=10) # This god-awful mess is what the ruby http library has reduced me to. @@ -346,31 +346,33 @@ class UrlPlugin < Plugin raise "Error: Maximum redirects hit." end - puts "+ Getting #{uri_str}" + debug "+ Getting #{uri_str}" url = URI.parse(uri_str) return if url.scheme !~ /https?/ + + title = nil - puts "+ connecting to #{url.host}:#{url.port}" + debug "+ connecting to #{url.host}:#{url.port}" http = @bot.httputil.get_proxy(url) - title = http.start { |http| - url.path = '/' if url.path == '' - - http.request_get(url.path, "User-Agent" => "rbot-url_plugin/666.666") { |response| + http.start { |http| + url.path = '/' if url.path == '' + + http.request_get(url.path, "User-Agent" => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)") { |response| case response - when Net::HTTPRedirection then + when Net::HTTPRedirection, Net::HTTPMovedPermanently then # call self recursively if this is a redirect redirect_to = response['location'] || './' - puts "+ redirect location: #{redirect_to.inspect}" + debug "+ redirect location: #{redirect_to.inspect}" url = URI.join url.to_s, redirect_to - puts "+ whee, redirecting to #{url.to_s}!" - title = get_title_for_url(url.to_s, depth-1) + debug "+ whee, redirecting to #{url.to_s}!" + return get_title_for_url(url.to_s, depth-1) when Net::HTTPSuccess then if response['content-type'] =~ /^text\// # since the content is 'text/*' and is small enough to # be a webpage, retrieve the title from the page - puts "+ getting #{url.request_uri}" - data = read_data_from_response(response, 50000) + debug "+ getting #{url.request_uri}" + data = read_data_from_response(response, 50000) return get_title_from_html(data) else # content doesn't have title, just display info. @@ -381,10 +383,14 @@ class UrlPlugin < Plugin return "[Link Info] Error getting link (#{response.code} - #{response.message})" when Net::HTTPServerError then return "[Link Info] Error getting link (#{response.code} - #{response.message})" - end # end of "case response" - + else + return nil + end # end of "case response" + } # end of request block - } # end of http start block + } # end of http start block + + return title rescue SocketError => e return "[Link Info] Error connecting to site (#{e.message})"