{"record":{"id":"192c86fb44122572","repo":"jackwener/OpenCLI","slug":"not-found-192c86","errorCode":"NOT_FOUND","errorMessage":"NOT_FOUND","messagePattern":"NOT_FOUND","errorType":"error_code","errorClass":"CliError","httpStatus":null,"severity":"error","filePath":"clis/xiaoyuzhou/podcast.js","lineNumber":23,"sourceCode":"cli({\n    site: 'xiaoyuzhou',\n    name: 'podcast',\n    access: 'read',\n    description: 'View a Xiaoyuzhou podcast profile',\n    domain: 'www.xiaoyuzhoufm.com',\n    strategy: Strategy.LOCAL,\n    browser: false,\n    args: [{ name: 'id', positional: true, required: true, help: 'Podcast ID (from xiaoyuzhoufm.com URL)' }],\n    columns: ['title', 'author', 'description', 'subscribers', 'episodes', 'updated'],\n    func: async (args) => {\n        const credentials = loadXiaoyuzhouCredentials();\n        const response = await requestXiaoyuzhouJson('/v1/podcast/get', {\n            query: { pid: args.id },\n            credentials,\n        });\n        const p = response.data;\n        if (!p)\n            throw new CliError('NOT_FOUND', 'Podcast not found', 'Please check the ID');\n        return [{\n                title: p.title,\n                author: p.author,\n                description: p.brief,\n                subscribers: p.subscriptionCount,\n                episodes: p.episodeCount,\n                updated: formatDate(p.latestEpisodePubDate),\n            }];\n    },\n});\n","sourceCodeStart":5,"sourceCodeEnd":34,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/xiaoyuzhou/podcast.js#L5-L34","documentation":"GET /v1/podcast/get returned no `data` payload, so the CLI throws CliError NOT_FOUND with hint 'Please check the ID'. The library treats a missing podcast object as 'this podcast ID does not resolve' and surfaces it as a not-found error rather than an empty table.","triggerScenarios":"Calling `opencli xiaoyuzhou podcast <pid>` with a pid that does not exist, was deleted, is private, or is malformed (truncated copy-paste, wrong entity's ID such as an eid used where a pid is expected).","commonSituations":"Swapping episode eid with podcast pid, IDs copied from URLs with extra query params, podcasts taken offline since being bookmarked, or regional/permission restrictions hiding the podcast.","solutions":["Double-check the podcast ID (pid) is complete and correct","Confirm you are using a podcast pid, not an episode eid","Re-fetch the pid from the xiaoyuzhou page/URL","If the podcast was removed or made private, it cannot be fetched"],"exampleFix":"// before\nopencli xiaoyuzhou podcast 69dd0c98e2c8be3  # truncated pid\n// after\nopencli xiaoyuzhou podcast 69dd0c98e2c8be31551f6a33","handlingStrategy":"validation","validationCode":"const PID_RE = /^[0-9a-f]{24}$/i; // example shape\nif (!PID_RE.test(pid)) throw new Error('pid looks malformed');","typeGuard":"const isNonEmptyPayload = (r) => r != null && r.data != null && typeof r.data === 'object';","tryCatchPattern":"try { const p = await getPodcast(pid); } catch (e) { if (String(e).includes('NOT_FOUND')) { console.error(`Podcast ${pid} not found; verify pid`); return null; } throw e; }","preventionTips":["Copy pids in full from the xiaoyuzhou URL","Distinguish pid (podcast) from eid (episode)","Treat removed/private podcasts as expected not-found cases","Cache pid->title mappings to catch corrupted IDs"],"tags":["cli","not-found","resource-lookup"],"backgroundTag":"resource-not-found","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}