- _VALID_URL = r'(?:http://)?(?:www\.)?xhamster\.com/movies/(?P<id>[0-9]+)/(?P<seo>.+?)\.html(?:\?.*)?'
- _TESTS = [{
- u'url': u'http://xhamster.com/movies/1509445/femaleagent_shy_beauty_takes_the_bait.html',
- u'file': u'1509445.flv',
- u'md5': u'9f48e0e8d58e3076bb236ff412ab62fa',
- u'info_dict': {
- u"upload_date": u"20121014",
- u"uploader_id": u"Ruseful2011",
- u"title": u"FemaleAgent Shy beauty takes the bait",
- u"age_limit": 18,
- }
- },
- {
- u'url': u'http://xhamster.com/movies/2221348/britney_spears_sexy_booty.html?hd',
- u'file': u'2221348.flv',
- u'md5': u'e767b9475de189320f691f49c679c4c7',
- u'info_dict': {
- u"upload_date": u"20130914",
- u"uploader_id": u"jojo747400",
- u"title": u"Britney Spears Sexy Booty",
- u"age_limit": 18,
- }
- }]
+ _VALID_URL = r'(?P<proto>https?)://(?:.+?\.)?xhamster\.com/movies/(?P<id>[0-9]+)/(?P<seo>.+?)\.html(?:\?.*)?'
+ _TESTS = [
+ {
+ 'url': 'http://xhamster.com/movies/1509445/femaleagent_shy_beauty_takes_the_bait.html',
+ 'info_dict': {
+ 'id': '1509445',
+ 'ext': 'mp4',
+ 'title': 'FemaleAgent Shy beauty takes the bait',
+ 'upload_date': '20121014',
+ 'uploader_id': 'Ruseful2011',
+ 'duration': 893,
+ 'age_limit': 18,
+ }
+ },
+ {
+ 'url': 'http://xhamster.com/movies/2221348/britney_spears_sexy_booty.html?hd',
+ 'info_dict': {
+ 'id': '2221348',
+ 'ext': 'mp4',
+ 'title': 'Britney Spears Sexy Booty',
+ 'upload_date': '20130914',
+ 'uploader_id': 'jojo747400',
+ 'duration': 200,
+ 'age_limit': 18,
+ }
+ },
+ {
+ 'url': 'https://xhamster.com/movies/2272726/amber_slayed_by_the_knight.html',
+ 'only_matching': True,
+ },
+ ]
+
+ def _real_extract(self, url):
+ def extract_video_url(webpage):
+ mp4 = re.search(r'<video\s+.*?file="([^"]+)".*?>', webpage)
+ if mp4 is None:
+ raise ExtractorError('Unable to extract media URL')
+ else:
+ return mp4.group(1)
+
+ def is_hd(webpage):
+ return '<div class=\'icon iconHD\'' in webpage