aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Hagemeister <phihag@phihag.de>2014-01-22 14:16:43 +0100
committerPhilipp Hagemeister <phihag@phihag.de>2014-01-22 14:16:43 +0100
commit04b4d394d92e325095fbf096f3f62bc4013fc785 (patch)
tree933ad1fccd46aab59629d3a35e760326036e767e
parent130f12985a9b44781680083d9bcc200a79e9395d (diff)
downloadyoutube-dl-04b4d394d92e325095fbf096f3f62bc4013fc785.tar.xz
Add new --default-search option (#2193)
-rw-r--r--youtube_dl/YoutubeDL.py2
-rw-r--r--youtube_dl/__init__.py7
-rw-r--r--youtube_dl/extractor/generic.py15
3 files changed, 21 insertions, 3 deletions
diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py
index dc8aa788c..c6430d367 100644
--- a/youtube_dl/YoutubeDL.py
+++ b/youtube_dl/YoutubeDL.py
@@ -152,6 +152,8 @@ class YoutubeDL(object):
support, using fridibi
debug_printtraffic:Print out sent and received HTTP traffic
include_ads: Download ads as well
+ default_search: Prepend this string if an input url is not valid.
+ 'auto' for elaborate guessing
The following parameters are not used by YoutubeDL itself, they are used by
the FileDownloader:
diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py
index a948b1d90..44047888d 100644
--- a/youtube_dl/__init__.py
+++ b/youtube_dl/__init__.py
@@ -199,7 +199,9 @@ def parseOpts(overrideArguments=None):
general.add_option(
'--bidi-workaround', dest='bidi_workaround', action='store_true',
help=u'Work around terminals that lack bidirectional text support. Requires bidiv or fribidi executable in PATH')
-
+ general.add_option('--default-search',
+ dest='default_search', metavar='PREFIX',
+ help='Use this prefix for unqualified URLs. For example "gvsearch2:" downloads two videos from google videos for youtube-dl "large apple". By default (with value "auto") youtube-dl guesses.')
selection.add_option(
'--playlist-start',
@@ -619,6 +621,8 @@ def _real_main(argv=None):
date = DateRange.day(opts.date)
else:
date = DateRange(opts.dateafter, opts.datebefore)
+ if opts.default_search not in ('auto', None) and ':' not in opts.default_search:
+ parser.error(u'--default-search invalid; did you forget a colon (:) at the end?')
# --all-sub automatically sets --write-sub if --write-auto-sub is not given
# this was the old behaviour if only --all-sub was given.
@@ -720,6 +724,7 @@ def _real_main(argv=None):
'debug_printtraffic': opts.debug_printtraffic,
'prefer_ffmpeg': opts.prefer_ffmpeg,
'include_ads': opts.include_ads,
+ 'default_search': opts.default_search,
}
with YoutubeDL(ydl_opts) as ydl:
diff --git a/youtube_dl/extractor/generic.py b/youtube_dl/extractor/generic.py
index 91536075d..e1933837d 100644
--- a/youtube_dl/extractor/generic.py
+++ b/youtube_dl/extractor/generic.py
@@ -162,8 +162,19 @@ class GenericIE(InfoExtractor):
def _real_extract(self, url):
parsed_url = compat_urlparse.urlparse(url)
if not parsed_url.scheme:
- self._downloader.report_warning('The url doesn\'t specify the protocol, trying with http')
- return self.url_result('http://' + url)
+ default_search = self._downloader.params.get('default_search')
+ if default_search is None:
+ default_search = 'auto'
+
+ if default_search == 'auto':
+ if '/' in url:
+ self._downloader.report_warning('The url doesn\'t specify the protocol, trying with http')
+ return self.url_result('http://' + url)
+ else:
+ return self.url_result('ytsearch:' + url)
+ else:
+ assert ':' in default_search
+ return self.url_result(default_search + url)
video_id = os.path.splitext(url.split('/')[-1])[0]
self.to_screen('%s: Requesting header' % video_id)