Class: RailsAi::WebSearch::GoogleSearch

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_ai/web_search.rb

Instance Method Summary collapse

Constructor Details

#initialize(api_key: nil, search_engine_id: nil) ⇒ GoogleSearch

Returns a new instance of GoogleSearch.



12
13
14
15
16
# File 'lib/rails_ai/web_search.rb', line 12

def initialize(api_key: nil, search_engine_id: nil)
  @api_key = api_key || ENV['GOOGLE_SEARCH_API_KEY']
  @search_engine_id = search_engine_id || ENV['GOOGLE_SEARCH_ENGINE_ID']
  @base_url = 'https://www.googleapis.com/customsearch/v1'
end

Instance Method Details

#search(query, num_results: 5) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/rails_ai/web_search.rb', line 18

def search(query, num_results: 5)
  unless @api_key && !@api_key.empty?
    Rails.logger.warn "Google Search API key not configured, skipping web search" if defined?(Rails) && Rails.logger
    return []
  end
  
  unless @search_engine_id && !@search_engine_id.empty?
    Rails.logger.warn "Google Search Engine ID not configured, skipping web search" if defined?(Rails) && Rails.logger
    return []
  end
  
  uri = URI("#{@base_url}?key=#{@api_key}&cx=#{@search_engine_id}&q=#{URI.encode_www_form_component(query)}&num=#{num_results}")
  
  response = Net::HTTP.get_response(uri)
  
  if response.code == '200'
    data = JSON.parse(response.body)
    parse_results(data)
  else
    Rails.logger.error "Google Search API error: #{response.code} - #{response.body}" if defined?(Rails) && Rails.logger
    []
  end
rescue => e
  Rails.logger.error "Web search error: #{e.message}" if defined?(Rails) && Rails.logger
  []
end