class KindleManager::BooksAdapter
Constants
- URL_FOR_KINDLE_CONTENTS
Public Instance Methods
fetch()
click to toggle source
# File lib/kindle_manager/adapters/books_adapter.rb, line 5 def fetch go_to_kindle_management_page begin load_next_kindle_list rescue => e puts "[ERROR] #{e}" puts e.backtrace puts puts "Retry manually -> client.adapter.load_next_kindle_list or client.session etc." end end
fetching_interval()
click to toggle source
# File lib/kindle_manager/adapters/books_adapter.rb, line 105 def fetching_interval @options.fetch(:fetching_interval, 3) end
go_to_kindle_management_page()
click to toggle source
# File lib/kindle_manager/adapters/books_adapter.rb, line 17 def go_to_kindle_management_page log "Visiting kindle management page" 3.times do session.visit URL_FOR_KINDLE_CONTENTS wait_for_selector('.navHeader_myx') if session.first('.navHeader_myx') log "Page found '#{session.first('.navHeader_myx').text}'" break else submit_signin_form end end end
load()
click to toggle source
# File lib/kindle_manager/adapters/books_adapter.rb, line 63 def load books = [] store.list_html_files.each do |file| parser = KindleManager::BooksParser.new(file) books += parser.parse end books.sort_by{|b| [-b.date.to_time.to_i, -b.fetched_at.to_i] }.uniq(&:asin) end
load_next_kindle_list()
click to toggle source
# File lib/kindle_manager/adapters/books_adapter.rb, line 31 def load_next_kindle_list wait_for_selector('.contentCount_myx') current_loop = 0 last_page_scroll_offset = page_scroll_offset while current_loop <= max_scroll_attempts break if limit && limit < number_of_fetched_books if has_more_button? snapshot_page current_loop = 0 log "Clicking 'Show More'" session.execute_script "window.scrollBy(0,-800)" show_more_button.click sleep fetching_interval else log "Loading books with scrolling #{current_loop+1}" session.execute_script "window.scrollBy(0,10000)" end sleep fetching_interval if last_page_scroll_offset == page_scroll_offset log "Stopping loading because 'page_scroll_offset' didn't change after a loop" break else debug "last_page_scroll_offset:#{last_page_scroll_offset} new page_scroll_offset:#{page_scroll_offset}" end last_page_scroll_offset = page_scroll_offset current_loop += 1 end log "Stopped loading. You may want to resume with 'client.adapter.load_next_kindle_list'" snapshot_page end
loading?()
click to toggle source
# File lib/kindle_manager/adapters/books_adapter.rb, line 93 def loading? session.first('.myx-popover-loading-wrapper').present? end
number_of_fetched_books()
click to toggle source
# File lib/kindle_manager/adapters/books_adapter.rb, line 84 def number_of_fetched_books re = (AmazonInfo.domain =~ /\.jp\z/ ? /(\d+)〜(\d+)/ : /(\d+) - (\d+)/) wait_for_selector('.contentCount_myx') text = doc.css('.contentCount_myx').text m = text.match(re) return m[2].to_i if m.present? raise("Couldn't get the number of fetched books [#{text}]") end
page_scroll_offset()
click to toggle source
# File lib/kindle_manager/adapters/books_adapter.rb, line 72 def page_scroll_offset session.evaluate_script('window.pageYOffset') end
snapshot_page()
click to toggle source
# File lib/kindle_manager/adapters/books_adapter.rb, line 97 def snapshot_page if (text = doc.css('.contentCount_myx').try!(:text)).present? log "Current page [#{text.to_s.gsub(/[[:space:]]+/, ' ').strip}]" end store.record_page log "Saving page" end