class BookFinder::Libgen
Constants
- BASE_URL
Attributes
books[W]
columns[RW]
row[RW]
Public Instance Methods
books()
click to toggle source
# File lib/libgen.rb, line 31 def books @books = @rows.map { |r| @columns.zip(vals(r)).to_h } end
search(params)
click to toggle source
# File lib/libgen.rb, line 11 def search(params) query, by, ordered_by, order_mode, page = params.values return :QUERY_MISSING unless query url = BASE_URL + "?req=#{query}" url << "&sort=#{ordered_by}" if ordered_by url << "&sortmode=#{order_mode}" if order_mode url << "&column=#{by}" if by url << "&page=#{page}" if page html = URI.parse(url).open @doc = Nokogiri::HTML(html) initialize_columns initialize_rows books end
Private Instance Methods
initialize_columns()
click to toggle source
# File lib/libgen.rb, line 39 def initialize_columns dom_cols = @doc.search('[@bgcolor="#C0C0C0"]').first.children @columns = dom_cols.map { |col| col.content.strip.downcase.tr("()", "") unless col.content.strip.empty? } @columns.compact! @columns.shift @columns.pop end
initialize_rows()
click to toggle source
# File lib/libgen.rb, line 69 def initialize_rows @rows = [@doc.search('[@bgcolor="#C6DEFF"]'), @doc.search('[@bgcolor=""]'),].flatten end
vals(row)
click to toggle source
# File lib/libgen.rb, line 50 def vals(row) full_vals = [] vals = row.content.split("\r\n\t\t\t\t") vals.pop vals.shift authors = vals.shift.split(",") a_authors = row .children[2] .search("a") .map { |a| a.attribute("href").to_s } full_vals << authors.zip(a_authors).to_h 7.times { full_vals << vals.shift } full_vals << row.children[18..22].search("a").map { |a| a.attribute("href").to_s } full_vals end