|
|
@ -16,6 +16,7 @@ from ..jsinterp import JSInterpreter
|
|
|
|
from ..swfinterp import SWFInterpreter
|
|
|
|
from ..swfinterp import SWFInterpreter
|
|
|
|
from ..compat import (
|
|
|
|
from ..compat import (
|
|
|
|
compat_chr,
|
|
|
|
compat_chr,
|
|
|
|
|
|
|
|
compat_kwargs,
|
|
|
|
compat_parse_qs,
|
|
|
|
compat_parse_qs,
|
|
|
|
compat_urllib_parse_unquote,
|
|
|
|
compat_urllib_parse_unquote,
|
|
|
|
compat_urllib_parse_unquote_plus,
|
|
|
|
compat_urllib_parse_unquote_plus,
|
|
|
@ -245,6 +246,11 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
|
|
|
|
|
|
|
|
|
|
|
|
return True
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _download_webpage(self, *args, **kwargs):
|
|
|
|
|
|
|
|
kwargs.setdefault('query', {})['disable_polymer'] = 'true'
|
|
|
|
|
|
|
|
return super(YoutubeBaseInfoExtractor, self)._download_webpage(
|
|
|
|
|
|
|
|
*args, **compat_kwargs(kwargs))
|
|
|
|
|
|
|
|
|
|
|
|
def _real_initialize(self):
|
|
|
|
def _real_initialize(self):
|
|
|
|
if self._downloader is None:
|
|
|
|
if self._downloader is None:
|
|
|
|
return
|
|
|
|
return
|
|
|
@ -2052,7 +2058,7 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(%(playlist_id)s)
|
|
|
|
(%(playlist_id)s)
|
|
|
|
)""" % {'playlist_id': YoutubeBaseInfoExtractor._PLAYLIST_ID_RE}
|
|
|
|
)""" % {'playlist_id': YoutubeBaseInfoExtractor._PLAYLIST_ID_RE}
|
|
|
|
_TEMPLATE_URL = 'https://www.youtube.com/playlist?list=%s&disable_polymer=true'
|
|
|
|
_TEMPLATE_URL = 'https://www.youtube.com/playlist?list=%s'
|
|
|
|
_VIDEO_RE = r'href="\s*/watch\?v=(?P<id>[0-9A-Za-z_-]{11})&[^"]*?index=(?P<index>\d+)(?:[^>]+>(?P<title>[^<]+))?'
|
|
|
|
_VIDEO_RE = r'href="\s*/watch\?v=(?P<id>[0-9A-Za-z_-]{11})&[^"]*?index=(?P<index>\d+)(?:[^>]+>(?P<title>[^<]+))?'
|
|
|
|
IE_NAME = 'youtube:playlist'
|
|
|
|
IE_NAME = 'youtube:playlist'
|
|
|
|
_TESTS = [{
|
|
|
|
_TESTS = [{
|
|
|
|