class WebStat::FinalRedirectUrl

Public Class Methods

final_redirect_url(url, options={}) click to toggle source
# File lib/web_stat/final_redirect_url.rb, line 7
def final_redirect_url(url, options={})
  final_url = ''
  if is_valid_url?(url)
    begin
      redirect_lookup_depth = options[:depth].to_i > 0 ? options[:depth].to_i : 10
      response_uri = get_final_redirect_url(url, redirect_lookup_depth)
      final_url =  url_string_from_uri(response_uri)
    rescue => e
      # nothing
    end
  end
  final_url
end

Private Class Methods

get_final_redirect_url(url, limit = 10) click to toggle source
# File lib/web_stat/final_redirect_url.rb, line 25
def get_final_redirect_url(url, limit = 10)
  return url if limit <= 0
  uri = URI.parse(url)
  response = ::Net::HTTP.get_response(uri)
  if response.class == Net::HTTPOK
    if WebStat::Configure.get["use_chromedirver"]
      return URI.parse(WebStat::WebDriverHelper.get_last_url(uri))
    else
      return URI.parse(uri)
    end
  else
    redirect_location = response['location']
    location_uri = URI.parse(redirect_location)
    if location_uri.host.nil?
      redirect_location = uri.scheme + '://' + uri.host + redirect_location
    end
    warn "redirected to #{redirect_location}"
    get_final_redirect_url(redirect_location, limit - 1)
  end
end
is_valid_url?(url) click to toggle source
# File lib/web_stat/final_redirect_url.rb, line 22
def is_valid_url?(url)
  url.to_s.match? URI::regexp(['http', 'https'])
end
url_string_from_uri(uri) click to toggle source
# File lib/web_stat/final_redirect_url.rb, line 45
def url_string_from_uri(uri)
  url_str = "#{uri.scheme}://#{uri.host}#{uri.request_uri}"
  if uri.fragment
    url_str = url_str + "##{uri.fragment}"
  end
  url_str
end