]> gitweb.michael.orlitzky.com - dead/whatever-dl.git/blobdiff - src/websites/youtube.rb
Fix all Ruby 1.9 errors and warnings.
[dead/whatever-dl.git] / src / websites / youtube.rb
index f9fd05a764f0eef64e4221d24dae7b3e2ea6026f..2ab4678c11dae6660c0128765281eefffd38e61b 100644 (file)
@@ -67,15 +67,21 @@ class Youtube < Website
       # fmt_url_map hash.
       video_url = fmt_url_map[desired_format]
       return video_url
-    rescue StandardError => e
+    rescue StandardError
       # If at first you do not succeed, maybe someone decided to
       # change some shit. This alternate method parses
       # url_encoded_fmt_stream_map.
       fmt_streams = get_fmt_stream_list(page_data)
       video_url = self.choose_best_fmt_stream_url(fmt_streams)
 
-      # The "itag" parameter makes the 403 happen.
-      video_url.gsub!(/itag=\d+&/, '')
+      # A duplicated "itag" parameter results in a 403.
+      itag_regex = /&itag=\d+/
+      matches = video_url.scan(itag_regex)
+
+      if matches.length > 1
+        # Get rid of the first occurrence.
+        video_url.sub!(itag_regex, '')
+      end
     end
 
     return video_url
@@ -167,20 +173,23 @@ class Youtube < Website
     # We'll call /watch?v=video_id the "first form."
     first_form_video_id_regex = /v=([0-9a-z_\-]+)/i
     first_form_matches = first_form_video_id_regex.match(@url)
-    return first_form_matches[1] if not (first_form_matches.nil? ||
-                                         first_form_matches.length < 2)
+    if not first_form_matches.nil? || first_form_matches.length < 2
+      return first_form_matches[1]
+    end
 
     # First form didn't work? Try the second.
     second_form_video_id_regex = /\/v\/([0-9a-z_\-]+)/i
     second_form_matches = second_form_video_id_regex.match(@url)
-    return second_form_matches[1] if not (second_form_matches.nil? ||
-                                          second_form_matches.length < 2)
+    if not second_form_matches.nil? || second_form_matches.length < 2
+      return second_form_matches[1]
+    end
 
     # ...and the third.
     third_form_video_id_regex = /\/([[:alnum:]]+)$/i
     third_form_matches = third_form_video_id_regex.match(@url)
-    return third_form_matches[1] if not (third_form_matches.nil? ||
-                                         third_form_matches.length < 2)
+    if not third_form_matches.nil? || third_form_matches.length < 2
+      return third_form_matches[1]
+    end
 
     # If we made it here, we couldn't figure out the video id. Yes,
     # this is fatal, since we don't know where the video file is