]> gitweb.michael.orlitzky.com - dead/whatever-dl.git/commitdiff
Add HTML5 source element src parsing to the Redtube class.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 24 Jul 2011 06:03:47 +0000 (02:03 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 24 Jul 2011 06:03:47 +0000 (02:03 -0400)
Prefer the HTML5 videos over Flash ones where applicable.

src/websites/redtube.rb

index 825a4ea727c9d476b20925cb18a855dfa328302f..4de8772e9f27a8f695f231b16bbd7e00a934536e 100644 (file)
@@ -22,7 +22,7 @@ require 'cgi'
 class Redtube < Website
 
   VALID_REDTUBE_URL_REGEX = /^(http:\/\/)?(www\.)?redtube\.com\/(\d+)$/
-  
+
   def self.owns_url?(url)
     return url =~ VALID_REDTUBE_URL_REGEX
   end
@@ -30,7 +30,13 @@ class Redtube < Website
 
   def get_video_url()
     page_data = self.get_page_data(@url)
-    return self.parse_hashlink(page_data)
+    begin
+      # We prefer to parse the HTML5 version because it can come in a
+      # nicer container format.
+      return parse_html5_src(page_data)
+    rescue StandardError => e
+      return self.parse_hashlink(page_data)
+    end
   end
 
 
@@ -41,17 +47,31 @@ class Redtube < Website
   end
 
 
+  def parse_html5_src(page_data)
+    html5_src_regex = /\"<source src='([^']+?)'/
+
+    matches = html5_src_regex.match(page_data)
+
+    if matches.nil? or matches.length < 2
+      raise StandardError.new("Could not parse the HTML5 source src.")
+    else
+      return matches[1]
+    end
+
+  end
+
+
   def parse_hashlink(page_data)
     hashlink_regex = /hashlink=([^&]+)&/
 
     matches = hashlink_regex.match(page_data)
 
-    if matches.nil?
+    if matches.nil? or matches.length < 2
       raise StandardError.new("Could not parse the 'hashlink' Flash variable.")
     end
 
     # The hashlink variable /is/ the video URL, but it's encoded.
     return CGI::unescape(matches[1])
   end
-  
+
 end