{"record":{"id":"f1b8209478fa1e89","repo":"soimort/you-get","slug":"audio-s-not-found-in-playlist-s","errorCode":null,"errorMessage":"Audio #%s not found in playlist #%s","messagePattern":"Audio #(.+?) not found in playlist #(.+?)","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"src/you_get/extractors/lizhi.py","lineNumber":64,"sourceCode":"    if not radio_id:\n        raise NotImplementedError('%s not supported' % url)\n    for audio_id, title, url in lizhi_extract_playlist_info(radio_id):\n        lizhi_download_audio(audio_id, title, url, output_dir=output_dir, info_only=info_only)\n\ndef lizhi_download(url, output_dir='.', info_only=False, **kwargs):\n    # Sample URL: http://www.lizhi.fm/549759/18864883431656710/\n    m = re.search(r'/(?P<radio_id>\\d+)/(?P<audio_id>\\d+)', url)\n    if not m:\n        raise NotImplementedError('%s not supported' % url)\n    radio_id = m.group('radio_id')\n    audio_id = m.group('audio_id')\n    # Look for the audio_id among the full list of episodes\n    for aid, title, url in lizhi_extract_playlist_info(radio_id):\n        if aid == audio_id:\n            lizhi_download_audio(audio_id, title, url, output_dir=output_dir, info_only=info_only)\n            break\n    else:\n        raise NotImplementedError('Audio #%s not found in playlist #%s' % (audio_id, radio_id))\n\nsite_info = \"lizhi.fm\"\ndownload = lizhi_download\ndownload_playlist = lizhi_download_playlist\n","sourceCodeStart":46,"sourceCodeEnd":69,"githubUrl":"https://github.com/soimort/you-get/blob/049548f3f3f35e67ba8d3181c71fdc71d11cf260/src/you_get/extractors/lizhi.py#L46-L69","documentation":"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.","triggerScenarios":"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.","commonSituations":"Hand-edited or mistyped audio ids; episodes removed by the uploader; lizhi API schema changes making lizhi_extract_playlist_info yield different id values.","solutions":["Re-copy the episode URL from the lizhi.fm page so both ids are exact.","Enumerate the radio with lizhi_download_playlist (or log lizhi_extract_playlist_info(radio_id)) and confirm the audio id is listed.","If the id is visibly correct but not returned, the API response changed — inspect and update lizhi_extract_playlist_info or upgrade you-get."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"from you_get.extractors.lizhi import lizhi_extract_playlist_info\n\ndef lizhi_audio_in_playlist(url):\n    import re\n    m = re.search(r'/(?P<radio_id>\\d+)/(?P<audio_id>\\d+)', url)\n    if not m:\n        return False\n    ids = {aid for aid, _, _ in lizhi_extract_playlist_info(m.group('radio_id'))}\n    return m.group('audio_id') in ids","typeGuard":null,"tryCatchPattern":"try:\n    lizhi_download(url, output_dir)\nexcept NotImplementedError as e:\n    if 'not found in playlist' in str(e):\n        # wrong/deleted episode id: re-source URL, don't retry\n        log_missing_episode(url)\n    else:\n        raise","preventionTips":["Copy episode URLs directly from the site rather than editing ids by hand.","Cross-check the audio id against the radio's episode list before batch jobs."],"tags":["you-get","lizhi","not-found","playlist","extractor"],"backgroundTag":null,"analyzedSha":"049548f3f3f35e67ba8d3181c71fdc71d11cf260","analyzedAt":"2026-08-15T03:58:15.069Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}