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

Code before:
                'resolution': f'{video_data.get("resolution")}p' if video_data else None
            }
            watermark_fmt = {
                'url': video_data.get('download_url'),
                'ext': 'mp4',
                'format_note': 'Watermarked',
                'resolution': f'{video_data.get("resolution")}p' if video_data else None
            }
            formats.append(fmt)
            formats.append(watermark_fmt)

        self._sort_formats(formats)

        comment_json = self._download_json(
            'https://booyah.live/api/v3/playbacks/13887261322952306617/comments/tops', video_id,
            headers={'Booyah-Session-Key': BooyahBaseIE._BOOYAH_SESSION_KEY})

        comment_data = [{
            'id': comment.get('comment_id'),
            'author': comment.get('from_nickname'),
            'author_id': comment.get('from_uid'),
            'author_thumbnail': comment.get('from_thumbnail'),
            'text': comment.get('content'),
            'timestamp': comment.get('create_time'),
            'like_count': comment.get('like_cnt'),
        } for comment in comment_json.get('comment_list')]

        return {
            'id': video_id,
            'title': traverse_obj(json_data, ('playback', 'name')),
            'thumbnail': traverse_obj(json_data, ('playback', 'thumbnail_url')),
            'formats': formats,
            'view_count': traverse_obj(json_data, ('playback', 'views')),
            'like_count': traverse_obj(json_data, ('playback', 'likes')),
            'duration': traverse_obj(json_data, ('playback', 'duration')),
            'comment_count': traverse_obj(json_data, ('playback', 'comment_cnt')),
            'channel_id': traverse_obj(json_data, ('playback', 'channel_id')),
            'uploader': traverse_obj(json_data, ('user', 'nickname')),
            'uploader_id': str_or_none(traverse_obj(json_data, ('user', 'uid'))),
            'comments': comment_data,
            'modified_timestamp': int_or_none(traverse_obj(json_data, ('playback', 'update_time_ms')), 1000),
            'timestamp': int_or_none(traverse_obj(json_data, ('playback', 'create_time_ms')), 1000),
        }


Review comment (suggestion):
If the above is non fatal, we should check it first

```python
comment_data = []
if comment_json:
   comment_data = [{
   ....
   } for comment in comment_json.get('comment_list') or ()]
```

Code after:
    }]

    def _real_extract(self, url):
        video_id = self._match_id(url)
        json_data = self._download_json(
            f'https://booyah.live/api/v3/playbacks/{video_id}', video_id,
            headers={'Booyah-Session-key': self._BOOYAH_SESSION_KEY})

        formats = []
        for video_data in json_data['playback']['endpoint_list']:
            formats.extend(({
                'url': video_data.get('stream_url'),
                'ext': 'mp4',
                'height': video_data.get('resolution'),
            }, {
                'url': video_data.get('download_url'),
                'ext': 'mp4',
                'format_note': 'Watermarked',
                'height': video_data.get('resolution'),
                'preference': -10,
            }))
        self._sort_formats(formats)

        return {
            'id': video_id,
            'title': traverse_obj(json_data, ('playback', 'name')),
            'thumbnail': traverse_obj(json_data, ('playback', 'thumbnail_url')),
            'formats': formats,
            'view_count': traverse_obj(json_data, ('playback', 'views')),
            'like_count': traverse_obj(json_data, ('playback', 'likes')),
            'duration': traverse_obj(json_data, ('playback', 'duration')),
            'comment_count': traverse_obj(json_data, ('playback', 'comment_cnt')),
            'channel_id': traverse_obj(json_data, ('playback', 'channel_id')),
            'uploader': traverse_obj(json_data, ('user', 'nickname')),
            'uploader_id': str_or_none(traverse_obj(json_data, ('user', 'uid'))),
            'modified_timestamp': int_or_none(traverse_obj(json_data, ('playback', 'update_time_ms')), 1000),
            'timestamp': int_or_none(traverse_obj(json_data, ('playback', 'create_time_ms')), 1000),
            '__post_extractor': self.extract_comments(video_id, self._get_comments(video_id)),
        }