From 90dc75597db8c8673b1bd4f3e84b757321148c84 Mon Sep 17 00:00:00 2001 From: Diego Heras Date: Tue, 28 Apr 2020 22:36:42 +0200 Subject: [PATCH] speedcd: fix new layout. resolves #8392 (#8399) --- src/Jackett.Common/Indexers/SpeedCD.cs | 39 +++++++++++++++----------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/Jackett.Common/Indexers/SpeedCD.cs b/src/Jackett.Common/Indexers/SpeedCD.cs index 8d8f48e1b..19df8ebaa 100644 --- a/src/Jackett.Common/Indexers/SpeedCD.cs +++ b/src/Jackett.Common/Indexers/SpeedCD.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using AngleSharp.Html.Parser; +using Jackett.Common.Helpers; using Jackett.Common.Models; using Jackett.Common.Models.IndexerConfig; using Jackett.Common.Services.Interfaces; @@ -17,7 +18,7 @@ namespace Jackett.Common.Indexers { public class SpeedCD : BaseWebIndexer { - private string SearchUrl => SiteLink + "browse.php"; + private string SearchUrl => SiteLink + "browse/"; public override string[] AlternativeSiteLinks { get; protected set; } = { "https://speed.cd/", @@ -105,20 +106,26 @@ namespace Jackett.Common.Indexers { var releases = new List(); - var qc = new List>(); // NameValueCollection don't support c[]=30&c[]=52 - if (query.IsImdbQuery) - { - qc.Add("search", query.ImdbID); - qc.Add("d", "on"); - } - else - qc.Add("search", query.GetQueryString()); + // the order of the params is important! + var qc = new List(); var catList = MapTorznabCapsToTrackers(query); foreach (var cat in catList) - qc.Add("c[]", cat); + qc.Add(cat); - var searchUrl = SearchUrl + "?" + qc.GetQueryString(); + if (query.IsImdbQuery) + { + qc.Add("deep"); + qc.Add("q"); + qc.Add(query.ImdbID); + } + else + { + qc.Add("q"); + qc.Add(WebUtilityHelpers.UrlEncode(query.GetQueryString(), Encoding)); + } + + var searchUrl = SearchUrl + string.Join("/", qc); var response = await RequestStringWithCookiesAndRetry(searchUrl); if (!response.Content.Contains("/logout.php")) throw new Exception("The user is not logged in. It is possible that the cookie has expired or you " + @@ -137,15 +144,15 @@ namespace Jackett.Common.Indexers var title = row.QuerySelector("td[class='lft'] > div > a").TextContent.Trim(); var link = new Uri(SiteLink + row.QuerySelector("img[title='Download']").ParentElement.GetAttribute("href").TrimStart('/')); var comments = new Uri(SiteLink + row.QuerySelector("td[class='lft'] > div > a").GetAttribute("href").TrimStart('/')); - var size = ReleaseInfo.GetBytes(cells[4].TextContent); - var grabs = ParseUtil.CoerceInt(cells[5].TextContent); - var seeders = ParseUtil.CoerceInt(cells[6].TextContent); - var leechers = ParseUtil.CoerceInt(cells[7].TextContent); + var size = ReleaseInfo.GetBytes(cells[5].TextContent); + var grabs = ParseUtil.CoerceInt(cells[6].TextContent); + var seeders = ParseUtil.CoerceInt(cells[7].TextContent); + var leechers = ParseUtil.CoerceInt(cells[8].TextContent); var pubDateStr = row.QuerySelector("span[class^='elapsedDate']").GetAttribute("title").Replace(" at", ""); var publishDate = DateTime.ParseExact(pubDateStr, "dddd, MMMM d, yyyy h:mmtt", CultureInfo.InvariantCulture); - var cat = row.QuerySelector("a[href^='?c[]=']").GetAttribute("href").Replace("?c[]=", ""); + var cat = row.QuerySelector("a").GetAttribute("href").Split('/').Last(); var downloadVolumeFactor = row.QuerySelector("span:contains(\"[Freeleech]\")") != null ? 0 : 1; var release = new ReleaseInfo