{"record":{"id":"5dcf7e7aad8da642","repo":"ytdl-org/youtube-dl","slug":"unable-to-get-playlist-info","errorCode":null,"errorMessage":"Unable to get playlist info","messagePattern":"Unable to get playlist info","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/qqmusic.py","lineNumber":360,"sourceCode":"            'description': '民谣的歌曲易于传唱、、歌词朗朗伤口、旋律简单温馨。属于那种才入耳孔。却上心头的感觉。没有太多的复杂情绪。简单而直接地表达乐者的情绪，就是这样的简单才易入人心。',\n        },\n        'playlist_count': 20,\n    }]\n\n    def _real_extract(self, url):\n        list_id = self._match_id(url)\n\n        list_json = self._download_json(\n            'http://i.y.qq.com/qzone-music/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg',\n            list_id, 'Download list page',\n            query={'type': 1, 'json': 1, 'utf8': 1, 'onlysong': 0, 'disstid': list_id},\n            transform_source=strip_jsonp)\n        if not len(list_json.get('cdlist', [])):\n            if list_json.get('code'):\n                raise ExtractorError(\n                    'QQ Music said: error %d in fetching playlist info' % list_json['code'],\n                    expected=True)\n            raise ExtractorError('Unable to get playlist info')\n\n        cdlist = list_json['cdlist'][0]\n        entries = [self.url_result(\n            'https://y.qq.com/n/yqq/song/' + song['songmid'] + '.html', 'QQMusic', song['songmid'])\n            for song in cdlist['songlist']]\n\n        list_name = cdlist.get('dissname')\n        list_description = clean_html(unescapeHTML(cdlist.get('desc')))\n        return self.playlist_result(entries, list_id, list_name, list_description)\n","sourceCodeStart":342,"sourceCodeEnd":370,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/qqmusic.py#L342-L370","documentation":"QQPlaylistIE raises ExtractorError('Unable to get playlist info') when the cdlist array in the playlist API response is empty and there is no 'code' field to report. It is the companion fallback to the 'QQ Music said: error %d' branch (qqmusic.py:357): the server returned a syntactically valid JSONP payload but with no playlist data and no error code. Not marked expected=True.","triggerScenarios":"The fcg_ucc_getcdinfo_byids_cp.fcg endpoint returns e.g. {'cdlist': []} with no code — typically for malformed disstids, API behavior changes, or responses shaped differently than the extractor anticipates (e.g. code present but falsy, like 0).","commonSituations":"API schema drift after a QQ Music update breaking older youtube-dl releases; deleted/private playlists that no longer return a code; hand-mangled playlist IDs that fall through the code check.","solutions":["Update youtube-dl / yt-dlp first — QQ Music endpoint changes are common and quickly patched.","Verify the playlist ID exists by opening the page in a browser.","Confirm the disstid was extracted intact from the URL (no truncation or extra characters).","If the playlist is private/deleted, obtain the owner's shared link or drop it from the queue."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    info = ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'Unable to get playlist info' in str(e):\n        update_ytdl_and_retry_once(url)","preventionTips":["Keep youtube-dl current — empty-cdlist-without-code usually means API drift.","Confirm playlist existence in a browser before reporting a bug.","Distinguish this branch from the coded-error branch when triaging."],"tags":["qqmusic","playlist","api-drift","empty-response"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}