|
@ -8,6 +8,7 @@ from ..utils import ( |
|
|
ExtractorError, |
|
|
ExtractorError, |
|
|
int_or_none, |
|
|
int_or_none, |
|
|
js_to_json, |
|
|
js_to_json, |
|
|
|
|
|
merge_dicts, |
|
|
urljoin, |
|
|
urljoin, |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
@ -27,23 +28,22 @@ class PornHdIE(InfoExtractor): |
|
|
'view_count': int, |
|
|
'view_count': int, |
|
|
'like_count': int, |
|
|
'like_count': int, |
|
|
'age_limit': 18, |
|
|
'age_limit': 18, |
|
|
} |
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
'skip': 'HTTP Error 404: Not Found', |
|
|
}, { |
|
|
}, { |
|
|
# removed video |
|
|
|
|
|
'url': 'http://www.pornhd.com/videos/1962/sierra-day-gets-his-cum-all-over-herself-hd-porn-video', |
|
|
'url': 'http://www.pornhd.com/videos/1962/sierra-day-gets-his-cum-all-over-herself-hd-porn-video', |
|
|
'md5': '956b8ca569f7f4d8ec563e2c41598441', |
|
|
|
|
|
|
|
|
'md5': '1b7b3a40b9d65a8e5b25f7ab9ee6d6de', |
|
|
'info_dict': { |
|
|
'info_dict': { |
|
|
'id': '1962', |
|
|
'id': '1962', |
|
|
'display_id': 'sierra-day-gets-his-cum-all-over-herself-hd-porn-video', |
|
|
'display_id': 'sierra-day-gets-his-cum-all-over-herself-hd-porn-video', |
|
|
'ext': 'mp4', |
|
|
'ext': 'mp4', |
|
|
'title': 'Sierra loves doing laundry', |
|
|
|
|
|
|
|
|
'title': 'md5:98c6f8b2d9c229d0f0fde47f61a1a759', |
|
|
'description': 'md5:8ff0523848ac2b8f9b065ba781ccf294', |
|
|
'description': 'md5:8ff0523848ac2b8f9b065ba781ccf294', |
|
|
'thumbnail': r're:^https?://.*\.jpg', |
|
|
'thumbnail': r're:^https?://.*\.jpg', |
|
|
'view_count': int, |
|
|
'view_count': int, |
|
|
'like_count': int, |
|
|
'like_count': int, |
|
|
'age_limit': 18, |
|
|
'age_limit': 18, |
|
|
}, |
|
|
}, |
|
|
'skip': 'Not available anymore', |
|
|
|
|
|
}] |
|
|
}] |
|
|
|
|
|
|
|
|
def _real_extract(self, url): |
|
|
def _real_extract(self, url): |
|
@ -61,7 +61,13 @@ class PornHdIE(InfoExtractor): |
|
|
r"(?s)sources'?\s*[:=]\s*(\{.+?\})", |
|
|
r"(?s)sources'?\s*[:=]\s*(\{.+?\})", |
|
|
webpage, 'sources', default='{}')), video_id) |
|
|
webpage, 'sources', default='{}')), video_id) |
|
|
|
|
|
|
|
|
|
|
|
info = {} |
|
|
if not sources: |
|
|
if not sources: |
|
|
|
|
|
entries = self._parse_html5_media_entries(url, webpage, video_id) |
|
|
|
|
|
if entries: |
|
|
|
|
|
info = entries[0] |
|
|
|
|
|
|
|
|
|
|
|
if not sources and not info: |
|
|
message = self._html_search_regex( |
|
|
message = self._html_search_regex( |
|
|
r'(?s)<(div|p)[^>]+class="no-video"[^>]*>(?P<value>.+?)</\1', |
|
|
r'(?s)<(div|p)[^>]+class="no-video"[^>]*>(?P<value>.+?)</\1', |
|
|
webpage, 'error message', group='value') |
|
|
webpage, 'error message', group='value') |
|
@ -80,23 +86,29 @@ class PornHdIE(InfoExtractor): |
|
|
'format_id': format_id, |
|
|
'format_id': format_id, |
|
|
'height': height, |
|
|
'height': height, |
|
|
}) |
|
|
}) |
|
|
self._sort_formats(formats) |
|
|
|
|
|
|
|
|
if formats: |
|
|
|
|
|
info['formats'] = formats |
|
|
|
|
|
self._sort_formats(info['formats']) |
|
|
|
|
|
|
|
|
description = self._html_search_regex( |
|
|
description = self._html_search_regex( |
|
|
r'<(div|p)[^>]+class="description"[^>]*>(?P<value>[^<]+)</\1', |
|
|
|
|
|
webpage, 'description', fatal=False, group='value') |
|
|
|
|
|
|
|
|
(r'(?s)<section[^>]+class=["\']video-description[^>]+>(?P<value>.+?)</section>', |
|
|
|
|
|
r'<(div|p)[^>]+class="description"[^>]*>(?P<value>[^<]+)</\1'), |
|
|
|
|
|
webpage, 'description', fatal=False, |
|
|
|
|
|
group='value') or self._html_search_meta( |
|
|
|
|
|
'description', webpage, default=None) or self._og_search_description(webpage) |
|
|
view_count = int_or_none(self._html_search_regex( |
|
|
view_count = int_or_none(self._html_search_regex( |
|
|
r'(\d+) views\s*<', webpage, 'view count', fatal=False)) |
|
|
r'(\d+) views\s*<', webpage, 'view count', fatal=False)) |
|
|
thumbnail = self._search_regex( |
|
|
thumbnail = self._search_regex( |
|
|
r"poster'?\s*:\s*([\"'])(?P<url>(?:(?!\1).)+)\1", webpage, |
|
|
r"poster'?\s*:\s*([\"'])(?P<url>(?:(?!\1).)+)\1", webpage, |
|
|
'thumbnail', fatal=False, group='url') |
|
|
|
|
|
|
|
|
'thumbnail', default=None, group='url') |
|
|
|
|
|
|
|
|
like_count = int_or_none(self._search_regex( |
|
|
like_count = int_or_none(self._search_regex( |
|
|
(r'(\d+)\s*</11[^>]+>(?: |\s)*\blikes', |
|
|
|
|
|
|
|
|
(r'(\d+)</span>\s*likes', |
|
|
|
|
|
r'(\d+)\s*</11[^>]+>(?: |\s)*\blikes', |
|
|
r'class=["\']save-count["\'][^>]*>\s*(\d+)'), |
|
|
r'class=["\']save-count["\'][^>]*>\s*(\d+)'), |
|
|
webpage, 'like count', fatal=False)) |
|
|
webpage, 'like count', fatal=False)) |
|
|
|
|
|
|
|
|
return { |
|
|
|
|
|
|
|
|
return merge_dicts(info, { |
|
|
'id': video_id, |
|
|
'id': video_id, |
|
|
'display_id': display_id, |
|
|
'display_id': display_id, |
|
|
'title': title, |
|
|
'title': title, |
|
@ -106,4 +118,4 @@ class PornHdIE(InfoExtractor): |
|
|
'like_count': like_count, |
|
|
'like_count': like_count, |
|
|
'formats': formats, |
|
|
'formats': formats, |
|
|
'age_limit': 18, |
|
|
'age_limit': 18, |
|
|
} |
|
|
|
|
|
|
|
|
}) |