require 'src/website'
-# Needed to download the page, which is in turn
-# needed because it contains the video URL.
-require 'net/http'
-require 'uri'
-
class Youtube < Website
- VALID_YOUTUBE_URL_REGEX = /^(http:\/\/)?(www\.)?youtube\.com\/((watch\?v=)|(v\/))[[:alnum:]]+(\&.*)?\#?$/
+ VALID_YOUTUBE_URL_REGEX = /^(http:\/\/)?([a-z0-9]+\.)?youtube\.com\/((watch\?v=)|(v\/))[a-z0-9_\-]+(\&.*)?\#?$/i
def self.owns_url?(url)
return url =~ VALID_YOUTUBE_URL_REGEX
end
- def get_video_url(url)
- video_id = self.parse_video_id(url)
+ def get_video_url()
+ video_id = self.parse_video_id()
# The video's URL (the "page data" URL) may be different from the
# URL that was passed to the program. We support the /v/video_id
return video_url
end
+
+ def get_video_filename()
+ return (self.parse_video_id() + '.flv')
+ end
+
protected;
# Get the video id from the URL. Should be relatively easy,
# unless Youtube supports some URL formats of which I'm unaware.
- def parse_video_id(url)
+ def parse_video_id()
# Return nil if we get no matches below.
video_id = nil
# them one at a time. The only tricky situation is when
# parameters like "&hl=en" are tacked on to the end.
# We'll call /watch?v=video_id the "first form."
- first_form_video_id_regex = /v=([[:alnum:]]+)$/
- first_form_matches = first_form_video_id_regex.match(url)
+ 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)
# First form didn't work? Try the second.
- second_form_video_id_regex = /\/v\/([[:alnum:]]+)/
- second_form_matches = second_form_video_id_regex.match(url)
+ second_form_video_id_regex = /\/v\/([0-9a-z_\-]+)/i
+ second_form_matches = second_form_video_id_regex.match(@url)
video_id = second_form_matches[1] if not (second_form_matches.nil? ||
second_form_matches.length < 2)
return t_parameter
end
-
- def get_page_data(url)
- uri = URI.parse(url)
-
- response = Net::HTTP.start(uri.host, uri.port) do |http|
- http.get(uri.request_uri)
- end
-
- return response.body
- end
end