Sha256: ee0b6313bab546f7ce8b376def5ef9d8c16ce4f0de1fe5c64082df2de3bb738b

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

# Get link status
module AwesomeBot
  require 'net/http'
  require 'openssl'
  require 'uri'

  require 'parallel'

  STATUS_ERROR = -1

  class << self
    def net_status(url, head, timeout)
      uri = URI.parse url
      timeout = 60 if timeout.nil?
      Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https', :open_timeout => timeout) do |http|
       request = Net::HTTP::Get.new uri
       response = http.request request
       return response
     end
    end

    def status_is_redirected?(status)
      (status > 299) && (status < 400)
    end

    def statuses(links, threads, timeout, head=false)
      statuses = []
      Parallel.each(links, in_threads: threads) do |u|
        begin
          response = net_status u, head, timeout
          status = response.code.to_i
          status = 200 if status.nil?
          headers = {}
          response.each { |k, v| headers[k] = v }
          error = nil # nil (success)
        rescue => e
          status = STATUS_ERROR
          headers = {}
          error = e
        end

        yield status, u
        statuses.push('url' => u, 'status' => status, 'error' => error, 'headers' => headers)
      end # Parallel

      statuses
    end
  end # class
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
awesome_bot-1.8.0 lib/awesome_bot/statuses.rb