|
|
@ -227,13 +227,20 @@ class PornHubIE(InfoExtractor): |
|
|
|
|
|
|
|
class PornHubPlaylistBaseIE(InfoExtractor): |
|
|
|
def _extract_entries(self, webpage): |
|
|
|
# Only process container div with main playlist content skipping |
|
|
|
# drop-down menu that uses similar pattern for videos (see |
|
|
|
# https://github.com/rg3/youtube-dl/issues/11594). |
|
|
|
container = self._search_regex( |
|
|
|
r'(?s)(<div[^>]+class=["\']container.+)', webpage, |
|
|
|
'container', default=webpage) |
|
|
|
|
|
|
|
return [ |
|
|
|
self.url_result( |
|
|
|
'http://www.pornhub.com/%s' % video_url, |
|
|
|
PornHubIE.ie_key(), video_title=title) |
|
|
|
for video_url, title in orderedSet(re.findall( |
|
|
|
r'href="/?(view_video\.php\?.*\bviewkey=[\da-z]+[^"]*)"[^>]*\s+title="([^"]+)"', |
|
|
|
webpage)) |
|
|
|
container)) |
|
|
|
] |
|
|
|
|
|
|
|
def _real_extract(self, url): |
|
|
@ -241,14 +248,7 @@ class PornHubPlaylistBaseIE(InfoExtractor): |
|
|
|
|
|
|
|
webpage = self._download_webpage(url, playlist_id) |
|
|
|
|
|
|
|
# Only process container div with main playlist content skipping |
|
|
|
# drop-down menu that uses similar pattern for videos (see |
|
|
|
# https://github.com/rg3/youtube-dl/issues/11594). |
|
|
|
container = self._search_regex( |
|
|
|
r'(?s)(<div[^>]+class=["\']container.+)', webpage, |
|
|
|
'container', default=webpage) |
|
|
|
|
|
|
|
entries = self._extract_entries(container) |
|
|
|
entries = self._extract_entries(webpage) |
|
|
|
|
|
|
|
playlist = self._parse_json( |
|
|
|
self._search_regex( |
|
|
|