Browse Source

[xvideos] Add support for embed URLs and improve extraction (closes #14409)

master-ytdl-org
Sergey M․ 7 years ago
parent
commit
cf5f6ed5be
No known key found for this signature in database GPG Key ID: 2C393E0F18A9236D
1 changed files with 31 additions and 11 deletions
  1. +31
    -11
      youtube_dl/extractor/xvideos.py

+ 31
- 11
youtube_dl/extractor/xvideos.py View File

@ -14,8 +14,16 @@ from ..utils import (
class XVideosIE(InfoExtractor): class XVideosIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?xvideos\.com/video(?P<id>[0-9]+)(?:.*)'
_TEST = {
_VALID_URL = r'''(?x)
https?://
(?:
(?:www\.)?xvideos\.com/video|
flashservice\.xvideos\.com/embedframe/|
static-hw\.xvideos\.com/swf/xv-player\.swf\?.*?\bid_video=
)
(?P<id>[0-9]+)
'''
_TESTS = [{
'url': 'http://www.xvideos.com/video4588838/biker_takes_his_girl', 'url': 'http://www.xvideos.com/video4588838/biker_takes_his_girl',
'md5': '14cea69fcb84db54293b1e971466c2e1', 'md5': '14cea69fcb84db54293b1e971466c2e1',
'info_dict': { 'info_dict': {
@ -25,21 +33,33 @@ class XVideosIE(InfoExtractor):
'duration': 108, 'duration': 108,
'age_limit': 18, 'age_limit': 18,
} }
}
}, {
'url': 'https://flashservice.xvideos.com/embedframe/4588838',
'only_matching': True,
}, {
'url': 'http://static-hw.xvideos.com/swf/xv-player.swf?id_video=4588838',
'only_matching': True,
}]
def _real_extract(self, url): def _real_extract(self, url):
video_id = self._match_id(url) video_id = self._match_id(url)
webpage = self._download_webpage(url, video_id)
webpage = self._download_webpage(
'http://www.xvideos.com/video%s/' % video_id, video_id)
mobj = re.search(r'<h1 class="inlineError">(.+?)</h1>', webpage) mobj = re.search(r'<h1 class="inlineError">(.+?)</h1>', webpage)
if mobj: if mobj:
raise ExtractorError('%s said: %s' % (self.IE_NAME, clean_html(mobj.group(1))), expected=True) raise ExtractorError('%s said: %s' % (self.IE_NAME, clean_html(mobj.group(1))), expected=True)
video_title = self._html_search_regex(
r'<title>(.*?)\s+-\s+XVID', webpage, 'title')
video_thumbnail = self._search_regex(
title = self._html_search_regex(
(r'<title>(?P<title>.+?)\s+-\s+XVID',
r'setVideoTitle\s*\(\s*(["\'])(?P<title>(?:(?!\1).)+)\1'),
webpage, 'title', default=None,
group='title') or self._og_search_title(webpage)
thumbnail = self._search_regex(
r'url_bigthumb=(.+?)&amp', webpage, 'thumbnail', fatal=False) r'url_bigthumb=(.+?)&amp', webpage, 'thumbnail', fatal=False)
video_duration = int_or_none(self._og_search_property(
duration = int_or_none(self._og_search_property(
'duration', webpage, default=None)) or parse_duration( 'duration', webpage, default=None)) or parse_duration(
self._search_regex( self._search_regex(
r'<span[^>]+class=["\']duration["\'][^>]*>.*?(\d[^<]+)', r'<span[^>]+class=["\']duration["\'][^>]*>.*?(\d[^<]+)',
@ -74,8 +94,8 @@ class XVideosIE(InfoExtractor):
return { return {
'id': video_id, 'id': video_id,
'formats': formats, 'formats': formats,
'title': video_title,
'duration': video_duration,
'thumbnail': video_thumbnail,
'title': title,
'duration': duration,
'thumbnail': thumbnail,
'age_limit': 18, 'age_limit': 18,
} }

Loading…
Cancel
Save