class BookscanClient

Constants

VERSION

Public Class Methods

new(logger: Logger.new(STDOUT), sleep: 0.5) click to toggle source
# File lib/bookscan_client.rb, line 18
def initialize(logger: Logger.new(STDOUT), sleep: 0.5)
  @mechanize = Mechanize.new
  @logger = logger
  @sleep = sleep
end

Public Instance Methods

books() click to toggle source
# File lib/bookscan_client.rb, line 33
def books
  page = fetch(URL::MYPAGE)
  page.search("#sortable_box .showbook").map{|book_link|
    url = "#{BookscanClient::URL::ROOT}#{book_link.attr("href")}"
    params = CGI.parse(URI.parse(url).query)
    next unless %w[f h d].all?{|key| params.keys.include?(key) }
    image = book_link.search("img")

    book = BookscanClient::Model::Book.new(filename: params["f"][0], hash: params["h"][0], digest: params["d"][0])
    book.image_url = image[0].attr("data-original") unless image.empty?

    book
  }
end
cookies() click to toggle source
# File lib/bookscan_client.rb, line 59
def cookies
  @mechanize.cookies
end
login(email, password) click to toggle source
# File lib/bookscan_client.rb, line 24
def login(email, password)
  @mechanize.post(URL::LOGIN, "email" => email, "password" => password)
end
login?() click to toggle source
# File lib/bookscan_client.rb, line 28
def login?
  names = cookies.map(&:name)
  names.include?("email") && names.include?("password")
end
optimized_books() click to toggle source
# File lib/bookscan_client.rb, line 48
def optimized_books
  page = fetch(URL::OPTIMIZED_BOOKS)
  page.search("a.download").map{|book_link|
    url = "#{BookscanClient::URL::ROOT}#{book_link.attr("href")}"
    params = CGI.parse(URI.parse(url).query)
    next unless %w[f d].all?{|key| params.keys.include?(key) }

    BookscanClient::Model::OptimizedBook.new(filename: params["f"][0], digest: params["d"][0])
  }
end

Private Instance Methods

fetch(url) click to toggle source
# File lib/bookscan_client.rb, line 65
def fetch(url)
  @logger.info("GET #{url}...")
  @mechanize.get(url)
end