Sha256: 1fba3c1962af03b04f83e6945dc540166a149961cd9505c4e9590843d55494c2

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

require 'curb'
require 'multi_xml'
require 'multi_json'

module ShareChecker
  class Provider
    attr_reader :name
    
    def initialize(link, name = "noname", options = {})
      @link = link
      @name = name
      @options = options.symbolize_keys
    end
    
    def check
      response = self.class.get([url, @link].join)
      return nil unless response
      
      parse(response)
    end
    
    def parse(response)
      raise NotImplementedError, "Must be overwritten in subclasses"
    end
    
    def url
      raise NotImplementedError, "Must be overwritten in subclasses"
    end
    
    def parse_xml(body)
      begin
        content = MultiXml.parse(body)
      rescue Exception => e
        puts "#{@name} error parse xml: #{body}, #{e.message}, #{@link}"
        content = nil
      end
      
      return content
    end
    
    def parse_json(body)
      begin
        content = MultiJson.decode(body)
      rescue Exception => e
        puts "#{@name} error parse xml: #{body}, #{e.message}, #{@link}"
        content = nil
      end
      
      return content
    end
    
    def method_missing(method_name, *args, &block)
      if @options.key?(method_name.to_sym)
        @options[method_name.to_sym]
      else
        super
      end
    end
    
    class << self
      def get(url)
        c = Curl::Easy.new(url) do |curl| 
          curl.headers["User-Agent"] = ShareChecker.config.user_agent
          curl.timeout = ShareChecker.config.timeout
          curl.verbose = false
          curl.follow_location = true
          curl.max_redirects = 2
        end

        c.perform
        c.body_str
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
share_checker-0.1.7 lib/share_checker/provider.rb