ytdl-org/youtube-dl · error · ExtractorError

Unable to get playlist info

Error message

Unable to get playlist info

What it means

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.

Source

Thrown at youtube_dl/extractor/qqmusic.py:360

            '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. Update youtube-dl / yt-dlp first — QQ Music endpoint changes are common and quickly patched.
  2. Verify the playlist ID exists by opening the page in a browser.
  3. Confirm the disstid was extracted intact from the URL (no truncation or extra characters).
  4. If the playlist is private/deleted, obtain the owner's shared link or drop it from the queue.
Defensive patterns

Strategy: retry

Try / catch

try:
    info = ydl.extract_info(url)
except ExtractorError as e:
    if 'Unable to get playlist info' in str(e):
        update_ytdl_and_retry_once(url)

Prevention

When it happens

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

Common situations: 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.

Related errors


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