{"record":{"id":"1e9a7b0e3c95d9e0","repo":"ytdl-org/youtube-dl","slug":"qq-music-said-error-d-in-fetching-playlist-info","errorCode":null,"errorMessage":"QQ Music said: error %d in fetching playlist info","messagePattern":"QQ Music said: error (.+?) in fetching playlist info","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/qqmusic.py","lineNumber":357,"sourceCode":"        'info_dict': {\n            'id': '1374105607',\n            'title': '易入人心的华语民谣',\n            '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":339,"sourceCodeEnd":370,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/qqmusic.py#L339-L370","documentation":"QQPlaylistIE._real_extract raises ExtractorError('QQ Music said: error %d in fetching playlist info' % code, expected=True) when the playlist API (fcg_ucc_getcdinfo_by_ids_cp.fcg, parsed via strip_jsonp) returns an empty cdlist array AND the response contains a non-zero/falsy-safe 'code' field. The numeric code is QQ Music's own server error code for the failed dissid lookup.","triggerScenarios":"Requesting a y.qq.com playlist URL whose disstid does not exist, was deleted, or is region-blocked; the JSONP endpoint returns {'code': <n>, 'cdlist': []}. Only raised when code is truthy — otherwise the generic 'Unable to get playlist info' path fires.","commonSituations":"Copied playlist IDs from old shares after the playlist was removed; playlists restricted to mainland-China IPs; ID typo in hand-built URLs.","solutions":["Open the playlist URL (https://y.qq.com/n/yqq/playlist/<id>.html) in a browser to confirm it still exists.","If the code indicates region restriction, access via a CN egress point.","Re-copy the playlist URL from QQ Music to rule out ID transcription errors.","Skip the dead playlist in batch jobs and proceed."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    info = ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'error' in str(e) and 'fetching playlist info' in str(e):\n        mark_dead(url)  # server rejected the disstid","preventionTips":["Validate playlist ids by opening the y.qq.com page before batch jobs.","Record the numeric QQ error code in logs to classify deletions vs region blocks.","Do not retry — the server-side verdict for that disstid is stable."],"tags":["qqmusic","playlist","api-error-code","expected-error"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}