mirror of https://github.com/Jackett/Jackett
SceneTime: Fix Column parsing
SceneTime: Column numbers seem to be related to user settings, use column names instead. Add category mapping support
This commit is contained in:
parent
80686c81ee
commit
f2a899eea3
|
@ -7,14 +7,11 @@ using Newtonsoft.Json.Linq;
|
||||||
using NLog;
|
using NLog;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
|
||||||
using System.Net.Http;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Web;
|
|
||||||
using Jackett.Models.IndexerConfig;
|
using Jackett.Models.IndexerConfig;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Collections.Specialized;
|
||||||
|
|
||||||
namespace Jackett.Indexers
|
namespace Jackett.Indexers
|
||||||
{
|
{
|
||||||
|
@ -34,13 +31,15 @@ namespace Jackett.Indexers
|
||||||
: base(name: "SceneTime",
|
: base(name: "SceneTime",
|
||||||
description: "Always on time",
|
description: "Always on time",
|
||||||
link: "https://www.scenetime.com/",
|
link: "https://www.scenetime.com/",
|
||||||
caps: TorznabUtil.CreateDefaultTorznabTVCaps(),
|
caps: new TorznabCapabilities(),
|
||||||
manager: i,
|
manager: i,
|
||||||
client: w,
|
client: w,
|
||||||
logger: l,
|
logger: l,
|
||||||
p: ps,
|
p: ps,
|
||||||
configData: new ConfigurationDataBasicLogin())
|
configData: new ConfigurationDataBasicLogin("For best results, change the 'Torrents per page' setting to the maximum in your profile on the SceneTime webpage."))
|
||||||
{
|
{
|
||||||
|
AddCategoryMapping(77, TorznabCatType.TVSD);
|
||||||
|
AddCategoryMapping(9, TorznabCatType.TVHD);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
public async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||||
|
@ -62,23 +61,47 @@ namespace Jackett.Indexers
|
||||||
return IndexerConfigurationStatus.RequiresTesting;
|
return IndexerConfigurationStatus.RequiresTesting;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dictionary<string, string> GetSearchFormData(string searchString)
|
|
||||||
{
|
|
||||||
return new Dictionary<string, string> {
|
|
||||||
{ "c2", "1" }, { "c43", "1" }, { "c9", "1" }, { "c63", "1" }, { "c77", "1" }, { "c100", "1" }, { "c101", "1" },
|
|
||||||
{ "cata", "yes" }, { "sec", "jax" },
|
|
||||||
{ "search", searchString}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
NameValueCollection qParams = new NameValueCollection();
|
||||||
var results = await PostDataWithCookiesAndRetry(SearchUrl, GetSearchFormData(query.GetQueryString()));
|
qParams.Add("cata", "yes");
|
||||||
|
qParams.Add("sec", "jax");
|
||||||
|
|
||||||
|
List<string> catList = MapTorznabCapsToTrackers(query);
|
||||||
|
foreach (string cat in catList)
|
||||||
|
{
|
||||||
|
qParams.Add("c" + cat, "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(query.SanitizedSearchTerm))
|
||||||
|
{
|
||||||
|
qParams.Add("search", query.GetQueryString());
|
||||||
|
}
|
||||||
|
|
||||||
|
string torrentSearchUrl = $"{SearchUrl}?{qParams.GetQueryString()}";
|
||||||
|
|
||||||
|
var results = await RequestStringWithCookiesAndRetry(torrentSearchUrl);
|
||||||
|
List<ReleaseInfo> releases = ParseResponse(results.Content);
|
||||||
|
|
||||||
|
return releases;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ReleaseInfo> ParseResponse(string htmlResponse)
|
||||||
|
{
|
||||||
|
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
CQ dom = results.Content;
|
CQ dom = htmlResponse;
|
||||||
|
|
||||||
|
List<string> headerColumns = dom["table[class*='movehere']"].First().Find("tbody > tr > td[class='cat_Head']").Select(x => x.Cq().Text()).ToList();
|
||||||
|
int categoryIndex = headerColumns.FindIndex(x => x.Equals("Type"));
|
||||||
|
int nameIndex = headerColumns.FindIndex(x => x.Equals("Name"));
|
||||||
|
int sizeIndex = headerColumns.FindIndex(x => x.Equals("Size"));
|
||||||
|
int seedersIndex = headerColumns.FindIndex(x => x.Equals("Seeders"));
|
||||||
|
int leechersIndex = headerColumns.FindIndex(x => x.Equals("Leechers"));
|
||||||
|
|
||||||
var rows = dom["tr.browse"];
|
var rows = dom["tr.browse"];
|
||||||
foreach (var row in rows)
|
foreach (var row in rows)
|
||||||
{
|
{
|
||||||
|
@ -86,7 +109,12 @@ namespace Jackett.Indexers
|
||||||
release.MinimumRatio = 1;
|
release.MinimumRatio = 1;
|
||||||
release.MinimumSeedTime = 172800;
|
release.MinimumSeedTime = 172800;
|
||||||
|
|
||||||
var descCol = row.ChildElements.ElementAt(1);
|
var categoryCol = row.ChildElements.ElementAt(categoryIndex);
|
||||||
|
string catLink = categoryCol.Cq().Find("a").Attr("href");
|
||||||
|
string catId = new Regex(@"\?cat=(\d*)").Match(catLink).Groups[1].ToString().Trim();
|
||||||
|
release.Category = MapTrackerCatToNewznab(catId);
|
||||||
|
|
||||||
|
var descCol = row.ChildElements.ElementAt(nameIndex);
|
||||||
var qDescCol = descCol.Cq();
|
var qDescCol = descCol.Cq();
|
||||||
var qLink = qDescCol.Find("a");
|
var qLink = qDescCol.Find("a");
|
||||||
release.Title = qLink.Text();
|
release.Title = qLink.Text();
|
||||||
|
@ -98,19 +126,20 @@ namespace Jackett.Indexers
|
||||||
|
|
||||||
release.PublishDate = DateTimeUtil.FromTimeAgo(descCol.ChildNodes.Last().InnerText);
|
release.PublishDate = DateTimeUtil.FromTimeAgo(descCol.ChildNodes.Last().InnerText);
|
||||||
|
|
||||||
var sizeStr = row.ChildElements.ElementAt(3).Cq().Text();
|
var sizeStr = row.ChildElements.ElementAt(sizeIndex).Cq().Text();
|
||||||
release.Size = ReleaseInfo.GetBytes(sizeStr);
|
release.Size = ReleaseInfo.GetBytes(sizeStr);
|
||||||
|
|
||||||
release.Seeders = ParseUtil.CoerceInt(row.ChildElements.ElementAt(4).Cq().Text().Trim());
|
release.Seeders = ParseUtil.CoerceInt(row.ChildElements.ElementAt(seedersIndex).Cq().Text().Trim());
|
||||||
release.Peers = ParseUtil.CoerceInt(row.ChildElements.ElementAt(5).Cq().Text().Trim()) + release.Seeders;
|
release.Peers = ParseUtil.CoerceInt(row.ChildElements.ElementAt(leechersIndex).Cq().Text().Trim()) + release.Seeders;
|
||||||
|
|
||||||
releases.Add(release);
|
releases.Add(release);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
OnParseError(results.Content, ex);
|
OnParseError(htmlResponse, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases;
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue