Sha256: 43534029b75a71e9d2f6f35d99ec45a680e46f637a19fa155da07401d7cd29f2
Contents?: true
Size: 1.12 KB
Versions: 1
Compression:
Stored size: 1.12 KB
Contents
require 'page_by_page/version' require 'page_by_page/enum' require 'nokogiri' require 'open-uri' class PageByPage class << self def fetch &block pbp = self.new &block pbp.fetch end end def initialize &block instance_eval &block end def url tmpl @tmpl = ERB.new tmpl end def selector sl @selector = sl end def from n @from = n end def step n @step = n end def to n @to = n end def fetch enum = Enum.new options items, all_items = [nil], [] catch :no_more do until items.empty? n = enum.next break if n > limit url = @tmpl.result binding doc = parse url items = doc.css @selector all_items << items end end all_items.flatten end private def parse url page = open(url) Nokogiri::HTML page.read rescue OpenURI::HTTPError => e if e.message == '404 Not Found' throw :no_more else raise e end end def options opt = {} opt[:from] = @from || 1 opt[:step] = @step || 1 opt end def limit @to || Float::INFINITY end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
page_by_page-0.1.5 | lib/page_by_page.rb |