class Tsumamigui::Request

Constants

INTERVAL

Attributes

urls[R]

Public Class Methods

new(*urls) click to toggle source

@param [String] urls @param [Array<String>] urls

# File lib/tsumamigui/request.rb, line 22
def initialize(*urls)
  @urls = urls.flatten
  raise ArgumentError, 'No argument is specified' if @urls.empty?
end
run(*urls) click to toggle source

@param [String] urls @param [Array<String>] urls @return [Array<Tsumamigui::Response>] response instances

# File lib/tsumamigui/request.rb, line 11
def run(*urls)
  new(urls).exec_request
end

Public Instance Methods

exec_request() click to toggle source

Execute request and return responses @return [Array<Tsumamigui::Response>] response instances

# File lib/tsumamigui/request.rb, line 29
def exec_request
  @urls.map { |url| fetch(url) }
end

Private Instance Methods

fetch(url) click to toggle source

Fetch HTML from url and convert to response object @param [String] url @return [Tsumamigui::Response] response @raise [Tsumamigui::RequestError] rubocop:disable Security/Open

# File lib/tsumamigui/request.rb, line 40
def fetch(url)
  charset = nil
  sleep(sleep_interval)
  html = open(url, request_options) do |f|
    charset = f.charset
    f.read
  end

  Response.new(url, html, charset)
rescue => e
  raise RequestError, e.message
end
request_options() click to toggle source

@return [Hash] options

# File lib/tsumamigui/request.rb, line 60
def request_options
  site = 'https://github.com/obiyuta/tsumamigui'
  {'User-Agent' => "Tsumamigui/#{Tsumamigui::VERSION} (+#{site})"}
end
sleep_interval() click to toggle source

@return [Float] sec 1.0-3.0秒

# File lib/tsumamigui/request.rb, line 55
def sleep_interval
  Random.rand(INTERVAL)
end