diff options
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 33 | ||||
| -rw-r--r-- | youtube_dl/options.py | 4 |
2 files changed, 19 insertions, 18 deletions
diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 044796018..7965fa08a 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -1699,16 +1699,17 @@ class YoutubeIE(YoutubeBaseInfoExtractor): self._player_cache = {} def _get_player_js_version(self): - player_js_version = self.get_param('youtube_player_js_version') or '20348@0004de42' - sts_hash = self._search_regex( - ('^actual$(^)?(^)?', r'^([0-9]{5,})@([0-9a-f]{8,})$'), - player_js_version, 'player_js_version', group=(1, 2), default=None) - if sts_hash: - return sts_hash - self.report_warning( - 'Invalid player JS version "{0}" specified. ' - 'It should be "{1}" or in the format of {2}'.format( - player_js_version, 'actual', 'SignatureTimeStamp@Hash'), only_once=True) + player_js_version = self.get_param('youtube_player_js_version') + if player_js_version: + sts_hash = self._search_regex( + ('^actual$(^)?(^)?', r'^([0-9]{5,})@([0-9a-f]{8,})$'), + player_js_version, 'player_js_version', group=(1, 2), default=None) + if sts_hash: + return sts_hash + self.report_warning( + 'Invalid player JS version "{0}" specified. ' + 'It should be "{1}" or in the format of {2}'.format( + player_js_version, 'actual', 'SignatureTimeStamp@Hash'), only_once=True) return None, None # *ytcfgs, webpage=None @@ -1723,18 +1724,18 @@ class YoutubeIE(YoutubeBaseInfoExtractor): ytcfgs = ytcfgs + ({'PLAYER_JS_URL': player_url},) player_url = traverse_obj( ytcfgs, (Ellipsis, 'PLAYER_JS_URL'), (Ellipsis, 'WEB_PLAYER_CONTEXT_CONFIGS', Ellipsis, 'jsUrl'), - get_all=False, expected_type=lambda u: urljoin('https://www.youtube.com', u)) - - player_id_override = self._get_player_js_version()[1] + get_all=False, expected_type=self._yt_urljoin) - requested_js_variant = self.get_param('youtube_player_js_variant') or 'main' + requested_js_variant = self.get_param('youtube_player_js_variant') variant_js = next( (v for k, v in self._PLAYER_JS_VARIANT_MAP if k == requested_js_variant), None) if variant_js: + player_id_override = self._get_player_js_version()[1] player_id = player_id_override or self._extract_player_info(player_url) original_url = player_url - player_url = '/s/player/{0}/{1}'.format(player_id, variant_js) + player_url = self._yt_urljoin( + '/s/player/{0}/{1}'.format(player_id, variant_js)) if original_url != player_url: self.write_debug( 'Forcing "{0}" player JS variant for player {1}\n' @@ -1748,7 +1749,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor): requested_js_variant, ','.join(k for k, _ in self._PLAYER_JS_VARIANT_MAP)), only_once=True) - return urljoin('https://www.youtube.com', player_url) + return player_url def _download_player_url(self, video_id, fatal=False): res = self._download_webpage( diff --git a/youtube_dl/options.py b/youtube_dl/options.py index ce3633c41..9b0d77a23 100644 --- a/youtube_dl/options.py +++ b/youtube_dl/options.py @@ -421,12 +421,12 @@ def parseOpts(overrideArguments=None): action='store', dest='youtube_player_js_variant', help='For YouTube, the player javascript variant to use for n/sig deciphering; `actual` to follow the site; default `%default`.', choices=('actual', 'main', 'tcc', 'tce', 'es5', 'es6', 'tv', 'tv_es6', 'phone', 'tablet'), - default='main', metavar='VARIANT') + default='actual', metavar='VARIANT') video_format.add_option( '--youtube-player-js-version', action='store', dest='youtube_player_js_version', help='For YouTube, the player javascript version to use for n/sig deciphering, specified as `signature_timestamp@hash`, or `actual` to follow the site; default `%default`', - default='20348@0004de42', metavar='STS@HASH') + default='actual', metavar='STS@HASH') video_format.add_option( '--merge-output-format', action='store', dest='merge_output_format', metavar='FORMAT', default=None, |
