Class: Html2rss::RequestService::BotasaurusContract::Error

Inherits:
Object
  • Object
show all
Defined in:
lib/html2rss/request_service/botasaurus_contract.rb

Overview

Parsed OpenAPI ScrapeError envelope (HTTP 400/403/422/502/504).

Instance Method Summary collapse

Constructor Details

#initialize(payload:, transport_status:) ⇒ Error

Returns a new instance of Error.

Parameters:

  • payload (Hash{String => Object})

    parsed ScrapeError object

  • transport_status (Integer)

    HTTP status returned by Botasaurus



165
166
167
168
169
170
171
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 165

def initialize(payload:, transport_status:)
  @payload = payload
  @transport_status = transport_status
  error
  error_category
  diagnostics
end

Instance Method Details

#challenge_block?Boolean

Returns true when upstream classified request as challenge blocked.

Returns:

  • (Boolean)

    true when upstream classified request as challenge blocked



174
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 174

def challenge_block? = error_category == 'challenge_block'

#challenge_messageString

Returns normalized challenge error message.

Returns:

  • (String)

    normalized challenge error message



182
183
184
185
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 182

def challenge_message
  [error, challenge_marker].find { |value| value.is_a?(String) && !value.empty? } ||
    'Botasaurus challenge block detected.'
end

#failure_messageString

Returns actionable upstream failure summary.

Returns:

  • (String)

    actionable upstream failure summary



188
189
190
191
192
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 188

def failure_message
  details = ["status=#{transport_status}", "error_category=#{error_category}", "error=#{error}"]
  details << "request_id=#{request_id}" if request_id
  "Botasaurus scrape failed (#{details.join(', ')})."
end

#timeout?Boolean

Returns true when the scrape envelope reports a timeout.

Returns:

  • (Boolean)

    true when the scrape envelope reports a timeout



177
178
179
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 177

def timeout?
  transport_status == 504 || error_category == 'timeout'
end