mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
SpeedCd: Change API to parsing
SpeedCD API no longer working, changed to parsing
This commit is contained in:
@@ -8,18 +8,17 @@ using NLog;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Text.RegularExpressions;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jackett.Models.IndexerConfig;
|
using Jackett.Models.IndexerConfig;
|
||||||
|
using System.Collections.Specialized;
|
||||||
|
|
||||||
namespace Jackett.Indexers
|
namespace Jackett.Indexers
|
||||||
{
|
{
|
||||||
public class SpeedCD : BaseIndexer, IIndexer
|
public class SpeedCD : BaseIndexer, IIndexer
|
||||||
{
|
{
|
||||||
private string LoginUrl { get { return SiteLink + "take.login.php"; } }
|
private string LoginUrl { get { return SiteLink + "take.login.php"; } }
|
||||||
private string SearchUrl { get { return SiteLink + "V3/API/API.php"; } }
|
private string SearchUrl { get { return SiteLink + "browse.php"; } }
|
||||||
private string CommentsUrl { get { return SiteLink + "t/{0}"; } }
|
|
||||||
private string DownloadUrl { get { return SiteLink + "download.php?torrent={0}"; } }
|
|
||||||
|
|
||||||
new ConfigurationDataBasicLogin configData
|
new ConfigurationDataBasicLogin configData
|
||||||
{
|
{
|
||||||
@@ -30,7 +29,7 @@ namespace Jackett.Indexers
|
|||||||
public SpeedCD(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps)
|
public SpeedCD(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps)
|
||||||
: base(name: "Speed.cd",
|
: base(name: "Speed.cd",
|
||||||
description: "Your home now!",
|
description: "Your home now!",
|
||||||
link: "http://speed.cd/",
|
link: "https://speed.cd/",
|
||||||
caps: new TorznabCapabilities(),
|
caps: new TorznabCapabilities(),
|
||||||
manager: i,
|
manager: i,
|
||||||
client: wc,
|
client: wc,
|
||||||
@@ -91,9 +90,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
Dictionary<string, string> qParams = new Dictionary<string, string>();
|
NameValueCollection qParams = new NameValueCollection();
|
||||||
qParams.Add("jxt", "4");
|
|
||||||
qParams.Add("jxw", "b");
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(query.SanitizedSearchTerm))
|
if (!string.IsNullOrEmpty(query.SanitizedSearchTerm))
|
||||||
{
|
{
|
||||||
@@ -106,39 +103,76 @@ namespace Jackett.Indexers
|
|||||||
qParams.Add("c" + cat, "1");
|
qParams.Add("c" + cat, "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
var response = await PostDataWithCookiesAndRetry(SearchUrl, qParams);
|
string urlSearch = SearchUrl;
|
||||||
|
if (qParams.Count > 0)
|
||||||
|
{
|
||||||
|
urlSearch += $"?{qParams.GetQueryString()}";
|
||||||
|
}
|
||||||
|
|
||||||
|
var response = await RequestStringWithCookiesAndRetry(urlSearch);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var jsonResult = JObject.Parse(response.Content);
|
|
||||||
var resultArray = ((JArray)jsonResult["Fs"])[0]["Cn"]["torrents"];
|
CQ dom = response.Content;
|
||||||
foreach (var jobj in resultArray)
|
var rows = dom["div[id='torrentTable'] > div[class='box torrentBox'] > div[class='boxContent'] > table > tbody > tr"];
|
||||||
|
|
||||||
|
foreach (IDomObject row in rows)
|
||||||
{
|
{
|
||||||
|
CQ torrentData = row.OuterHTML;
|
||||||
|
CQ cells = row.Cq().Find("td");
|
||||||
|
|
||||||
|
string title = torrentData.Find("a[class='torrent']").First().Text().Trim();
|
||||||
|
Uri link = new Uri(SiteLink + torrentData.Find("img[class='icos save']").First().Parent().Attr("href").Trim());
|
||||||
|
Uri guid = new Uri(SiteLink + torrentData.Find("a[class='torrent']").First().Attr("href").Trim().TrimStart('/'));
|
||||||
|
long size = ReleaseInfo.GetBytes(cells.Elements.ElementAt(4).InnerText);
|
||||||
|
|
||||||
|
int seeders = 0;
|
||||||
|
if (cells.Elements.ElementAt(5).FirstChild.HasChildren)
|
||||||
|
{
|
||||||
|
seeders = ParseUtil.CoerceInt(cells.Elements.ElementAt(5).FirstChild.InnerText);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
seeders = ParseUtil.CoerceInt(cells.Elements.ElementAt(5).InnerText);
|
||||||
|
};
|
||||||
|
|
||||||
|
int leechers = 0;
|
||||||
|
if (cells.Elements.ElementAt(6).FirstChild.HasChildren)
|
||||||
|
{
|
||||||
|
leechers = ParseUtil.CoerceInt(cells.Elements.ElementAt(6).FirstChild.InnerText);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
leechers = ParseUtil.CoerceInt(cells.Elements.ElementAt(6).InnerText);
|
||||||
|
}
|
||||||
|
|
||||||
|
string pubDateStr = torrentData.Find("span[class^='elapsedDate']").First().Attr("title").Trim().Replace(" at", "");
|
||||||
|
DateTime publishDate = DateTime.ParseExact(pubDateStr, "dddd, MMMM d, yyyy h:mmtt", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime();
|
||||||
|
|
||||||
|
long category = 0;
|
||||||
|
string cat = torrentData.Find("a[class='cat']").First().Attr("id").Trim();
|
||||||
|
long.TryParse(cat, out category);
|
||||||
|
|
||||||
|
|
||||||
var release = new ReleaseInfo();
|
var release = new ReleaseInfo();
|
||||||
|
|
||||||
var id = (int)jobj["id"];
|
release.Title = title;
|
||||||
release.Comments = new Uri(string.Format(CommentsUrl, id));
|
release.Guid = guid;
|
||||||
release.Guid = release.Comments;
|
release.Link = link;
|
||||||
release.Link = new Uri(string.Format(DownloadUrl, id));
|
release.PublishDate = publishDate;
|
||||||
|
release.Size = size;
|
||||||
release.Title = Regex.Replace((string)jobj["name"], "<.*?>", String.Empty);
|
release.Description = release.Title;
|
||||||
|
release.Seeders = seeders;
|
||||||
var SizeStr = ((string)jobj["size"]);
|
release.Peers = seeders + leechers;
|
||||||
release.Size = ReleaseInfo.GetBytes(SizeStr);
|
release.MinimumRatio = 1;
|
||||||
|
release.MinimumSeedTime = 172800;
|
||||||
var cat = (int)jobj["cat"];
|
release.Category = MapTrackerCatToNewznab(category.ToString());
|
||||||
release.Category = MapTrackerCatToNewznab(cat.ToString());
|
release.Comments = guid;
|
||||||
|
|
||||||
release.Seeders = ParseUtil.CoerceInt((string)jobj["seed"]);
|
|
||||||
release.Peers = ParseUtil.CoerceInt((string)jobj["leech"]) + release.Seeders;
|
|
||||||
|
|
||||||
// ex: Tuesday, May 26, 2015 at 6:00pm
|
|
||||||
var dateStr = new Regex("title=\"(.*?)\"").Match((string)jobj["added"]).Groups[1].ToString();
|
|
||||||
dateStr = dateStr.Replace(" at", "");
|
|
||||||
var dateTime = DateTime.ParseExact(dateStr, "dddd, MMMM d, yyyy h:mmtt", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
|
|
||||||
release.PublishDate = dateTime.ToLocalTime();
|
|
||||||
|
|
||||||
releases.Add(release);
|
releases.Add(release);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user