{"record":{"id":"6db068407b08eaea","repo":"fish2018/pansou","slug":"s-6db068","errorCode":null,"errorMessage":"[%s] 详情解析为空","messagePattern":"\\[(.+?)\\] 详情解析为空","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugin/yulinshufa/yulinshufa.go","lineNumber":331,"sourceCode":"\t}\n\tp.decorateCommonHeaders(req)\n\treq.Header.Set(\"Referer\", baseURL+\"/\")\n\tp.debugf(\"请求详情: %s\", item.DetailURL)\n\n\tresp, err := p.doRequestWithRetry(p.detailHTTPClient, req, requestMaxRetries)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"[%s] 请求详情失败: %w\", p.Name(), err)\n\t}\n\tdefer resp.Body.Close()\n\n\tdoc, err := p.buildGBKDocument(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"[%s] 解析详情失败: %w\", p.Name(), err)\n\t}\n\n\tresult := p.parseDetailDocument(doc, item)\n\tif result == nil {\n\t\treturn nil, fmt.Errorf(\"[%s] 详情解析为空\", p.Name())\n\t}\n\n\tp.storeInCache(cacheKey, *result)\n\treturn result, nil\n}\n\n// parseDetailDocument 将详情页转为 SearchResult\nfunc (p *YulinshufaPlugin) parseDetailDocument(doc *goquery.Document, item searchItem) *model.SearchResult {\n\tcontentSel := doc.Find(\"div.content\").First()\n\tif contentSel.Length() == 0 {\n\t\treturn nil\n\t}\n\n\tresult := model.SearchResult{\n\t\tUniqueID:  fmt.Sprintf(\"%s-%s\", p.Name(), item.ID),\n\t\tMessageID: fmt.Sprintf(\"%s-%s\", p.Name(), item.ID),\n\t\tChannel:   \"\",\n\t\tTitle:     item.Title,","sourceCodeStart":313,"sourceCodeEnd":349,"githubUrl":"https://github.com/fish2018/pansou/blob/beaa56133755a548ebc51b090b3816e2ae044aa6/plugin/yulinshufa/yulinshufa.go#L313-L349","documentation":"Empty-parse guard in yulinshufa getDetailResult: the detail document parsed successfully but parseDetailDocument returned nil — the expected fields/links were absent (layout change, empty page, or fully filtered content). Treated as a hard error, not an empty result, so nothing is cached.","triggerScenarios":"Thrown at plugin/yulinshufa/yulinshufa.go:331 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Update parseDetailDocument selectors for the current layout","Treat persistently-empty parses as skip-worthy, not retry-worthy","Optionally cache the nil to avoid re-fetching dead pages"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"beaa56133755a548ebc51b090b3816e2ae044aa6","analyzedAt":"2026-09-07T00:31:18.025Z","contentChangedAt":"2026-09-07T00:31:18.025Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}