diff --git a/yt_dlp/extractor/hypergryph.py b/yt_dlp/extractor/hypergryph.py index aa5a454a5..fd07b2fa2 100644 --- a/yt_dlp/extractor/hypergryph.py +++ b/yt_dlp/extractor/hypergryph.py @@ -41,12 +41,15 @@ def _real_extract(self, url): audio_id = self._match_id(url) song = self._download_json( f'{self._API_BASE}/song/{audio_id}', audio_id) - if song['code'] != 0: - raise ExtractorError(song['msg'].replace('‘', '\''), expected=True) + if traverse_obj(song, 'code') != 0: + msg = traverse_obj(song, ('msg', {str}, filter)) + raise ExtractorError( + msg or 'API returned an error response', expected=bool(msg)) - album_id = song['data']['albumCid'] - album = self._download_json( - f'{self._API_BASE}/album/{album_id}/detail', album_id) + album = None + if album_id := traverse_obj(song, ('data', 'albumCid', {str})): + album = self._download_json( + f'{self._API_BASE}/album/{album_id}/detail', album_id, fatal=False) return { 'id': audio_id,