{"record":{"id":"d7e66e50bc1d950e","repo":"fish2018/pansou","slug":"w-d7e66e","errorCode":null,"errorMessage":"获取测试结果失败: %w","messagePattern":"获取测试结果失败: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugin/panyq/panyq.go","lineNumber":530,"sourceCode":"\t\t}\n\t\tif p.validateIntermediateID(id, testCreds.Hash, testCreds.Sha) {\n\t\t\tfinalIDs[ActionIDKeys[1]] = id\n\t\t\tintermediateIDFound = true\n\t\t\tif DebugLog {\n\t\t\t\tfmt.Printf(\"panyq: 找到有效的intermediate_action_id: %s\\n\", id)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\t\n\tif !intermediateIDFound {\n\t\treturn nil, fmt.Errorf(\"未能验证intermediate_action_id\")\n\t}\n\t\n\t// 获取测试EID\n\ttestHits, _, err := p.getSearchResults(testCreds.Sign, 1, p.client) // 获取第一页测试结果\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"获取测试结果失败: %w\", err)\n\t}\n\t\n\tif len(testHits) == 0 {\n\t\treturn nil, fmt.Errorf(\"获取测试EID失败: 无搜索结果\")\n\t}\n\t\n\ttestEID := testHits[0].EID\n\t\n\tif DebugLog {\n\t\tfmt.Printf(\"panyq: 获取到测试EID: %s\\n\", testEID)\n\t}\n\t\n\t// 从剩余ID中排除已使用的ID\n\tnewRemainingIDs := make([]string, 0, len(remainingIDs)-1)\n\tfor _, id := range remainingIDs {\n\t\tif id != finalIDs[ActionIDKeys[1]] {\n\t\t\tnewRemainingIDs = append(newRemainingIDs, id)\n\t\t}","sourceCodeStart":512,"sourceCodeEnd":548,"githubUrl":"https://github.com/fish2018/pansou/blob/beaa56133755a548ebc51b090b3816e2ae044aa6/plugin/panyq/panyq.go#L512-L548","documentation":"After validating the credential and intermediate IDs, discoverActionIDs calls p.getSearchResults(testCreds.Sign, 1, p.client) to fetch a test result page, and that call returned an error. Discovery cannot obtain a test EID without it.","triggerScenarios":"Running discoverActionIDs when the search endpoint rejects the test Sign or fails (non-200, malformed JSON, timeout) for the test query — often right after many rapid discovery probes.","commonSituations":"Rate limiting / temporary IP block after intensive discovery probing; transient upstream 5xx; response format change breaking getSearchResults parsing.","solutions":["Retry discovery after a short backoff (transient or rate-limit failure).","Add delays between discovery probe calls to stay under the site's rate limits.","Inspect the wrapped getSearchResults error with DebugLog (HTTP status vs parse error).","Confirm the search API response format is unchanged; update the plugin if not."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"ids, err := plugin.DiscoverActionIDs()\nif err != nil && strings.Contains(err.Error(), \"获取测试结果失败\") {\n    time.Sleep(backoff)\n    ids, err = plugin.DiscoverActionIDs()\n}","preventionTips":["Back off after intensive probing","Log wrapped HTTP status vs parse errors","Monitor upstream search endpoint health","Update parser on schema changes"],"tags":["action-id","discovery","http","upstream"],"backgroundTag":"api-request-failed","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"}