|
@@ -40,45 +40,35 @@ __authors__ = (
|
|
|
__license__ = 'Public Domain'
|
|
|
|
|
|
import codecs
|
|
|
-import collections
|
|
|
import getpass
|
|
|
import optparse
|
|
|
import os
|
|
|
import random
|
|
|
import re
|
|
|
import shlex
|
|
|
-import socket
|
|
|
import subprocess
|
|
|
import sys
|
|
|
-import traceback
|
|
|
-import platform
|
|
|
|
|
|
|
|
|
from .utils import (
|
|
|
- compat_cookiejar,
|
|
|
compat_print,
|
|
|
- compat_str,
|
|
|
- compat_urllib_request,
|
|
|
DateRange,
|
|
|
decodeOption,
|
|
|
determine_ext,
|
|
|
DownloadError,
|
|
|
get_cachedir,
|
|
|
- make_HTTPS_handler,
|
|
|
MaxDownloadsReached,
|
|
|
- platform_name,
|
|
|
preferredencoding,
|
|
|
SameFileError,
|
|
|
std_headers,
|
|
|
write_string,
|
|
|
- YoutubeDLHandler,
|
|
|
)
|
|
|
from .update import update_self
|
|
|
-from .version import __version__
|
|
|
from .FileDownloader import (
|
|
|
FileDownloader,
|
|
|
)
|
|
|
from .extractor import gen_extractors
|
|
|
+from .version import __version__
|
|
|
from .YoutubeDL import YoutubeDL
|
|
|
from .PostProcessor import (
|
|
|
FFmpegMetadataPP,
|
|
@@ -451,19 +441,6 @@ def _real_main(argv=None):
|
|
|
|
|
|
parser, opts, args = parseOpts(argv)
|
|
|
|
|
|
- # Open appropriate CookieJar
|
|
|
- if opts.cookiefile is None:
|
|
|
- jar = compat_cookiejar.CookieJar()
|
|
|
- else:
|
|
|
- try:
|
|
|
- jar = compat_cookiejar.MozillaCookieJar(opts.cookiefile)
|
|
|
- if os.access(opts.cookiefile, os.R_OK):
|
|
|
- jar.load()
|
|
|
- except (IOError, OSError) as err:
|
|
|
- if opts.verbose:
|
|
|
- traceback.print_exc()
|
|
|
- write_string(u'ERROR: unable to open cookie file\n')
|
|
|
- sys.exit(101)
|
|
|
# Set user agent
|
|
|
if opts.user_agent is not None:
|
|
|
std_headers['User-Agent'] = opts.user_agent
|
|
@@ -495,8 +472,6 @@ def _real_main(argv=None):
|
|
|
all_urls = batchurls + args
|
|
|
all_urls = [url.strip() for url in all_urls]
|
|
|
|
|
|
- opener = _setup_opener(jar=jar, opts=opts)
|
|
|
-
|
|
|
extractors = gen_extractors()
|
|
|
|
|
|
if opts.list_extractors:
|
|
@@ -551,7 +526,7 @@ def _real_main(argv=None):
|
|
|
if opts.retries is not None:
|
|
|
try:
|
|
|
opts.retries = int(opts.retries)
|
|
|
- except (TypeError, ValueError) as err:
|
|
|
+ except (TypeError, ValueError):
|
|
|
parser.error(u'invalid retry count specified')
|
|
|
if opts.buffersize is not None:
|
|
|
numeric_buffersize = FileDownloader.parse_bytes(opts.buffersize)
|
|
@@ -562,13 +537,13 @@ def _real_main(argv=None):
|
|
|
opts.playliststart = int(opts.playliststart)
|
|
|
if opts.playliststart <= 0:
|
|
|
raise ValueError(u'Playlist start must be positive')
|
|
|
- except (TypeError, ValueError) as err:
|
|
|
+ except (TypeError, ValueError):
|
|
|
parser.error(u'invalid playlist start number specified')
|
|
|
try:
|
|
|
opts.playlistend = int(opts.playlistend)
|
|
|
if opts.playlistend != -1 and (opts.playlistend <= 0 or opts.playlistend < opts.playliststart):
|
|
|
raise ValueError(u'Playlist end must be greater than playlist start')
|
|
|
- except (TypeError, ValueError) as err:
|
|
|
+ except (TypeError, ValueError):
|
|
|
parser.error(u'invalid playlist end number specified')
|
|
|
if opts.extractaudio:
|
|
|
if opts.audioformat not in ['best', 'aac', 'mp3', 'm4a', 'opus', 'vorbis', 'wav']:
|
|
@@ -671,34 +646,12 @@ def _real_main(argv=None):
|
|
|
'youtube_print_sig_code': opts.youtube_print_sig_code,
|
|
|
'age_limit': opts.age_limit,
|
|
|
'download_archive': opts.download_archive,
|
|
|
+ 'cookiefile': opts.cookiefile,
|
|
|
+ 'nocheckcertificate': opts.no_check_certificate,
|
|
|
}
|
|
|
|
|
|
with YoutubeDL(ydl_opts) as ydl:
|
|
|
- if opts.verbose:
|
|
|
- write_string(u'[debug] youtube-dl version ' + __version__ + u'\n')
|
|
|
- try:
|
|
|
- sp = subprocess.Popen(
|
|
|
- ['git', 'rev-parse', '--short', 'HEAD'],
|
|
|
- stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
|
|
- cwd=os.path.dirname(os.path.abspath(__file__)))
|
|
|
- out, err = sp.communicate()
|
|
|
- out = out.decode().strip()
|
|
|
- if re.match('[0-9a-f]+', out):
|
|
|
- write_string(u'[debug] Git HEAD: ' + out + u'\n')
|
|
|
- except:
|
|
|
- try:
|
|
|
- sys.exc_clear()
|
|
|
- except:
|
|
|
- pass
|
|
|
- write_string(u'[debug] Python version %s - %s' %
|
|
|
- (platform.python_version(), platform_name()) + u'\n')
|
|
|
-
|
|
|
- proxy_map = {}
|
|
|
- for handler in opener.handlers:
|
|
|
- if hasattr(handler, 'proxies'):
|
|
|
- proxy_map.update(handler.proxies)
|
|
|
- write_string(u'[debug] Proxy map: ' + compat_str(proxy_map) + u'\n')
|
|
|
-
|
|
|
+ ydl.print_debug_header()
|
|
|
ydl.add_default_info_extractors()
|
|
|
|
|
|
# PostProcessors
|
|
@@ -729,46 +682,9 @@ def _real_main(argv=None):
|
|
|
ydl.to_screen(u'--max-download limit reached, aborting.')
|
|
|
retcode = 101
|
|
|
|
|
|
- # Dump cookie jar if requested
|
|
|
- if opts.cookiefile is not None:
|
|
|
- try:
|
|
|
- jar.save()
|
|
|
- except (IOError, OSError):
|
|
|
- sys.exit(u'ERROR: unable to save cookie jar')
|
|
|
-
|
|
|
sys.exit(retcode)
|
|
|
|
|
|
|
|
|
-def _setup_opener(jar=None, opts=None, timeout=300):
|
|
|
- if opts is None:
|
|
|
- FakeOptions = collections.namedtuple(
|
|
|
- 'FakeOptions', ['proxy', 'no_check_certificate'])
|
|
|
- opts = FakeOptions(proxy=None, no_check_certificate=False)
|
|
|
-
|
|
|
- cookie_processor = compat_urllib_request.HTTPCookieProcessor(jar)
|
|
|
- if opts.proxy is not None:
|
|
|
- if opts.proxy == '':
|
|
|
- proxies = {}
|
|
|
- else:
|
|
|
- proxies = {'http': opts.proxy, 'https': opts.proxy}
|
|
|
- else:
|
|
|
- proxies = compat_urllib_request.getproxies()
|
|
|
- # Set HTTPS proxy to HTTP one if given (https://github.com/rg3/youtube-dl/issues/805)
|
|
|
- if 'http' in proxies and 'https' not in proxies:
|
|
|
- proxies['https'] = proxies['http']
|
|
|
- proxy_handler = compat_urllib_request.ProxyHandler(proxies)
|
|
|
- https_handler = make_HTTPS_handler(opts)
|
|
|
- opener = compat_urllib_request.build_opener(
|
|
|
- https_handler, proxy_handler, cookie_processor, YoutubeDLHandler())
|
|
|
- # Delete the default user-agent header, which would otherwise apply in
|
|
|
- # cases where our custom HTTP handler doesn't come into play
|
|
|
- # (See https://github.com/rg3/youtube-dl/issues/1309 for details)
|
|
|
- opener.addheaders = []
|
|
|
- compat_urllib_request.install_opener(opener)
|
|
|
- socket.setdefaulttimeout(timeout)
|
|
|
- return opener
|
|
|
-
|
|
|
-
|
|
|
def main(argv=None):
|
|
|
try:
|
|
|
_real_main(argv)
|