X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2Fwebsites%2Fvimeo.rb;h=c259b7c602e1cc5c8bf709a8444efbaa426d868f;hb=f22161788b6fe999ed977aca6157248153d2c229;hp=3836df1ae0edff133dc70a599a2a1951353c68bd;hpb=00f5e6f475d07afa862c8f33854d8ed52185ea81;p=dead%2Fwhatever-dl.git diff --git a/src/websites/vimeo.rb b/src/websites/vimeo.rb index 3836df1..c259b7c 100644 --- a/src/websites/vimeo.rb +++ b/src/websites/vimeo.rb @@ -18,12 +18,6 @@ require 'src/website' -# Needed to download the video XML file, which is in turn -# needed because it contains the junk we need to construct -# the video URL. -require 'net/http' -require 'uri' - class Vimeo < Website @@ -34,41 +28,55 @@ class Vimeo < Website end - def get_video_url(url) + def get_video_url() # First, figure out the video id from the URL. # Then, use the video id to construct the video details URL. # Get the video details page, and parse the resulting XML for # the junk we need to construct the video URL. Note that the file # URL given in the XML is *not* valid. - video_id = parse_video_id(url) + video_id = self.parse_video_id() details_url = "http://www.vimeo.com/moogaloop/load/clip:#{video_id}/local" details_data = get_page_data(details_url) - request_signature = parse_request_signature(details_data) request_signature_expires = parse_request_signature_expires(details_data) quality = parse_quality(details_data) + + referer = "http://a.vimeocdn.com/p/flash/moogaloop/5.1.15/moogaloop.swf" + referer += "?v=1.0.0" + referer += "&time=#{request_signature_expires}" + self.headers['Referer'] = referer - # Being slightly explicit about what we're doing here... - video_url = "http://www.vimeo.com/moogaloop/play/clip:#{video_id}/#{request_signature}/#{request_signature_expires}/?q=#{quality}" + video_url = "http://player.vimeo.com/play_redirect?clip_id=#{video_id}" + video_url += "&sig=#{request_signature}" + video_url += "&time=#{request_signature_expires}" + video_url += "&quality=#{quality}" + video_url += "&codecs=H264,VP8,VP6" return video_url end + + def get_video_filename() + # The default behavior is no good here, use the video + # id with an extension tacked onto it. + return (self.parse_video_id() + '.flv') + end + protected; - def parse_video_id(url) + def parse_video_id() video_id = nil # First, try to get the video id from the end of the URL. video_id_regex = /\/(\d+)$/ - matches = video_id_regex.match(url) + matches = video_id_regex.match(@url) if matches.nil? # If that didn't work, the URL must be of the clip_id= form. video_id_regex = /clip_id\=(\d+)/ - matches = video_id_regex.match(url) + matches = video_id_regex.match(@url) video_id = matches[1] if not (matches.nil? || matches.length < 1) else video_id = matches[1] if not (matches.nil? || matches.length < 1) @@ -112,14 +120,4 @@ class Vimeo < Website end - def get_page_data(url) - uri = URI.parse(url) - - response = Net::HTTP.start(uri.host, uri.port) do |http| - http.get(uri.path) - end - - return response.body - end - end