mirror of
https://github.com/Jackett/Jackett
synced 2025-03-10 14:14:25 +00:00
torrent-paradise-ml: C# -> yaml
This commit is contained in:
parent
5d00fda03e
commit
5822194133
2 changed files with 58 additions and 159 deletions
58
src/Jackett.Common/Definitions/torrent-paradise-ml.yml
Normal file
58
src/Jackett.Common/Definitions/torrent-paradise-ml.yml
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
---
|
||||||
|
id: torrent-paradise-ml
|
||||||
|
name: Torrent Paradise (ML)
|
||||||
|
description: "The most innovative torrent site"
|
||||||
|
language: en-US
|
||||||
|
type: public
|
||||||
|
encoding: UTF-8
|
||||||
|
links:
|
||||||
|
- https://torrent-paradise.ml/
|
||||||
|
|
||||||
|
caps:
|
||||||
|
categorymappings:
|
||||||
|
- {id: 8000, cat: Other, desc: Other}
|
||||||
|
|
||||||
|
modes:
|
||||||
|
search: [q]
|
||||||
|
tv-search: [q, season, ep]
|
||||||
|
movie-search: [q]
|
||||||
|
music-search: [q]
|
||||||
|
book-search: [q]
|
||||||
|
|
||||||
|
settings: []
|
||||||
|
|
||||||
|
search:
|
||||||
|
paths:
|
||||||
|
# https://torrent-paradise.ml/api/search?q=2021
|
||||||
|
- path: api/search
|
||||||
|
response:
|
||||||
|
type: json
|
||||||
|
noResultsMessage: "null"
|
||||||
|
inputs:
|
||||||
|
q: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
|
||||||
|
|
||||||
|
rows:
|
||||||
|
selector: $
|
||||||
|
|
||||||
|
fields:
|
||||||
|
category:
|
||||||
|
text: 8000
|
||||||
|
title:
|
||||||
|
selector: text
|
||||||
|
details:
|
||||||
|
text: "{{ .Config.sitelink }}"
|
||||||
|
infohash:
|
||||||
|
selector: id
|
||||||
|
date:
|
||||||
|
text: now
|
||||||
|
size:
|
||||||
|
selector: len
|
||||||
|
seeders:
|
||||||
|
selector: s
|
||||||
|
leechers:
|
||||||
|
selector: l
|
||||||
|
downloadvolumefactor:
|
||||||
|
text: 0
|
||||||
|
uploadvolumefactor:
|
||||||
|
text: 1
|
||||||
|
# json engine n/a
|
|
@ -1,159 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Specialized;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Jackett.Common.Models;
|
|
||||||
using Jackett.Common.Models.IndexerConfig;
|
|
||||||
using Jackett.Common.Services.Interfaces;
|
|
||||||
using Jackett.Common.Utils;
|
|
||||||
using Jackett.Common.Utils.Clients;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using NLog;
|
|
||||||
|
|
||||||
namespace Jackett.Common.Indexers
|
|
||||||
{
|
|
||||||
public class TorrentParadiseMl : BaseWebIndexer
|
|
||||||
{
|
|
||||||
private string ApiUrl => SiteLink + "api/";
|
|
||||||
|
|
||||||
public TorrentParadiseMl(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps,
|
|
||||||
ICacheService cs)
|
|
||||||
: base(id: "torrent-paradise-ml",
|
|
||||||
name: "Torrent Paradise (ML)",
|
|
||||||
description: "The most innovative torrent site",
|
|
||||||
link: "https://torrent-paradise.ml/",
|
|
||||||
caps: new TorznabCapabilities
|
|
||||||
{
|
|
||||||
TvSearchParams = new List<TvSearchParam>
|
|
||||||
{
|
|
||||||
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
|
|
||||||
},
|
|
||||||
MovieSearchParams = new List<MovieSearchParam>
|
|
||||||
{
|
|
||||||
MovieSearchParam.Q
|
|
||||||
},
|
|
||||||
MusicSearchParams = new List<MusicSearchParam>
|
|
||||||
{
|
|
||||||
MusicSearchParam.Q
|
|
||||||
},
|
|
||||||
BookSearchParams = new List<BookSearchParam>
|
|
||||||
{
|
|
||||||
BookSearchParam.Q
|
|
||||||
}
|
|
||||||
},
|
|
||||||
configService: configService,
|
|
||||||
client: wc,
|
|
||||||
logger: l,
|
|
||||||
p: ps,
|
|
||||||
cacheService: cs,
|
|
||||||
configData: new ConfigurationData())
|
|
||||||
{
|
|
||||||
Encoding = Encoding.UTF8;
|
|
||||||
Language = "en-US";
|
|
||||||
Type = "public";
|
|
||||||
|
|
||||||
AddCategoryMapping(8000, TorznabCatType.Other);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
|
||||||
{
|
|
||||||
LoadValuesFromJson(configJson);
|
|
||||||
|
|
||||||
var query = new TorznabQuery { IsTest = true };
|
|
||||||
var releases = await PerformQuery(query);
|
|
||||||
|
|
||||||
await ConfigureIfOK(string.Empty, releases.Any(),
|
|
||||||
() => throw new Exception("Could not find releases from this URL"));
|
|
||||||
|
|
||||||
return IndexerConfigurationStatus.Completed;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
|
||||||
{
|
|
||||||
var searchUrl = CreateSearchUrl(query);
|
|
||||||
if (string.IsNullOrWhiteSpace(searchUrl))
|
|
||||||
return new List<ReleaseInfo>();
|
|
||||||
|
|
||||||
var response = await RequestWithCookiesAndRetryAsync(searchUrl);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var results = JsonConvert.DeserializeObject<IEnumerable<TorrentParadiseResult>>(response.ContentString);
|
|
||||||
return results == null ? new List<ReleaseInfo>() : ConvertResultsIntoReleaseInfos(results);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
throw new Exception("Error while parsing json: " + response.ContentString, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string CreateSearchUrl(TorznabQuery query)
|
|
||||||
{
|
|
||||||
var searchTerm = query.GetQueryString();
|
|
||||||
if (string.IsNullOrWhiteSpace(searchTerm))
|
|
||||||
{
|
|
||||||
searchTerm = DateTime.Now.Year.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
var qc = new NameValueCollection
|
|
||||||
{
|
|
||||||
{"q", searchTerm}
|
|
||||||
};
|
|
||||||
|
|
||||||
return ApiUrl + "search?" + qc.GetQueryString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private IEnumerable<ReleaseInfo> ConvertResultsIntoReleaseInfos(IEnumerable<TorrentParadiseResult> results)
|
|
||||||
{
|
|
||||||
foreach (var result in results)
|
|
||||||
{
|
|
||||||
yield return ConvertResultIntoReleaseInfo(result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private ReleaseInfo ConvertResultIntoReleaseInfo(TorrentParadiseResult result)
|
|
||||||
{
|
|
||||||
return new ReleaseInfo
|
|
||||||
{
|
|
||||||
Title = result.Text,
|
|
||||||
Size = result.Size,
|
|
||||||
Seeders = result.Seeders,
|
|
||||||
Peers = result.Seeders + result.Leechers,
|
|
||||||
InfoHash = result.Id,
|
|
||||||
PublishDate = DateTime.Now,
|
|
||||||
Details = new Uri(SiteLink),
|
|
||||||
DownloadVolumeFactor = 0,
|
|
||||||
UploadVolumeFactor = 1,
|
|
||||||
Category = new List<int> { TorznabCatType.Other.ID }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private class TorrentParadiseResult
|
|
||||||
{
|
|
||||||
[JsonConstructor]
|
|
||||||
public TorrentParadiseResult(string id, string text, string len, string s, string l)
|
|
||||||
{
|
|
||||||
Id = id;
|
|
||||||
Text = text;
|
|
||||||
Size = ToLong(len);
|
|
||||||
Seeders = ToLong(s);
|
|
||||||
Leechers = ToLong(l);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Id { get; }
|
|
||||||
|
|
||||||
public string Text { get; }
|
|
||||||
|
|
||||||
public long? Size { get; }
|
|
||||||
|
|
||||||
public long? Seeders { get; }
|
|
||||||
|
|
||||||
public long? Leechers { get; }
|
|
||||||
|
|
||||||
private long? ToLong(string str) => Convert.ToInt64(str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue