{"record":{"id":"aa0fdf1fcc2e1f94","repo":"Jackett/Jackett","slug":"could-not-find-releases-from-this-url-aa0fdf","errorCode":null,"errorMessage":"Could not find releases from this URL","messagePattern":"Could not find releases from this URL","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"warning","filePath":"src/Jackett.Common/Indexers/Definitions/SubsPlease.cs","lineNumber":84,"sourceCode":"        }\n\n        public override IIndexerRequestGenerator GetRequestGenerator()\n        {\n            return new SubsPleaseRequestGenerator(SiteLink);\n        }\n\n        public override IParseIndexerResponse GetParser()\n        {\n            return new SubsPleaseParser(SiteLink);\n        }\n\n        public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)\n        {\n            LoadValuesFromJson(configJson);\n            var releases = await PerformQuery(new TorznabQuery());\n\n            await ConfigureIfOK(string.Empty, releases.Any(), () =>\n                throw new Exception(\"Could not find releases from this URL\"));\n\n            return IndexerConfigurationStatus.Completed;\n        }\n\n        protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)\n        {\n            var releases = await base.PerformQuery(query);\n\n            if (query.SearchTerm.IsNotNullOrWhiteSpace())\n            {\n                releases = releases.Where(release => query.MatchQueryStringAND(release.Title));\n\n                // If we detected a resolution in the search terms earlier, filter by it\n                var resolutionMatch = Regex.Match(query.SearchTerm, @\"\\d{3,4}p\", RegexOptions.IgnoreCase);\n\n                if (resolutionMatch.Success)\n                {\n                    releases = releases.Where(release => release.Title.IndexOf(resolutionMatch.Value, StringComparison.OrdinalIgnoreCase) >= 0);","sourceCodeStart":66,"sourceCodeEnd":102,"githubUrl":"https://github.com/Jackett/Jackett/blob/adff1941476d8057a430cf55360356c1d23e971e/src/Jackett.Common/Indexers/Definitions/SubsPlease.cs#L66-L102","documentation":"Thrown in SubsPlease's ApplyConfiguration during the setup test. SubsPlease is a cardcast-style RSS/JSON source, so configuration simply loads values and runs PerformQuery; if it returns no releases the configuration is rejected because a live SubsPlease feed should always have content. This guards against a broken feed URL, an API outage, or a parser that returned nothing.","triggerScenarios":"PerformQuery(new TorznabQuery()) returns no releases. Causes: SubsPlease API/feed temporarily down, network/DNS issue reaching the feed, parser mismatch after a format change, or (rarely) a genuinely empty moment.","commonSituations":"First-time setup while the SubsPlease API is having an outage; Jackett version predates a feed format change; network egress blocked.","solutions":["Retry the configuration test shortly in case the feed returned nothing transiently.","Open the SubsPlease feed/site in a browser to confirm it is up.","Update Jackett so the parser matches the current SubsPlease feed format.","Check network/proxy settings so Jackett can reach the feed host."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// SubsPlease config is just a connectivity/parse test; one retry covers transient empties.\nint n = 0;\nwhile (true)\n{\n    try { return await indexer.ApplyConfiguration(configJson); }\n    catch (Exception ex) when (ex.Message.Contains(\"Could not find releases\") && ++n < 2)\n    { logger.Warn(\"SubsPlease returned nothing; retrying.\"); continue; }\n}","preventionTips":["Confirm the SubsPlease feed is up in a browser before configuring.","Update Jackett so the feed parser matches the current format."],"tags":["config","empty-results","subplease","network"],"backgroundTag":null,"analyzedSha":"adff1941476d8057a430cf55360356c1d23e971e","analyzedAt":"2026-08-13T15:06:32.872Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}