From 6de7ef9b8d005ee8ebc7af21cb3ccd1b28bf7f71 Mon Sep 17 00:00:00 2001 From: tempname Date: Wed, 15 Aug 2012 20:54:03 -0300 Subject: [PATCH 1/2] added InfoExtractor for XNXX --- youtube_dl/InfoExtractors.py | 70 ++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py index ddb4aa16b..32c52cc08 100644 --- a/youtube_dl/InfoExtractors.py +++ b/youtube_dl/InfoExtractors.py @@ -2955,3 +2955,73 @@ def _real_extract(self, url): } return [info] + +class XNXXIE(InfoExtractor): + """Information extractor for xnxx.com""" + + _VALID_URL = r'^http://video\.xnxx\.com/video([0-9]+)/(.*)' + IE_NAME = u'xnxx' + VIDEO_URL_RE = r'flv_url=(.*?)&' + VIDEO_TITLE_RE = r'(.*?)\s+-\s+XNXX.COM' + VIDEO_THUMB_RE = r'url_bigthumb=(.*?)&' + + def report_webpage(self, video_id): + """Report information extraction""" + self._downloader.to_screen(u'[%s] %s: Downloading webpage' % (self.IE_NAME, video_id)) + + def report_extraction(self, video_id): + """Report information extraction""" + self._downloader.to_screen(u'[%s] %s: Extracting information' % (self.IE_NAME, video_id)) + + def extract_video_url(self, webpage): + "Extract the url for the video from the webpage" + + result = re.search(self.VIDEO_URL_RE, webpage) + if result is None: + self._downloader.trouble(u'ERROR: unable to extract video url') + return urllib.unquote(result.group(1).decode('utf-8')) + + def extract_video_title(self, webpage): + "Extract the title for the video from the webpage" + + result = re.search(self.VIDEO_TITLE_RE, webpage) + if result is None: + self._downloader.trouble(u'ERROR: unable to extract video title') + return result.group(1).decode('utf-8') + + def extract_video_thumbnail(self, webpage): + "Extract the thumbnail for the video from the webpage" + + result = re.search(self.VIDEO_THUMB_RE, webpage) + if result is None: + self._downloader.trouble(u'ERROR: unable to extract video thumbnail') + return result.group(1).decode('utf-8') + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + if mobj is None: + self._downloader.trouble(u'ERROR: invalid URL: %s' % url) + return + video_id = mobj.group(1).decode('utf-8') + + self.report_webpage(video_id) + + # Get webpage content + try: + webpage = urllib2.urlopen(url).read() + except (urllib2.URLError, httplib.HTTPException, socket.error), err: + self._downloader.trouble(u'ERROR: unable to download video webpage: %s' % err) + return + + info = {'id': video_id, + 'url': self.extract_video_url(webpage), + 'uploader': None, + 'upload_date': None, + 'title': self.extract_video_title(webpage), + 'ext': 'flv', + 'format': 'flv', + 'thumbnail': self.extract_video_thumbnail(webpage), + 'description': None, + 'player_url': None} + + return [info] \ No newline at end of file From 154b55dae3e611e05b9ae1762f59467d753338c4 Mon Sep 17 00:00:00 2001 From: tempname <tempname@suremail.info> Date: Wed, 15 Aug 2012 20:57:27 -0300 Subject: [PATCH 2/2] added InfoExtractor for XNXX --- youtube_dl/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 86951840d..0a6a5d35c 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -351,6 +351,7 @@ def gen_extractors(): MixcloudIE(), StanfordOpenClassroomIE(), MTVIE(), + XNXXIE(), GenericIE() ]