{"record":{"id":"b35010c4b6c6179d","repo":"iawia002/lux","slug":"empty-list","errorCode":null,"errorMessage":"empty list","messagePattern":"empty list","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"extractors/udn/udn.go","lineNumber":71,"sourceCode":"\tif len(url) == 0 {\n\t\treturn nil, errors.WithStack(extractors.ErrURLParseFailed)\n\t}\n\n\thtml, err := request.Get(url, url, nil)\n\tif err != nil {\n\t\treturn nil, errors.WithStack(err)\n\t}\n\tvar title string\n\tdesc := utils.MatchOneOf(html, `title: '(.+?)',\n        link:`)\n\tif len(desc) > 1 {\n\t\ttitle = desc[1]\n\t} else {\n\t\ttitle = \"udn\"\n\t}\n\tcdnURL := getCDNUrl(html)\n\tif cdnURL == \"\" {\n\t\treturn nil, errors.New(\"empty list\")\n\t}\n\tsrcURL, err := request.Get(\"http://\"+cdnURL, url, nil)\n\tif err != nil {\n\t\treturn nil, errors.WithStack(err)\n\t}\n\tsize, err := request.Size(srcURL, url)\n\tif err != nil {\n\t\treturn nil, errors.WithStack(err)\n\t}\n\turlData := &extractors.Part{\n\t\tURL:  srcURL,\n\t\tSize: size,\n\t\tExt:  \"mp4\",\n\t}\n\tquality := \"normal\"\n\tstreams := map[string]*extractors.Stream{\n\t\tquality: {\n\t\t\tParts:   []*extractors.Part{urlData},","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/iawia002/lux/blob/dd00f6d258d80b6684a0b9402d7124e5c18ef42f/extractors/udn/udn.go#L53-L89","documentation":"The UDN extractor calls getCDNUrl(html) to locate the CDN media URL inside the article page; if it returns an empty string, the error 'empty list' is thrown (the message is misleading — it really means 'no CDN source URL found in the page'). Without the CDN URL the extractor cannot build the media request.","triggerScenarios":"Calling Extract on a UDN article whose HTML no longer contains the pattern getCDNUrl looks for (site redesign), an article with no video at all, or a region/subscription-gated page that serves different markup to the extractor.","commonSituations":"UDN (Taiwan news) changes its player markup; the URL points to a photo/text-only article; anti-bot or geo page served to non-Taiwan IPs lacks the player markup.","solutions":["Verify the article URL in a browser and confirm it contains a playable video","Fetch the HTML the extractor sees and check whether the CDN URL pattern is present at all","Update the pattern inside getCDNUrl in extractors/udn/udn.go to match UDN's current markup","Filter input URLs to video articles only before batch extraction"],"exampleFix":"// before\ncdnURL := getCDNUrl(html)\nif cdnURL == \"\" {\n    return nil, errors.New(\"empty list\")\n}\n\n// after (clearer diagnostic, same failure point)\ncdnURL := getCDNUrl(html)\nif cdnURL == \"\" {\n    return nil, errors.New(\"udn: no CDN media URL found in page (video missing, gated, or markup changed)\")\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"_, err := udn.Extract(url, opts)\nif err != nil && strings.Contains(err.Error(), \"empty list\") {\n    // page had no CDN media URL: not a video article or markup changed; skip\n}","preventionTips":["Filter to confirmed video articles before batch extraction","Treat 'empty list' from udn as extraction-scope failure, not a transient error","Pin extractor versions and re-verify after UDN site updates"],"tags":["udn","html-parsing","site-layout-change","misleading-message"],"backgroundTag":null,"analyzedSha":"dd00f6d258d80b6684a0b9402d7124e5c18ef42f","analyzedAt":"2026-08-15T16:57:31.080Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}