From e56875f1a33e4fb42ea6fba065494ef0ac7aa200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Simonsen?= Date: Sat, 24 Oct 2015 16:54:32 +0200 Subject: [PATCH] Added new danish tracker: DanishBits Added a new closed tracker from Denmark. It's easier to get into than NextGen, and is a good backup for missing episodes on NextGen. --- src/Jackett/Content/logos/danishbits.PNG | Bin 0 -> 7947 bytes src/Jackett/Indexers/DanishBits.cs | 267 +++++++++++++++++++++++ src/Jackett/Jackett.csproj | 3 +- 3 files changed, 269 insertions(+), 1 deletion(-) create mode 100644 src/Jackett/Content/logos/danishbits.PNG create mode 100644 src/Jackett/Indexers/DanishBits.cs diff --git a/src/Jackett/Content/logos/danishbits.PNG b/src/Jackett/Content/logos/danishbits.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e2b7c372f59cd2bf80aed6093b30add0b6eeb71b GIT binary patch literal 7947 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 TDG&d9U?VBXs{yKI&4d332KVOR literal 0 HcmV?d00001 diff --git a/src/Jackett/Indexers/DanishBits.cs b/src/Jackett/Indexers/DanishBits.cs new file mode 100644 index 000000000..cfa44268e --- /dev/null +++ b/src/Jackett/Indexers/DanishBits.cs @@ -0,0 +1,267 @@ +using CsQuery; +using Jackett.Indexers; +using Jackett.Models; +using Jackett.Services; +using Jackett.Utils; +using Jackett.Utils.Clients; +using Newtonsoft.Json.Linq; +using NLog; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Web; +using System.Web.UI.WebControls; +using CsQuery.ExtensionMethods; +using Jackett.Models.IndexerConfig; + +namespace Jackett.Indexers +{ + public class DanishBits : BaseIndexer, IIndexer + { + private string LoginUrl { get { return SiteLink + "login.php"; } } + private string SearchUrl { get { return SiteLink + "torrents.php"; } } + + new NxtGnConfigurationData configData + { + get { return (NxtGnConfigurationData)base.configData; } + set { base.configData = value; } + } + + public DanishBits(IIndexerManagerService i, Logger l, IWebClient c, IProtectionService ps) + : base(name: "DanishBits", + description: "A danish closed torrent tracker", + link: "https://danishbits.org/", + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), + manager: i, + client: c, + logger: l, + p: ps, + configData: new NxtGnConfigurationData()) + { + // Movies Mapping + // DanishBits HD + AddCategoryMapping(2, TorznabCatType.MoviesHD); + AddCategoryMapping(2, TorznabCatType.MoviesWEBDL); + + // Danske film + AddCategoryMapping(3, TorznabCatType.MoviesHD); + AddCategoryMapping(3, TorznabCatType.MoviesWEBDL); + AddCategoryMapping(3, TorznabCatType.MoviesDVD); + AddCategoryMapping(3, TorznabCatType.MoviesForeign); + AddCategoryMapping(3, TorznabCatType.MoviesSD); + + // DVDR Nordic + AddCategoryMapping(10, TorznabCatType.MoviesDVD); + AddCategoryMapping(10, TorznabCatType.MoviesForeign); + + // Custom + AddCategoryMapping(28, TorznabCatType.MoviesHD); + AddCategoryMapping(28, TorznabCatType.MoviesDVD); + + // Custom HD + AddCategoryMapping(29, TorznabCatType.MoviesHD); + AddCategoryMapping(29, TorznabCatType.MoviesWEBDL); + + // Custom Tablet + AddCategoryMapping(31, TorznabCatType.MoviesSD); + + if (!configData.OnlyDanishCategories.Value) + { + // Bluray + AddCategoryMapping(8, TorznabCatType.MoviesBluRay); + + // Boxset + AddCategoryMapping(9, TorznabCatType.MoviesHD); + AddCategoryMapping(9, TorznabCatType.MoviesForeign); + AddCategoryMapping(9, TorznabCatType.MoviesDVD); + + // DVDR + AddCategoryMapping(11, TorznabCatType.MoviesDVD); + + // HDx264 + AddCategoryMapping(22, TorznabCatType.MoviesHD); + + // XviD/MP4/SDx264 + AddCategoryMapping(24, TorznabCatType.MoviesSD); + } + + // TV Mapping + // DanishBits TV + AddCategoryMapping(1, TorznabCatType.TVHD); + AddCategoryMapping(1, TorznabCatType.TVWEBDL); + + // Dansk TV + AddCategoryMapping(4, TorznabCatType.TVHD); + AddCategoryMapping(4, TorznabCatType.TVWEBDL); + AddCategoryMapping(4, TorznabCatType.TVFOREIGN); + AddCategoryMapping(4, TorznabCatType.TVSD); + + // Custom TV + AddCategoryMapping(30, TorznabCatType.TVHD); + AddCategoryMapping(30, TorznabCatType.TVWEBDL); + + if (!configData.OnlyDanishCategories.Value) + { + // TV + AddCategoryMapping(20, TorznabCatType.TVHD); + AddCategoryMapping(20, TorznabCatType.TVSD); + AddCategoryMapping(20, TorznabCatType.TVWEBDL); + + // TV Boxset + AddCategoryMapping(21, TorznabCatType.TVHD); + AddCategoryMapping(21, TorznabCatType.TVSD); + AddCategoryMapping(21, TorznabCatType.TVWEBDL); + } + + // E-book + AddCategoryMapping(12, TorznabCatType.BooksEbook); + // Audiobooks + AddCategoryMapping(6, TorznabCatType.AudioAudiobook); + } + + public async Task ApplyConfiguration(JToken configJson) + { + configData.LoadValuesFromJson(configJson); + var pairs = new Dictionary { + { "username", configData.Username.Value }, + { "password", configData.Password.Value }, + { "langlang", null }, + { "login", "login" } + }; + // Get inital cookies + CookieHeader = string.Empty; + var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, CookieHeader, true, null, LoginUrl); + + await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php"), () => + { + CQ dom = response.Content; + var messageEl = dom["#loginform .warning"]; + var errorMessage = messageEl.Text().Trim(); + throw new ExceptionWithConfigData(errorMessage, configData); + }); + return IndexerConfigurationStatus.RequiresTesting; + } + + public async Task> PerformQuery(TorznabQuery query) + { + var releasesPerPage = 100; + var releases = new List(); + + var page = (query.Offset/releasesPerPage) + 1; + + string episodeSearchUrl; + if (string.IsNullOrEmpty(query.GetQueryString())) + { + episodeSearchUrl = SearchUrl + "?page=" + page; + } + else + { + var cats = MapTorznabCapsToTrackers(query); + var catsUrlPart = string.Join("&", cats.Select(c => $"filter_{c}=on")); + episodeSearchUrl = $"{SearchUrl}?page={page}&group=0&{catsUrlPart}&search={HttpUtility.UrlEncode(query.GetQueryString())}&pre_type=torrents&type="; + } + var results = await RequestStringWithCookiesAndRetry(episodeSearchUrl); + try + { + CQ dom = results.Content; + var rows = dom["#torrent_table tr.torrent"]; + foreach (var row in rows) + { + var qRow = row.Cq(); + var release = new ReleaseInfo + { + MinimumRatio = 1, + MinimumSeedTime = 172800 + }; + + var catAnchor = row.FirstChild.FirstChild; + var catUrl = catAnchor.GetAttribute("href"); + var catStr = Regex.Match(catUrl, "filter_(?[0-9]+)=on").Groups["catNo"].Value; + var catNo = int.Parse(catStr); + var moviesCatsDanish = new[] { 2,3,10,28,29,31 }; + var moviesCatsIntl = new[] { 8,9,11,22,24 }; + var moviesCats = configData.OnlyDanishCategories.Value + ? moviesCatsDanish + : moviesCatsDanish.Concat(moviesCatsIntl); + var seriesCatsDanish = new[] { 1,4,30 }; + var seriesCatsIntl = new[] { 20,21 }; + var seriesCats = configData.OnlyDanishCategories.Value + ? seriesCatsDanish + : seriesCatsDanish.Concat(seriesCatsIntl); + if (moviesCats.Contains(catNo)) + release.Category = TorznabCatType.Movies.ID; + else if (seriesCats.Contains(catNo)) + release.Category = TorznabCatType.TV.ID; + else if (catNo == 12) + release.Category = TorznabCatType.BooksEbook.ID; + else if (catNo == 6) + release.Category = TorznabCatType.AudioAudiobook.ID; + else + continue; + + var dlUrlAnchor = qRow.Find("span.right a").FirstElement(); + var dlUrl = dlUrlAnchor.GetAttribute("href"); + release.Link = new Uri(SiteLink + dlUrl); + + var titleAnchor = qRow.Find("div.croptorrenttext a").FirstElement(); + var title = titleAnchor.GetAttribute("title"); + release.Title = title; + + var torrentLink = titleAnchor.GetAttribute("href"); + release.Guid = new Uri(SiteLink + torrentLink); + release.Comments = new Uri(SearchUrl + torrentLink); + + var addedElement = qRow.Find("span.time").FirstElement(); + var addedStr = addedElement.GetAttribute("title"); + release.PublishDate = DateTime.ParseExact(addedStr, "MMM dd yyyy, HH:mm", + CultureInfo.InvariantCulture); + + var columns = qRow.Children(); + var seedersElement = columns.Reverse().Skip(1).First(); + release.Seeders = int.Parse(seedersElement.InnerText); + + var leechersElement = columns.Last().FirstElement(); + release.Peers = release.Seeders + int.Parse(leechersElement.InnerText); + + var sizeElement = columns.Skip(2).First(); + var sizeStr = sizeElement.InnerText; + release.Size = ReleaseInfo.GetBytes(sizeStr); + + var imdbAnchor = qRow.Find(".torrentnotes a") + .FirstOrDefault(a => a.GetAttribute("href").Contains("imdb.com")); + if (imdbAnchor != null) + { + var referrerUrl = imdbAnchor.GetAttribute("href"); + release.Imdb = long.Parse(Regex.Match(referrerUrl, "tt(?[0-9]+)").Groups["imdbId"].Value); + } + releases.Add(release); + } + } + catch (Exception ex) + { + OnParseError(results.Content, ex); + } + return releases; + } + + public class NxtGnConfigurationData : ConfigurationData + { + public NxtGnConfigurationData() + { + Username = new StringItem { Name = "Username" }; + Password = new StringItem { Name = "Password" }; + OnlyDanishCategories = new BoolItem { Name = "Only Danish Categories" }; + } + public StringItem Username { get; private set; } + public StringItem Password { get; private set; } + public BoolItem OnlyDanishCategories { get; private set; } + } + } +} diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj index 3e27aa3c8..1f0764f31 100644 --- a/src/Jackett/Jackett.csproj +++ b/src/Jackett/Jackett.csproj @@ -186,6 +186,7 @@ + @@ -635,4 +636,4 @@ - + \ No newline at end of file