class HawatelSearchJobs::Client

Client for a jobs search engine

@!attribute [rw] indeed

@return [Hash] settings of API

@!attribute [rw] xing

@return [Hash] settings of API

@!attribute [rw] reed

@return [Hash] settings of API

@!attribute [rw] careerbuilder

@return [Hash] settings of API

@!attribute [rw] careerjet

@return [Hash] settings of API

@!attribute [rw] upwork

@return [Hash] settings of API

Constants

APIS

Values have to be the same name like module name of usesd APIs (HawatelSearchJobs::Api::)

DEFAULT

Attributes

jobs_table[R]

Public Class Methods

new() click to toggle source
# File lib/hawatel_search_jobs/client.rb, line 31
def initialize
  APIS.each do |api|
    metaclasses.send(:attr_reader, api.downcase.to_sym)
    api_conf = HawatelSearchJobs.instance_variable_get("@"+api.downcase)

    if api_conf.nil?
      HawatelSearchJobs.configure
      api_conf = HawatelSearchJobs.instance_variable_get("@"+api.downcase)
    end

    instance_variable_set("@#{api.downcase}", api_conf.dup)
  end
end

Public Instance Methods

count(api = nil) click to toggle source

Sum jobs offers from specified api or count all

@param api [String] api name @example

p client.count
p client.count('indeed')

@return [Integer]

# File lib/hawatel_search_jobs/client.rb, line 150
def count(api = nil)
  sum = 0

  if api
    api = api.downcase
    api_inst_var = instance_variable_get("@"+api)
    if api_inst_var[:activated]
      sum = @jobs_table[:"#{api}"].totalResults if @jobs_table[:"#{api}"].totalResults
    end
  else
    APIS.each do |provider|
      api_inst_var = instance_variable_get("@"+provider.downcase)
      if api_inst_var[:activated]
        provider = provider.downcase
        sum += @jobs_table[:"#{provider}"].totalResults if @jobs_table[:"#{provider}"].totalResults
      end
    end
  end
  return sum
end
metaclasses() click to toggle source
# File lib/hawatel_search_jobs/client.rb, line 45
def metaclasses
  class << self; self; end
end
next() click to toggle source

Get next page of result @example

p client.next
p client.jobs_table

@return [Hash] Next page of result for all providers (default maximum 25 records for each)

# File lib/hawatel_search_jobs/client.rb, line 122
def next
  next_result = Hash.new
  APIS.each do |api|
    api_module_name = Object.const_get('HawatelSearchJobs').const_get('Api').const_get(api)
    api_inst_var = instance_variable_get("@"+api.downcase)
    api_sym_name = api.downcase.to_sym

    if api_inst_var[:activated] && next_result?(api_sym_name)
      next_result[api_sym_name] = api_module_name.page({:settings => api_inst_var,
                                                        :page => @jobs_table[api_sym_name].page + 1,
                                                        :query_key => @jobs_table[api_sym_name].key})
    end
  end

  return nil if next_result.empty?

  @jobs_table = next_result
end
search_jobs(query = {}) click to toggle source

Search Jobs by specific criteria @param query [Hash] @option query [String] :keywords @option query [String] :location not working in Xing API @option query [String] :company not working in Reed API @example

HawatelSearchJobs.configure do |config|
    config.indeed[:activated] = true
    config.indeed[:api]       = 'api.indeed.com'
    config.indeed[:version]   = '2'
    config.indeed[:publisher] = 'secret-key'
    config.indeed[:page_size] = 25 # allowed range <1,25>

    config.xing[:activated]           = true
    config.xing[:consumer_key]        = 'secret-key'
    config.xing[:consumer_secret]     = 'secret-key'
    config.xing[:oauth_token]         = 'secret-key'
    config.xing[:oauth_token_secret]  = 'secret-key'
    config.xing[:page_size]           = 25 # allowed range <1,100>

    config.reed[:activated] = true
    config.reed[:api]       = 'reed.co.uk/api'
    config.reed[:clientid]  = 'secret-key'
    config.reed[:version]   = '1.0'
    config.reed[:page_size] = 25 # allowed range <1,100>

    config.careerbuilder[:activated]  = true
    config.careerbuilder[:api]        = 'api.careerbuilder.com'
    config.careerbuilder[:clientid]   = 'secret-key'
    config.careerbuilder[:version]    = 'v2'
    config.careerbuilder[:page_size]  = 25 # allowed range <1,100>

    config.careerjet[:activated]   = true
    config.careerjet[:api]         = 'public.api.careerjet.net'
    config.careerjet[:page_size]   = 25 # allowed range <1,99>

    config.upwork[:activated]           = true
    config.upwork[:consumer_key]        = 'secret-key'
    config.upwork[:consumer_secret]     = 'secret-key'
    config.upwork[:page_size]           = 25 # allowed range <1,100>
  end

client = HawatelSearchJobs::Client.new
client.search_jobs({:keywords => 'ruby'})

p client.jobs_table[:indeed]
p client.jobs_table[:xing]
p client.jobs_table[:reed]
p client.jobs_table[:careerbuilder]
p client.jobs_table[:careerjet]
p client.jobs_table[:upwork]

client.next

@return [Hash] First page of result for all providers (default maximum 25 records for each page)

# File lib/hawatel_search_jobs/client.rb, line 103
def search_jobs(query = {})
  query = DEFAULT.merge(query)

  @jobs_table = Hash.new

  APIS.each do |api|
    api_module_name = Object.const_get('HawatelSearchJobs').const_get('Api').const_get(api)
    api_inst_var = instance_variable_get("@"+api.downcase)
    @jobs_table[api.downcase.to_sym] = api_module_name.search({:settings => api_inst_var, :query => query}) if api_inst_var[:activated]
  end

  @jobs_table
end

Private Instance Methods

next_result?(provider) click to toggle source
# File lib/hawatel_search_jobs/client.rb, line 172
def next_result?(provider)
  if @jobs_table[provider] && @jobs_table[provider].page && @jobs_table[provider].last &&
      @jobs_table[provider].page < @jobs_table[provider].last
    true
  else
    false
  end

end