mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-11-15 22:05:39 +00:00
Option to determine extractors ahead of time
Sometimes I just want to know whether youtube-dl can be expected to handle a given URL. This option accomplishes that quickly. Previously, I would run youtube-dl with --simulate or --skip-download, but these would take 5+ seconds on my system before returning. The --determine-extractors option of this PR, however, only takes 1.3 to 2.6 seconds. You can use it, for example, to handle arbitrary URLs intelligently: If --determine-extractor indicates success, run youtube-dl (or mpv or whatever). Otherwise, run $BROWSER. Thank you.
This commit is contained in:
parent
a803582717
commit
df1852a74e
2 changed files with 22 additions and 0 deletions
|
@ -9,6 +9,7 @@ import codecs
|
||||||
import io
|
import io
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,6 +124,23 @@ def _real_main(argv=None):
|
||||||
table = [[mso_id, mso_info['name']] for mso_id, mso_info in MSO_INFO.items()]
|
table = [[mso_id, mso_info['name']] for mso_id, mso_info in MSO_INFO.items()]
|
||||||
write_string('Supported TV Providers:\n' + render_table(['mso', 'mso name'], table) + '\n', out=sys.stdout)
|
write_string('Supported TV Providers:\n' + render_table(['mso', 'mso name'], table) + '\n', out=sys.stdout)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
if opts.determine_extractors:
|
||||||
|
status = 1
|
||||||
|
for url in all_urls:
|
||||||
|
if re.match(r'^[^\s/]+\.[^\s/]+/', url): # generic.py
|
||||||
|
write_string('The url doesn\'t specify the protocol, trying with http\n', out=sys.stderr)
|
||||||
|
url = 'http://' + url
|
||||||
|
for ie in list_extractors(opts.age_limit):
|
||||||
|
if not ie._WORKING or ie.IE_NAME == 'generic':
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
if re.match(getattr(ie, '_VALID_URL'), url):
|
||||||
|
write_string(ie.IE_NAME + ' ' + url + '\n', out=sys.stdout)
|
||||||
|
status = 0
|
||||||
|
break
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
sys.exit(status)
|
||||||
|
|
||||||
# Conflicting, missing and erroneous options
|
# Conflicting, missing and erroneous options
|
||||||
if opts.usenetrc and (opts.username is not None or opts.password is not None):
|
if opts.usenetrc and (opts.username is not None or opts.password is not None):
|
||||||
|
|
|
@ -161,6 +161,10 @@ def parseOpts(overrideArguments=None):
|
||||||
'--extractor-descriptions',
|
'--extractor-descriptions',
|
||||||
action='store_true', dest='list_extractor_descriptions', default=False,
|
action='store_true', dest='list_extractor_descriptions', default=False,
|
||||||
help='Output descriptions of all supported extractors')
|
help='Output descriptions of all supported extractors')
|
||||||
|
general.add_option(
|
||||||
|
'--determine-extractors',
|
||||||
|
action='store_true', dest='determine_extractors', default=False,
|
||||||
|
help='List the extractor that would be used for each URL. Exit status indicates at least one successful match.')
|
||||||
general.add_option(
|
general.add_option(
|
||||||
'--force-generic-extractor',
|
'--force-generic-extractor',
|
||||||
action='store_true', dest='force_generic_extractor', default=False,
|
action='store_true', dest='force_generic_extractor', default=False,
|
||||||
|
|
Loading…
Reference in a new issue