from ..utils import (
ExtractorError,
int_or_none,
+ js_to_json,
orderedSet,
sanitized_Request,
str_to_int,
(?:[a-z]+\.)?pornhub\.com/(?:view_video\.php\?viewkey=|embed/)|
(?:www\.)?thumbzilla\.com/video/
)
- (?P<id>[0-9a-z]+)
+ (?P<id>[\da-z]+)
'''
_TESTS = [{
'url': 'http://www.pornhub.com/view_video.php?viewkey=648719015',
'dislike_count': int,
'comment_count': int,
'age_limit': 18,
+ 'tags': list,
+ 'categories': list,
},
}, {
# non-ASCII title
'dislike_count': int,
'comment_count': int,
'age_limit': 18,
+ 'tags': list,
+ 'categories': list,
},
'params': {
'skip_download': True,
'only_matching': True,
}]
- @classmethod
- def _extract_url(cls, webpage):
- mobj = re.search(
- r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:www\.)?pornhub\.com/embed/\d+)\1', webpage)
- if mobj:
- return mobj.group('url')
+ @staticmethod
+ def _extract_urls(webpage):
+ return re.findall(
+ r'<iframe[^>]+?src=["\'](?P<url>(?:https?:)?//(?:www\.)?pornhub\.com/embed/[\da-z]+)',
+ webpage)
def _extract_count(self, pattern, webpage, name):
return str_to_int(self._search_regex(
})
self._sort_formats(formats)
+ page_params = self._parse_json(self._search_regex(
+ r'page_params\.zoneDetails\[([\'"])[^\'"]+\1\]\s*=\s*(?P<data>{[^}]+})',
+ webpage, 'page parameters', group='data', default='{}'),
+ video_id, transform_source=js_to_json, fatal=False)
+ tags = categories = None
+ if page_params:
+ tags = page_params.get('tags', '').split(',')
+ categories = page_params.get('categories', '').split(',')
+
return {
'id': video_id,
'uploader': video_uploader,
'comment_count': comment_count,
'formats': formats,
'age_limit': 18,
+ 'tags': tags,
+ 'categories': categories,
}