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