class FLV::Video
Constants
- EMBEDDED_FLASHVARS_XPATHS
- FLASHVARS_FUNCTION_REGEXP
- FLASHVARS_HASH_REGEXP
- FLASHVARS_JAVASCRIPT_XPATHS
- FLASHVARS_XPATHS
- FORMATS
Attributes
url[R]
Public Class Methods
new(url)
click to toggle source
# File lib/flv/video.rb, line 18 def initialize(url) @url = URI(url) @doc = Nokogiri::HTML(open(@url)) end
Public Instance Methods
flashvars()
click to toggle source
# File lib/flv/video.rb, line 27 def flashvars @flashvars ||= ( extract_flashvars_from_html || extract_flashvars_from_embedded_html || extract_flashvars_from_javascript || {} ) end
formats()
click to toggle source
# File lib/flv/video.rb, line 36 def formats @formats ||= FORMATS.keys.select do |format| FORMATS[format].any? { |var| flashvars.has_key?(var) } end end
title()
click to toggle source
# File lib/flv/video.rb, line 23 def title @title ||= @doc.at('//title').inner_text end
video_urls()
click to toggle source
# File lib/flv/video.rb, line 42 def video_urls @video_urls ||= begin urls = {} FORMATS.each do |format,vars| vars.each do |var| if flashvars.has_key?(var) urls[format] = @url.merge(flashvars[var]) next end end end urls end end
Protected Instance Methods
extract_flashvars_from_embedded_html()
click to toggle source
# File lib/flv/video.rb, line 78 def extract_flashvars_from_embedded_html if (attr = @doc.at(EMBEDDED_FLASHVARS_XPATHS.join('|'))) html = Nokogiri::HTML(attr.inner_text) extract_flashvars_from_html(html) end end
extract_flashvars_from_html(doc=@doc)
click to toggle source
# File lib/flv/video.rb, line 67 def extract_flashvars_from_html(doc=@doc) if (flashvars = doc.at(FLASHVARS_XPATHS.join('|'))) URI::QueryParams.parse(flashvars.value) end end
extract_flashvars_from_javascript()
click to toggle source
# File lib/flv/video.rb, line 91 def extract_flashvars_from_javascript if (script = @doc.at(FLASHVARS_JAVASCRIPT_XPATHS.join('|'))) code = script.inner_text return extract_flashvars_from_javascript_function(code) || extract_flashvars_from_javascript_hash(code) end end
extract_flashvars_from_javascript_function(code)
click to toggle source
# File lib/flv/video.rb, line 102 def extract_flashvars_from_javascript_function(code) if (match = code.match(FLASHVARS_FUNCTION_REGEXP)) URI::QueryParams.parse(match[1]) end end
extract_flashvars_from_javascript_hash(code)
click to toggle source
# File lib/flv/video.rb, line 110 def extract_flashvars_from_javascript_hash(code) regexp = lambda { |vars| } flashvars = {} vars = FORMATS.values.flatten regexp = /['"](#{Regexp.union(vars)})['"]:\s*['"]([^'"]+)['"]/ if (match = code.match(regexp)) flashvars[match[1]] = URI.decode(match[2]) end return flashvars end