ytdl-org/youtube-dl · error · ExtractorError

QQ Music said: error %d in fetching playlist info

Error message

QQ Music said: error %d in fetching playlist info

What it means

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.

Source

Thrown at youtube_dl/extractor/qqmusic.py:357

        'info_dict': {
            'id': '1374105607',
            'title': '易入人心的华语民谣',
            'description': '民谣的歌曲易于传唱、、歌词朗朗伤口、旋律简单温馨。属于那种才入耳孔。却上心头的感觉。没有太多的复杂情绪。简单而直接地表达乐者的情绪,就是这样的简单才易入人心。',
        },
        'playlist_count': 20,
    }]

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

        list_json = self._download_json(
            'http://i.y.qq.com/qzone-music/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg',
            list_id, 'Download list page',
            query={'type': 1, 'json': 1, 'utf8': 1, 'onlysong': 0, 'disstid': list_id},
            transform_source=strip_jsonp)
        if not len(list_json.get('cdlist', [])):
            if list_json.get('code'):
                raise ExtractorError(
                    'QQ Music said: error %d in fetching playlist info' % list_json['code'],
                    expected=True)
            raise ExtractorError('Unable to get playlist info')

        cdlist = list_json['cdlist'][0]
        entries = [self.url_result(
            'https://y.qq.com/n/yqq/song/' + song['songmid'] + '.html', 'QQMusic', song['songmid'])
            for song in cdlist['songlist']]

        list_name = cdlist.get('dissname')
        list_description = clean_html(unescapeHTML(cdlist.get('desc')))
        return self.playlist_result(entries, list_id, list_name, list_description)

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Open the playlist URL (https://y.qq.com/n/yqq/playlist/<id>.html) in a browser to confirm it still exists.
  2. If the code indicates region restriction, access via a CN egress point.
  3. Re-copy the playlist URL from QQ Music to rule out ID transcription errors.
  4. Skip the dead playlist in batch jobs and proceed.
Defensive patterns

Strategy: try-catch

Try / catch

try:
    info = ydl.extract_info(url)
except ExtractorError as e:
    if 'error' in str(e) and 'fetching playlist info' in str(e):
        mark_dead(url)  # server rejected the disstid

Prevention

When it happens

Trigger: 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.

Common situations: Copied playlist IDs from old shares after the playlist was removed; playlists restricted to mainland-China IPs; ID typo in hand-built URLs.

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/1e9a7b0e3c95d9e0. Report an issue: GitHub.