class ResolveURL
Public Class Methods
resolve(url)
click to toggle source
# File lib/argh_ss/resolve_url.rb, line 3 def self.resolve(url) if url_redirects(url).is_a?(String) return url_redirects(url) elsif rss_redirect(url).is_a?(String) return rss_redirect(url) else return nil end end
rss_redirect(url)
click to toggle source
# File lib/argh_ss/resolve_url.rb, line 33 def self.rss_redirect(url) begin rss = RSS::Parser.parse(url) case rss.feed_type when 'rss' rss.channel.link when 'atom' rss.id.content end rescue nil end end
url_redirects(uri_str, limit = 10)
click to toggle source
# File lib/argh_ss/resolve_url.rb, line 13 def self.url_redirects(uri_str, limit = 10) begin raise ArgumentError, 'Too many redirects!' if limit == 0 response = Net::HTTP.get_response(URI(uri_str)) case response when Net::HTTPSuccess then uri_str when Net::HTTPRedirection then location = response['location'] url_redirects(location, limit - 1) else uri_str end rescue nil end end