From f05eca3a9f406bf7128f7bdb3f7f01e62fd2c576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20L=C3=B6wenhamn?= <lowet84@gmail.com> Date: Mon, 15 Feb 2016 13:10:06 +0100 Subject: [PATCH] Added support for ILoveTorrents.me --- src/Jackett/Content/logos/ilovetorrents.png | Bin 0 -> 22835 bytes src/Jackett/Indexers/ILoveTorrents.cs | 162 ++++++++++++++++++++ src/Jackett/Jackett.csproj | 4 + 3 files changed, 166 insertions(+) create mode 100644 src/Jackett/Content/logos/ilovetorrents.png create mode 100644 src/Jackett/Indexers/ILoveTorrents.cs diff --git a/src/Jackett/Content/logos/ilovetorrents.png b/src/Jackett/Content/logos/ilovetorrents.png new file mode 100644 index 0000000000000000000000000000000000000000..b85a68bacbea9787056ef60e3c7a2ac9c1792902 GIT binary patch literal 22835 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 literal 0 HcmV?d00001 diff --git a/src/Jackett/Indexers/ILoveTorrents.cs b/src/Jackett/Indexers/ILoveTorrents.cs new file mode 100644 index 00000000..31dd2c4a --- /dev/null +++ b/src/Jackett/Indexers/ILoveTorrents.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CsQuery; +using CsQuery.ExtensionMethods.Internal; +using Jackett.Models; +using Jackett.Models.IndexerConfig; +using Jackett.Services; +using Jackett.Utils; +using Jackett.Utils.Clients; +using Newtonsoft.Json.Linq; +using NLog; + +namespace Jackett.Indexers +{ + // ReSharper disable once InconsistentNaming + public class ILoveTorrents : BaseIndexer, IIndexer + { + private string BrowseUrl => SiteLink + "browse.php"; + private string LoginUrl => SiteLink + "takelogin.php"; + + new ConfigurationDataBasicLogin configData + { + get { return (ConfigurationDataBasicLogin)base.configData; } + set { base.configData = value; } + } + + public ILoveTorrents(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps) + : base(name: "ILoveTorrents", + description: "ILT", + link: "https://www.ilovetorrents.me/", + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), + manager: i, + client: wc, + logger: l, + p: ps, + configData: new ConfigurationDataBasicLogin()) + { + AddCategoryMapping(7, TorznabCatType.TV); + AddCategoryMapping(8, TorznabCatType.TVHD); + + AddCategoryMapping(80, TorznabCatType.MoviesBluRay); + AddCategoryMapping(20, TorznabCatType.MoviesDVD); + AddCategoryMapping(41, TorznabCatType.MoviesHD); + AddCategoryMapping(19, TorznabCatType.Movies); + } + + public async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson) + { + configData.LoadValuesFromJson(configJson); + var pairs = new Dictionary<string, string> { + { "username", configData.Username.Value }, + { "password", configData.Password.Value }, + { "returnto", "/" }, + { "login", "Log in!" } + }; + + var loginPage = await RequestStringWithCookies(SiteLink, string.Empty); + + var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, SiteLink, SiteLink); + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => + { + CQ dom = result.Content; + var messageEl = dom["body > div"].First(); + var errorMessage = messageEl.Text().Trim(); + throw new ExceptionWithConfigData(errorMessage, configData); + }); + return IndexerConfigurationStatus.RequiresTesting; + } + + public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query) + { + var releases = new List<ReleaseInfo>(); + var searchString = query.GetQueryString(); + var searchUrl = BrowseUrl; + var trackerCats = MapTorznabCapsToTrackers(query); + var queryCollection = new NameValueCollection(); + + // Tracker can only search OR return things in categories + if (!string.IsNullOrWhiteSpace(searchString)) + { + queryCollection.Add("search", searchString); + queryCollection.Add("cat", "0"); + } + else + { + foreach (var cat in MapTorznabCapsToTrackers(query)) + { + queryCollection.Add("c" + cat, "1"); + } + + queryCollection.Add("incldead", "0"); + } + + searchUrl += "?" + queryCollection.GetQueryString(); + + await ProcessPage(releases, searchUrl); + return releases; + } + + private async Task ProcessPage(List<ReleaseInfo> releases, string searchUrl) + { + var response = await RequestStringWithCookiesAndRetry(searchUrl, null, BrowseUrl); + var results = response.Content; + try + { + CQ dom = results; + + var rows = dom[".koptekst tr"]; + foreach (var row in rows.Skip(1)) + { + var release = new ReleaseInfo(); + + var link = row.Cq().Find("td:eq(2) a:eq(0)").First(); + var text = row.Cq().Find("td:eq(1) a:eq(0)").First(); + release.Guid = new Uri(SiteLink + link.Attr("href")); + release.Comments = release.Guid; + release.Title = text.Text().Trim(); //link.Text().Trim(); + release.Description = release.Title; + + // If we search an get no results, we still get a table just with no info. + if (string.IsNullOrWhiteSpace(release.Title)) + { + break; + } + + // Check if the release has been assigned a category + if (row.Cq().Find("td:eq(0) a").Length > 0) + { + var cat = row.Cq().Find("td:eq(0) a").First().Attr("href").Substring(15); + release.Category = MapTrackerCatToNewznab(cat); + } + + var qLink = row.Cq().Find("td:eq(1) a").First(); + release.Link = new Uri(SiteLink + qLink.Attr("href")); + + var added = row.Cq().Find("td:eq(7)").First().Text().Trim(); + var date = added.Substring(0, 10); + var time = added.Substring(12, 8); + var dateTime = date + time; + release.PublishDate = DateTime.ParseExact(dateTime, "yyyy-MM-ddHH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime(); + + var sizeStr = row.Cq().Find("td:eq(8)").First().Text().Trim(); + release.Size = ReleaseInfo.GetBytes(sizeStr); + + release.Seeders = ParseUtil.CoerceInt(row.Cq().Find("td:eq(10)").First().Text().Trim()); + release.Peers = ParseUtil.CoerceInt(row.Cq().Find("td:eq(11)").First().Text().Trim()) + release.Seeders; + + releases.Add(release); + } + } + catch (Exception ex) + { + OnParseError(results, ex); + } + } + } +} diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj index 3ce9f8f8..78732f22 100644 --- a/src/Jackett/Jackett.csproj +++ b/src/Jackett/Jackett.csproj @@ -201,6 +201,7 @@ <Compile Include="Indexers\DanishBits.cs" /> <Compile Include="Indexers\Abnormal.cs" /> <Compile Include="Indexers\GFTracker.cs" /> + <Compile Include="Indexers\ILoveTorrents.cs" /> <Compile Include="Indexers\RevolutionTT.cs" /> <Compile Include="Indexers\TehConnection.cs" /> <Compile Include="Indexers\Hounddawgs.cs" /> @@ -478,6 +479,9 @@ <Content Include="Content\logos\hdtorrents.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\logos\ilovetorrents.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\logos\immortalseed.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> -- GitLab