[youtube] Fix extraction (closes #20758, closes #20759, closes #20761, closes #20762...
authorSergey M․ <dstftw@gmail.com>
Wed, 24 Apr 2019 02:58:00 +0000 (09:58 +0700)
committerSergey M․ <dstftw@gmail.com>
Wed, 24 Apr 2019 02:58:00 +0000 (09:58 +0700)
youtube_dl/extractor/youtube.py

index 67eceb5c40858fc924b24a6e4d5e62ba1db70934..1bc2c27adacb40b2cd5e8ff2fb2e56b92eece38b 100644 (file)
@@ -1652,7 +1652,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
                         view_count = extract_view_count(get_video_info)
                     if not video_info:
                         video_info = get_video_info
-                    if 'token' in get_video_info:
+                    get_token = get_video_info.get('token') or get_video_info.get('account_playback_token')
+                    if get_token:
                         # Different get_video_info requests may report different results, e.g.
                         # some may report video unavailability, but some may serve it without
                         # any complaint (see https://github.com/ytdl-org/youtube-dl/issues/7362,
@@ -1662,7 +1663,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
                         # due to YouTube measures against IP ranges of hosting providers.
                         # Working around by preferring the first succeeded video_info containing
                         # the token if no such video_info yet was found.
-                        if 'token' not in video_info:
+                        token = video_info.get('token') or video_info.get('account_playback_token')
+                        if not token:
                             video_info = get_video_info
                         break
 
@@ -1678,7 +1680,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
             raise ExtractorError(
                 'YouTube said: %s' % unavailable_message, expected=True, video_id=video_id)
 
-        if 'token' not in video_info:
+        token = video_info.get('token') or video_info.get('account_playback_token')
+        if not token:
             if 'reason' in video_info:
                 if 'The uploader has not made this video available in your country.' in video_info['reason']:
                     regions_allowed = self._html_search_meta(