Lostfilm parse /new page in IndexerRequestsGenerarator to parse in IndexerParser only releases pages

This commit is contained in:
Dmitry Chepurovskiy 2022-06-09 19:07:09 +03:00
parent e13b0b7a97
commit ab207ac75b
No known key found for this signature in database
GPG key ID: 5B3A5FDCBFF9B3A4

View file

@ -182,8 +182,29 @@ public LostfilmRequestGenerator()
{
}
private IList<string> GetSearchPageURLs(string term, int? season, string episode)
private IList<string> GetNewReleaseURLs()
{
Logger.Debug("GetNewReleaseURLs");
var urls = new List<string>();
var req = new IndexerRequest(Settings.BaseUrl + "new", HttpAccept.Html);
var response = new IndexerResponse(req, HttpClient.ExecuteProxied(req.HttpRequest, Definition));
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
var rows = dom.QuerySelectorAll("div.row");
foreach (var r in rows)
{
var path = r.QuerySelector("a").GetAttribute("href");
urls.Add(Settings.BaseUrl + path.TrimStart('/'));
}
return urls;
}
private IList<string> GetSearchReleaseURLs(string term, int? season, string episode)
{
Logger.Debug("GetSearchReleaseURLs");
var urls = new List<string>();
/*
Torznab query for some series could contains sanitized title. E.g. "Star Wars: The Clone Wars" will become "Star Wars The Clone Wars".
@ -247,8 +268,8 @@ private IList<string> GetSearchPageURLs(string term, int? season, string episode
requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15);
requestBuilder.SetCookies(Indexer.GetCookiesPublic());
var req = new IndexerRequest(requestBuilder.Build());
var response = new IndexerResponse(req, HttpClient.ExecuteProxied(req.HttpRequest, Definition));
var request = new IndexerRequest(requestBuilder.Build());
var response = new IndexerResponse(request, HttpClient.ExecuteProxied(request.HttpRequest, Definition));
if (response.Content == null)
{
@ -322,13 +343,14 @@ private IEnumerable<IndexerRequest> GetPagedRequests(string term, int[] categori
if (string.IsNullOrWhiteSpace(term))
{
requestUrls.Add(Settings.BaseUrl + "new");
requestUrls.AddRange(GetNewReleaseURLs());
}
else
{
requestUrls.AddRange(GetSearchPageURLs(term, season, episode));
requestUrls.AddRange(GetSearchReleaseURLs(term, season, episode));
}
Logger.Debug("GetPagedRequests: " + requestUrls.Count.ToString());
foreach (var url in requestUrls)
{
yield return new IndexerRequest(url, HttpAccept.Html);
@ -607,38 +629,6 @@ private IList<TorrentInfo> ParseRelease(IndexerResponse indexerResponse)
}
private IList<ReleaseInfo> ParseNewResponse(IndexerResponse indexerResponse)
{
var releases = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("div.row");
foreach (var r in rows)
{
var link = r.QuerySelector("a").GetAttribute("href");
var releaseRequest = new IndexerRequest(_settings.BaseUrl + link.TrimStart('/'), HttpAccept.Html);
var releaseResponse = new IndexerResponse(releaseRequest, HttpClient.ExecuteProxied(releaseRequest.HttpRequest, Definition));
// Throw common http errors here before we try to parse
if (releaseResponse.HttpResponse.HasHttpError)
{
if ((int)releaseResponse.HttpResponse.StatusCode == 429)
{
throw new TooManyRequestsException(releaseRequest.HttpRequest, releaseResponse.HttpResponse);
}
else
{
throw new IndexerException(releaseResponse, "Http error code: " + releaseResponse.HttpResponse.StatusCode);
}
}
releases.AddRange(ParseRelease(releaseResponse));
}
return releases.ToArray();
}
private IList<ReleaseInfo> ParseSearchResponse(IndexerResponse indexerResponse)
{
var releases = new List<ReleaseInfo>();
return releases.ToArray();
@ -646,11 +636,6 @@ private IList<ReleaseInfo> ParseSearchResponse(IndexerResponse indexerResponse)
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
{
if (indexerResponse.Request.Url.Path == "/new")
{
return ParseNewResponse(indexerResponse);
}
if (indexerResponse.Request.Url.Path.Contains("/episode_"))
{
return ParseNewResponse(indexerResponse);