class Bookcrawler::Client

Public Instance Methods

find_by_title(title) click to toggle source
# File lib/bookcrawler/client.rb, line 6
def find_by_title(title)
  entries = find_all_entries_by_title(title)
  target_entry = entries[0]

  if target_entry
    create_book_from_vacuum_entry(target_entry)
  else
    nil
  end
end

Private Instance Methods

configure_vacuum_client() click to toggle source
# File lib/bookcrawler/client.rb, line 23
def configure_vacuum_client
  Vacuum.new.tap do |client|
    client.configure(
        associate_tag: ENV['AMAZON_ASSOCIATES_TRACKING_ID']
    )
  end
end
create_book_from_vacuum_entry(target_entry) click to toggle source
# File lib/bookcrawler/client.rb, line 58
def create_book_from_vacuum_entry(target_entry)
  Book.new asin: target_entry['ASIN'],
           title: target_entry['Title'],
           author: process_author(target_entry['Author']),
           detail_page_url: target_entry['DetailPageURL']
end
find_all_entries_by_title(title) click to toggle source
# File lib/bookcrawler/client.rb, line 31
def find_all_entries_by_title(title)
  response = search_book_in_vacuum_by_title(title)

  results = response.to_h
  ['ItemSearchResponse', 'Items', 'Item'].each do |attribute_name|
    next unless results
    results = results[attribute_name]
  end

  (results || []).collect { |result| vacuum_result_as_object(result) }
end
process_author(author_or_authors) click to toggle source
# File lib/bookcrawler/client.rb, line 65
def process_author(author_or_authors)
  [author_or_authors].flatten.join(', ')
end
search_book_in_vacuum_by_title(title) click to toggle source
# File lib/bookcrawler/client.rb, line 43
def search_book_in_vacuum_by_title(title)
  vacuum_client.item_search(
      query: {
          'Keywords' => title,
          'SearchIndex' => 'Books'
      }
  )
end
vacuum_client() click to toggle source
# File lib/bookcrawler/client.rb, line 19
def vacuum_client
  @vacuum_client ||= configure_vacuum_client
end
vacuum_result_as_object(entry) click to toggle source
# File lib/bookcrawler/client.rb, line 52
def vacuum_result_as_object(entry)
  attributes = entry['ItemAttributes']
  attributes.merge!('ASIN' => entry['ASIN'], 'DetailPageURL' => entry['DetailPageURL'])
  OpenStruct.new(attributes)
end