Repository: yt-dlp/yt-dlp
File: yt_dlp/extractor/globo.py (Python)

Code before:
                    originProgramId
                    headline
                }
            }
        }
        '''
        video = self._download_json(
            f'https://cloud-jarvis.globo.com/graphql?operationName=getVideoView&variables=%7B"videoId":"{video_id}"%7D&query={video_view}', video_id,
            headers={'content-type': 'application/json', 'x-platform-id': 'web', 'x-device-id': 'desktop', 'x-client-version': '2024.12-5'})['data']['video']
        title = video['headline']
        uploader = video['title'].get('headline')
        uploader_id = str_or_none(video['title'].get('originProgramId'))

        formats = []
        security = self._download_json(
            'https://playback.video.globo.com/v4/video-session', video_id, f'Downloading resource info for {video_id}',
            headers={'Content-Type': 'application/json'}, data=json.dumps({
                'player_type': 'desktop',
                'video_id': video_id,
                'quality': 'max',
                'content_protection': 'widevine',
                'vsid': '2938bc7c-9376-d4b7-ee91-ce46dbbf9f4d',
                'tz': '-03:00',
                'version': 1,
            }).encode())
        if not self.get_param('allow_unplayable_formats') and security['resource'].get('drm_protection_enabled') is True:
            self.report_drm(video_id)

        main_resource = security['sources'][0]
        resource_url = main_resource['url']

        fmts, subtitles = self._extract_m3u8_formats_and_subtitles(
            resource_url, video_id, 'mp4', entry_protocol='m3u8_native', m3u8_id='hls', fatal=False)
        formats.extend(fmts)

        subs = try_get(security, lambda x: x['sources'][0]['text']) or {}
        for sub in subs.items():
            if sub['subtitle']:
                subtitles.setdefault(sub or 'por', []).append({
                    'url': sub['subtitle']['srt'].get('url'),
                })

        duration = float_or_none(video.get('duration'), 1000)

        return {
            'id': video_id,
            'title': title,
            'duration': duration,
            'uploader': uploader,
            'uploader_id': uploader_id,
            'formats': formats,

Review comment (suggestion):
we're not doing that unplayable param anymore
```suggestion
        if traverse_obj(video, ('resource', 'drm_protection_enabled', {bool})):
```

Code after:
            'uploader': 'Bom Dia Brasil',
            'uploader_id': '810',
        },
        'params': {
            'skip_download': True,
        },
    }, {
        'url': 'globo:3607726',
        'only_matching': True,
    },
        {
        'url': 'globo:8013907',  # needs subscription to globoplay
        'info_dict': {
            'id': '8013907',
            'ext': 'mp4',
            'title': 'Capítulo de 14⧸08⧸1989',
            'episode_number': 1,
        },
        'params': {
            'skip_download': True,
        },
    },
        {
        'url': 'globo:12824146',
        'info_dict': {
            'id': '12824146',
            'ext': 'mp4',
            'title': 'Acordo de damas',
            'episode_number': 1,
            'season_number': 2,
        },
        'params': {
            'skip_download': True,
        },
    }]

    def _real_extract(self, url):
        video_id = self._match_id(url)

        info = self._download_json(
            'https://cloud-jarvis.globo.com/graphql', video_id,
            query={
                'operationName': 'getVideoView',
                'variables': json.dumps({'videoId': video_id}),
                'query': self._VIDEO_VIEW,
            }, headers={
                'content-type': 'application/json',
                'x-platform-id': 'web',
                'x-device-id': 'desktop',
                'x-client-version': '2024.12-5',
            })['data']['video']