From 99125386f0435a5d17dfcf9d6eb4489ad4857cfd Mon Sep 17 00:00:00 2001 From: "garreth.jeremiah@gmail.com" Date: Fri, 18 Dec 2015 12:06:51 -0500 Subject: [PATCH] XSpeeds - based on TVCHaosUK. Because f clourflare redirection, needs to hit the site twice. Once for cloudflare DDoS redirection (to obtain all necessary cookies) and second to login. --- src/Jackett/Content/logos/xspeeds.png | Bin 0 -> 21199 bytes src/Jackett/Indexers/XSpeeds.cs | 226 ++++++++++++++++++++++++++ src/Jackett/Jackett.csproj | 2 + 3 files changed, 228 insertions(+) create mode 100644 src/Jackett/Content/logos/xspeeds.png create mode 100644 src/Jackett/Indexers/XSpeeds.cs diff --git a/src/Jackett/Content/logos/xspeeds.png b/src/Jackett/Content/logos/xspeeds.png new file mode 100644 index 0000000000000000000000000000000000000000..81098b3461bb99d73a240dbf9f47bbc482028306 GIT binary patch literal 21199 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 ApplyConfiguration(JToken configJson) + { + configData.LoadValuesFromJson(configJson); + var pairs = new Dictionary { + { "username", configData.Username.Value }, + { "password", configData.Password.Value } + }; + + var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, SiteLink, true); + result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, result.Cookies, true, SearchUrl, SiteLink, true); + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => + { + CQ dom = result.Content; + var errorMessage = dom[".left_side table:eq(0) tr:eq(1)"].Text().Trim().Replace("\n\t", " "); + throw new ExceptionWithConfigData(errorMessage, configData); + }); + + try + { + // Get RSS key + var rssParams = new Dictionary { + { "feedtype", "download" }, + { "timezone", "0" }, + { "showrows", "50" } + }; + var rssPage = await PostDataWithCookies(GetRSSKeyUrl, rssParams, result.Cookies); + var match = Regex.Match(rssPage.Content, "(?<=secret_key\\=)([a-zA-z0-9]*)"); + configData.RSSKey.Value = match.Success ? match.Value : string.Empty; + if (string.IsNullOrWhiteSpace(configData.RSSKey.Value)) + throw new Exception("Failed to get RSS Key"); + SaveConfig(); + } + catch (Exception e) + { + IsConfigured = false; + throw e; + } + return IndexerConfigurationStatus.RequiresTesting; + } + + public async Task> PerformQuery(TorznabQuery query) + { + var releases = new List(); + var searchString = query.GetQueryString(); + + // If we have no query use the RSS Page as their server is slow enough at times! + if (string.IsNullOrWhiteSpace(searchString)) + { + var rssPage = await RequestStringWithCookiesAndRetry(string.Format(RSSUrl, configData.RSSKey.Value)); + var rssDoc = XDocument.Parse(rssPage.Content); + + foreach (var item in rssDoc.Descendants("item")) + { + var title = item.Descendants("title").First().Value; + var description = item.Descendants("description").First().Value; + var link = item.Descendants("link").First().Value; + var category = item.Descendants("category").First().Value; + var date = item.Descendants("pubDate").First().Value; + + var torrentIdMatch = Regex.Match(link, "(?<=id=)(\\d)*"); + var torrentId = torrentIdMatch.Success ? torrentIdMatch.Value : string.Empty; + if (string.IsNullOrWhiteSpace(torrentId)) + throw new Exception("Missing torrent id"); + + var infoMatch = Regex.Match(description, @"Category:\W(?.*)\W\/\WSeeders:\W(?\d*)\W\/\WLeechers:\W(?\d*)\W\/\WSize:\W(?[\d\.]*\W\S*)"); + if (!infoMatch.Success) + throw new Exception("Unable to find info"); + + var release = new ReleaseInfo() + { + Title = title, + Description = title, + Guid = new Uri(string.Format(DownloadUrl, torrentId)), + Comments = new Uri(string.Format(CommentUrl, torrentId)), + PublishDate = DateTime.ParseExact(date, "yyyy-MM-dd H:mm:ss", CultureInfo.InvariantCulture), //2015-08-08 21:20:31 + Link = new Uri(string.Format(DownloadUrl, torrentId)), + Seeders = ParseUtil.CoerceInt(infoMatch.Groups["seeders"].Value), + Peers = ParseUtil.CoerceInt(infoMatch.Groups["leechers"].Value), + Size = ReleaseInfo.GetBytes(infoMatch.Groups["size"].Value), + Category = MapTrackerCatToNewznab(infoMatch.Groups["cat"].Value) + }; + + // If its not apps or audio we can only mark as general TV + if (release.Category == 0) + release.Category = 5030; + + release.Peers += release.Seeders; + releases.Add(release); + } + } + else + { + var searchParams = new Dictionary { + { "do", "search" }, + { "keywords", searchString }, + { "search_type", "t_name" }, + { "category", "0" }, + { "include_dead_torrents", "no" } + }; + + var searchPage = await PostDataWithCookiesAndRetry(SearchUrl, searchParams); + try + { + CQ dom = searchPage.Content; + var rows = dom["#listtorrents tbody tr"]; + foreach (var row in rows.Skip(1)) + { + var release = new ReleaseInfo(); + var qRow = row.Cq(); + + release.Title = qRow.Find("td:eq(1) .tooltip-content div:eq(0)").Text(); + + if (string.IsNullOrWhiteSpace(release.Title)) + continue; + + release.Description = release.Title; + release.Guid = new Uri(qRow.Find("td:eq(2) a").Attr("href")); + release.Link = release.Guid; + release.Comments = new Uri(qRow.Find("td:eq(1) .tooltip-target a").Attr("href")); + release.PublishDate = DateTime.ParseExact(qRow.Find("td:eq(1) div").Last().Text().Trim(), "dd-MM-yyyy H:mm", CultureInfo.InvariantCulture); //08-08-2015 12:51 + release.Seeders = ParseUtil.CoerceInt(qRow.Find("td:eq(6)").Text()); + release.Peers = release.Seeders + ParseUtil.CoerceInt(qRow.Find("td:eq(7)").Text().Trim()); + release.Size = ReleaseInfo.GetBytes(qRow.Find("td:eq(4)").Text().Trim()); + + + var cat = row.Cq().Find("td:eq(0) a").First().Attr("href"); + var catSplit = cat.LastIndexOf('='); + if (catSplit > -1) + cat = cat.Substring(catSplit + 1); + release.Category = MapTrackerCatToNewznab(cat); + + // If its not apps or audio we can only mark as general TV + if (release.Category == 0) + release.Category = 5030; + + releases.Add(release); + } + } + catch (Exception ex) + { + OnParseError(searchPage.Content, ex); + } + } + + return releases; + } + } +} diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj index 08e3f039a..ec2350c60 100644 --- a/src/Jackett/Jackett.csproj +++ b/src/Jackett/Jackett.csproj @@ -209,6 +209,7 @@ + @@ -556,6 +557,7 @@ PreserveNewest + PreserveNewest