1
0
Fork 0
mirror of https://github.com/Jackett/Jackett synced 2025-02-22 14:20:57 +00:00

- Allow download from mirrors (#4298)

This commit is contained in:
snamds 2018-12-14 22:56:33 +01:00 committed by garfield69
parent ed86046377
commit 887d5d9f59
2 changed files with 75 additions and 39 deletions

View file

@ -46,7 +46,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* LimeTorrents * LimeTorrents
* MagnetDL * MagnetDL
* MejorTorrent <!-- maintained by ivandelabeldad --> * MejorTorrent <!-- maintained by ivandelabeldad -->
* Newpct (aka: tvsinpagar, descargas2020, torrentlocura, torrentrapid, etc) * Newpct (aka: tvsinpagar, descargas2020, torrentlocura, torrentrapid, tumejortorrent, etc)
* Nyaa.si * Nyaa.si
* Nyaa-Pantsu * Nyaa-Pantsu
* Nyoo * Nyoo

View file

@ -56,10 +56,17 @@ namespace Jackett.Common.Indexers
} }
} }
private static Uri DefaultSiteLinkUri = new Uri("http://descargas2020.com/"); private static Uri[] SiteLinkUris = new Uri[]
private Uri _siteUri; {
new Uri("http://descargas2020.com/"),
new Uri("http://torrentrapid.com/"),
new Uri("http://torrentlocura.com/"),
new Uri("http://tumejortorrent.com/"),
new Uri("http://www.tvsinpagar.com/"),
};
private NewpctRelease _mostRecentRelease; private NewpctRelease _mostRecentRelease;
private char[] _wordSeparators = new char[] { ' ', '.', ',', ';', '(', ')', '-', '_' }; private char[] _wordSeparators = new char[] { ' ', '.', ',', ';', '(', ')', '[', ']', '-', '_' };
private int _wordNotFoundScore = 100000; private int _wordNotFoundScore = 100000;
private Regex _searchStringRegex = new Regex(@"(.+?)S0?(\d+)(E0?(\d+))?$", RegexOptions.IgnoreCase); private Regex _searchStringRegex = new Regex(@"(.+?)S0?(\d+)(E0?(\d+))?$", RegexOptions.IgnoreCase);
private Regex _titleListRegex = new Regex(@"Serie( *Descargar)?(.+?)(Temporada(.+?)(\d+)(.+?))?Capitulos?(.+?)(\d+)((.+?)(\d+))?(.+?)-(.+?)Calidad(.*)", RegexOptions.IgnoreCase); private Regex _titleListRegex = new Regex(@"Serie( *Descargar)?(.+?)(Temporada(.+?)(\d+)(.+?))?Capitulos?(.+?)(\d+)((.+?)(\d+))?(.+?)-(.+?)Calidad(.*)", RegexOptions.IgnoreCase);
@ -67,7 +74,7 @@ namespace Jackett.Common.Indexers
private Regex _titleClassicTvQualityRegex = new Regex(@"\[([^\]]*HDTV[^\]]*)", RegexOptions.IgnoreCase); private Regex _titleClassicTvQualityRegex = new Regex(@"\[([^\]]*HDTV[^\]]*)", RegexOptions.IgnoreCase);
private int _maxDailyPages = 7; private int _maxDailyPages = 7;
private int _maxMoviesPages = 20; private int _maxMoviesPages = 30;
private int _maxEpisodesListPages = 100; private int _maxEpisodesListPages = 100;
private int[] _allTvCategories = TorznabCatType.TV.SubCategories.Select(c => c.ID).ToArray(); private int[] _allTvCategories = TorznabCatType.TV.SubCategories.Select(c => c.ID).ToArray();
private int[] _allMoviesCategories = TorznabCatType.Movies.SubCategories.Select(c => c.ID).ToArray(); private int[] _allMoviesCategories = TorznabCatType.Movies.SubCategories.Select(c => c.ID).ToArray();
@ -87,7 +94,7 @@ namespace Jackett.Common.Indexers
public Newpct(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps) public Newpct(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
: base(name: "Newpct", : base(name: "Newpct",
description: "Newpct - descargar torrent peliculas, series", description: "Newpct - descargar torrent peliculas, series",
link: DefaultSiteLinkUri.AbsoluteUri, link: SiteLinkUris[0].AbsoluteUri,
caps: new TorznabCapabilities(TorznabCatType.TV, caps: new TorznabCapabilities(TorznabCatType.TV,
TorznabCatType.TVSD, TorznabCatType.TVSD,
TorznabCatType.TVHD, TorznabCatType.TVHD,
@ -124,34 +131,61 @@ namespace Jackett.Common.Indexers
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query) protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{ {
return await PerformQuery(query, 0); Uri link = new Uri(configData.SiteLink.Value);
}
public override async Task<byte[]> Download(Uri link)
{
var results = await RequestStringWithCookies(link.AbsoluteUri);
var content = results.Content;
Regex regex = new Regex("[^\"]*/descargar-torrent/\\d+_[^\"]*");
Match match = regex.Match(content);
if (match.Success)
link = new Uri(match.Groups[0].Value);
else
this.logger.Warn("Newpct - download link not found in " + link);
return await base.Download(link);
}
private async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query, int attempts)
{
var releases = new List<ReleaseInfo>();
lock (cache) lock (cache)
{ {
CleanCache(); CleanCache();
} }
_siteUri = new Uri(configData.SiteLink.Value); return await PerformQuery(link, query, 0);
}
public override async Task<byte[]> Download(Uri linkParam)
{
List<string> links = new List<string>();
links.Add(linkParam.AbsoluteUri);
foreach (Uri extraSiteUri in SiteLinkUris)
{
UriBuilder ub = new UriBuilder(linkParam);
ub.Host = extraSiteUri.Host;
links.Add(ub.Uri.AbsoluteUri);
}
links = links.Distinct().ToList();
foreach (string link in links)
{
byte[] result = null;
try
{
var results = await RequestStringWithCookies(link);
var content = results.Content;
Regex regex = new Regex("[^\"]*/descargar-torrent/\\d+_[^\"]*");
Match match = regex.Match(content);
if (match.Success)
result = await base.Download(new Uri(match.Groups[0].Value));
}
catch
{
}
if (result != null)
return result;
else
this.logger.Warn("Newpct - download link not found in " + link);
}
return null;
}
private async Task<IEnumerable<ReleaseInfo>> PerformQuery(Uri siteLink, TorznabQuery query, int attempts)
{
var releases = new List<ReleaseInfo>();
_includeVo = ((BoolItem)configData.GetDynamic("IncludeVo")).Value; _includeVo = ((BoolItem)configData.GetDynamic("IncludeVo")).Value;
_filterMovies = ((BoolItem)configData.GetDynamic("FilterMovies")).Value; _filterMovies = ((BoolItem)configData.GetDynamic("FilterMovies")).Value;
_dailyNow = DateTime.Now; _dailyNow = DateTime.Now;
@ -163,7 +197,7 @@ namespace Jackett.Common.Indexers
int pg = 1; int pg = 1;
while (pg <= _maxDailyPages) while (pg <= _maxDailyPages)
{ {
Uri url = new Uri(_siteUri, string.Format(_dailyUrl, pg)); Uri url = new Uri(siteLink, string.Format(_dailyUrl, pg));
var results = await RequestStringWithCookies(url.AbsoluteUri); var results = await RequestStringWithCookies(url.AbsoluteUri);
var items = ParseDailyContent(results.Content); var items = ParseDailyContent(results.Content);
@ -189,21 +223,21 @@ namespace Jackett.Common.Indexers
query.Categories.Any(c => _allTvCategories.Contains(c)); query.Categories.Any(c => _allTvCategories.Contains(c));
if (isTvSearch) if (isTvSearch)
{ {
releases.AddRange(await TvSearch(query)); releases.AddRange(await TvSearch(siteLink, query));
} }
bool isMovieSearch = query.Categories == null || query.Categories.Length == 0 || bool isMovieSearch = query.Categories == null || query.Categories.Length == 0 ||
query.Categories.Any(c => _allMoviesCategories.Contains(c)); query.Categories.Any(c => _allMoviesCategories.Contains(c));
if (isMovieSearch) if (isMovieSearch)
{ {
releases.AddRange(await MovieSearch(query)); releases.AddRange(await MovieSearch(siteLink, query));
} }
} }
return releases; return releases;
} }
private async Task<IEnumerable<ReleaseInfo>> TvSearch(TorznabQuery query) private async Task<IEnumerable<ReleaseInfo>> TvSearch(Uri siteLink, TorznabQuery query)
{ {
List<ReleaseInfo> newpctReleases = null; List<ReleaseInfo> newpctReleases = null;
@ -238,7 +272,7 @@ namespace Jackett.Common.Indexers
newpctReleases = new List<ReleaseInfo>(); newpctReleases = new List<ReleaseInfo>();
//Search series url //Search series url
foreach (Uri seriesListUrl in SeriesListUris(seriesName)) foreach (Uri seriesListUrl in SeriesListUris(siteLink, seriesName))
{ {
newpctReleases.AddRange(await GetReleasesFromUri(seriesListUrl, seriesName)); newpctReleases.AddRange(await GetReleasesFromUri(seriesListUrl, seriesName));
} }
@ -247,7 +281,7 @@ namespace Jackett.Common.Indexers
if (newpctReleases.Count == 0 && !(seriesName.ToLower().StartsWith("the"))) if (newpctReleases.Count == 0 && !(seriesName.ToLower().StartsWith("the")))
{ {
seriesName = "The " + seriesName; seriesName = "The " + seriesName;
foreach (Uri seriesListUrl in SeriesListUris(seriesName)) foreach (Uri seriesListUrl in SeriesListUris(siteLink, seriesName))
{ {
newpctReleases.AddRange(await GetReleasesFromUri(seriesListUrl, seriesName)); newpctReleases.AddRange(await GetReleasesFromUri(seriesListUrl, seriesName));
} }
@ -306,7 +340,7 @@ namespace Jackett.Common.Indexers
return newpctReleases; return newpctReleases;
} }
private IEnumerable<Uri> SeriesListUris(string seriesName) private IEnumerable<Uri> SeriesListUris(Uri siteLink, string seriesName)
{ {
IEnumerable<string> lettersUrl; IEnumerable<string> lettersUrl;
if (!_includeVo) if (!_includeVo)
@ -320,7 +354,7 @@ namespace Jackett.Common.Indexers
string seriesLetter = !char.IsDigit(seriesName[0]) ? seriesName[0].ToString() : "0-9"; string seriesLetter = !char.IsDigit(seriesName[0]) ? seriesName[0].ToString() : "0-9";
return lettersUrl.Select(urlFormat => return lettersUrl.Select(urlFormat =>
{ {
return new Uri(_siteUri, string.Format(urlFormat, seriesLetter.ToLower())); return new Uri(siteLink, string.Format(urlFormat, seriesLetter.ToLower()));
}); });
} }
@ -436,7 +470,7 @@ namespace Jackett.Common.Indexers
return releases; return releases;
} }
private async Task<IEnumerable<ReleaseInfo>> MovieSearch(TorznabQuery query) private async Task<IEnumerable<ReleaseInfo>> MovieSearch(Uri siteLink, TorznabQuery query)
{ {
var releases = new List<NewpctRelease>(); var releases = new List<NewpctRelease>();
@ -449,11 +483,11 @@ namespace Jackett.Common.Indexers
queryCollection.Add("q", searchStr); queryCollection.Add("q", searchStr);
queryCollection.Add("pg", pg.ToString()); queryCollection.Add("pg", pg.ToString());
Uri url = new Uri(_siteUri, string.Format(_searchUrl, pg)); Uri url = new Uri(siteLink, string.Format(_searchUrl, pg));
var results = await PostDataWithCookies(url.AbsoluteUri, queryCollection); var results = await PostDataWithCookies(url.AbsoluteUri, queryCollection);
var items = ParseSearchContent(results.Content); var items = ParseSearchContent(results.Content);
if (items == null || !items.Any()) if (items == null)
break; break;
releases.AddRange(items); releases.AddRange(items);
@ -478,6 +512,8 @@ namespace Jackett.Common.Indexers
try try
{ {
var rows = doc.QuerySelectorAll(".content .info"); var rows = doc.QuerySelectorAll(".content .info");
if (rows == null || !rows.Any())
return null;
foreach (var row in rows) foreach (var row in rows)
{ {
var anchor = row.QuerySelector("a"); var anchor = row.QuerySelector("a");