|
|
@ -256,8 +256,6 @@ class YoutubeDL:
|
|
|
|
overwrites: Overwrite all video and metadata files if True,
|
|
|
|
overwrites: Overwrite all video and metadata files if True,
|
|
|
|
overwrite only non-video files if None
|
|
|
|
overwrite only non-video files if None
|
|
|
|
and don't overwrite any file if False
|
|
|
|
and don't overwrite any file if False
|
|
|
|
For compatibility with youtube-dl,
|
|
|
|
|
|
|
|
"nooverwrites" may also be used instead
|
|
|
|
|
|
|
|
playlist_items: Specific indices of playlist to download.
|
|
|
|
playlist_items: Specific indices of playlist to download.
|
|
|
|
playlistrandom: Download playlist items in random order.
|
|
|
|
playlistrandom: Download playlist items in random order.
|
|
|
|
lazy_playlist: Process playlist entries as they are received.
|
|
|
|
lazy_playlist: Process playlist entries as they are received.
|
|
|
@ -553,6 +551,7 @@ class YoutubeDL:
|
|
|
|
You can reduce network I/O by disabling it if you don't
|
|
|
|
You can reduce network I/O by disabling it if you don't
|
|
|
|
care about HLS. (only for youtube)
|
|
|
|
care about HLS. (only for youtube)
|
|
|
|
no_color: Same as `color='no_color'`
|
|
|
|
no_color: Same as `color='no_color'`
|
|
|
|
|
|
|
|
no_overwrites: Same as `overwrites=False`
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
_NUMERIC_FIELDS = {
|
|
|
|
_NUMERIC_FIELDS = {
|
|
|
@ -604,6 +603,7 @@ class YoutubeDL:
|
|
|
|
self._playlist_level = 0
|
|
|
|
self._playlist_level = 0
|
|
|
|
self._playlist_urls = set()
|
|
|
|
self._playlist_urls = set()
|
|
|
|
self.cache = Cache(self)
|
|
|
|
self.cache = Cache(self)
|
|
|
|
|
|
|
|
self.__header_cookies = []
|
|
|
|
|
|
|
|
|
|
|
|
stdout = sys.stderr if self.params.get('logtostderr') else sys.stdout
|
|
|
|
stdout = sys.stderr if self.params.get('logtostderr') else sys.stdout
|
|
|
|
self._out_files = Namespace(
|
|
|
|
self._out_files = Namespace(
|
|
|
@ -632,7 +632,7 @@ class YoutubeDL:
|
|
|
|
policy = traverse_obj(self.params, ('color', (stream_name, None), {str}), get_all=False)
|
|
|
|
policy = traverse_obj(self.params, ('color', (stream_name, None), {str}), get_all=False)
|
|
|
|
if policy in ('auto', None):
|
|
|
|
if policy in ('auto', None):
|
|
|
|
return term_allow_color and supports_terminal_sequences(stream)
|
|
|
|
return term_allow_color and supports_terminal_sequences(stream)
|
|
|
|
assert policy in ('always', 'never', 'no_color')
|
|
|
|
assert policy in ('always', 'never', 'no_color'), policy
|
|
|
|
return {'always': True, 'never': False}.get(policy, policy)
|
|
|
|
return {'always': True, 'never': False}.get(policy, policy)
|
|
|
|
|
|
|
|
|
|
|
|
self._allow_colors = Namespace(**{
|
|
|
|
self._allow_colors = Namespace(**{
|
|
|
@ -681,12 +681,10 @@ class YoutubeDL:
|
|
|
|
|
|
|
|
|
|
|
|
self.params['compat_opts'] = set(self.params.get('compat_opts', ()))
|
|
|
|
self.params['compat_opts'] = set(self.params.get('compat_opts', ()))
|
|
|
|
self.params['http_headers'] = HTTPHeaderDict(std_headers, self.params.get('http_headers'))
|
|
|
|
self.params['http_headers'] = HTTPHeaderDict(std_headers, self.params.get('http_headers'))
|
|
|
|
self.__header_cookies = []
|
|
|
|
|
|
|
|
self._load_cookies(self.params['http_headers'].get('Cookie')) # compat
|
|
|
|
self._load_cookies(self.params['http_headers'].get('Cookie')) # compat
|
|
|
|
self.params['http_headers'].pop('Cookie', None)
|
|
|
|
self.params['http_headers'].pop('Cookie', None)
|
|
|
|
|
|
|
|
self._request_director = self.build_request_director(_REQUEST_HANDLERS.values())
|
|
|
|
|
|
|
|
|
|
|
|
self._request_director = self.build_request_director(
|
|
|
|
|
|
|
|
sorted(_REQUEST_HANDLERS.values(), key=lambda rh: rh.RH_NAME.lower()))
|
|
|
|
|
|
|
|
if auto_init and auto_init != 'no_verbose_header':
|
|
|
|
if auto_init and auto_init != 'no_verbose_header':
|
|
|
|
self.print_debug_header()
|
|
|
|
self.print_debug_header()
|
|
|
|
|
|
|
|
|
|
|
@ -3977,7 +3975,7 @@ class YoutubeDL:
|
|
|
|
})) or 'none'))
|
|
|
|
})) or 'none'))
|
|
|
|
|
|
|
|
|
|
|
|
write_debug(f'Proxy map: {self.proxies}')
|
|
|
|
write_debug(f'Proxy map: {self.proxies}')
|
|
|
|
# write_debug(f'Request Handlers: {", ".join(rh.RH_NAME for rh in self._request_director.handlers)}')
|
|
|
|
# write_debug(f'Request Handlers: {", ".join(rh.RH_NAME for rh in self._request_director.handlers.values())}')
|
|
|
|
for plugin_type, plugins in {'Extractor': plugin_ies, 'Post-Processor': plugin_pps}.items():
|
|
|
|
for plugin_type, plugins in {'Extractor': plugin_ies, 'Post-Processor': plugin_pps}.items():
|
|
|
|
display_list = ['%s%s' % (
|
|
|
|
display_list = ['%s%s' % (
|
|
|
|
klass.__name__, '' if klass.__name__ == name else f' as {name}')
|
|
|
|
klass.__name__, '' if klass.__name__ == name else f' as {name}')
|
|
|
@ -4080,7 +4078,7 @@ class YoutubeDL:
|
|
|
|
|
|
|
|
|
|
|
|
def build_request_director(self, handlers):
|
|
|
|
def build_request_director(self, handlers):
|
|
|
|
logger = _YDLLogger(self)
|
|
|
|
logger = _YDLLogger(self)
|
|
|
|
headers = self.params.get('http_headers').copy()
|
|
|
|
headers = self.params['http_headers'].copy()
|
|
|
|
proxies = self.proxies.copy()
|
|
|
|
proxies = self.proxies.copy()
|
|
|
|
clean_headers(headers)
|
|
|
|
clean_headers(headers)
|
|
|
|
clean_proxies(proxies, headers)
|
|
|
|
clean_proxies(proxies, headers)
|
|
|
|