diff options
Diffstat (limited to 'youtube_dl/extractor/youtube.py')
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 26 | 
1 files changed, 18 insertions, 8 deletions
diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 2496d27f1..eb5a58807 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -2478,24 +2478,37 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):          headers = {              'x-youtube-client-name': '1',              'x-youtube-client-version': '2.20201112.04.01', +            'content-type': 'application/json',          }          if identity_token:              headers['x-youtube-identity-token'] = identity_token +        data = { +            'context': { +                'client': { +                    'clientName': 'WEB', +                    'clientVersion': '2.20201021.03.00', +                } +            }, +        } +          for page_num in itertools.count(1):              if not continuation:                  break +            data['continuation'] = continuation['continuation'] +            data['clickTracking'] = { +                'clickTrackingParams': continuation['itct'] +            }              count = 0              retries = 3              while count <= retries:                  try:                      # Downloading page may result in intermittent 5xx HTTP error                      # that is usually worked around with a retry -                    browse = self._download_json( -                        'https://www.youtube.com/browse_ajax', None, -                        'Downloading page %d%s' -                        % (page_num, ' (retry #%d)' % count if count else ''), -                        headers=headers, query=continuation) +                    response = self._download_json( +                        'https://www.youtube.com/youtubei/v1/browse?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8', +                        None, 'Downloading page %d%s' % (page_num, ' (retry #%d)' % count if count else ''), +                        headers=headers, data=json.dumps(data).encode('utf8'))                      break                  except ExtractorError as e:                      if isinstance(e.cause, compat_HTTPError) and e.cause.code in (500, 503): @@ -2503,9 +2516,6 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):                          if count <= retries:                              continue                      raise -            if not browse: -                break -            response = try_get(browse, lambda x: x[1]['response'], dict)              if not response:                  break  | 
