Class: Mihari::Clients::ZoomEye

Inherits:
Base
  • Object
show all
Defined in:
lib/mihari/clients/zoomeye.rb

Overview

ZoomEye API client

Constant Summary collapse

PAGE_SIZE =
10

Instance Attribute Summary collapse

Attributes inherited from Base

#base_url, #headers, #pagination_interval, #timeout

Instance Method Summary collapse

Constructor Details

#initialize(base_url = "https://api.zoomeye.ai", api_key:, headers: {}, pagination_interval: Mihari.config.pagination_interval, timeout: nil) ⇒ ZoomEye

Returns a new instance of ZoomEye.

Raises:

  • (ArgumentError)


22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/mihari/clients/zoomeye.rb', line 22

def initialize(
  base_url = "https://api.zoomeye.ai",
  api_key:,
  headers: {},
  pagination_interval: Mihari.config.pagination_interval,
  timeout: nil
)
  raise(ArgumentError, "api_key is required") unless api_key

  headers["api-key"] = api_key
  super(base_url, headers:, pagination_interval:, timeout:)
end

Instance Attribute Details

#api_keyObject (readonly)

Returns the value of attribute api_key.



13
14
15
# File 'lib/mihari/clients/zoomeye.rb', line 13

def api_key
  @api_key
end

Instance Method Details

#http::HTTP::Client



38
39
40
# File 'lib/mihari/clients/zoomeye.rb', line 38

def http
  @http ||= HTTP::Factory.build(headers:, timeout:, raise_exception: false)
end

#search(query, page: nil) ⇒ Structs::ZoomEye::Response

Search



51
52
53
54
55
# File 'lib/mihari/clients/zoomeye.rb', line 51

def search(query, page: nil)
  qbase64 = Base64.urlsafe_encode64(query)
  json = {qbase64:, page:}.compact
  Structs::ZoomEye::Response.from_dynamic! post_json("/v2/search", json:)
end

#search_with_pagination(query, pagination_limit: Mihari.config.pagination_limit) ⇒ Enumerable<Structs::ZoomEye::Response>



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/mihari/clients/zoomeye.rb', line 63

def search_with_pagination(query, pagination_limit: Mihari.config.pagination_limit)
  Enumerator.new do |y|
    (1..pagination_limit).each do |page|
      res = search(query, page:)

      break if res.nil?

      y.yield res

      break if res.total <= page * PAGE_SIZE

      sleep_pagination_interval
    end
  end
end