diff options
| -rw-r--r-- | youtube_dl/YoutubeDL.py | 2 | ||||
| -rw-r--r-- | youtube_dl/__init__.py | 5 | ||||
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 14 | 
3 files changed, 15 insertions, 6 deletions
diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 983c00a6a..c5d08b0bb 100644 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -148,6 +148,8 @@ class YoutubeDL(object):                         again.      cookiefile:        File name where cookies should be read from and dumped to.      nocheckcertificate:Do not verify SSL certificates +    prefer_insecure:   Use HTTP instead of HTTPS to retrieve information. +                       At the moment, this is only supported by YouTube.      proxy:             URL of the proxy server to use      socket_timeout:    Time to wait for unresponsive hosts, in seconds      bidi_workaround:   Work around buggy terminals without bidirectional text diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 07c9074fe..a4cbdb0bd 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -238,6 +238,9 @@ def parseOpts(overrideArguments=None):          help='Use the specified HTTP/HTTPS proxy. Pass in an empty string (--proxy "") for direct connection')      general.add_option('--no-check-certificate', action='store_true', dest='no_check_certificate', default=False, help='Suppress HTTPS certificate validation.')      general.add_option( +        '--prefer-insecure', action='store_true', dest='prefer_insecure', +        help='Use an unencrypted connection to retrieve information about the video. (Currently supported only for YouTube)') +    general.add_option(          '--cache-dir', dest='cachedir', default=get_cachedir(), metavar='DIR',          help='Location in the filesystem where youtube-dl can store some downloaded information permanently. By default $XDG_CACHE_HOME/youtube-dl or ~/.cache/youtube-dl . At the moment, only YouTube player files (for videos with obfuscated signatures) are cached, but that may change.')      general.add_option( @@ -257,7 +260,6 @@ def parseOpts(overrideArguments=None):          action='store_true',          help='Do not read configuration files. When given in the global configuration file /etc/youtube-dl.conf: do not read the user configuration in ~/.config/youtube-dl.conf (%APPDATA%/youtube-dl/config.txt on Windows)') -      selection.add_option(          '--playlist-start',          dest='playliststart', metavar='NUMBER', default=1, type=int, @@ -756,6 +758,7 @@ def _real_main(argv=None):          'download_archive': download_archive_fn,          'cookiefile': opts.cookiefile,          'nocheckcertificate': opts.no_check_certificate, +        'prefer_insecure': opts.prefer_insecure,          'proxy': opts.proxy,          'socket_timeout': opts.socket_timeout,          'bidi_workaround': opts.bidi_workaround, diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index f7cb497a8..723e7b9e6 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -1130,14 +1130,18 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):          return self._download_webpage(url, video_id, note=u'Searching for annotations.', errnote=u'Unable to download video annotations.')      def _real_extract(self, url): +        proto = ( +            u'http' if self._downloader.params.get('prefer_insecure', False) +            else u'https') +          # Extract original video URL from URL with redirection, like age verification, using next_url parameter          mobj = re.search(self._NEXT_URL_RE, url)          if mobj: -            url = 'https://www.youtube.com/' + compat_urllib_parse.unquote(mobj.group(1)).lstrip('/') +            url = proto + '://www.youtube.com/' + compat_urllib_parse.unquote(mobj.group(1)).lstrip('/')          video_id = self.extract_id(url)          # Get video webpage -        url = 'https://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1' % video_id +        url = proto + '://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1' % video_id          video_webpage = self._download_webpage(url, video_id)          # Attempt to extract SWF player URL @@ -1162,7 +1166,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):                                                    'asv': 3,                                                    'sts':'1588',                                                    }) -            video_info_url = 'https://www.youtube.com/get_video_info?' + data +            video_info_url = proto + '://www.youtube.com/get_video_info?' + data              video_info_webpage = self._download_webpage(video_info_url, video_id,                                      note=False,                                      errnote='unable to download video info webpage') @@ -1170,7 +1174,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):          else:              age_gate = False              for el_type in ['&el=embedded', '&el=detailpage', '&el=vevo', '']: -                video_info_url = ('https://www.youtube.com/get_video_info?&video_id=%s%s&ps=default&eurl=&gl=US&hl=en' +                video_info_url = (proto + '://www.youtube.com/get_video_info?&video_id=%s%s&ps=default&eurl=&gl=US&hl=en'                          % (video_id, el_type))                  video_info_webpage = self._download_webpage(video_info_url, video_id,                                          note=False, @@ -1445,7 +1449,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):              'duration':     video_duration,              'age_limit':    18 if age_gate else 0,              'annotations':  video_annotations, -            'webpage_url': 'https://www.youtube.com/watch?v=%s' % video_id, +            'webpage_url': proto + '://www.youtube.com/watch?v=%s' % video_id,              'view_count':   view_count,              'like_count': like_count,              'dislike_count': dislike_count,  | 
