root/lang/ruby/video_scraper/lib/www/video_scraper.rb @ 29819

Revision 29819, 2.2 kB (checked in by valda, 6 years ago)

eic-book.com のサンプル動画に対応
バージョン 1.0.4

Line 
1# -*- mode:ruby; coding:utf-8 -*-
2
3require 'rubygems'
4require 'open-uri'
5require 'hpricot'
6require 'mechanize'
7require 'kconv'
8require 'json'
9require 'uri'
10begin
11  require 'cgialt' unless defined? CGI
12rescue LoadError
13  require 'cgi'
14end
15
16module WWW
17  module VideoScraper
18    VERSION = '1.0.4'
19
20    MODULES_NAME = %w(adult_satellites age_sage ameba_vision dailymotion eic_book
21                      moro_tube nico_video pornhub pornotube red_tube tube8 veoh
22                      you_porn you_tube your_file_host)
23
24    @@modules = MODULES_NAME.map do |name|
25      require File.expand_path(File.join(File.dirname(__FILE__), 'video_scraper', name))
26      const_get( name.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } )
27    end
28
29    @@options = {
30      :logger => nil,
31      :cache => nil,
32    }
33
34    class << self
35      def modules
36        @@nodules
37      end
38
39      def options
40        @@options
41      end
42
43      def options=(opts)
44        @@options = opts
45      end
46
47      def configure(&proc)
48        raise ArgumentError, "Block is required." unless block_given?
49        yield @@options
50      end
51
52      def find_module(url)
53        @@modules.find { |mod| mod.valid_url?(url) }
54      end
55
56      # 与えられた URL を処理できるモジュールを @@modules から検索して実行する
57      def scrape(url, opt = nil)
58        opt = @@options.merge(opt || {})
59        opt[:logger] ||= logger
60        raise StandardError, "url param is requred" unless url
61
62        logger.info "url: #{url}"
63        if mod = find_module(url)
64          logger.info "found module: #{mod.to_s}"
65          return mod.scrape(url, opt)
66        end
67        logger.info "unsupport url."
68        return nil
69      rescue TimeoutError, Timeout::Error, Errno::ETIMEDOUT => e
70        logger.warn "  Timeout : #{e.to_s}"
71        raise TryAgainLater, e.to_s
72      rescue OpenURI::HTTPError => e
73        raise TryAgainLater, e.to_s if e.to_s.match(/50\d/)
74        raise FileNotFound, e.to_s if e.to_s.match(/40\d/)
75        raise
76      rescue Exception => e
77        logger.error "#{e.class}: #{e.to_s}"
78        raise e
79      end
80
81      private
82      def logger
83        return @@options[:logger] if @@options[:logger]
84        @@options[:logger] = NullLogger.new
85      end
86    end
87  end
88end
Note: See TracBrowser for help on using the browser.