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
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