mirror of https://github.com/Jackett/Jackett
Add ArcheTorrent (#1334)
This commit is contained in:
parent
ffdce26639
commit
e09092bbaf
|
@ -0,0 +1,184 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using AngleSharp.Parser.Html;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using NLog;
|
||||||
|
|
||||||
|
using Jackett.Models;
|
||||||
|
using Jackett.Models.IndexerConfig;
|
||||||
|
using Jackett.Services;
|
||||||
|
using Jackett.Utils;
|
||||||
|
using Jackett.Utils.Clients;
|
||||||
|
|
||||||
|
namespace Jackett.Indexers
|
||||||
|
{
|
||||||
|
class ArcheTorrent : BaseIndexer, IIndexer
|
||||||
|
{
|
||||||
|
string LoginUrl { get { return SiteLink + "account-login.php"; } }
|
||||||
|
string BrowseUrl { get { return SiteLink + "torrents-search.php"; } }
|
||||||
|
string DownloadUrl { get { return SiteLink + "download.php"; } }
|
||||||
|
|
||||||
|
new ConfigurationDataBasicLogin configData
|
||||||
|
{
|
||||||
|
get { return (ConfigurationDataBasicLogin)base.configData; }
|
||||||
|
set { base.configData = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArcheTorrent(IIndexerManagerService indexerManager, IWebClient webClient, Logger logger, IProtectionService protectionService)
|
||||||
|
: base(name: "Arche Torrent",
|
||||||
|
description: "French Torrent Tracker",
|
||||||
|
link: "https://www.archetorrent.com/",
|
||||||
|
manager: indexerManager,
|
||||||
|
logger: logger,
|
||||||
|
p: protectionService,
|
||||||
|
client: webClient,
|
||||||
|
configData: new ConfigurationDataBasicLogin()
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Encoding = Encoding.GetEncoding("UTF-8");
|
||||||
|
Language = "fr-fr";
|
||||||
|
Type = "private";
|
||||||
|
|
||||||
|
AddCategoryMapping (18, TorznabCatType.PC, "Applications: PC");
|
||||||
|
AddCategoryMapping (19, TorznabCatType.PCMac, "Applications: Mac");
|
||||||
|
AddCategoryMapping (54, TorznabCatType.PC, "Applications: linux");
|
||||||
|
AddCategoryMapping (56, TorznabCatType.XXXOther, "Autres: ebook xxx");
|
||||||
|
AddCategoryMapping (36, TorznabCatType.Books, "Autres: E-Books");
|
||||||
|
AddCategoryMapping (37, TorznabCatType.Other, "Autres: Images");
|
||||||
|
AddCategoryMapping (38, TorznabCatType.PCPhoneOther, "Autres: Telephone-mobile");
|
||||||
|
AddCategoryMapping (47, TorznabCatType.Movies, "Films: Animé");
|
||||||
|
AddCategoryMapping (1, TorznabCatType.MoviesDVD, "Films: DVD");
|
||||||
|
AddCategoryMapping (2, TorznabCatType.MoviesSD, "Films: Dvdrip");
|
||||||
|
AddCategoryMapping (68, TorznabCatType.Movies, "Films: TAT Releases");
|
||||||
|
AddCategoryMapping (70, TorznabCatType.MoviesHD, "Films: UHD 4K");
|
||||||
|
AddCategoryMapping (69, TorznabCatType.Movies, "Films: Retro");
|
||||||
|
AddCategoryMapping (3, TorznabCatType.MoviesHD, "Films: HD1080");
|
||||||
|
AddCategoryMapping (42, TorznabCatType.MoviesHD, "Films: HD720");
|
||||||
|
AddCategoryMapping (4, TorznabCatType.Movies, "Films: Cam/Ts");
|
||||||
|
AddCategoryMapping (22, TorznabCatType.MoviesBluRay, "Films: bluray");
|
||||||
|
AddCategoryMapping (23, TorznabCatType.Movies3D, "Films: 3D");
|
||||||
|
AddCategoryMapping (24, TorznabCatType.MoviesForeign, "Films: VOSTFR");
|
||||||
|
AddCategoryMapping (25, TorznabCatType.XXX, "Films: Adulte");
|
||||||
|
AddCategoryMapping (48, TorznabCatType.TVDocumentary, "Films: Documentaire");
|
||||||
|
AddCategoryMapping (49, TorznabCatType.MoviesOther, "Films: Spectacle");
|
||||||
|
AddCategoryMapping (51, TorznabCatType.MoviesSD, "Films: R5");
|
||||||
|
AddCategoryMapping (52, TorznabCatType.MoviesSD, "Films: bdrip");
|
||||||
|
AddCategoryMapping (53, TorznabCatType.MoviesSD, "Films: brrip");
|
||||||
|
AddCategoryMapping (55, TorznabCatType.MoviesDVD, "Films: dvd-pack");
|
||||||
|
AddCategoryMapping (57, TorznabCatType.Movies, "Films: manga");
|
||||||
|
AddCategoryMapping (59, TorznabCatType.MoviesWEBDL, "Films: Webrip");
|
||||||
|
AddCategoryMapping (63, TorznabCatType.MoviesSD, "Films: M-HD");
|
||||||
|
AddCategoryMapping (10, TorznabCatType.PCGames, "Jeux: PC");
|
||||||
|
AddCategoryMapping (11, TorznabCatType.ConsoleOther, "Jeux: PS2");
|
||||||
|
AddCategoryMapping (43, TorznabCatType.ConsolePS3, "Jeux: PS3");
|
||||||
|
AddCategoryMapping (12, TorznabCatType.ConsolePSP, "Jeux: PSP");
|
||||||
|
AddCategoryMapping (14, TorznabCatType.ConsoleXbox360, "Jeux: Xbox360");
|
||||||
|
AddCategoryMapping (44, TorznabCatType.ConsoleWii, "Jeux: Wii");
|
||||||
|
AddCategoryMapping (45, TorznabCatType.ConsoleNDS, "Jeux: DS");
|
||||||
|
AddCategoryMapping (71, TorznabCatType.AudioMP3, "Musique: TAT Music Release");
|
||||||
|
AddCategoryMapping (26, TorznabCatType.AudioMP3, "Musique: Mp3");
|
||||||
|
AddCategoryMapping (27, TorznabCatType.AudioVideo, "Musique: Clip Video");
|
||||||
|
AddCategoryMapping (58, TorznabCatType.AudioLossless, "Musique: Flac");
|
||||||
|
AddCategoryMapping (62, TorznabCatType.TVSD, "Serie tv: TV BDRip");
|
||||||
|
AddCategoryMapping (5, TorznabCatType.TVSD, "Serie tv: Dvdrip");
|
||||||
|
AddCategoryMapping (41, TorznabCatType.TVHD, "Serie tv: Hd");
|
||||||
|
AddCategoryMapping (60, TorznabCatType.TVSD, "Serie tv: pack série tv");
|
||||||
|
AddCategoryMapping (64, TorznabCatType.TVFOREIGN, "Serie tv: vostfr");
|
||||||
|
AddCategoryMapping (65, TorznabCatType.TVHD, "Serie tv: Série tv 720P");
|
||||||
|
AddCategoryMapping (66, TorznabCatType.TVHD, "Serie tv: Série tv 1080P");
|
||||||
|
AddCategoryMapping (67, TorznabCatType.TVHD, "Serie tv: Série tv PackHD");
|
||||||
|
AddCategoryMapping (73, TorznabCatType.TVAnime, "Serie tv: Anime ");
|
||||||
|
AddCategoryMapping (72, TorznabCatType.TVSport, "Sport: sport");
|
||||||
|
AddCategoryMapping (61, TorznabCatType.TVSD, "Tv: DVDRip");
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||||
|
{
|
||||||
|
configData.LoadValuesFromJson(configJson);
|
||||||
|
|
||||||
|
var pairs = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
{ "username", configData.Username.Value },
|
||||||
|
{ "password", configData.Password.Value }
|
||||||
|
};
|
||||||
|
|
||||||
|
var result = await PostDataWithCookies(LoginUrl, pairs);
|
||||||
|
|
||||||
|
await ConfigureIfOK(result.Cookies, result.Cookies != null, () =>
|
||||||
|
{
|
||||||
|
var errorMessage = result.Content;
|
||||||
|
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||||
|
});
|
||||||
|
|
||||||
|
return IndexerConfigurationStatus.RequiresTesting;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
|
{
|
||||||
|
var releases = new List<ReleaseInfo>();
|
||||||
|
var searchString = query.GetQueryString();
|
||||||
|
|
||||||
|
var queryCollection = new Dictionary<string, string>();
|
||||||
|
queryCollection.Add ("search", searchString);
|
||||||
|
queryCollection.Add ("cat", "0");
|
||||||
|
queryCollection.Add("incldead", "0");
|
||||||
|
queryCollection.Add("freeleech", "0");
|
||||||
|
queryCollection.Add ("lang", "0");
|
||||||
|
|
||||||
|
var searchUrl = BrowseUrl + "?" + queryCollection.GetQueryString ();
|
||||||
|
|
||||||
|
var results = await RequestStringWithCookies (searchUrl);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var RowsSelector = "table.ttable_headinner tr.t-row";
|
||||||
|
var SearchResultParser = new HtmlParser();
|
||||||
|
var SearchResultDocument = SearchResultParser.Parse(results.Content);
|
||||||
|
var Rows = SearchResultDocument.QuerySelectorAll(RowsSelector);
|
||||||
|
var lastDate = DateTime.Now;
|
||||||
|
|
||||||
|
foreach (var Row in Rows)
|
||||||
|
{
|
||||||
|
var release = new ReleaseInfo();
|
||||||
|
release.MinimumRatio = 1;
|
||||||
|
release.MinimumSeedTime = 0;
|
||||||
|
|
||||||
|
var category = Row.QuerySelector("td:nth-child(1) a");
|
||||||
|
var title = Row.QuerySelector("td:nth-child(2) a b");
|
||||||
|
|
||||||
|
var link = Row.QuerySelector("td:nth-child(2) a");
|
||||||
|
var Size = Row.QuerySelector("td:nth-child(5)");
|
||||||
|
var Grabs = Row.QuerySelector("td:nth-child(8) font b");
|
||||||
|
var Seeders = Row.QuerySelector("td:nth-child(6) font b");
|
||||||
|
var Leechers = Row.QuerySelector("td:nth-child(7) font b");
|
||||||
|
var categoryId = category.GetAttribute("href").Split('=').Last();
|
||||||
|
var torrentId = link.GetAttribute ("href").Split ('&').First ().Split ('=').Last ();
|
||||||
|
|
||||||
|
release.Title = title.TextContent;
|
||||||
|
release.Category = MapTrackerCatToNewznab(categoryId);
|
||||||
|
release.Link = new Uri(DownloadUrl + "?id=" + torrentId);
|
||||||
|
release.Guid = release.Link;
|
||||||
|
release.Size = ReleaseInfo.GetBytes(Size.TextContent);
|
||||||
|
release.Seeders = ParseUtil.CoerceInt(Seeders.TextContent);
|
||||||
|
release.Peers = ParseUtil.CoerceInt(Leechers.TextContent) + release.Seeders;
|
||||||
|
release.Grabs = ParseUtil.CoerceLong(Grabs.TextContent);
|
||||||
|
|
||||||
|
releases.Add(release);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
OnParseError(results.Content, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return releases;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue