]> gitweb.michael.orlitzky.com - dead/whatever-dl.git/blobdiff - src/websites/vimeo.rb
Fix the Vimeo class for their new scheme.
[dead/whatever-dl.git] / src / websites / vimeo.rb
index 3836df1ae0edff133dc70a599a2a1951353c68bd..c259b7c602e1cc5c8bf709a8444efbaa426d868f 100644 (file)
 
 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