Sha256: 67300cbcf340ec6e7eb447a6b3716026d21729ab01874dba35794d7176368cd6
Contents?: true
Size: 1.8 KB
Versions: 2
Compression:
Stored size: 1.8 KB
Contents
require 'open-uri' require 'open_uri_redirections' require 'json' require 'unirest' require 'pry' module Popularity class Crawler attr_reader :url def self.stats(*args) @property_names ||= [] args.each do |name| @property_names << name end end def self.property_names @property_names end def total self.class.property_names.uniq.collect { |n| self.send(n.to_sym) }.select { |t| t.class == Fixnum }.compact.reduce(:+) end def initialize(url) @url = url end def request_url raise NotImplemented end def response @response ||= fetch end def has_response? response #fetch it return false if response.nil? return false if response.empty? true end def valid? true # to be overridden in subclasses end def async_done? @async_done end def host URI.parse(@url).host.gsub('www.', '') end def response_json @json ||= JSON.parse(response) end def name self.class.to_s.split('::').last.gsub(/(.)([A-Z])/,'\1_\2').downcase end def as_json(options = {}) json = {} self.class.property_names.each do |name| json[name.to_s] = self.send(name.to_sym) end json["total"] = total json end def fetch_async(&block) return false unless valid? Unirest.get(request_url) do |response| @async_done = true @response = response.raw_body block.call(response.code, response.raw_body) if block_given? end end def fetch return false unless valid? begin response = Unirest.get(request_url) @response = response.raw_body rescue OpenURI::HTTPError, Timeout::Error, SocketError nil end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
popularity-0.3.0 | lib/popularity/crawler.rb |
popularity-0.2.1 | lib/popularity/crawler.rb |