Class: Umatic::Youtube
Constant Summary collapse
- QUALITY =
{ # low quality '5' => { :f => 'flv', :d => '240p' }, '6' => { :f => 'flv', :d => '270p'}, '13' => { :f => '3gp', :d => 'N/A' }, '17' => { :f => '3gp', :d => '144p' }, '18' => { :f => 'mp4', :d => '360p' }, # medium quality '34' => { :f => 'flv', :d => '360p' }, '35' => { :f => 'flv', :d => '480p' }, '43' => { :f => 'webm', :d => '360p' }, '44' => { :f => 'webm', :d => '480p' }, # high quality '22' => { :f => 'mp4', :d => '720p' }, '37' => { :f => 'mp4', :d => '1080p' }, '38' => { :f => 'mp4', :d => '3072p' }, '45' => { :f => 'webm', :d => '720p' }, '46' => { :f => 'webm', :d => '1080p' } }
Class Method Summary collapse
Instance Method Summary collapse
Methods inherited from Channel
channels, inherited, #initialize, open, #process
Constructor Details
This class inherits a constructor from Umatic::Channel
Class Method Details
.supports?(url) ⇒ Boolean
6 7 8 |
# File 'lib/channel/youtube.rb', line 6 def self.supports? url url.match(/http[s]?:\/\/www.youtube.com\/watch?.*v=.+/) != nil end |
Instance Method Details
#parse(page) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/channel/youtube.rb', line 32 def parse page json_match = page.match(/<script>.+ytplayer.config = (.+).+?<\/script>/) raise "Unable to retrieve video info" unless json_match info = JSON::parse json_match[1] title = info['args']['title'] description = '' sources = [] maps = info["args"]["url_encoded_fmt_stream_map"] maps.split(',').each do |m| params = CGI::parse(m) params.each { |k, v| params[k] = v[0] } itag = params['itag'] next unless QUALITY.keys.include?(itag) s = OpenStruct.new s.format = QUALITY[itag][:f] s.info = QUALITY[itag][:d] s.url = "#{params['url']}&signature=#{params['sig']}" sources << s end { :title => title, :description => description, :sources => sources } end |