class Google::Csene::Client

Constants

AUDIENCE
SCOPE
TOKEN_CREDENTIAL_URI

Public Class Methods

new(application_name: 'google-csene', application_version: '1.0', api_key:, cse_id:) click to toggle source
# File lib/google/csene/client.rb, line 8
def initialize(application_name: 'google-csene',
               application_version: '1.0',
               api_key:,
               cse_id:)
  @application_name = application_name
  @application_version = application_version
  @api_key = api_key
  @cse_id = cse_id
end

Public Instance Methods

client() click to toggle source
# File lib/google/csene/client.rb, line 18
def client
  @client ||= Google::APIClient.new(
    application_name: @application_name,
    application_version: @application_version,
    authorization: nil
  )
end
highest_search_rank_site_url(query) click to toggle source
# File lib/google/csene/client.rb, line 53
def highest_search_rank_site_url(query)
  result = client.execute(
    service.cse.list,
    default_options.merge(
      'start' => 1,
      'q' => query
    )
  )

  return nil if result.data.items.empty?
  result.data.items.first.display_link
end
index_count(site) click to toggle source
# File lib/google/csene/client.rb, line 66
def index_count(site)
  result = client.execute(
    service.cse.list,
    default_options.merge(
      'q' => "site:#{site}"
    )
  )

  result.data.search_information.total_results
end
search_rank(query, link, page = 1) click to toggle source
# File lib/google/csene/client.rb, line 26
def search_rank(query, link, page = 1)
  start = (page - 1) * 10 + 1
  result = client.execute(
    service.cse.list,
    default_options.merge(
      'start' => start,
      'q' => query
    )
  )
  queries = result.data.queries
  has_next_page = !queries.nil? && queries['nextPage'].count > 0
  has_result = result.data.items.count > 0

  return 0 unless has_result

  result.data.items.each_with_index do |item, i|
    # puts "start: #{start}, i: #{i} rank: #{start + i}, query: #{query}, link: #{item.link}"
    if item.link =~ link
      return start + i
    elsif item.link == link
      return start + i
    end
  end

  search_rank(query, link, page + 1) if has_next_page
end

Private Instance Methods

default_options() click to toggle source
# File lib/google/csene/client.rb, line 91
def default_options
  {
    'key' => @api_key,
    'cx' => @cse_id
  }
end
service() click to toggle source
# File lib/google/csene/client.rb, line 98
def service
  client.discovered_api('customsearch')
end