]> gitweb.michael.orlitzky.com - dead/whatever-dl.git/blobdiff - src/website.rb
Make headers a property of the website class rather than passing them to get_page_data.
[dead/whatever-dl.git] / src / website.rb
index b5a501f9db8184d403d93ee1c13a34900b10506d..4e20466d30d95f0bf5a95370bcaa674a4adf5f73 100644 (file)
 # http://www.fsf.org/licensing/licenses/gpl.html
 #
 
+# Needed for the default implementation of get_page_data.
+require 'net/http'
+
 # Necessary in a lot of subclasses; plus, we need it
 # to parse the server name out of our URL.
 require 'uri'
 
+# Needed to download.. things.
+require 'net/http'
+
 # This class keeps track of all its subclasses
 # We use this to loop through every "website" in an
 # attempt to determine to which site a URL belongs.
@@ -48,14 +54,35 @@ class Website
     return uri.host
   end
 
+
+  
+  def get_page_data(url)
+    # A naive implementation that just grabs the
+    # data from a page.
+    uri = URI.parse(url)
+
+    response = Net::HTTP.start(uri.host, uri.port) do |http|
+      http.get(uri.request_uri, self.headers)
+    end
+
+    return response.body
+  end
+
+  
   
   public;
 
+  # Additional headers used when requesting data from the website.
+  # These aren't passed as a parameter because the (final)
+  # downloaders need them as well.
+  attr_accessor :headers
+
   def initialize(url)
     @url = url
+    self.headers = { 'User-Agent' => Configuration::USER_AGENT }
   end
 
-  
+
   def self.create(url)
     # Factory method returning an instance of
     # the appropriate subclass.
@@ -93,8 +120,15 @@ class Website
   # of the video URL, but in some cases, subclasses will want
   # to override this behavior.
   def get_video_filename()
-    # Use whatever comes after the final front slash.    
-    return get_video_url().split('/').pop()
+    # Use whatever comes after the final front slash.
+    file_and_params = get_video_url().split('/').pop()
+
+    # Unless it contains URL parameters. We don't want those.
+    return file_and_params unless file_and_params.include?('?')
+    
+    # There must be some parameters. Strip them off.
+    param_start_idx = file_and_params.index('?')
+    return file_and_params[0...(param_start_idx)]
   end
   
 end