Add ArcheTorrent (#1334)

This commit is contained in:
Ellmout 2017-05-06 15:26:10 +02:00 committed by kaso17
parent ffdce26639
commit e09092bbaf
1 changed files with 184 additions and 0 deletions

View File

@ -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;
}
}
}