soimort/you-get · error · NotImplementedError

Audio #%s not found in playlist #%s

Error message

Audio #%s not found in playlist #%s

What it means

Raised as NotImplementedError at the end of lizhi_download (src/you_get/extractors/lizhi.py:64) via the for/else construct. The URL parsed fine (radio_id + audio_id), but after enumerating every episode of the radio via lizhi_extract_playlist_info, no episode's id equals the requested audio_id — the episode does not exist in that radio.

Source

Thrown at src/you_get/extractors/lizhi.py:64

    if not radio_id:
        raise NotImplementedError('%s not supported' % url)
    for audio_id, title, url in lizhi_extract_playlist_info(radio_id):
        lizhi_download_audio(audio_id, title, url, output_dir=output_dir, info_only=info_only)

def lizhi_download(url, output_dir='.', info_only=False, **kwargs):
    # Sample URL: http://www.lizhi.fm/549759/18864883431656710/
    m = re.search(r'/(?P<radio_id>\d+)/(?P<audio_id>\d+)', url)
    if not m:
        raise NotImplementedError('%s not supported' % url)
    radio_id = m.group('radio_id')
    audio_id = m.group('audio_id')
    # Look for the audio_id among the full list of episodes
    for aid, title, url in lizhi_extract_playlist_info(radio_id):
        if aid == audio_id:
            lizhi_download_audio(audio_id, title, url, output_dir=output_dir, info_only=info_only)
            break
    else:
        raise NotImplementedError('Audio #%s not found in playlist #%s' % (audio_id, radio_id))

site_info = "lizhi.fm"
download = lizhi_download
download_playlist = lizhi_download_playlist

View on GitHub (pinned to 049548f3f3)

Solutions

  1. Re-copy the episode URL from the lizhi.fm page so both ids are exact.
  2. Enumerate the radio with lizhi_download_playlist (or log lizhi_extract_playlist_info(radio_id)) and confirm the audio id is listed.
  3. If the id is visibly correct but not returned, the API response changed — inspect and update lizhi_extract_playlist_info or upgrade you-get.
Defensive patterns

Strategy: try-catch

Validate before calling

from you_get.extractors.lizhi import lizhi_extract_playlist_info

def lizhi_audio_in_playlist(url):
    import re
    m = re.search(r'/(?P<radio_id>\d+)/(?P<audio_id>\d+)', url)
    if not m:
        return False
    ids = {aid for aid, _, _ in lizhi_extract_playlist_info(m.group('radio_id'))}
    return m.group('audio_id') in ids

Try / catch

try:
    lizhi_download(url, output_dir)
except NotImplementedError as e:
    if 'not found in playlist' in str(e):
        # wrong/deleted episode id: re-source URL, don't retry
        log_missing_episode(url)
    else:
        raise

Prevention

When it happens

Trigger: A /<radio_id>/<audio_id>/ URL where audio_id is not present in the API-returned episode list for radio_id: typo in audio_id, deleted episode, or the episode list API (lizhi.fm/.radio) returning a partial/changed payload so the id never matches.

Common situations: Hand-edited or mistyped audio ids; episodes removed by the uploader; lizhi API schema changes making lizhi_extract_playlist_info yield different id values.

Related errors


AI-assisted analysis of soimort/you-get@049548f3f3 (2026-08-15). Data as JSON: /api/errors/f1b8209478fa1e89. Report an issue: GitHub.