# # Copyright Michael Orlitzky # # http://michael.orlitzky.com/ # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # http://www.fsf.org/licensing/licenses/gpl.html # 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 Youporn < Website VALID_YOUPORN_URL_REGEX = /^(http:\/\/)?(www\.)?youporn\.com\/watch\/(\d+)$/ def self.owns_url?(url) return url =~ VALID_YOUPORN_URL_REGEX end def get_video_url(url) page_data = self.get_page_data(url) video_url = self.parse_video_url(page_data) return video_url end protected; # Get the FLV file URL from the HTML page for this movie. # They don't obfuscate it or anything, so we assume here # that the first "download" url ending in ".flv" is the # movie file we want. def parse_video_url(page_data) flv_regex = /http:\/\/download\.youporn\.com\/.*?\.flv/ matches = flv_regex.match(page_data) flv_url = matches[0] if not matches.nil? return flv_url end def get_page_data(url) uri = URI.parse(url) response = Net::HTTP.start(uri.host, uri.port) do |http| # Bypass the stupid age verification. form_data = 'user_choice=Enter' http.post(uri.path, form_data, self.get_headers(url)) end return response.body end # Build the header hash from the URL we're requesting. def get_headers(url) headers = { 'Referer' => url } end end