mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-14 07:54:08 +02:00
Compare commits
57 Commits
v0.20.935
...
v0.20.1010
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4797352b88 | ||
![]() |
86fdef72f0 | ||
![]() |
4f7644b692 | ||
![]() |
a74d1fc31c | ||
![]() |
1b04ef72e6 | ||
![]() |
fd33dcbf5d | ||
![]() |
b0bb50ffaf | ||
![]() |
94a8fbbd14 | ||
![]() |
fb6cb9525f | ||
![]() |
46fbd9ed1c | ||
![]() |
e1da56160e | ||
![]() |
e8c588dde2 | ||
![]() |
903f7ad034 | ||
![]() |
d7143962de | ||
![]() |
15ac3a22a8 | ||
![]() |
8fc965a5c1 | ||
![]() |
9a4202fe63 | ||
![]() |
b22f92763e | ||
![]() |
0c0294049f | ||
![]() |
4ddd772a63 | ||
![]() |
aa9f516f16 | ||
![]() |
cfa10d0798 | ||
![]() |
6080a41b36 | ||
![]() |
e3384de72e | ||
![]() |
bf2d07f7f7 | ||
![]() |
32c4e0c0b0 | ||
![]() |
1daa23f4d6 | ||
![]() |
6c1cef5650 | ||
![]() |
40f2ed6fbc | ||
![]() |
5f6358fb99 | ||
![]() |
a2bd695cac | ||
![]() |
61d8f8469e | ||
![]() |
825feb5153 | ||
![]() |
bfddc46b1f | ||
![]() |
faa1b3f971 | ||
![]() |
f734678501 | ||
![]() |
b30b9fdfa5 | ||
![]() |
6154574511 | ||
![]() |
e9a788164e | ||
![]() |
f97a48678f | ||
![]() |
13b995aacb | ||
![]() |
038ce68d5e | ||
![]() |
ab1c477486 | ||
![]() |
1b6af38155 | ||
![]() |
484d40674f | ||
![]() |
e10f1c822e | ||
![]() |
012f2bd85e | ||
![]() |
f5e02d57c5 | ||
![]() |
f39435c5ce | ||
![]() |
f1affa88ab | ||
![]() |
f2e258a6de | ||
![]() |
47e9641325 | ||
![]() |
ca65a2eebb | ||
![]() |
f9aa3c4d7b | ||
![]() |
86530ba35f | ||
![]() |
b7ac4af666 | ||
![]() |
ff3d79938b |
@@ -126,6 +126,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* Rus-media
|
||||
* RuTor
|
||||
* RuTracker.RU
|
||||
* Seedoff
|
||||
* seleZen
|
||||
* Sexy-Pics
|
||||
* ShizaProject
|
||||
@@ -191,11 +192,13 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* ExKinoRay
|
||||
* ExtremlymTorrents
|
||||
* Fenyarnyek-Tracker
|
||||
* File-Tracker
|
||||
* Fou-Du-Cinema
|
||||
* Gay-Torrents.net
|
||||
* Genesis-Movement
|
||||
* HamsterStudio
|
||||
* HD-CzTorrent
|
||||
* HDGalaKtik
|
||||
* HunTorrent
|
||||
* IV-Torrents
|
||||
* KinoNaVse100
|
||||
@@ -266,7 +269,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* Aussierul.es [![(invite needed)][inviteneeded]](#)
|
||||
* AvistaZ (AsiaTorrents)
|
||||
* Back-ups [![(invite needed)][inviteneeded]](#)
|
||||
* bB [![(invite needed)][inviteneeded]](#)
|
||||
* BakaBT
|
||||
* BeiTai
|
||||
* Best-Core
|
||||
@@ -331,6 +333,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* DivTeam
|
||||
* DocsPedia
|
||||
* Dragonworld Reloaded [![(invite needed)][inviteneeded]](#)
|
||||
* Dream Tracker
|
||||
* EbookParadijs
|
||||
* Ebooks-Shares
|
||||
* Empornium (EMP) [![(invite needed)][inviteneeded]](#)
|
||||
@@ -411,6 +414,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* Keep Friends [![(invite needed)][inviteneeded]](#)
|
||||
* Korsar
|
||||
* KrazyZone
|
||||
* Kufirc
|
||||
* LastFiles
|
||||
* Lat-Team [![(invite needed)][inviteneeded]](#)
|
||||
* Le Saloon
|
||||
@@ -549,6 +553,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* TheScenePlace (TSP)
|
||||
* TJUPT
|
||||
* TLFBits [![(invite needed)][inviteneeded]](#)
|
||||
* TmGHuB
|
||||
* ToTheGlory (TTG) [![(invite needed)][inviteneeded]](#)
|
||||
* Torrent Network (TN)
|
||||
* Torrent Sector Crew (TSC)
|
||||
|
@@ -177,7 +177,7 @@ hr {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#jackett-allowext, #jackett-allowupdate, #jackett-logging, #jackett-prerelease, #jackett-cache-enabled {
|
||||
#jackett-allowext, #jackett-allowcors, #jackett-allowupdate, #jackett-logging, #jackett-prerelease, #jackett-cache-enabled {
|
||||
width: 25px;
|
||||
}
|
||||
|
||||
@@ -301,6 +301,14 @@ table td.fit{
|
||||
background-color: #d0ab44;
|
||||
}
|
||||
|
||||
.label-tmdb {
|
||||
background-color: #7dbfd4;
|
||||
}
|
||||
|
||||
.label-tvdb {
|
||||
background-color: #86cca8;
|
||||
}
|
||||
|
||||
.tooltip {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
@@ -125,6 +125,7 @@ function loadJackettSettings() {
|
||||
|
||||
$("#jackett-savedir").val(data.blackholedir);
|
||||
$("#jackett-allowext").attr('checked', data.external);
|
||||
$("#jackett-allowcors").attr('checked', data.cors);
|
||||
$("#jackett-allowupdate").attr('checked', data.updatedisabled);
|
||||
$("#jackett-prerelease").attr('checked', data.prerelease);
|
||||
$("#jackett-logging").attr('checked', data.logging);
|
||||
@@ -923,8 +924,12 @@ function doErrorNotify(indexerId, errorMessage, errorEvent) {
|
||||
var indexEnd = 2000 - githubUrl.length; // keep url <= 2k #5104
|
||||
var htmlEscapedError = $("<div>").text(errorMessage.substring(0, indexEnd)).html();
|
||||
var urlEscapedError = encodeURIComponent(errorMessage.substring(0, indexEnd));
|
||||
doNotify("An error occurred while " + errorEvent + " this indexer<br /><b>" + htmlEscapedError + "</b><br />" +
|
||||
"<i><a href=\"" + githubUrl + " " + urlEscapedError + "\" target=\"_blank\">Click here to open an issue on GitHub for " + githubText + ".</a><i>",
|
||||
var link = "<i><a href=\"" + githubUrl + " " + urlEscapedError + "\" target=\"_blank\">Click here to open an issue on GitHub for " + githubText + ".</a><i>";
|
||||
if (errorMessage.includes("FlareSolverr is not configured")) {
|
||||
link = "<i><a href=\"https://github.com/Jackett/Jackett#configuring-flaresolverr\" target=\"_blank\">Instructions to install and configure FlareSolverr.</a><i><br />" +
|
||||
"<i><a href=\"https://github.com/Jackett/Jackett/wiki/Troubleshooting#error-connecting-to-flaresolverr-server\" target=\"_blank\">Troubleshooting frecuent errors with FlareSolverr.</a><i>";
|
||||
}
|
||||
doNotify("An error occurred while " + errorEvent + " this indexer<br /><b>" + htmlEscapedError + "</b><br />" + link,
|
||||
"danger", "glyphicon glyphicon-alert", false);
|
||||
} else {
|
||||
doNotify("An error occurred while " + errorEvent + " indexers, please take a look at indexers with failed test for more information.",
|
||||
@@ -966,10 +971,13 @@ function updateReleasesRow(row) {
|
||||
var labels = $(row).find("span.release-labels");
|
||||
var TitleLink = $(row).find("td.Title > a");
|
||||
var IMDBId = $(row).data("imdb");
|
||||
var TMDBId = $(row).data("tmdb");
|
||||
var TVDBId = $(row).data("tvdb");
|
||||
var Poster = $(row).data("poster");
|
||||
var Description = $(row).data("description");
|
||||
var DownloadVolumeFactor = parseFloat($(row).find("td.DownloadVolumeFactor").html());
|
||||
var UploadVolumeFactor = parseFloat($(row).find("td.UploadVolumeFactor").html());
|
||||
var Cat = $(row).find("td.Cat").html();
|
||||
|
||||
var TitleTooltip = "";
|
||||
if (Poster)
|
||||
@@ -988,11 +996,20 @@ function updateReleasesRow(row) {
|
||||
|
||||
labels.empty();
|
||||
|
||||
if (IMDBId) {
|
||||
var imdbLen = (IMDBId.toString().length > 7) ? 8 : 7;
|
||||
if (IMDBId) {
|
||||
var imdbLen = (IMDBId.toString().length > 7) ? 8 : 7;
|
||||
labels.append('\n<a href="https://www.imdb.com/title/tt' + ("00000000" + IMDBId).slice(-imdbLen) + '/" target="_blank" class="label label-imdb" alt="IMDB" title="IMDB">IMDB</a>');
|
||||
}
|
||||
|
||||
if (TMDBId && TMDBId > 0) {
|
||||
var TMdbType = (Cat.includes("Movies")) ? "movie" : "tv";
|
||||
labels.append('\n<a href="https://www.themoviedb.org/' + TMdbType + '/' + TMDBId + '" target="_blank" class="label label-tmdb" alt="TMDB" title="TMDB">TMDB</a>');
|
||||
}
|
||||
|
||||
if (TVDBId && TVDBId > 0) {
|
||||
labels.append('\n<a href="https://thetvdb.com/?tab=series&id=' + TVDBId + '" target="_blank" class="label label-tvdb" alt="TVDB" title="TVDB">TVDB</a>');
|
||||
}
|
||||
|
||||
if (!isNaN(DownloadVolumeFactor)) {
|
||||
if (DownloadVolumeFactor == 0) {
|
||||
labels.append('\n<span class="label label-success">FREELEECH</span>');
|
||||
@@ -1519,6 +1536,7 @@ function bindUIButtons() {
|
||||
var jackett_basepathoverride = $("#jackett-basepathoverride").val();
|
||||
var jackett_baseurloverride = $("#jackett-baseurloverride").val();
|
||||
var jackett_external = $("#jackett-allowext").is(':checked');
|
||||
var jackett_cors = $("#jackett-allowcors").is(':checked');
|
||||
var jackett_update = $("#jackett-allowupdate").is(':checked');
|
||||
var jackett_prerelease = $("#jackett-prerelease").is(':checked');
|
||||
var jackett_logging = $("#jackett-logging").is(':checked');
|
||||
@@ -1539,6 +1557,7 @@ function bindUIButtons() {
|
||||
var jsonObject = {
|
||||
port: jackett_port,
|
||||
external: jackett_external,
|
||||
cors: jackett_cors,
|
||||
updatedisabled: jackett_update,
|
||||
prerelease: jackett_prerelease,
|
||||
blackholedir: $("#jackett-savedir").val(),
|
||||
|
@@ -161,7 +161,7 @@ hr {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#jackett-allowext, #jackett-allowupdate, #jackett-logging, #jackett-prerelease, #jackett-cache-enabled {
|
||||
#jackett-allowext, #jackett-allowcors, #jackett-allowupdate, #jackett-logging, #jackett-prerelease, #jackett-cache-enabled {
|
||||
width: 25px;
|
||||
}
|
||||
|
||||
@@ -284,6 +284,14 @@ table td.fit{
|
||||
background-color: #d0ab44;
|
||||
}
|
||||
|
||||
.label-tmdb {
|
||||
background-color: #7dbfd4;
|
||||
}
|
||||
|
||||
.label-tvdb {
|
||||
background-color: #86cca8;
|
||||
}
|
||||
|
||||
.tooltip {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
@@ -28,8 +28,8 @@
|
||||
<link rel="stylesheet" type="text/css" href="../bootstrap/bootstrap.min.css?changed=2017083001">
|
||||
<link rel="stylesheet" type="text/css" href="../animate.css?changed=2017083001">
|
||||
<link rel="stylesheet" type="text/css" href="../css/tagify.css?changed=11662">
|
||||
<link rel="stylesheet" type="text/css" href="../custom.css?changed=20220123" media="only screen and (min-device-width: 480px)">
|
||||
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=20220123" media="only screen and (max-device-width: 480px)">
|
||||
<link rel="stylesheet" type="text/css" href="../custom.css?changed=202204251" media="only screen and (min-device-width: 480px)">
|
||||
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=202204251" media="only screen and (max-device-width: 480px)">
|
||||
<link rel="stylesheet" type="text/css" href="../css/jquery.dataTables.min.css?changed=2017083001">
|
||||
<link rel="stylesheet" type="text/css" href="../css/bootstrap-multiselect.css?changed=2017083001" />
|
||||
<link rel="stylesheet" type="text/css" href="../css/font-awesome.min.css?changed=2017083001">
|
||||
@@ -132,7 +132,7 @@
|
||||
</div>
|
||||
<div class="input-area">
|
||||
<span class="input-header">Base URL override: </span>
|
||||
<input id="jackett-baseurloverride" class="form-control input-right" type="text" value="" placeholder="http://jackett:9117">
|
||||
<input id="jackett-baseurloverride" class="form-control input-right" type="url" value="" placeholder="http://jackett:9117">
|
||||
</div>
|
||||
<div class="input-area">
|
||||
<span class="input-header">Server port: </span>
|
||||
@@ -178,6 +178,10 @@
|
||||
<span class="input-header">External access: </span>
|
||||
<input id="jackett-allowext" class="form-control input-right" type="checkbox" />
|
||||
</div>
|
||||
<div class="input-area">
|
||||
<span class="input-header">Allow CORS: </span>
|
||||
<input id="jackett-allowcors" class="form-control input-right" type="checkbox" />
|
||||
</div>
|
||||
<div class="input-area">
|
||||
<span class="input-header">Disable auto update: </span>
|
||||
<input id="jackett-allowupdate" class="form-control input-right" type="checkbox" />
|
||||
@@ -206,7 +210,7 @@
|
||||
</div>
|
||||
<div class="input-area">
|
||||
<span class="input-header">FlareSolverr API URL: </span>
|
||||
<input id="jackett-flaresolverrurl" class="form-control input-right" type="text" value="" placeholder="Blank for default">
|
||||
<input id="jackett-flaresolverrurl" class="form-control input-right" type="url" value="" placeholder="Blank for default">
|
||||
</div>
|
||||
<div class="input-area">
|
||||
<span class="input-header">FlareSolverr Max Timeout (ms): </span>
|
||||
@@ -454,7 +458,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each releases}}
|
||||
<tr class="jackett-releases-row" data-imdb="{{Imdb}}" data-poster="{{Poster}}" data-description="{{Description}}">
|
||||
<tr class="jackett-releases-row" data-imdb="{{Imdb}}" data-tmdb="{{TMDb}}" data-tvdb="{{TVDBId}}" data-poster="{{Poster}}" data-description="{{Description}}">
|
||||
<td class="fit">{{PublishDate}}</td>
|
||||
<td class="fit">{{FirstSeen}}</td>
|
||||
<td class="fit">{{jacketTimespan PublishDate}}</td>
|
||||
@@ -464,7 +468,7 @@
|
||||
<td class="fit">{{Size}}</td>
|
||||
<td class="fit">{{jacketSize Size}}</td>
|
||||
<td class="fit">{{Files}}</td>
|
||||
<td class="fit">{{CategoryDesc}}</td>
|
||||
<td class="fit Cat">{{CategoryDesc}}</td>
|
||||
<td class="fit">{{Grabs}}</td>
|
||||
<td class="fit">{{Seeders}}</td>
|
||||
<td class="fit">{{Peers}}</td>
|
||||
@@ -582,7 +586,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each Results}}
|
||||
<tr class="jackett-search-results-row" data-imdb="{{Imdb}}" data-poster="{{Poster}}" data-description="{{Description}}">
|
||||
<tr class="jackett-search-results-row" data-imdb="{{Imdb}}" data-tmdb="{{TMDb}}" data-tvdb="{{TVDBId}}" data-poster="{{Poster}}" data-description="{{Description}}">
|
||||
<td>{{PublishDate}}</td>
|
||||
<td>{{jacketTimespan PublishDate}}</td>
|
||||
<td>{{Tracker}}</td>
|
||||
@@ -590,7 +594,7 @@
|
||||
<td>{{Size}}</td>
|
||||
<td class="fit">{{jacketSize Size}}</td>
|
||||
<td>{{Files}}</td>
|
||||
<td>{{CategoryDesc}}</td>
|
||||
<td class="Cat">{{CategoryDesc}}</td>
|
||||
<td>{{Grabs}}</td>
|
||||
<td>{{Seeders}}</td>
|
||||
<td>{{Peers}}</td>
|
||||
@@ -750,6 +754,6 @@
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
|
||||
<script type="text/javascript" src="../custom.js?changed=20220417"></script>
|
||||
<script type="text/javascript" src="../custom.js?changed=20220426"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -16,7 +16,7 @@
|
||||
|
||||
<link href="../bootstrap/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="../animate.css" rel="stylesheet">
|
||||
<link href="../custom.css?changed=20220123" rel="stylesheet">
|
||||
<link href="../custom.css?changed=202204251" rel="stylesheet">
|
||||
|
||||
<title>Jackett</title>
|
||||
</head>
|
||||
|
@@ -96,8 +96,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
selector: category
|
||||
category:
|
||||
selector: category_id
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -150,4 +150,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 5 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 432000
|
||||
# json UNIT3D 6.0.5
|
||||
# json UNIT3D 6.0.7
|
||||
|
@@ -106,7 +106,7 @@ search:
|
||||
# site does not support imdbid searching or appear to have freeleech
|
||||
|
||||
rows:
|
||||
selector: table[width="100%"]:last-child tbody tr:has(a[href^="userdetails.php?id="])
|
||||
selector: table[width="100%"]:last-child tbody tr:has(a[href^="userdetails.php?id="]):has(a[href^="download.php?torrent="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: bitsexy
|
||||
name: BitSexy
|
||||
description: "BitSexy is a Private Torrent Tracker for 3x"
|
||||
description: "BitSexy is a Private Torrent Tracker for 3X"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
|
@@ -181,8 +181,6 @@ search:
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Uploaded (.+?) by"
|
||||
- name: replace
|
||||
args: [" at ", " "]
|
||||
- name: fuzzytime
|
||||
date_unix:
|
||||
# within the hour (unix)
|
||||
|
@@ -256,9 +256,7 @@ search:
|
||||
- name: replace
|
||||
args: [" by", ""]
|
||||
- name: replace
|
||||
args: ["às ", ""] # at
|
||||
- name: replace
|
||||
args: ["at ", ""]
|
||||
args: ["às ", "at "]
|
||||
- name: replace
|
||||
args: ["Hoje", "Today"]
|
||||
- name: replace
|
||||
|
@@ -6,7 +6,7 @@ language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://btsow.rest/
|
||||
- https://btsow.bar/
|
||||
legacylinks:
|
||||
- https://btos.pw/
|
||||
- https://btio.pw/
|
||||
@@ -29,6 +29,7 @@ legacylinks:
|
||||
- https://btsow.shop/
|
||||
- https://btsow.us/
|
||||
- https://btsow.one/
|
||||
- https://btsow.rest/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
@@ -81,7 +81,6 @@ login:
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href^="logout.php"]
|
||||
|
@@ -10,54 +10,40 @@ links:
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Movie
|
||||
- {id: 28, cat: Movies/SD, desc: "Movie SD"}
|
||||
- {id: 155, cat: Movies/DVD, desc: "Movie DVD"}
|
||||
- {id: 130, cat: Movies/SD, desc: "Movie SD-Pack"}
|
||||
# Movie-HD
|
||||
- {id: 32, cat: Movies/HD, desc: "Movie-HD HD"}
|
||||
- {id: 154, cat: Movies/UHD, desc: "Movie-HD UHD/4K"}
|
||||
- {id: 162, cat: Movies/HD, desc: "Movie-HD HD-Pack"}
|
||||
# Serien
|
||||
- {id: 60, cat: TV/SD, desc: "Serien Xvid/x264"}
|
||||
- {id: 157, cat: TV/HD, desc: "Serien 720p/1080p"}
|
||||
- {id: 158, cat: TV/UHD, desc: "Serien UHD/4K"}
|
||||
# S-Packs
|
||||
- {id: 57, cat: TV/SD, desc: "S-Packs SD"}
|
||||
- {id: 59, cat: TV/HD, desc: "S-Packs 720p"}
|
||||
- {id: 156, cat: TV/HD, desc: "S-Packs 1080p"}
|
||||
# Doku
|
||||
- {id: 160, cat: TV/Documentary, desc: "Doku HD"}
|
||||
- {id: 15, cat: TV/Documentary, desc: "Doku SD"}
|
||||
# App
|
||||
- {id: 12, cat: PC/0day, desc: "App Win"}
|
||||
- {id: 11, cat: PC, desc: "App Other"}
|
||||
- {id: 10, cat: PC/Mac, desc: "App Mac"}
|
||||
- {id: 9, cat: PC/Mobile-Android, desc: "App Linux/Android"}
|
||||
# Game
|
||||
- {id: 131, cat: Console, desc: "Game Nintendo"}
|
||||
- {id: 17, cat: PC/Games, desc: "Game PC"}
|
||||
- {id: 18, cat: Console, desc: "Game PS"}
|
||||
- {id: 24, cat: Console/Other, desc: "Game Wimmelbild"}
|
||||
# Audio
|
||||
- {id: 159, cat: Audio/Audiobook, desc: "Audio Hörbuch"}
|
||||
- {id: 48, cat: Audio/MP3, desc: "Audio mp3"}
|
||||
- {id: 53, cat: Audio/Lossless, desc: "Audio Flac"}
|
||||
- {id: 52, cat: Audio, desc: "Audio Pack"}
|
||||
- {id: 109, cat: Audio/Video, desc: "Audio Video-HD/SD"}
|
||||
# Sport
|
||||
- {id: 62, cat: TV/Sport, desc: "Sport SD"}
|
||||
- {id: 161, cat: TV/Sport, desc: "Sport HD"}
|
||||
# Paper
|
||||
- {id: 163, cat: Books/Mags, desc: "Paper Zeitungen"}
|
||||
- {id: 63, cat: Books/Comics, desc: "Paper Comic"}
|
||||
- {id: 96, cat: Books/EBook, desc: "Paper E-Book"}
|
||||
# XXX
|
||||
- {id: 113, cat: XXX/DVD, desc: "XXX DVD"}
|
||||
- {id: 76, cat: XXX, desc: "XXX HD-SD"}
|
||||
- {id: 75, cat: XXX/Pack, desc: "XXX Pack"}
|
||||
# Request
|
||||
- {id: 151, cat: Other, desc: "Request spritti01"}
|
||||
- {id: 62, cat: Books, desc: "EBook"}
|
||||
- {id: 30, cat: TV/Anime, desc: "Filme - Animie"}
|
||||
- {id: 28, cat: Movies/BluRay, desc: "Filme - Bluray"}
|
||||
- {id: 31, cat: Movies/Other, desc: "Filme - Bollywood"}
|
||||
- {id: 32, cat: Movies/DVD, desc: "Filme - DVD"}
|
||||
- {id: 33, cat: Movies/HD, desc: "Filme - HD"}
|
||||
- {id: 34, cat: Movies, desc: "Filme - Klassiker"}
|
||||
- {id: 35, cat: Movies, desc: "Filme - Pack"}
|
||||
- {id: 36, cat: Movies/SD, desc: "Filme - SD"}
|
||||
- {id: 37, cat: Movies/UHD, desc: "Filme - UHD"}
|
||||
- {id: 38, cat: Movies/HD, desc: "Filme - x264"}
|
||||
- {id: 63, cat: Movies, desc: "Fuer Unsere Kleinsten"}
|
||||
- {id: 64, cat: PC/Mobile-Other, desc: "Handy-Stuff"}
|
||||
- {id: 39, cat: Audio, desc: "Musik - Alben"}
|
||||
- {id: 40, cat: Audio, desc: "Musik - Diskografie"}
|
||||
- {id: 41, cat: Audio/Audiobook, desc: "Musik - Hoerbuch"}
|
||||
- {id: 42, cat: Audio, desc: "Musik - Mixe"}
|
||||
- {id: 43, cat: Audio/MP3, desc: "Musik - MP3"}
|
||||
- {id: 66, cat: Audio, desc: "Musik - Pack"}
|
||||
- {id: 44, cat: Audio/Video, desc: "Musik - Video"}
|
||||
- {id: 45, cat: PC, desc: "Programme - Linux"}
|
||||
- {id: 48, cat: PC/Mac, desc: "Programme - Mac"}
|
||||
- {id: 49, cat: PC/0day, desc: "Programme - Windows"}
|
||||
- {id: 65, cat: TV, desc: "Serien - Allgemein"}
|
||||
- {id: 50, cat: TV/Documentary, desc: "Serien - Dokus"}
|
||||
- {id: 51, cat: TV, desc: "Serien - Klassiker"}
|
||||
- {id: 52, cat: TV, desc: "Serien - Pack"}
|
||||
- {id: 53, cat: TV/Sport, desc: "Serien - Sport"}
|
||||
- {id: 60, cat: Other, desc: "Sonstiges"}
|
||||
- {id: 54, cat: PC/Mobile-Other, desc: "Spiele - Handy"}
|
||||
- {id: 55, cat: Console, desc: "Spiele - Konsolen"}
|
||||
- {id: 57, cat: PC/Games, desc: "Spiele - Mac / Linux / PC"}
|
||||
- {id: 58, cat: Console/Other, desc: "Spiele - Wimmel"}
|
||||
- {id: 59, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -73,105 +59,110 @@ settings:
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: pin
|
||||
type: text
|
||||
label: Pin
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Filter FreeLeech only
|
||||
default: false
|
||||
- name: onlyupload
|
||||
type: checkbox
|
||||
label: Filter OnlyUpload only
|
||||
default: false
|
||||
- name: info_free
|
||||
type: info
|
||||
label: About Freeleech and OnlyUpload at Coastal Crew
|
||||
default: <li>FreeLeech are torrents where neither the download or upload is counted. (On the Jackett dashboard search results these are tagged as NoUpload).</li><li>OnlyUpload are torrents where download is not counted but upload is. Good for building your Ratio up. (On the Jackett dashboard search results these are tagged as Freeleech).</li>
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: added
|
||||
options:
|
||||
added: created
|
||||
seeds: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents pro Seite:</b> setting to <b>100</b> on your Control Panel. The default is <i>15</i>.
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="/login.php"]
|
||||
cookies: ["JAVA=OK"] # avoid jscheck redirect
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
pin: "{{ .Config.pin }}"
|
||||
loggiin: einloggen
|
||||
error:
|
||||
- selector: div#login_error
|
||||
- selector: .tablea:contains("Fehler")
|
||||
test:
|
||||
path: selection.php
|
||||
|
||||
download:
|
||||
before:
|
||||
path: ajax_det_poll.php
|
||||
method: post
|
||||
inputs:
|
||||
set_thanks: thanks
|
||||
det_id: "{{ .DownloadUri.Query.torrent }}"
|
||||
ajax: yes
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: selection.php
|
||||
# https://coastal-crew.bounceme.net/browse.php?showsearch=1&c62=1&c33=1&search=&incldead=1&orderby=added&sort=desc
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
showsearch: 1
|
||||
search: "{{ .Keywords }}"
|
||||
blah: 0
|
||||
orderby: added
|
||||
sort: desc
|
||||
# 0 active, 1 all, 2 dead
|
||||
incldead: 1
|
||||
orderby: "{{ .Config.sort }}"
|
||||
sort: "{{ .Config.type }}"
|
||||
# site does not support imdbid search from the browse.php page or return imdb links in results
|
||||
|
||||
rows:
|
||||
selector: div.selection_wrap
|
||||
selector: "table.tableinborder[cellspacing=\"1\"][cellpadding=\"0\"]:not(:has(a[href=\"index.php\"])) > tbody > tr:has(a[href^=\"download.php\"]){{ if .Config.onlyupload }}:has(img[src=\"pic/oupic.gif\"]){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
cat_p1:
|
||||
selector: div.kat_cat_pic_name
|
||||
cat_p2:
|
||||
selector: div.kat_cat_pic_name_b
|
||||
categorydesc:
|
||||
text: "{{ .Result.cat_p1 }} {{ .Result.cat_p2 }}"
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a.selection_a
|
||||
selector: a[href^="details.php"]
|
||||
details:
|
||||
selector: a.selection_a
|
||||
selector: a[href^="details.php"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a.selection_a
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?torrent="]
|
||||
poster:
|
||||
selector: div[id^="details"] img
|
||||
selector: img[id="img-1"]
|
||||
attribute: src
|
||||
size:
|
||||
selector: div.selection_unter_ag
|
||||
selector: td.tablea table tbody tr:nth-child(2) td:nth-child(1) b:nth-child(1)
|
||||
files:
|
||||
selector: td.tablea table tbody tr:nth-child(2) td:nth-child(1) b:nth-child(2)
|
||||
seeders:
|
||||
selector: div.selection_unter_aa
|
||||
selector: td.tablea table tbody tr:nth-child(2) td:nth-child(2) b:nth-child(1)
|
||||
leechers:
|
||||
selector: div.selection_unter_aaa
|
||||
date_day:
|
||||
# Heute 13:30:04
|
||||
# Gestern 09:10:10
|
||||
selector: div.selection_unter_ab:not(:contains("."))
|
||||
optional: true
|
||||
selector: td.tablea table tbody tr:nth-child(2) td:nth-child(2) > b:nth-of-type(2)
|
||||
grabs:
|
||||
selector: td.tablea table tbody tr:nth-child(2) td:nth-child(3) b:nth-child(1)
|
||||
date:
|
||||
selector: td.tablea table tbody tr:nth-child(2) td:nth-child(5)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Heute", "Today"]
|
||||
- name: replace
|
||||
args: ["Gestern", "Yesterday"]
|
||||
date_year:
|
||||
# 30.02.2018 um 23:12:50
|
||||
selector: div.selection_unter_ab:contains(".")
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" um", ""]
|
||||
- name: append
|
||||
args: " +01:00" # CET
|
||||
- name: replace
|
||||
args: ["\xA0", " "]
|
||||
- name: dateparse
|
||||
args: "02.01.2006 15:04:05 -07:00"
|
||||
date:
|
||||
text: "{{ if or .Result.date_year .Result.date_day }}{{ or .Result.date_year .Result.date_day }}{{ else }}now{{ end }}"
|
||||
description:
|
||||
selector: selection_unter_af
|
||||
downloadvolumefactor:
|
||||
text: 1
|
||||
case:
|
||||
img[src="pic/oupic.gif"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
text: 0.7
|
||||
# engine n/a
|
||||
|
214
src/Jackett.Common/Definitions/dreamtracker.yml
Normal file
214
src/Jackett.Common/Definitions/dreamtracker.yml
Normal file
@@ -0,0 +1,214 @@
|
||||
---
|
||||
id: dreamtracker
|
||||
name: Dream Tracker
|
||||
description: "Dream Tracker is a GREEK Private tracker for TV / MOVIES / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://dream-tracker.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Anime
|
||||
- {id: 113, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 114, cat: TV/Anime, desc: "Anime Series"}
|
||||
- {id: 115, cat: Movies/Other, desc: "Anime Movies"}
|
||||
# Kids Stuff
|
||||
- {id: 1, cat: Movies/Other, desc: "Kids Stuff"}
|
||||
- {id: 14, cat: Movies/Other, desc: "Cartoon No Subs"}
|
||||
- {id: 16, cat: Movies/Other, desc: "Cartoon Sub. No Embed."}
|
||||
- {id: 17, cat: Movies/Other, desc: "Cartoon Sub. Embed."}
|
||||
- {id: 31, cat: Movies/Other, desc: "Cartoon in Greek "}
|
||||
- {id: 107, cat: Movies/Other, desc: "Kids in Greek"}
|
||||
- {id: 88, cat: Audio/Other, desc: "Music Kids"}
|
||||
# Movies Subs No Embed.
|
||||
- {id: 38, cat: Movies, desc: "Movies Subs No Embed."}
|
||||
- {id: 40, cat: Movies/SD, desc: "DVDscr - PPVRiP - WebRip -Web-DL- TVRiP"}
|
||||
- {id: 41, cat: Movies/SD, desc: "DVDRrip/R6/R5 Xvid/x264"}
|
||||
- {id: 42, cat: Movies/SD, desc: "BDRip/BRRip/HDRip/480p"}
|
||||
- {id: 43, cat: Movies/HD, desc: "HD - 720p"}
|
||||
- {id: 44, cat: Movies/HD, desc: "HD - 1080p"}
|
||||
- {id: 104, cat: Movies/HD, desc: "Micro"}
|
||||
# Movies Subs Embed.
|
||||
- {id: 45, cat: Movies, desc: "Movies Subs Embed."}
|
||||
- {id: 47, cat: Movies/SD, desc: "DVDscr - PPVRiP - WebRip - Web-DL-TVRiP"}
|
||||
- {id: 48, cat: Movies/SD, desc: "DVDRrip/R6/R5 Xvid/x264"}
|
||||
- {id: 49, cat: Movies/SD, desc: "BDRip/BRRip/HDRip/480p"}
|
||||
- {id: 50, cat: Movies/HD, desc: "HD - 720p"}
|
||||
- {id: 51, cat: Movies/HD, desc: "HD - 1080p"}
|
||||
- {id: 105, cat: Movies/HD, desc: "Micro"}
|
||||
# Movie Packs
|
||||
- {id: 90, cat: Movies, desc: "Movie Packs"}
|
||||
- {id: 91, cat: Movies, desc: "Movie Packs Greek"}
|
||||
- {id: 106, cat: Movies/Foreign, desc: "Movie Packs Foreign"}
|
||||
# Movies in Greek
|
||||
- {id: 56, cat: Movies, desc: "Movies in Greek"}
|
||||
- {id: 57, cat: Movies, desc: "Movies in Greek"}
|
||||
- {id: 58, cat: Movies, desc: "Movies Greek All Time Classics"}
|
||||
- {id: 98, cat: Movies, desc: "Greek Filmographies"}
|
||||
- {id: 99, cat: Movies/HD, desc: "HD 1080p"}
|
||||
- {id: 100, cat: Movies/HD, desc: "HD 720p"}
|
||||
# Movies 3D + 4K
|
||||
- {id: 97, cat: Movies, desc: "Movies 3D + 4K"}
|
||||
- {id: 111, cat: Movies/UHD, desc: "Movies 4K"}
|
||||
- {id: 112, cat: Movies/3D, desc: "Movies 3D"}
|
||||
# Tv Shows & Series
|
||||
- {id: 59, cat: TV, desc: "Tv Shows & Series"}
|
||||
- {id: 62, cat: TV/Foreign, desc: "Tv Shows Foreign"}
|
||||
- {id: 63, cat: TV, desc: "Tv Shows Greek"}
|
||||
- {id: 64, cat: TV/Foreign, desc: "Series Foreign"}
|
||||
- {id: 65, cat: TV, desc: "Series Greek"}
|
||||
- {id: 92, cat: TV/Foreign, desc: "Series Foreign Packs"}
|
||||
- {id: 93, cat: TV, desc: "Series Greek Packs"}
|
||||
# Sports
|
||||
- {id: 66, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 67, cat: TV/Sport, desc: "Sports"}
|
||||
# Documentary
|
||||
- {id: 68, cat: TV/Documentary, desc: "Documentary"}
|
||||
- {id: 69, cat: TV/Documentary, desc: "Documentary"}
|
||||
# Applications
|
||||
- {id: 6, cat: PC/0day, desc: "Applications"}
|
||||
- {id: 74, cat: PC/0day, desc: "Windows"}
|
||||
- {id: 73, cat: PC/Mobile-Android, desc: "Applications Mobile"}
|
||||
# eBooks & Images
|
||||
- {id: 87, cat: Books/EBook, desc: "eBooks & Images"}
|
||||
- {id: 83, cat: Books/EBook, desc: "Ebooks"}
|
||||
- {id: 110, cat: Books/Mags, desc: "EMagazines"}
|
||||
- {id: 82, cat: Other, desc: "Pics & Images"}
|
||||
# Games
|
||||
- {id: 2, cat: PC/Games, desc: "Games"}
|
||||
- {id: 27, cat: PC/Games, desc: "PC"}
|
||||
# Music
|
||||
- {id: 7, cat: Audio, desc: "Music"}
|
||||
- {id: 75, cat: Audio/MP3, desc: "Music Greek"}
|
||||
- {id: 76, cat: Audio/MP3, desc: "Music Greek Discographies"}
|
||||
- {id: 116, cat: Audio/Lossless, desc: "Greek Flac"}
|
||||
- {id: 77, cat: Audio/Foreign, desc: "Music Foreign"}
|
||||
- {id: 78, cat: Audio/Foreign, desc: "Music Foreign Discographies"}
|
||||
- {id: 94, cat: Audio/Lossless, desc: "Foreign Flac"}
|
||||
- {id: 20, cat: Audio/Video, desc: "Music Videos"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Filter freeleech only
|
||||
default: false
|
||||
- name: info
|
||||
type: info
|
||||
label: Layout
|
||||
default: "<ol><li>Only the English Classic profile is supported.<li>Make sure to set the <b>Torrent Listing</b> option in your profile to <b>Classic</b><li>And set the <b>Language</b> to <b>English</b><li>Using the <i>Modern</i> theme will prevent results, and using <i>Greek</i> will prevent upload dates.</ol>"
|
||||
|
||||
login:
|
||||
path: ?p=home&pid=1
|
||||
method: form
|
||||
form: form#sls_form
|
||||
submitpath: ajax/login.php
|
||||
inputs:
|
||||
action: login
|
||||
loginbox_membername: "{{ .Config.username }}"
|
||||
loginbox_password: "{{ .Config.password }}"
|
||||
loginbox_remember: 1
|
||||
selectorinputs:
|
||||
securitytoken:
|
||||
selector: "script:contains(\"stKey: \")"
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "stKey: \"(.+?)\","
|
||||
error:
|
||||
- selector: ":contains(\"-ERROR-\")"
|
||||
test:
|
||||
path: ?p=home&pid=1
|
||||
selector: a[href*="/?p=logout&"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: /
|
||||
inputs:
|
||||
p: torrents
|
||||
pid: 10
|
||||
$raw: "{{ range .Categories }}cid[]={{.}}&{{end}}"
|
||||
keywords: "{{ .Keywords }}"
|
||||
# name, description, both, uploader
|
||||
search_type: name
|
||||
|
||||
rows:
|
||||
selector: "table#torrents_table_classic tr:has(td.torrent_name){{ if .Config.freeleech }}:has(img[src$=\"/torrent_free.png\"]){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
title:
|
||||
selector: a[href*="?p=torrents&pid=10&action=details"]
|
||||
category:
|
||||
selector: div.category_image > a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cid
|
||||
details:
|
||||
selector: a[href*="?p=torrents&pid=10&action=details"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="?p=torrents&pid=10&action=download"]
|
||||
attribute: href
|
||||
date_year:
|
||||
# Uploaded 30-01-2019 15:02 by
|
||||
selector: td.torrent_name:not(:contains(" at ")):not(:has(abbr[data-time]))
|
||||
optional: true
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Uploaded (.+?) by"
|
||||
- name: append
|
||||
args: " +00:00" # auto adjusted by site account profile
|
||||
- name: dateparse
|
||||
args: "02-01-2006 15:04 -07:00"
|
||||
date_day:
|
||||
# Uploaded Friday at 05:11 by
|
||||
# Uploaded Today at 00:48 by
|
||||
# Uploaded Yesterday at 23:57 by
|
||||
selector: td.torrent_name:contains(" at "):not(:has(abbr[data-time]))
|
||||
optional: true
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Uploaded (.+?) by"
|
||||
- name: fuzzytime
|
||||
date_unix:
|
||||
# within the hour (unix)
|
||||
selector: abbr[data-time]
|
||||
attribute: data-time
|
||||
optional: true
|
||||
date:
|
||||
text: "{{ if or .Result.date_year .Result.date_unix .Result.date_day }}{{ or .Result.date_year .Result.date_unix .Result.date_day }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: a[rel="torrent_size"]
|
||||
seeders:
|
||||
selector: a[rel="torrent_seeders"]
|
||||
leechers:
|
||||
selector: a[rel="torrent_leechers"]
|
||||
grabs:
|
||||
selector: a[rel="times_completed"]
|
||||
poster:
|
||||
selector: a[rel="fancybox"]
|
||||
attribute: href
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[src$=\"/silver.gif\"]": 0.5
|
||||
"img[src$=\"/torrent_free.png\"]": 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"img[src$=\"/torrent_multiple_upload.png\"]": 2
|
||||
"*": 1
|
||||
# TSUE 2.2
|
@@ -6,7 +6,7 @@ language: es-ES
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.elitetorrent.wtf/
|
||||
- https://www.elitetorrent.dev/
|
||||
- https://elitetorrent.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://www.elitetorrent.biz/
|
||||
@@ -30,6 +30,7 @@ legacylinks:
|
||||
- https://elitetorrent.app/
|
||||
- https://elitetorrent.nocensor.biz/
|
||||
- https://elitetorrent.la/
|
||||
- https://www.elitetorrent.wtf/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: empornium
|
||||
name: Empornium
|
||||
description: "Empornium (EMP) is a Private Torrent Tracker for XXX"
|
||||
description: "Empornium (EMP) is a Private Torrent Tracker for 3X"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
@@ -64,8 +64,6 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
|
@@ -64,8 +64,6 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
|
@@ -4,7 +4,7 @@
|
||||
---
|
||||
id: femdomcult
|
||||
name: Femdomcult
|
||||
description: "Femdomcult is a Private Torrent Tracker for FETISH XXX"
|
||||
description: "Femdomcult is a Private Torrent Tracker for FETISH 3X"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
@@ -36,8 +36,6 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
|
674
src/Jackett.Common/Definitions/file-tracker.yml
Normal file
674
src/Jackett.Common/Definitions/file-tracker.yml
Normal file
@@ -0,0 +1,674 @@
|
||||
---
|
||||
id: file-tracker
|
||||
name: File-Tracker
|
||||
description: "File Tracker is a RUSSIAN Semi-Private Torrent Tracker for MOVIES / GENERAL"
|
||||
language: ru-RU
|
||||
type: semi-private
|
||||
encoding: windows-1251
|
||||
links:
|
||||
- https://file-tracker.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Эксклюзив
|
||||
# Exclusive
|
||||
- {id: 697, cat: Other, desc: " |- Правила, FAQ, стол заказов, общение"}
|
||||
- {id: 387, cat: Movies/DVD, desc: " |- Отечественные фильмы DVD Master's"}
|
||||
- {id: 386, cat: Movies/DVD, desc: " |- Зарубежные фильмы DVD Master's"}
|
||||
- {id: 390, cat: TV/SD, desc: " |- Сериалы DVD Master's"}
|
||||
- {id: 388, cat: Movies/DVD, desc: " |- Мультфильмы DVD Master's"}
|
||||
- {id: 601, cat: TV/Anime, desc: " |- Мультсериалы DVD Master's"}
|
||||
# Кино, видео, мультипликация и ТВ
|
||||
# Film, video, animation and TV
|
||||
- {id: 995, cat: Movies, desc: " |- Экранки с рекламой (фильмы, мультфильмы)"}
|
||||
- {id: 994, cat: Movies, desc: " |- Новинки с рекламой (фильмы, мультфильмы)"}
|
||||
- {id: 385, cat: Movies, desc: " |- Экранки (фильмы , мультфильмы)"}
|
||||
- {id: 987, cat: Movies, desc: " |- Зарубежное кино"}
|
||||
- {id: 988, cat: Movies, desc: " |- Кино России и СНГ"}
|
||||
- {id: 337, cat: Movies, desc: " |- Мультфильмы"}
|
||||
- {id: 72, cat: Movies, desc: " |- DVD, HD Видео (фильмы , мультфильмы)"}
|
||||
- {id: 999, cat: Movies, desc: " |- Фильмы (2021-2022)"}
|
||||
- {id: 996, cat: Movies, desc: " |- Фильмы (2019-2020)"}
|
||||
- {id: 921, cat: Movies, desc: " |- Фильмы (2016-2018)"}
|
||||
- {id: 382, cat: Movies, desc: " |- Фильмы (2012-2015)"}
|
||||
- {id: 381, cat: Movies, desc: " |- Фильмы (2009-2011)"}
|
||||
- {id: 734, cat: Movies, desc: " |- Фильмы (2006-2008)"}
|
||||
- {id: 380, cat: Movies, desc: " |- Фильмы (2001-2005)"}
|
||||
- {id: 379, cat: Movies, desc: " |- Фильмы до 2000 года"}
|
||||
- {id: 613, cat: Movies, desc: " |- Кино для детей"}
|
||||
- {id: 638, cat: Movies, desc: " |- Азиатское кино/Япония"}
|
||||
- {id: 136, cat: Movies, desc: " |- Индийское кино"}
|
||||
- {id: 443, cat: Movies, desc: " |- Антология зарубежного кино"}
|
||||
- {id: 1000, cat: Movies, desc: " |- Наше кино (2021 - 2022)"}
|
||||
- {id: 997, cat: Movies, desc: " |- Наше кино (2019 - 2020)"}
|
||||
- {id: 922, cat: Movies, desc: " |- Наше кино (2016 - 2018)"}
|
||||
- {id: 229, cat: Movies, desc: " |- Наше кино (2012 - 2015)"}
|
||||
- {id: 733, cat: Movies, desc: " |- Наше кино (2008 - 2011)"}
|
||||
- {id: 334, cat: Movies, desc: " |- Наше кино (2001 - 2007)"}
|
||||
- {id: 333, cat: Movies, desc: " |- Наше кино (1990 - 2000)"}
|
||||
- {id: 250, cat: Movies, desc: " |- Советское кино (классика)"}
|
||||
- {id: 62, cat: Movies, desc: " |- Кино для детей"}
|
||||
- {id: 962, cat: Movies, desc: " |- Антология отечественного кино"}
|
||||
- {id: 990, cat: Movies, desc: " |- Зарубежные фильмы , мультфильмы и сериалы на языках ближнего.."}
|
||||
- {id: 993, cat: Movies, desc: " |- Фильмы , мультфильмы и сериалы ближнего зарубежья и СНГ в ор.."}
|
||||
- {id: 991, cat: Movies, desc: " |- Зарубежные фильмы , мультфильмы и сериалы в оригинале"}
|
||||
- {id: 74, cat: Movies, desc: " |- Зарубежные мультфильмы"}
|
||||
- {id: 73, cat: Movies, desc: " |- Отечественные мультфильмы"}
|
||||
- {id: 599, cat: TV, desc: " |- Сказки русских писателей"}
|
||||
- {id: 575, cat: TV, desc: " |- Интерны"}
|
||||
- {id: 271, cat: TV, desc: " |- Реальные пацаны"}
|
||||
- {id: 377, cat: TV, desc: " |- МарГоша"}
|
||||
- {id: 612, cat: TV, desc: " |- Воронины"}
|
||||
- {id: 731, cat: TV, desc: " |- Сваты"}
|
||||
- {id: 968, cat: TV, desc: " |- Разные сериалы"}
|
||||
- {id: 639, cat: TV, desc: " |- Теория большого взрыва"}
|
||||
- {id: 89, cat: TV, desc: " |- Друзья"}
|
||||
- {id: 92, cat: TV, desc: " |- Тайны Смолвиля"}
|
||||
- {id: 95, cat: TV, desc: " |- Секретные материалы"}
|
||||
- {id: 383, cat: TV, desc: " |- Альф"}
|
||||
- {id: 384, cat: TV, desc: " |- Доктор Хаус"}
|
||||
- {id: 632, cat: TV, desc: " |- Дневники Вампира"}
|
||||
- {id: 969, cat: TV, desc: " |- Разные сериалы"}
|
||||
- {id: 600, cat: TV, desc: " |- Том и Джерри"}
|
||||
- {id: 609, cat: TV, desc: " |- Разное (иностранные мультсериалы)"}
|
||||
- {id: 701, cat: TV, desc: " |- Маша и Медведь"}
|
||||
- {id: 594, cat: TV, desc: " |- Ну, погоди!"}
|
||||
- {id: 598, cat: TV, desc: " |- Смешарики"}
|
||||
- {id: 610, cat: TV, desc: " |- Сборники мультфильмов"}
|
||||
- {id: 870, cat: TV, desc: " |- Разные (отечественные мультсериалы)"}
|
||||
- {id: 741, cat: Movies/3D, desc: " |- 3D | Кинофильмы"}
|
||||
- {id: 742, cat: Movies/3D, desc: " |- 3D | Мультфильмы"}
|
||||
- {id: 981, cat: Movies/3D, desc: " |- 3D | Blu-ray и BD Remux"}
|
||||
- {id: 743, cat: Movies/3D, desc: " |- 3D | Документальные фильмы"}
|
||||
- {id: 744, cat: Movies/3D, desc: " |- 3D | Спорт"}
|
||||
- {id: 335, cat: Movies/DVD, desc: " |- Наше кино (DVD)"}
|
||||
- {id: 336, cat: Movies/HD, desc: " |- Наше кино (HD Video)"}
|
||||
- {id: 747, cat: Movies/BluRay, desc: " |- Наше кино (Blu-ray и BD Remux)"}
|
||||
- {id: 985, cat: Movies/UHD, desc: " |- Наше кино (Ultra HD)"}
|
||||
- {id: 69, cat: Movies/DVD, desc: " |- Зарубежное кино (DVD)"}
|
||||
- {id: 70, cat: Movies/HD, desc: " |- Зарубежное кино (HD Video)"}
|
||||
- {id: 748, cat: Movies/BluRay, desc: " |- Зарубежное кино (Blu-ray и BD Remux)"}
|
||||
- {id: 984, cat: Movies/UHD, desc: " |- Зарубежное кино (Ultra HD)"}
|
||||
- {id: 907, cat: Movies, desc: " |- Кино для детей (DVD, HD Video, Blu-ray, BD Remux, Ultra HD)"}
|
||||
- {id: 339, cat: Movies, desc: " |- Мультфильмы (DVD, HD Video и Blu-ray)"}
|
||||
- {id: 602, cat: TV/Anime, desc: " |- Мультсериалы (DVD, HD Video и Blu-ray)"}
|
||||
- {id: 906, cat: Movies, desc: " |- Азиатское кино/Япония (DVD, HD Video, Blu-ray, BD Remux, Ult.."}
|
||||
- {id: 442, cat: Movies, desc: " |- Антология (DVD, HD Video, Blu-ray, BD Remux)"}
|
||||
- {id: 898, cat: TV, desc: " |- Отечественные сериалы (DVD, HD Video, Blu-ray, BD Remux)"}
|
||||
- {id: 970, cat: TV, desc: " |- Иностранные сериалы (DVD, HD Video, Blu-ray, BD Remux)"}
|
||||
- {id: 71, cat: Movies, desc: " |- Арт-хаус и авторское кино (DVD, HD Video, Blu-ray, BD Remux)"}
|
||||
- {id: 180, cat: Audio/Video, desc: " |- Музыкальное (DVD, HD Video, Blu-ray, BD Remux)"}
|
||||
- {id: 681, cat: TV, desc: " |- Осторожно Модерн!"}
|
||||
- {id: 341, cat: TV, desc: " |- Ералаш"}
|
||||
- {id: 332, cat: TV, desc: " |- Прожекторпэрисхилтон"}
|
||||
- {id: 330, cat: TV, desc: " |- Маски-шоу"}
|
||||
- {id: 279, cat: TV, desc: " |- Юмористы"}
|
||||
- {id: 65, cat: TV, desc: " |- КВН / Пост КВН"}
|
||||
- {id: 66, cat: TV, desc: " |- Вечерний Квартал"}
|
||||
- {id: 64, cat: TV, desc: " |- Даешь,молодежь!"}
|
||||
- {id: 10, cat: TV, desc: " |- Наша Russia"}
|
||||
- {id: 879, cat: TV, desc: " |- Другие телепередачи"}
|
||||
- {id: 614, cat: TV, desc: " |- Строительство и дизайн"}
|
||||
- {id: 252, cat: TV, desc: " |- BBC"}
|
||||
- {id: 81, cat: TV, desc: " |- Discovery"}
|
||||
- {id: 80, cat: TV, desc: " |- Фильмы National Geographic"}
|
||||
- {id: 910, cat: TV, desc: " |- Флора и Фауна"}
|
||||
- {id: 573, cat: TV, desc: " |- Секретные файлы"}
|
||||
- {id: 359, cat: TV, desc: " |- Запретные темы истории"}
|
||||
- {id: 358, cat: TV, desc: " |- Секретные материалы"}
|
||||
- {id: 357, cat: TV, desc: " |- Русские сенсации"}
|
||||
- {id: 356, cat: TV, desc: " |- Среда обитания"}
|
||||
- {id: 355, cat: TV, desc: " |- Медицина и здоровье"}
|
||||
- {id: 354, cat: TV, desc: " |- Тайны века"}
|
||||
- {id: 351, cat: TV, desc: " |- Апокалипсис"}
|
||||
- {id: 350, cat: TV, desc: " |- Профессия репортёр"}
|
||||
- {id: 349, cat: TV, desc: " |- Криминальная Россия"}
|
||||
- {id: 251, cat: TV, desc: " |- Военное видео и вооружение"}
|
||||
- {id: 82, cat: TV, desc: " |- Все о Охоте и Рыбалке"}
|
||||
- {id: 79, cat: TV, desc: " |- Непознанное и сверхъестественное"}
|
||||
- {id: 474, cat: TV, desc: " |- Одиссея Жака Кусто"}
|
||||
- {id: 268, cat: TV, desc: " |- Разное"}
|
||||
- {id: 365, cat: TV/Sport, desc: " |- Олимпийские игры"}
|
||||
- {id: 364, cat: TV/Sport, desc: " |- Фигурное катание"}
|
||||
- {id: 363, cat: TV/Sport, desc: " |- Бодибилдинг/Силовые виды спорта"}
|
||||
- {id: 362, cat: TV/Sport, desc: " |- Бильярд"}
|
||||
- {id: 361, cat: TV/Sport, desc: " |- Волейбол/Гандбол"}
|
||||
- {id: 360, cat: TV/Sport, desc: " |- Формула 1"}
|
||||
- {id: 272, cat: TV/Sport, desc: " |- Футбол"}
|
||||
- {id: 249, cat: TV/Sport, desc: " |- Рестлинг"}
|
||||
- {id: 248, cat: TV/Sport, desc: " |- Скейтборд / Сноуборд / Паркур"}
|
||||
- {id: 220, cat: TV/Sport, desc: " |- Авто/Мото"}
|
||||
- {id: 219, cat: TV/Sport, desc: " |- Хоккей"}
|
||||
- {id: 218, cat: TV/Sport, desc: " |- Баскетбол"}
|
||||
- {id: 217, cat: TV/Sport, desc: " |- Бокс"}
|
||||
- {id: 216, cat: TV/Sport, desc: " |- Теннис"}
|
||||
- {id: 215, cat: TV/Sport, desc: " |- Экстрим"}
|
||||
- {id: 214, cat: TV/Sport, desc: " |- Бои без правил"}
|
||||
- {id: 468, cat: TV/Sport, desc: " |- Игровое видео"}
|
||||
- {id: 545, cat: TV, desc: " |- Видеоуроки по программному обеспечению"}
|
||||
- {id: 673, cat: TV, desc: " |- Видеоуроки по медицине (обучение, лечение, профилактика)"}
|
||||
- {id: 463, cat: TV, desc: " |- Видеообучение ин. языкам"}
|
||||
- {id: 735, cat: TV, desc: " |- Для родителей"}
|
||||
- {id: 702, cat: TV, desc: " |- Для студентов"}
|
||||
- {id: 678, cat: TV, desc: " |- Для школьного возраста"}
|
||||
- {id: 677, cat: TV, desc: " |- Для самых маленьких"}
|
||||
- {id: 200, cat: TV, desc: " |- Русский стиль и рукопашный бой"}
|
||||
- {id: 199, cat: TV, desc: " |- Джиу-джитсу"}
|
||||
- {id: 198, cat: TV, desc: " |- Айкидо и айки-дзюцу"}
|
||||
- {id: 277, cat: TV, desc: "Разное (Видеоуроки, обучающее видео)"}
|
||||
- {id: 657, cat: TV, desc: " |- Школа || Сёнэн || Сёдзё"}
|
||||
- {id: 656, cat: TV, desc: " |- Боевые искусства"}
|
||||
- {id: 655, cat: TV, desc: " |- Ужасы || Мистика || Вампиры"}
|
||||
- {id: 654, cat: TV, desc: " |- Фэнтези || Апокалиптика || Постапокалиптика"}
|
||||
- {id: 653, cat: TV, desc: " |- Меха"}
|
||||
- {id: 658, cat: TV, desc: " |- Романтика"}
|
||||
- {id: 659, cat: TV, desc: " |- Комедия"}
|
||||
- {id: 660, cat: TV, desc: " |- Для детей"}
|
||||
- {id: 661, cat: TV, desc: " |- Разное"}
|
||||
- {id: 620, cat: TV, desc: " |- Призрак в доспехах"}
|
||||
- {id: 635, cat: TV, desc: " |- Хеллсинг"}
|
||||
- {id: 619, cat: TV, desc: " |- Мобильный воин ГАНДАМ"}
|
||||
- {id: 618, cat: TV, desc: " |- Наруто"}
|
||||
- {id: 617, cat: TV, desc: " |- Блич"}
|
||||
- {id: 308, cat: TV/Anime, desc: " |- Аниме (озвучка/SD и DVD)"}
|
||||
- {id: 307, cat: TV/Anime, desc: " |- Аниме (RAW/DVD)"}
|
||||
- {id: 306, cat: TV/Anime, desc: " |- Аниме (RAW/SD)"}
|
||||
- {id: 715, cat: TV/Anime, desc: " |- Аниме (DVD)"}
|
||||
- {id: 317, cat: TV/Anime, desc: " |- 720p и 1080p (озвучка)"}
|
||||
- {id: 316, cat: TV/Anime, desc: " |- 1080p (RAW)"}
|
||||
- {id: 315, cat: TV/Anime, desc: " |- 720p (RAW)"}
|
||||
- {id: 304, cat: TV/Anime, desc: " |- Аниме (озвучка)"}
|
||||
- {id: 303, cat: TV/Anime, desc: " |- Аниме (RAW)"}
|
||||
# Игры
|
||||
# Games
|
||||
- {id: 471, cat: Console, desc: " |- Раздачи игр от R.G. FTN Gaming RePack"}
|
||||
- {id: 19, cat: Console, desc: " |- Новинки игр"}
|
||||
- {id: 99, cat: Console, desc: " |- Demo, Alpha, Beta версии"}
|
||||
- {id: 16, cat: Console, desc: " |- Action FPS (1st Person)"}
|
||||
- {id: 885, cat: Console, desc: " |- Action TPS (3rd Person)"}
|
||||
- {id: 17, cat: Console, desc: " |- RPG"}
|
||||
- {id: 104, cat: Console, desc: " |- Авто/мото симуляторы"}
|
||||
- {id: 105, cat: Console, desc: " |- Авиасимуляторы"}
|
||||
- {id: 923, cat: Console, desc: " |- Спортивные симуляторы"}
|
||||
- {id: 258, cat: Console, desc: " |- Другие симуляторы"}
|
||||
- {id: 102, cat: Console, desc: " |- Аркады, Файтинги"}
|
||||
- {id: 103, cat: Console, desc: " |- Приключения и Квесты"}
|
||||
- {id: 101, cat: Console, desc: " |- Стратегии / Логические игры"}
|
||||
- {id: 108, cat: Console, desc: " |- Мини игры"}
|
||||
- {id: 20, cat: Console, desc: " |- Online-игры"}
|
||||
- {id: 107, cat: Console, desc: " |- Детские и обучающие игры"}
|
||||
- {id: 109, cat: Console, desc: " |- Аниме-игры"}
|
||||
- {id: 722, cat: Console, desc: " |- Action (старые игры)"}
|
||||
- {id: 721, cat: Console, desc: " |- RPG (старые игры)"}
|
||||
- {id: 720, cat: Console, desc: " |- Симуляторы (старые игры)"}
|
||||
- {id: 719, cat: Console, desc: " |- Аркады (старые игры)"}
|
||||
- {id: 718, cat: Console, desc: " |- Приключения и Квесты (старые игры)"}
|
||||
- {id: 717, cat: Console, desc: " |- Стратегии (старые игры)"}
|
||||
- {id: 989, cat: Console, desc: " |- Модифицированные версии игр"}
|
||||
- {id: 18, cat: Console, desc: " |- Моды, русификаторы, патчи, дополнения и обновления для игр"}
|
||||
- {id: 724, cat: Console, desc: " |- Игровой софт"}
|
||||
- {id: 450, cat: Console, desc: " |- S.T.A.L.K.E.R."}
|
||||
- {id: 920, cat: Console, desc: " |- Игры для Mac OS"}
|
||||
- {id: 695, cat: Console, desc: " |- PlayStation 1/2/3"}
|
||||
- {id: 113, cat: Console, desc: " |- Xbox (Xbox 360)"}
|
||||
- {id: 112, cat: Console, desc: " |- PSX-PSP"}
|
||||
- {id: 111, cat: Console, desc: " |- Dreamcast"}
|
||||
- {id: 679, cat: Console, desc: " |- Видео для PSP"}
|
||||
- {id: 662, cat: Console, desc: " |- Софт для консолей"}
|
||||
- {id: 116, cat: Console, desc: " |- Портативные и Консольные (Игры)"}
|
||||
# ПО для Windows
|
||||
# Software for Windows
|
||||
- {id: 529, cat: PC/0day, desc: " |- Информация и диагностика"}
|
||||
- {id: 518, cat: PC/0day, desc: " |- Системные утилиты"}
|
||||
- {id: 516, cat: PC/0day, desc: " |- Безопасность: Защита информации. Антивирусы/файерволы"}
|
||||
- {id: 515, cat: PC/0day, desc: " |- Архиваторы и файловые менеджеры"}
|
||||
- {id: 514, cat: PC/0day, desc: " |- Сервисное обслуживание ПК"}
|
||||
- {id: 513, cat: PC/0day, desc: " |- Настройка и оптимизация ОС"}
|
||||
- {id: 530, cat: PC/0day, desc: " |- Сборники смешанного ПО"}
|
||||
- {id: 437, cat: PC/0day, desc: " |- Активаторы (лоадеры) OS Windows / Office, SP и оф патчи"}
|
||||
- {id: 520, cat: PC/0day, desc: " |- Офис"}
|
||||
- {id: 528, cat: PC/0day, desc: " |- Работа с PDF и DjVu"}
|
||||
- {id: 522, cat: PC/0day, desc: " |- Программы для бизнеса и делопроизводства"}
|
||||
- {id: 521, cat: PC/0day, desc: " |- Словари, Переводчики"}
|
||||
- {id: 527, cat: PC/0day, desc: " |- Распознавание текста, звука и синтез речи"}
|
||||
- {id: 508, cat: PC/0day, desc: " |- Консультант+"}
|
||||
- {id: 509, cat: PC/0day, desc: " |- Гарант"}
|
||||
- {id: 510, cat: PC/0day, desc: " |- Другие справочно-правовые системы и обучающее ПО"}
|
||||
- {id: 511, cat: PC/0day, desc: " |- Справочное ПО: справочники, каталоги"}
|
||||
- {id: 543, cat: PC/0day, desc: " |- Запись CD, DVD"}
|
||||
- {id: 526, cat: PC/0day, desc: " |- Графика / Просмотрщики графики"}
|
||||
- {id: 525, cat: PC/0day, desc: " |- Для работы с аудио"}
|
||||
- {id: 524, cat: PC/0day, desc: " |- Для работы с видео"}
|
||||
- {id: 887, cat: PC/0day, desc: " |- Интернет TV &Radio"}
|
||||
- {id: 561, cat: PC/0day, desc: " |- Удаленный доступ и ПО для свободного доступа в интернет"}
|
||||
- {id: 555, cat: PC/0day, desc: " |- 3G USB-модем и Webcam"}
|
||||
- {id: 537, cat: PC/0day, desc: " |- Утилиты для удаления всплывающих окон и баннерной рекламы"}
|
||||
- {id: 536, cat: PC/0day, desc: " |- Программы общения"}
|
||||
- {id: 535, cat: PC/0day, desc: " |- Почта и файлообмен"}
|
||||
- {id: 533, cat: PC/0day, desc: " |- Браузеры и дополнения к ним"}
|
||||
- {id: 534, cat: PC/0day, desc: " |- Разное"}
|
||||
- {id: 542, cat: PC/0day, desc: " |- Сборники драйверов и ПО для обновления драйверов"}
|
||||
- {id: 541, cat: PC/0day, desc: " |- Звуковые карты"}
|
||||
- {id: 540, cat: PC/0day, desc: " |- Видеокарты"}
|
||||
- {id: 539, cat: PC/0day, desc: " |- Материнские платы"}
|
||||
- {id: 554, cat: PC/0day, desc: " |- Темы, скринсейверы ..."}
|
||||
- {id: 551, cat: PC/0day, desc: " |- Обои"}
|
||||
- {id: 553, cat: PC/0day, desc: " |- Гаджеты рабочего стола"}
|
||||
- {id: 739, cat: PC/0day, desc: " |- Аватары, Иконки, Смайлы"}
|
||||
- {id: 607, cat: PC/0day, desc: " |- САПР"}
|
||||
- {id: 344, cat: PC/0day, desc: " |- ГИС (Геоинформационные системы)"}
|
||||
- {id: 965, cat: PC/0day, desc: " |- Программирование и разработка ПО"}
|
||||
- {id: 345, cat: PC/0day, desc: " |- Карты, снабженные программной оболочкой"}
|
||||
- {id: 348, cat: PC/0day, desc: " |- Разное - системы навигации и карты"}
|
||||
- {id: 680, cat: PC/0day, desc: " |- ПО по диагностике и ремонту автомобилей"}
|
||||
- {id: 675, cat: PC/0day, desc: " |- Программное обеспечение по медицине"}
|
||||
- {id: 560, cat: PC/0day, desc: " |- Photostoсks"}
|
||||
- {id: 559, cat: PC/0day, desc: " |- Футажи"}
|
||||
- {id: 558, cat: PC/0day, desc: " |- Заготовки, виньетки, рамки"}
|
||||
- {id: 557, cat: PC/0day, desc: " |- Растровые и Векторные Клипарты"}
|
||||
- {id: 960, cat: PC/0day, desc: " |- Вспомогательный софт для релизера"}
|
||||
- {id: 961, cat: PC/0day, desc: " |- Разное"}
|
||||
# Операционные системы и программирование
|
||||
# Operating systems and programming
|
||||
- {id: 972, cat: PC, desc: " |- Windows 10 / 11 (Оригинальные версии)"}
|
||||
- {id: 909, cat: PC, desc: " |- Windows 8 / 8.1 (Оригинальные версии)"}
|
||||
- {id: 822, cat: PC, desc: " |- Windows 7 (Оригинальные версии)"}
|
||||
- {id: 823, cat: PC, desc: " |- Windows Vista (Оригинальные версии)"}
|
||||
- {id: 824, cat: PC, desc: " |- Windows XP (Оригинальные версии)"}
|
||||
- {id: 434, cat: PC, desc: " |- Windows OS, выпущенные до 2001 года (Оригинальные версии)"}
|
||||
- {id: 973, cat: PC, desc: " |- Windows 10 / 11 (сборки)"}
|
||||
- {id: 883, cat: PC, desc: " |- Windows 8 / 8.1 (сборки)"}
|
||||
- {id: 264, cat: PC, desc: " |- Windows 7 (сборки)"}
|
||||
- {id: 166, cat: PC, desc: " |- Windows Vista (сборки)"}
|
||||
- {id: 165, cat: PC, desc: " |- Windows XP (сборки)"}
|
||||
- {id: 167, cat: PC, desc: " |- Серверные OS Windows"}
|
||||
- {id: 998, cat: PC, desc: " |- Insider Preview, RC, Beta версии, Service Packs"}
|
||||
- {id: 265, cat: PC, desc: " |- Cборники разных операционных систем"}
|
||||
- {id: 281, cat: PC, desc: " |- Помощь/Опросы/Общение"}
|
||||
- {id: 168, cat: PC, desc: " |- Операционные системы"}
|
||||
- {id: 280, cat: PC, desc: " |- Программное обеспечение"}
|
||||
- {id: 169, cat: PC, desc: " |- Другие ОС и ПО под них"}
|
||||
- {id: 732, cat: PC, desc: " |- Игры для Linux"}
|
||||
- {id: 328, cat: PC, desc: " |- Видеоуроки по Linux"}
|
||||
- {id: 286, cat: PC, desc: " |- Общение"}
|
||||
- {id: 285, cat: PC/Mac, desc: " |- Аудио редакторы и конверторы для Mac OS"}
|
||||
- {id: 284, cat: PC/Mac, desc: " |- Программы для создания и обработки графики Mac OS"}
|
||||
- {id: 283, cat: PC/Mac, desc: " |- Программы для просмотра и обработки видео Mac OS"}
|
||||
- {id: 282, cat: PC/Mac, desc: " |- Mac OS"}
|
||||
- {id: 171, cat: PC/Mac, desc: " |- Системные программы для Mac OS"}
|
||||
- {id: 170, cat: PC/Mac, desc: " |- Mac OS (для Macintosh)"}
|
||||
- {id: 436, cat: Other, desc: " |- WYSIWYG Редакторы для веб-дизайна"}
|
||||
- {id: 435, cat: Other, desc: " |- Обмен исходниками"}
|
||||
- {id: 376, cat: Other, desc: " |- Среды программирования, компиляторы и вспомогательные програ.."}
|
||||
- {id: 370, cat: Other, desc: " |- Системы управления базами данных"}
|
||||
- {id: 369, cat: Other, desc: " |- Скрипты и шаблоны"}
|
||||
- {id: 368, cat: Other, desc: " |- Компоненты для сред программирования"}
|
||||
- {id: 367, cat: Other, desc: " |- Ищу и предлагаю (Веб-разработка и программирование)"}
|
||||
# iPhone, iPod, iPod Touch, iPad, мобильные телефоны . Android и КПК
|
||||
# iPhone, iPod, iPod Touch, iPad, mobile phones.
|
||||
- {id: 430, cat: PC/Mobile-iOS, desc: " |- База знаний"}
|
||||
- {id: 967, cat: PC/Mobile-iOS, desc: " |- Прошивки и ОС"}
|
||||
- {id: 426, cat: PC/Mobile-iOS, desc: " |- Программы"}
|
||||
- {id: 429, cat: PC/Mobile-iOS, desc: " |- Игры"}
|
||||
- {id: 428, cat: PC/Mobile-iOS, desc: " |- Видео"}
|
||||
- {id: 913, cat: PC/Mobile-iOS, desc: " |- Видео"}
|
||||
- {id: 175, cat: PC/Mobile-iOS, desc: " |- Приложения"}
|
||||
- {id: 174, cat: PC/Mobile-iOS, desc: " |- Игры"}
|
||||
# Музыка
|
||||
# Music
|
||||
- {id: 939, cat: Audio/Lossless, desc: " |- Дискографии в Lossless"}
|
||||
- {id: 948, cat: Audio/MP3, desc: " |- Дискографии в MP3"}
|
||||
- {id: 129, cat: Audio, desc: " |- Многоканальная музыка (Электронная музыка)"}
|
||||
- {id: 825, cat: Audio/Lossless, desc: " |- Lossless (Электронная Музыка)"}
|
||||
- {id: 829, cat: Audio/MP3, desc: " |- Techno / Hardcore / Acid (mp3)"}
|
||||
- {id: 828, cat: Audio/MP3, desc: " |- Radioshows, Podcasts, Live Sets, Mixes (mp3)"}
|
||||
- {id: 827, cat: Audio/MP3, desc: " |- D'n'B / Jungle / Breaks (mp3)"}
|
||||
- {id: 826, cat: Audio/MP3, desc: " |- Ambient / ChillOut (mp3)"}
|
||||
- {id: 288, cat: Audio/MP3, desc: " |- Drum and Bass (mp3)"}
|
||||
- {id: 128, cat: Audio/MP3, desc: " |- Garage (mp3)"}
|
||||
- {id: 127, cat: Audio/MP3, desc: " |- Mixadance (mp3)"}
|
||||
- {id: 126, cat: Audio/MP3, desc: " |- House / Electro / Dance / Synthpop (mp3)"}
|
||||
- {id: 125, cat: Audio/MP3, desc: " |- Trance / ProgressiveTranсе / HardStyle (mp3)"}
|
||||
- {id: 124, cat: Audio/MP3, desc: " |- Электронная музыка других жанров (mp3)"}
|
||||
- {id: 929, cat: Audio/MP3, desc: " |- Сборники разных исполнителей (mp3)"}
|
||||
- {id: 940, cat: Audio/Lossless, desc: " |- Дискографии в Lossless"}
|
||||
- {id: 951, cat: Audio/MP3, desc: " |- Дискографии в MP3"}
|
||||
- {id: 130, cat: Audio, desc: " |- Многоканальная музыка (Рэп, Хип-Хоп, R.n.B)"}
|
||||
- {id: 830, cat: Audio/Lossless, desc: " |- Lossless (Рэп, Хип-Хоп, R.n.B)"}
|
||||
- {id: 134, cat: Audio/MP3, desc: " |- Отечественный Рэп, Хип-Хоп (mp3)"}
|
||||
- {id: 133, cat: Audio/MP3, desc: " |- Зарубежный Рэп, Хип-Хоп (mp3)"}
|
||||
- {id: 132, cat: Audio/MP3, desc: " |- Отечественный R.n.B (mp3)"}
|
||||
- {id: 131, cat: Audio/MP3, desc: " |- Зарубежный R.n.B (mp3)"}
|
||||
- {id: 930, cat: Audio/MP3, desc: " |- Сборники разных исполнителей (mp3)"}
|
||||
- {id: 941, cat: Audio/Lossless, desc: " |- Дискографии в Lossless"}
|
||||
- {id: 952, cat: Audio/MP3, desc: " |- Дискографии в MP3"}
|
||||
- {id: 831, cat: Audio, desc: " |- Многоканальная музыка (Зарубежный рок)"}
|
||||
- {id: 454, cat: Audio/Lossless, desc: " |- Lossless (Зарубежный рок)"}
|
||||
- {id: 149, cat: Audio/MP3, desc: " |- Аltеrnаtivе, Hard, Indереndеnt (mp3)"}
|
||||
- {id: 839, cat: Audio/MP3, desc: " |- Reggae, Ska, Dub (mp3)"}
|
||||
- {id: 148, cat: Audio/MP3, desc: " |- Punk, Hardcore, Emo (mp3)"}
|
||||
- {id: 147, cat: Audio/MP3, desc: " |- Nu Metal, Metalcore, Metal (mp3)"}
|
||||
- {id: 150, cat: Audio/MP3, desc: " |- Post-Rock (mp3)"}
|
||||
- {id: 931, cat: Audio/MP3, desc: " |- Сборники разных исполнителей (mp3)"}
|
||||
- {id: 942, cat: Audio/Lossless, desc: " |- Дискографии в Lossless"}
|
||||
- {id: 954, cat: Audio/MP3, desc: " |- Дискографии в MP3"}
|
||||
- {id: 832, cat: Audio, desc: " |- Многоканальная музыка (Отечественный рок)"}
|
||||
- {id: 455, cat: Audio/Lossless, desc: " |- Lossless (Отечественный рок)"}
|
||||
- {id: 834, cat: Audio/MP3, desc: " |- Nu Metal, Metalcore, Metal (mp3)"}
|
||||
- {id: 833, cat: Audio/MP3, desc: " |- Аltеrnаtivе, Hard, Indереndеnt (mp3)"}
|
||||
- {id: 152, cat: Audio/MP3, desc: " |- Punk, Hardcore, Emo (mp3)"}
|
||||
- {id: 151, cat: Audio/MP3, desc: " |- Reggae, Ska, Dub (mp3)"}
|
||||
- {id: 932, cat: Audio/MP3, desc: " |- Сборники разных исполнителей (mp3)"}
|
||||
- {id: 943, cat: Audio/Lossless, desc: " |- Дискографии в Lossless"}
|
||||
- {id: 956, cat: Audio/MP3, desc: " |- Дискографии в MP3"}
|
||||
- {id: 845, cat: Audio, desc: " |- Многоканальная музыка (Industrial)"}
|
||||
- {id: 844, cat: Audio/Lossless, desc: " |- Lossless (Industrial)"}
|
||||
- {id: 843, cat: Audio/MP3, desc: " |- Отечественный Industrial (mp3)"}
|
||||
- {id: 842, cat: Audio/MP3, desc: " |- Зарубежный Industrial (mp3)"}
|
||||
- {id: 936, cat: Audio/MP3, desc: " |- Сборники разных исполнителей (mp3)"}
|
||||
- {id: 944, cat: Audio/Lossless, desc: " |- Дискографии в Lossless"}
|
||||
- {id: 955, cat: Audio/MP3, desc: " |- Дискографии в MP3"}
|
||||
- {id: 853, cat: Audio, desc: " |- Многоканальная музыка (Folk, NewAge, Flamenco)"}
|
||||
- {id: 852, cat: Audio/Lossless, desc: " |- Lossless (Folk, NewAge, Flamenco)"}
|
||||
- {id: 851, cat: Audio/MP3, desc: " |- Flamenco и акустическая гитара (mp3)"}
|
||||
- {id: 850, cat: Audio/MP3, desc: " |- Этническая музыка Африки и Азии (mp3)"}
|
||||
- {id: 849, cat: Audio/MP3, desc: " |- Country, Bluegrass (mp3)"}
|
||||
- {id: 848, cat: Audio/MP3, desc: " |- Этническая музыка Кавказа и Закавказья (mp3)"}
|
||||
- {id: 847, cat: Audio/MP3, desc: " |- NewAge &Meditative (mp3)"}
|
||||
- {id: 846, cat: Audio/MP3, desc: " |- Folk и neo-folk, celtic, medieval (mp3)"}
|
||||
- {id: 935, cat: Audio/MP3, desc: " |- Сборники разных исполнителей (mp3)"}
|
||||
- {id: 945, cat: Audio/Lossless, desc: " |- Дискографии в Lossless"}
|
||||
- {id: 953, cat: Audio/MP3, desc: " |- Дискографии в MP3"}
|
||||
- {id: 222, cat: Audio, desc: " |- Многоканальная музыка (Поп-музыка)"}
|
||||
- {id: 221, cat: Audio/Lossless, desc: " |- Lossless (Поп-музыка)"}
|
||||
- {id: 326, cat: Audio/MP3, desc: " |- Отечественная Eurodance, Technopop, Disco (mp3)"}
|
||||
- {id: 223, cat: Audio/MP3, desc: " |- Зарубежная Eurodance, Technopop, Disco (mp3)"}
|
||||
- {id: 156, cat: Audio/MP3, desc: " |- Отечественная Поп музыка (mp3)"}
|
||||
- {id: 157, cat: Audio/MP3, desc: " |- Зарубежная Поп музыка (mp3)"}
|
||||
- {id: 158, cat: Audio/MP3, desc: " |- Сборники отечественной Поп-музыки (mp3)"}
|
||||
- {id: 224, cat: Audio/MP3, desc: " |- Сборники зарубежной Поп-музыки (mp3)"}
|
||||
- {id: 924, cat: Audio/MP3, desc: " |- Сборники разных исполнителей (mp3)"}
|
||||
- {id: 946, cat: Audio/Lossless, desc: " |- Дискографии в Lossless"}
|
||||
- {id: 950, cat: Audio/MP3, desc: " |- Дискографии в MP3"}
|
||||
- {id: 840, cat: Audio, desc: " |- Многоканальная музыка (Классическая музыка)"}
|
||||
- {id: 841, cat: Audio/Lossless, desc: " |- Lossless (Классическая музыка)"}
|
||||
- {id: 153, cat: Audio/MP3, desc: " |- Классическая музыка (mp3)"}
|
||||
- {id: 933, cat: Audio/MP3, desc: " |- Сборники разных исполнителей (mp3)"}
|
||||
- {id: 947, cat: Audio/Lossless, desc: " |- Дискографии в Lossless"}
|
||||
- {id: 949, cat: Audio/MP3, desc: " |- Дискографии в MP3"}
|
||||
- {id: 928, cat: Audio, desc: " |- Многоканальная музыка"}
|
||||
- {id: 938, cat: Audio/Lossless, desc: " |- Lossless (Музыка других жанров)"}
|
||||
- {id: 572, cat: Audio/MP3, desc: " |- Blues, Lounge,Cillout, Bossa Nova (mp3)"}
|
||||
- {id: 155, cat: Audio/MP3, desc: " |- Джаз (mp3)"}
|
||||
- {id: 871, cat: Audio/MP3, desc: " |- Военная и Патриотическая песня (mp3)"}
|
||||
- {id: 259, cat: Audio/MP3, desc: " |- Шансон и Бардовская песня (mp3)"}
|
||||
- {id: 448, cat: Audio/MP3, desc: " |- Музыка для детей (mp3)"}
|
||||
- {id: 934, cat: Audio/MP3, desc: " |- Сборники разных исполнителей (mp3)"}
|
||||
- {id: 867, cat: Audio, desc: " |- Рок-музыка (муз видео)"}
|
||||
- {id: 866, cat: Audio, desc: " |- Электронная музыка (муз видео)"}
|
||||
- {id: 865, cat: Audio, desc: " |- Поп-музыка ( муз видео)"}
|
||||
- {id: 864, cat: Audio, desc: " |- Народная музыка (Folk) (муз видео)"}
|
||||
- {id: 863, cat: Audio, desc: " |- Джаз (муз видео)"}
|
||||
- {id: 862, cat: Audio, desc: " |- Блюз (муз видео)"}
|
||||
- {id: 861, cat: Audio, desc: " |- Классика (муз видео)"}
|
||||
- {id: 860, cat: Audio, desc: " |- Рэп, Хип-Хоп, R.n.B (муз видео)"}
|
||||
- {id: 859, cat: Audio, desc: " |- Русский шансон (муз видео)"}
|
||||
- {id: 858, cat: Audio, desc: " |- Детское муз видео"}
|
||||
- {id: 289, cat: Audio, desc: " |- К играм"}
|
||||
- {id: 290, cat: Audio, desc: " |- К фильмам"}
|
||||
- {id: 291, cat: Audio, desc: " |- К сериалам"}
|
||||
# Литература и обучение
|
||||
# Literature and learning
|
||||
- {id: 61, cat: Books, desc: " |- Художественная литература"}
|
||||
- {id: 664, cat: Books, desc: " |- Художественная литература для детей"}
|
||||
- {id: 467, cat: Books, desc: " |- Художественная литература на иностранных языках"}
|
||||
- {id: 703, cat: Books, desc: "Программы и библиотеки для электронных книг"}
|
||||
- {id: 966, cat: Books, desc: " |- Кулинария"}
|
||||
- {id: 666, cat: Books, desc: " |- Обучающая литература для родителей"}
|
||||
- {id: 665, cat: Books, desc: " |- Обучающая литература для детей"}
|
||||
- {id: 182, cat: Books, desc: " |- Учебники, справочники, энциклопедии"}
|
||||
- {id: 466, cat: Books, desc: " |- Книги, учебники и справочная литература по обучению ин. язык.."}
|
||||
- {id: 185, cat: Books, desc: " |- Философия и религия"}
|
||||
- {id: 184, cat: Books, desc: " |- Психология"}
|
||||
- {id: 183, cat: Books, desc: " |- Хобби (увлечения и досуг)"}
|
||||
- {id: 181, cat: Books, desc: " |- Литература по компьютерам и ПО"}
|
||||
- {id: 782, cat: Books, desc: " |- Радиоэлектроника"}
|
||||
- {id: 585, cat: Books, desc: " |- Литература по авто и мото транспорту"}
|
||||
- {id: 584, cat: Books, desc: " |- Руководства по ремонту/обслуживанию/эксплуатации авто"}
|
||||
- {id: 586, cat: Books, desc: " |- Авто - Тюнинг, чиптюнинг, настройка, отделка и укращения"}
|
||||
- {id: 672, cat: Books, desc: " |- Литература по медицине"}
|
||||
- {id: 793, cat: Books, desc: "Журналы научно-прикладные и познавательно-образовательные"}
|
||||
- {id: 708, cat: PC, desc: "Интерактивный и компьтерный материал"}
|
||||
- {id: 875, cat: PC, desc: " |- Интерактивные компьютерные диски для хобби"}
|
||||
- {id: 583, cat: PC, desc: " |- Интерактивные справочники и каталоги для авто/мото транспорт.."}
|
||||
- {id: 465, cat: PC, desc: " |- Интерактивные и компьютерные диски для обучения ин. языкам"}
|
||||
- {id: 674, cat: PC, desc: " |- Интерактивные и компьютерные диски по медицине"}
|
||||
- {id: 710, cat: PC, desc: " |- Прочие материалы для детей и родителей"}
|
||||
- {id: 888, cat: Books, desc: "Литература разных направлений"}
|
||||
- {id: 897, cat: Books, desc: " |- Прочее"}
|
||||
- {id: 896, cat: Books, desc: " |- Автомобили"}
|
||||
- {id: 895, cat: Books, desc: " |- Домашним мастерам"}
|
||||
- {id: 894, cat: Books, desc: " |- Для женщин"}
|
||||
- {id: 893, cat: Books, desc: " |- Для мужчин"}
|
||||
- {id: 892, cat: Books, desc: " |- Научно-популярное"}
|
||||
- {id: 891, cat: Books, desc: " |- Мир техники"}
|
||||
- {id: 890, cat: Books, desc: " |- Игры"}
|
||||
- {id: 889, cat: Books, desc: " |- История"}
|
||||
- {id: 21, cat: Audio/Audiobook, desc: "Аудиокниги"}
|
||||
- {id: 736, cat: Audio/Audiobook, desc: " |- S.T.A.L.K.E.R."}
|
||||
- {id: 693, cat: Audio/Audiobook, desc: " |- Романы"}
|
||||
- {id: 464, cat: Audio/Audiobook, desc: " |- Аудиообучение ин. языкам"}
|
||||
- {id: 686, cat: Audio/Audiobook, desc: " |- Обучающие и познавательные аудиокниги"}
|
||||
- {id: 685, cat: Audio/Audiobook, desc: " |- Аудиокниги на иностранных языках"}
|
||||
- {id: 684, cat: Audio/Audiobook, desc: " |- Детективы"}
|
||||
- {id: 441, cat: Audio/Audiobook, desc: " |- Фантастика"}
|
||||
- {id: 192, cat: Audio/Audiobook, desc: " |- Классика"}
|
||||
- {id: 816, cat: Audio/Audiobook, desc: " |- Современная литература"}
|
||||
- {id: 190, cat: Audio/Audiobook, desc: " |- Аудио книги для детей"}
|
||||
- {id: 191, cat: Audio/Audiobook, desc: " |- Обучающие аудиокниги и аудиоупражнения для детей"}
|
||||
- {id: 749, cat: Audio, desc: "Аудио концерты, спектакли, пьесы"}
|
||||
- {id: 687, cat: Audio, desc: " |- Аудиоспектакли и литературные чтения"}
|
||||
- {id: 751, cat: Audio, desc: " |- Аудио юмористические концерты (выступления)"}
|
||||
# Эротика
|
||||
# Erotica
|
||||
- {id: 483, cat: Other, desc: "Правила, FAQ и Предложения по улучшению раздела "Эротик.."}
|
||||
- {id: 484, cat: Other, desc: " |- Правила и FAQ"}
|
||||
- {id: 485, cat: Other, desc: " |- Предложения по улучшению раздела "Эротика"и форум.."}
|
||||
- {id: 688, cat: Other, desc: " |- Ищу / Предлагаю"}
|
||||
- {id: 963, cat: XXX, desc: "Эротические художественные фильмы"}
|
||||
- {id: 964, cat: XXX, desc: "Эротические документальные фильмы"}
|
||||
- {id: 178, cat: XXX, desc: "Русская эротика"}
|
||||
- {id: 179, cat: XXX, desc: "Иностранная эротика"}
|
||||
- {id: 176, cat: XXX, desc: "Фото, ролики"}
|
||||
- {id: 577, cat: XXX, desc: "Нетрадиционная эротика"}
|
||||
- {id: 571, cat: XXX, desc: "Мультипликационные фильмы для взрослых"}
|
||||
- {id: 177, cat: XXX, desc: "Хентай"}
|
||||
- {id: 812, cat: XXX, desc: "3D | Стерео эротика"}
|
||||
- {id: 882, cat: XXX, desc: " |- 3D | мульт"}
|
||||
- {id: 817, cat: XXX, desc: " |- 3D | Хентай"}
|
||||
- {id: 815, cat: XXX, desc: " |- 3D | Видеоролики"}
|
||||
- {id: 814, cat: XXX, desc: " |- 3D | Русская эротика"}
|
||||
- {id: 813, cat: XXX, desc: " |- 3D | Иностранная эротика"}
|
||||
- {id: 820, cat: XXX, desc: "Литература"}
|
||||
# Служебный раздел
|
||||
# Service section
|
||||
- {id: 604, cat: Other, desc: "Открытый"}
|
||||
- {id: 912, cat: Other, desc: "Нарушение правил оформления"}
|
||||
- {id: 57, cat: Other, desc: "Временный склад (TEMP)"}
|
||||
- {id: 433, cat: Other, desc: "Архив раздач"}
|
||||
- {id: 378, cat: Other, desc: "Корзина"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: striprussian
|
||||
type: checkbox
|
||||
label: Strip Russian Letters
|
||||
default: false
|
||||
- name: addrussian
|
||||
type: checkbox
|
||||
label: Add RUSSIAN to end of all titles to improve language detection by Sonarr and Radarr. Will cause English-only results to be misidentified.
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 1
|
||||
options:
|
||||
1: created
|
||||
10: seeders
|
||||
7: size
|
||||
2: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: 2
|
||||
options:
|
||||
2: desc
|
||||
1: asc
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action$="/login.php"]
|
||||
inputs:
|
||||
login_username: "{{ .Config.username }}"
|
||||
login_password: "{{ .Config.password }}"
|
||||
autologin: 1
|
||||
selectorinputs:
|
||||
cookie_test:
|
||||
selector: input[name="cookie_test"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: h4.warnColor1
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="/login.php?logout=1"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: tracker.php
|
||||
keywordsfilters:
|
||||
- name: diacritics
|
||||
args: replace
|
||||
- name: re_replace # S01 to сезон 1
|
||||
args: ["(?i)\\bS0*(\\d+)\\b", "сезон $1"]
|
||||
- name: re_replace # S01E01 to сезон 1 серии 1
|
||||
args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", "сезон $1 серии $2"]
|
||||
inputs:
|
||||
$raw: "{{ if .Categories }}{{ range .Categories }}f[]={{.}}&{{end}}{{ else }}f[]=-1{{ end }}"
|
||||
prev_allw: 1
|
||||
prev_a: 0
|
||||
prev_dla: 0
|
||||
prev_dlc: 0
|
||||
prev_dld: 0
|
||||
prev_dlw: 0
|
||||
prev_my: 0
|
||||
prev_new: 0
|
||||
prev_sd: 0
|
||||
prev_da: 1
|
||||
prev_dc: 0
|
||||
prev_df: 1
|
||||
prev_ds: 0
|
||||
# sort by 1=registered 2=topicTitle 4=completed 10=seed 11=leech 12=up 13=down 5=replies 6=views 7=size 8=lastPost 9=seedLastSeen
|
||||
o: "{{ .Config.sort }}"
|
||||
# 1=asc 2=desc
|
||||
s: "{{ .Config.type }}"
|
||||
# show category
|
||||
dc: 0
|
||||
# show forum
|
||||
df: 1
|
||||
# show author
|
||||
da: 1
|
||||
# show speed
|
||||
ds: 0
|
||||
# -1=all time
|
||||
tm: -1
|
||||
# seed not seen -1=disregard
|
||||
sns: -1
|
||||
nm: "{{ .Keywords }}"
|
||||
# find a username
|
||||
pn: ""
|
||||
# search all words
|
||||
allw: 1
|
||||
|
||||
rows:
|
||||
selector: tr[id^="tor_"]:has(a[href^="/download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a.gen
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: f
|
||||
title:
|
||||
selector: a.genmed
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Кураж-Бамбей", "kurazh"]
|
||||
- name: replace
|
||||
args: ["Кубик в Кубе", "Kubik"]
|
||||
- name: replace
|
||||
args: ["Кравец", "Kravec"]
|
||||
- name: replace
|
||||
args: ["Пифагор", "Pifagor"]
|
||||
- name: replace
|
||||
args: ["Невафильм", "Nevafilm"]
|
||||
- name: replace
|
||||
args: ["Лицензия", "Lic"]
|
||||
- name: replace
|
||||
args: ["селезень", "selezen"]
|
||||
# normalize to SXXEYY format
|
||||
- name: re_replace
|
||||
args: ["([CСcс]езоны?:?\\s+((?:\\d+)(?:-\\d+)?).*[CСcс]ери[ия]:?\\s+((?:\\d+)(?:-\\d+)?).*?\\d+\\)?)", " S$2E$3 "]
|
||||
- name: re_replace
|
||||
args: ["([CСcс]ери[ия]:?\\s+((?:\\d+)(?:-\\d+)?).*?[?\\d]+\\)?)", " E$2 "]
|
||||
- name: re_replace
|
||||
args: ["(\\([А-Яа-яЁё\\W]+\\))|(^[А-Яа-яЁё\\W\\d]+\\/ )|([а-яА-ЯЁё \\-]+,+)|([а-яА-ЯЁё]+)", "{{ if .Config.striprussian }}{{ else }}$0{{ end }}"]
|
||||
- name: re_replace
|
||||
args: ["[«»()=.,:|\\[\\]\\/]", " "]
|
||||
- name: append
|
||||
args: "{{ if .Config.addrussian }} - RUSSIAN{{ else }}{{ end }}"
|
||||
- name: replace
|
||||
args: ["-Rip", "Rip"]
|
||||
- name: replace
|
||||
args: ["WEB-DL", "WEBDL"]
|
||||
- name: replace
|
||||
args: ["WEBDLRip", "WEBDL"]
|
||||
- name: replace
|
||||
args: ["HDTVRip", "HDTV"]
|
||||
details:
|
||||
selector: a.genmed
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="/download.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(6) > u
|
||||
seeders:
|
||||
selector: td.seedmed > b
|
||||
leechers:
|
||||
selector: td.leechmed > b
|
||||
grabs:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
# unix
|
||||
selector: td:last-child > u
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="images/tor_gold.gif"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# TorrentPier
|
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: gay-torrents
|
||||
name: Gay-Torrents.net
|
||||
description: "Gay-Torrents.net is a Private Torrent Tracker for GAY XXX"
|
||||
description: "Gay-Torrents.net is a Private Torrent Tracker for GAY 3X"
|
||||
language: en-US
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
|
@@ -33,14 +33,13 @@ legacylinks:
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: movies, cat: Movies, desc: "Movies"}
|
||||
- {id: tvshows, cat: TV, desc: "TV Shows"}
|
||||
- {id: softwares, cat: PC, desc: "Softwares"}
|
||||
- {id: music, cat: Audio, desc: "Music"}
|
||||
- {id: console-games, cat: Console, desc: "Console Games"}
|
||||
- {id: pc-games, cat: PC/Games, desc: "PC Games"}
|
||||
- {id: books, cat: Books, desc: "Books"}
|
||||
- {id: xxx, cat: XXX, desc: "XXX"}
|
||||
- {id: Films, cat: Movies, desc: "Movies"}
|
||||
- {id: Séries, cat: TV, desc: "TV"}
|
||||
- {id: Musiques, cat: Audio, desc: "Music"}
|
||||
- {id: Ebooks, cat: Books, desc: "Books"}
|
||||
- {id: Logiciels, cat: PC, desc: "Software"}
|
||||
- {id: Jeux-PC, cat: PC/Games, desc: "PC Games"}
|
||||
- {id: Jeux-Consoles, cat: Console/XBox 360, desc: "Console Games"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -94,15 +93,7 @@ search:
|
||||
fields:
|
||||
category:
|
||||
selector: td:nth-child(1) > i
|
||||
case:
|
||||
.Films: movies
|
||||
.Séries: tvshows
|
||||
.Logiciels: softwares
|
||||
.Musique: music
|
||||
.Jeux-Consoles: console-games
|
||||
.Jeux-PC: pc-games
|
||||
.Ebook: books
|
||||
.Porno: xxx
|
||||
attribute: class
|
||||
site_date:
|
||||
selector: td:nth-child(1) a
|
||||
filters:
|
||||
|
@@ -14,8 +14,6 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
|
194
src/Jackett.Common/Definitions/hdgalaktik.yml
Normal file
194
src/Jackett.Common/Definitions/hdgalaktik.yml
Normal file
@@ -0,0 +1,194 @@
|
||||
---
|
||||
id: hdgalaktik
|
||||
name: HDGalaKtik
|
||||
description: "HDGalaKtik is a RUSSIAN Semi-Private tracker for TV / MOVIES / GENERAL"
|
||||
language: ru-RU
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdgalaktik.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 13, cat: Movies, desc: "Фильмы (Movies)"}
|
||||
- {id: 6, cat: TV, desc: "Мультфильмы (Cartoons)"}
|
||||
- {id: 10, cat: Audio, desc: "Музыка (Music)"}
|
||||
- {id: 26, cat: PC, desc: "Программы (Programs)"}
|
||||
- {id: 5, cat: Console, desc: "Игры (Games)"}
|
||||
- {id: 25, cat: Other, desc: "Картинки (Pictures)"}
|
||||
- {id: 11, cat: TV, desc: "Сериалы (TV Series)"}
|
||||
- {id: 12, cat: TV/Anime, desc: "Аниме (Anime)"}
|
||||
- {id: 16, cat: Books, desc: "Книги (Books)"}
|
||||
- {id: 18, cat: Audio/Video, desc: "Клипы / Ролики (Clips / Trailers)"}
|
||||
- {id: 22, cat: TV, desc: "ТВ / Передачи (TV)"}
|
||||
- {id: 27, cat: PC/Mobile-Other, desc: "Игры - Мобила / КПК (Mobile)"}
|
||||
- {id: 1, cat: PC/ISO, desc: "Образы (ISO)"}
|
||||
- {id: 4, cat: Other, desc: "Другое (Other)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)<li>Refresh the page by pressing <b>F5</b><li>Click on the first row entry<li>Select the <b>Headers</b> tab on the Right panel<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: striprussian
|
||||
type: checkbox
|
||||
label: Strip Russian Letters
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
1: title
|
||||
5: size
|
||||
8: seeders
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: /
|
||||
selector: a[href="mybonus.php"]
|
||||
|
||||
search:
|
||||
# https://hdgalaktik.com/browse.php?search=&stype=0&s=0&cat=0&gr=0&kp=0&im=0&incldead=1&sort=0&type=desc
|
||||
paths:
|
||||
- path: browse.php
|
||||
keywordsfilters:
|
||||
- name: re_replace # S01E01 to [1 сезон 1 сери]
|
||||
args: ["(?i)S0*(\\d+)E0*(\\d+)", "[$1 сезон $2 сери]"]
|
||||
- name: re_replace # S01 to [1 сезон]
|
||||
args: ["(?i)S0*(\\d+)", "[$1 сезон]"]
|
||||
- name: re_replace # E01 to [1 сери]
|
||||
args: ["(?i)E0*(\\d+)", "[$1 сери]"]
|
||||
- name: re_replace # replace special characters with "%" (wildcard)
|
||||
args: ["[^a-zA-Z0-9]+", "%"]
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 title, 1 descr, 2 filename, 4 infohash
|
||||
stype: 0
|
||||
# 0 AND 1 OR
|
||||
s: 0
|
||||
# release group
|
||||
gr: 0
|
||||
# ratings
|
||||
kp: 0
|
||||
# 1 active, 2 dead, 3 gold, 4 sticky, lots of others
|
||||
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
ascdesc: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: table.embedded > tbody > tr.torcontduo
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a.alink
|
||||
attribute: title
|
||||
filters:
|
||||
# normalize to SXXEYY format
|
||||
- name: re_replace
|
||||
args: ["[\\.\\,\\:\\/\\|\\[\\]]", " "]
|
||||
- name: re_replace
|
||||
args: ["(.*) от .*$", "$1"]
|
||||
- name: re_replace
|
||||
args: ["(.*)(\\d+\\-\\d+)\\s*[CСcс]езон\\s*(\\d+\\-\\d+)\\s*[CСcс]ери[ия]\\s*из\\s*\\d+(.*)", "$1 S$2E$3 rus $4"]
|
||||
- name: re_replace
|
||||
args: ["(.*)(\\d+)\\-(\\d+)\\s*[CСcс]езон\\s*(\\d+)\\-(\\d+)\\s*[CСcс]ери[ия](.*)", "$1 S$2E$3 rus $4"]
|
||||
- name: re_replace
|
||||
args: ["(.*)(\\d+)\\s*[CСcс]езон\\s*(\\d+\\-\\d+)\\s*[CСcс]ери[ия]\\s*из\\s*\\d+(.*)", "$1 S$2E$3 rus $4"]
|
||||
- name: re_replace
|
||||
args: ["(.*)(\\d+)\\s*[CСcс]езон\\s*(\\d+\\-\\d+)\\s*[CСcс]ери[ия](.*)", "$1 S$2E$3 rus $4"]
|
||||
- name: re_replace
|
||||
args: ["(.*)(\\d+\\-\\d+)\\s*[CСcс]езон\\s*(.*)", "$1 S$2 rus $3"]
|
||||
- name: re_replace
|
||||
args: ["(.*)(\\d+)\\s*[CСcс]езон\\s*(.*)", "$1 S$2 rus $3"]
|
||||
- name: re_replace
|
||||
args: ["(.*)(\\d+\\-\\d+)\\s*[CСcс]ери[ия]\\s*из\\s*\\d+(.*)", "$1 E$2 rus $3"]
|
||||
- name: re_replace
|
||||
args: ["(.*)(\\d+)\\s*[CСcс]ери[ия]\\s*из\\s*\\d+(.*)", "$1 E$2 rus $3"]
|
||||
- name: re_replace
|
||||
args: ["(.*)(\\d+\\-\\d+)\\s*[CСcс]ери[ия](.*)", "$1 E$2 rus $3"]
|
||||
- name: re_replace
|
||||
args: ["(.*)(\\d+)\\s*[CСcс]ери[ия](.*)", "$1 E$2 rus $3"]
|
||||
- name: re_replace
|
||||
args: ["(\\([А-Яа-яЁё\\W]+\\))|(^[А-Яа-яЁё\\W\\d]+\\/ )|([а-яА-ЯЁё \\-]+,+)|([а-яА-ЯЁё]+)", "{{ if .Config.striprussian }}{{ else }}$1$2$3$4{{ end }}"]
|
||||
- name: replace
|
||||
args: ["WEBRip", "WEBDL"]
|
||||
- name: replace
|
||||
args: ["WEB-DL", "WEBDL"]
|
||||
- name: replace
|
||||
args: ["WEBDLRip", "WEBDL"]
|
||||
- name: replace
|
||||
args: ["HDTVRip", "HDTV"]
|
||||
- name: replace
|
||||
args: ["SATRip", "TV"]
|
||||
details:
|
||||
selector: a.alink
|
||||
attribute: href
|
||||
download:
|
||||
selector: a.alink
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details", "download"]
|
||||
size:
|
||||
selector: td:nth-child(4)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
filters:
|
||||
- name: split
|
||||
args: ["|", 0]
|
||||
leechers:
|
||||
selector: td:nth-child(6)
|
||||
filters:
|
||||
- name: split
|
||||
args: ["|", 0]
|
||||
date:
|
||||
# 1 day ago
|
||||
selector: a[href^="browse.php?date="]
|
||||
filters:
|
||||
- name: timeago
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="/pic/freedownload.gif"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
# engine n/a
|
@@ -121,7 +121,8 @@ search:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
imdbid:
|
||||
selector: div.imdb_100 > a
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
@@ -171,4 +172,4 @@ search:
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, img
|
||||
# customised NexusPHP Standard v0.1
|
||||
# NexusPHP v1.7.4
|
||||
|
@@ -47,12 +47,20 @@ caps:
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)<li>Refresh the page by pressing <b>F5</b><li>Click on the first row entry<li>Select the <b>Headers</b> tab on the Right panel<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: useragent
|
||||
type: text
|
||||
label: User-Agent
|
||||
- name: info_useragent
|
||||
type: info
|
||||
label: How to get the User-Agent
|
||||
default: "<ol><li>From the same place you fetched the cookie,<li>Find <b>'user-agent:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole user-agent string <i>(everything after 'user-agent: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
@@ -75,19 +83,16 @@ settings:
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form#loginForm
|
||||
method: cookie
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
login: yes
|
||||
# error: using some kind of JS popup that can not be trapped :-(
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href^="logout.php?k="]
|
||||
|
||||
search:
|
||||
headers:
|
||||
User-Agent: ["{{ .Config.useragent }}"]
|
||||
paths:
|
||||
# https://huntorrent.net/browse.php?time=1616615308&korhatar=0&incldead=1&xyz=yes&c28=1&c27=1&c6=1&c5=1&sort=4&type=desc
|
||||
- path: browse.php
|
||||
|
@@ -52,8 +52,6 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
|
190
src/Jackett.Common/Definitions/kufirc.yml
Normal file
190
src/Jackett.Common/Definitions/kufirc.yml
Normal file
@@ -0,0 +1,190 @@
|
||||
---
|
||||
id: kufirc
|
||||
name: Kufirc
|
||||
description: "Kufirc is a HUNGARIAN Private tracker for 3X"
|
||||
language: hu-HU
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://kufirc.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 30, cat: XXX, desc: "Amateur"}
|
||||
- {id: 29, cat: XXX, desc: "Anal"}
|
||||
- {id: 5, cat: XXX, desc: "Animal"}
|
||||
- {id: 27, cat: XXX, desc: "Asian"}
|
||||
- {id: 26, cat: XXX, desc: "BBW"}
|
||||
- {id: 44, cat: XXX, desc: "BDSM"}
|
||||
- {id: 25, cat: XXX, desc: "Big Ass"}
|
||||
- {id: 24, cat: XXX, desc: "Big Tits"}
|
||||
- {id: 34, cat: XXX, desc: "Black"}
|
||||
- {id: 35, cat: XXX, desc: "Busty"}
|
||||
- {id: 23, cat: XXX, desc: "Classic"}
|
||||
- {id: 33, cat: XXX, desc: "Creampie"}
|
||||
- {id: 22, cat: XXX, desc: "Cumshot"}
|
||||
- {id: 36, cat: XXX, desc: "Feature"}
|
||||
- {id: 21, cat: XXX, desc: "Fetish"}
|
||||
- {id: 31, cat: XXX, desc: "Film/Cam/Hun"}
|
||||
- {id: 46, cat: XXX/XviD, desc: "Film/Xvid/hun"}
|
||||
- {id: 37, cat: XXX, desc: "Foreign"}
|
||||
- {id: 19, cat: XXX, desc: "Gay / Bi"}
|
||||
- {id: 18, cat: XXX, desc: "Hardcore"}
|
||||
- {id: 32, cat: XXX, desc: "HD porn"}
|
||||
- {id: 28, cat: XXX, desc: "Hentai / 3D"}
|
||||
- {id: 17, cat: XXX, desc: "Homemade"}
|
||||
- {id: 38, cat: XXX, desc: "Interracial"}
|
||||
- {id: 11, cat: XXX, desc: "Kép"}
|
||||
- {id: 48, cat: XXX, desc: "Latina"}
|
||||
- {id: 16, cat: XXX, desc: "Lesbian"}
|
||||
- {id: 6, cat: XXX, desc: "Magyar"}
|
||||
- {id: 15, cat: XXX, desc: "Masturbation"}
|
||||
- {id: 14, cat: XXX, desc: "Mature"}
|
||||
- {id: 13, cat: XXX/Pack, desc: "Megapack"}
|
||||
- {id: 55, cat: XXX, desc: "Milf"}
|
||||
- {id: 49, cat: XXX, desc: "Natural Tits"}
|
||||
- {id: 39, cat: XXX, desc: "Old + Young"}
|
||||
- {id: 12, cat: XXX, desc: "Oral"}
|
||||
- {id: 20, cat: XXX, desc: "Orgia / Gang Bang"}
|
||||
- {id: 42, cat: XXX/Other, desc: "Other"}
|
||||
- {id: 50, cat: XXX, desc: "Parody"}
|
||||
- {id: 41, cat: XXX, desc: "Paysite"}
|
||||
- {id: 40, cat: XXX, desc: "Piss"}
|
||||
- {id: 43, cat: XXX, desc: "Porn Music Videos"}
|
||||
- {id: 54, cat: XXX, desc: "Pov"}
|
||||
- {id: 45, cat: XXX, desc: "Pregnant / Preggo"}
|
||||
- {id: 10, cat: XXX, desc: "Shemale / TS"}
|
||||
- {id: 51, cat: XXX, desc: "Siterip"}
|
||||
- {id: 52, cat: XXX, desc: "Softcore"}
|
||||
- {id: 53, cat: XXX, desc: "Squirt"}
|
||||
- {id: 9, cat: XXX, desc: "Straight"}
|
||||
- {id: 8, cat: XXX, desc: "Tini"}
|
||||
- {id: 47, cat: XXX, desc: "VR"}
|
||||
- {id: 7, cat: PC/Games, desc: "XXX játék / program"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrentek oldalanként:</b> setting to <b>100</b> on your account profile.
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: time
|
||||
options:
|
||||
time: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: login
|
||||
method: form
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
cinfo: "1920|1080|24|-60"
|
||||
iplocked: 0
|
||||
keeploggedin: 1
|
||||
error:
|
||||
- selector: div.error
|
||||
test:
|
||||
path: /
|
||||
selector: "#nav_userinfo"
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://kufirc.com/torrents.php?filter_cat[30]=1&filter_cat[29]=1&order_by=time&order_way=desc&searchtext=&action=advanced&title=720p+2022&sizeall=&sizetype=&sizerange=&filelist=&taglist=&autocomplete_toggle=
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchtext: ""
|
||||
title: "{{ .Keywords }}"
|
||||
order_by: "{{ .Config.sort }}"
|
||||
order_way: "{{ .Config.type }}"
|
||||
action: advanced
|
||||
filter_freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
sizeall: ""
|
||||
sizetype: ""
|
||||
sizerange: ""
|
||||
filelist: ""
|
||||
taglist: ""
|
||||
autocomplete_toggle: ""
|
||||
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr[class^="torrent row"]
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="filter_cat"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d+)]=1"
|
||||
title:
|
||||
selector: a[href^="/torrents.php?id="]
|
||||
details:
|
||||
selector: a[href^="/torrents.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
description:
|
||||
optional: true
|
||||
selector: div.tags
|
||||
poster:
|
||||
selector: td:nth-child(2) > script
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=\\\\\"(.*?)\\\\\""
|
||||
- name: re_replace
|
||||
args: ["\\\\(.)", "$1"]
|
||||
- name: replace
|
||||
args: ["/static/common/noartwork/noimage.png", ""]
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(5) > span
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # auto adjusted by site account profile
|
||||
- name: dateparse
|
||||
args: "Jan 02 2006, 15:04 -07:00"
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
span.icon[title*="Freeleech"]: 0
|
||||
"img[alt=\"Freeleech\"]": 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 0.5
|
||||
# Luminance
|
@@ -79,10 +79,23 @@ search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
|
||||
- path: "/api/torrents/filter?api_token={{ .Config.apikey }}&name={{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}&sortField={{ .Config.sort }}&sortDirection={{ .Config.type }}&perPage=100&page=1{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
|
||||
- path: "/api/torrents/filter"
|
||||
response:
|
||||
type: json
|
||||
|
||||
inputs:
|
||||
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
name: "{{ .Keywords }}"
|
||||
$raw: "{{ if .Query.Season }}&seasonNumber={{ .Query.Season }}{{ else }}{{ end }}{{ if .Query.Ep }}&episodeNumber={{ .Query.Ep }}{{ else }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\bS(\\d+)", "T$1"]
|
||||
|
||||
@@ -93,8 +106,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
selector: category
|
||||
category:
|
||||
selector: category_id
|
||||
title_vose:
|
||||
selector: name:contains(VOSE)
|
||||
optional: true
|
||||
@@ -150,11 +163,15 @@ search:
|
||||
size:
|
||||
selector: size
|
||||
downloadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
# api returns 0%, 25%, 50%, 75%, 100%
|
||||
selector: freeleech
|
||||
case:
|
||||
0: 1 # not free
|
||||
1: 0 # freeleech
|
||||
0%: 1 # not free
|
||||
25%: 0.75
|
||||
50%: 0.5
|
||||
75%: 0.25
|
||||
100%: 0 # freeleech
|
||||
"*": 0 # catch errors
|
||||
uploadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: double_upload
|
||||
@@ -166,4 +183,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 4 days (as seconds = 4 x 24 x 60 x 60)
|
||||
text: 345600
|
||||
# json UNIT3D 5.3.0
|
||||
# json UNIT3D 6.0.8
|
||||
|
@@ -32,8 +32,6 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: sort
|
||||
|
@@ -8,7 +8,7 @@ encoding: UTF-8
|
||||
followredirect: true
|
||||
# changes to this indexer should also be made to limetorrentsclone
|
||||
links:
|
||||
- https://www.limetorrents.pro/
|
||||
- https://www.limetorrents.lol/
|
||||
- https://limetorrents.unblockit.llc/
|
||||
- https://limetorrents.unblockninja.com/
|
||||
- https://limetorrents.nocensor.sbs/
|
||||
@@ -34,6 +34,7 @@ legacylinks:
|
||||
- https://limetorrents.unblockit.cam/
|
||||
- https://limetorrents.nocensor.biz/
|
||||
- https://limetorrents.unblockit.day/
|
||||
- https://www.limetorrents.pro/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -69,6 +69,8 @@ search:
|
||||
args: ["(?i)S0*(\\d+)", "[$1 сезон]"]
|
||||
- name: re_replace # E01 to [1 сери]
|
||||
args: ["(?i)E0*(\\d+)", "[$1 сери]"]
|
||||
- name: re_replace
|
||||
args: ["(\\w+)", " %$1"] # prepend % to each word - allow 1 character keywords
|
||||
inputs:
|
||||
search: "{{ if .Keywords }}{{ .Keywords }}{{ else }}%%{{ end }}"
|
||||
# does not support multi category searches
|
||||
|
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: mteamtp
|
||||
name: M-Team - TP
|
||||
description: "M-Team TP (MTTP) is a CHINESE Private Torrent Tracker for HD MOVIES / TV / XXX"
|
||||
description: "M-Team TP (MTTP) is a CHINESE Private Torrent Tracker for HD MOVIES / TV / 3X"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
|
@@ -14,8 +14,6 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: flaresolverr
|
||||
|
@@ -7,7 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www.oxtorrent.re/
|
||||
- https://www.torrent911.com/
|
||||
- https://www.t911.net/
|
||||
- https://oxtorrent.unblockit.llc/
|
||||
- https://oxtorrent.nocensor.sbs/
|
||||
legacylinks:
|
||||
@@ -32,17 +33,17 @@ legacylinks:
|
||||
- https://oxtorrent.unblockit.cam/
|
||||
- https://oxtorrent.nocensor.biz/
|
||||
- https://oxtorrent.unblockit.day/
|
||||
- https://www.oxtorrent.re/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: movies, cat: Movies, desc: "Movies"}
|
||||
- {id: tvshows, cat: TV, desc: "TV Shows"}
|
||||
- {id: softwares, cat: PC, desc: "Softwares"}
|
||||
- {id: music, cat: Audio, desc: "Music"}
|
||||
- {id: console-games, cat: Console, desc: "Console Games"}
|
||||
- {id: pc-games, cat: PC/Games, desc: "PC Games"}
|
||||
- {id: books, cat: Books, desc: "Books"}
|
||||
- {id: xxx, cat: XXX, desc: "XXX"}
|
||||
- {id: Films, cat: Movies, desc: "Movies"}
|
||||
- {id: Séries, cat: TV, desc: "TV"}
|
||||
- {id: Musiques, cat: Audio, desc: "Music"}
|
||||
- {id: Ebooks, cat: Books, desc: "Books"}
|
||||
- {id: Logiciels, cat: PC, desc: "Software"}
|
||||
- {id: Jeux-PC, cat: PC/Games, desc: "PC Games"}
|
||||
- {id: Jeux-Consoles, cat: Console/XBox 360, desc: "Console Games"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -99,15 +100,7 @@ search:
|
||||
fields:
|
||||
category:
|
||||
selector: td:nth-child(1) i, td:nth-child(1) div i
|
||||
case:
|
||||
.Films: "movies"
|
||||
.Séries: "tvshows"
|
||||
.Logiciels: "softwares"
|
||||
.Musique: "music"
|
||||
.Jeux-Consoles: "console-games"
|
||||
.Jeux-PC: "pc-games"
|
||||
.Ebook: "books"
|
||||
.Porno: "xxx"
|
||||
attribute: class
|
||||
site_date:
|
||||
selector: td:nth-child(1) a
|
||||
filters:
|
||||
|
@@ -16,8 +16,6 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
|
@@ -179,20 +179,26 @@ search:
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
tr.free_bg: 0
|
||||
# tr.2up: 0
|
||||
# tr.free2up: 0
|
||||
img.pro_free: 0
|
||||
tr.2up: 0
|
||||
img.pro_2up: 0
|
||||
tr.free2up: 0
|
||||
img.pro_free2up: 0
|
||||
tr.halfdown_bg: 0.5
|
||||
img.pro_50pctdown: 0.5
|
||||
tr.d30down_bg: 0.3
|
||||
img.pro_30pctdown: 0.3
|
||||
tr.d70down_bg: 0.7
|
||||
img.pro_70pctdown: 0.7
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
# tr.2up: 0
|
||||
# tr.free2up: 0
|
||||
img.pro_2up: 2
|
||||
img.pro_free2up: 2
|
||||
"*": 1
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, img
|
||||
minimumratio:
|
||||
text: 0.7
|
||||
# NexusPHP v1.0 Beta 2
|
||||
# NexusPHP Standard v1.0 Beta 2
|
||||
|
@@ -60,8 +60,6 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
|
297
src/Jackett.Common/Definitions/seedoff.yml
Normal file
297
src/Jackett.Common/Definitions/seedoff.yml
Normal file
@@ -0,0 +1,297 @@
|
||||
---
|
||||
id: seedoff
|
||||
name: Seedoff
|
||||
description: "Seedoff is a RUSSIAN Public tracker for MOVIES / TV / GENERAL"
|
||||
language: ru-RU
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://seedoff.zannn.top/
|
||||
- https://forum.zannn.top/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Video
|
||||
- {id: 1, cat: Movies, desc: "Видео"}
|
||||
- {id: 14, cat: Movies/Foreign, desc: "Зарубежное кино"}
|
||||
- {id: 15, cat: Movies, desc: "Отечественное кино"}
|
||||
- {id: 17, cat: TV/Foreign, desc: "Зарубежные сериалы"}
|
||||
- {id: 128, cat: TV, desc: "Отечественные сериалы"}
|
||||
- {id: 18, cat: TV/Documentary, desc: "Документальные фильмы"}
|
||||
- {id: 19, cat: TV, desc: "ТВ-передачи"}
|
||||
- {id: 20, cat: TV/Sport, desc: "Спорт"}
|
||||
- {id: 21, cat: Movies/Other, desc: "Трейлеры"}
|
||||
- {id: 22, cat: Audio/Video, desc: "Театр и музыка"}
|
||||
- {id: 112, cat: TV/Other, desc: "Юмор"}
|
||||
- {id: 139, cat: TV/Foreign, desc: "Видео без русского перевода"}
|
||||
- {id: 145, cat: TV/Other, desc: "Видеокурсы"}
|
||||
- {id: 118, cat: Movies, desc: "Другое"}
|
||||
- {id: 149, cat: Movies, desc: "Ретро отечественного/зарубежного видео"}
|
||||
# Video (DVD/HD/BD)
|
||||
- {id: 13, cat: Movies, desc: "Видео (DVD/HD/BD)"}
|
||||
- {id: 64, cat: Movies/Foreign, desc: "Зарубежное кино"}
|
||||
- {id: 65, cat: Movies, desc: "Отечественное кино"}
|
||||
- {id: 66, cat: TV/Foreign, desc: "Зарубежные сериалы"}
|
||||
- {id: 129, cat: TV, desc: "Отечественные сериалы"}
|
||||
- {id: 67, cat: TV/Documentary, desc: "Документальные фильмы"}
|
||||
- {id: 68, cat: TV, desc: "ТВ-передачи"}
|
||||
- {id: 69, cat: TV/Sport, desc: "Спорт"}
|
||||
- {id: 70, cat: Movies/Other, desc: "Трейлеры"}
|
||||
- {id: 71, cat: Audio/Video, desc: "Театр и музыка"}
|
||||
- {id: 113, cat: TV/Other, desc: "Юмор"}
|
||||
- {id: 140, cat: TV/Foreign, desc: "Видео без русского перевода"}
|
||||
- {id: 119, cat: Movies, desc: "Другое"}
|
||||
# Music
|
||||
- {id: 2, cat: Audio/MP3, desc: "Музыка"}
|
||||
- {id: 73, cat: Audio/MP3, desc: "Поп музыка"}
|
||||
- {id: 74, cat: Audio/MP3, desc: "Джаз и Блюз"}
|
||||
- {id: 75, cat: Audio/MP3, desc: "Классическая музыка"}
|
||||
- {id: 76, cat: Audio/MP3, desc: "Рок-музыка"}
|
||||
- {id: 83, cat: Audio/MP3, desc: "Электронная музыка"}
|
||||
- {id: 86, cat: Audio/MP3, desc: "Этническая музыка (Фольклор)"}
|
||||
- {id: 87, cat: Audio/MP3, desc: "Рэп, Хип-Хоп, R'n'B"}
|
||||
- {id: 88, cat: Audio/MP3, desc: "NewAge, Relax"}
|
||||
- {id: 89, cat: Audio/MP3, desc: "Шансон, Авторская и Военная песня"}
|
||||
- {id: 90, cat: Audio/MP3, desc: "Музыка других жанров"}
|
||||
- {id: 91, cat: Audio/MP3, desc: "Саундтреки, Караоке и Минусовки"}
|
||||
- {id: 122, cat: Audio/MP3, desc: "Мюзиклы и рок-оперы"}
|
||||
# Music (lossless)
|
||||
- {id: 8, cat: Audio/Lossless, desc: "Музыка (lossless)"}
|
||||
- {id: 93, cat: Audio/Lossless, desc: "Поп музыка"}
|
||||
- {id: 94, cat: Audio/Lossless, desc: "Джаз и Блюз"}
|
||||
- {id: 95, cat: Audio/Lossless, desc: "Классическая музыка"}
|
||||
- {id: 96, cat: Audio/Lossless, desc: "Рок-музыка"}
|
||||
- {id: 103, cat: Audio/Lossless, desc: "Электронная музыка"}
|
||||
- {id: 106, cat: Audio/Lossless, desc: "Этническая музыка (Фольклор)"}
|
||||
- {id: 107, cat: Audio/Lossless, desc: "Рэп, Хип-Хоп, R'n'B"}
|
||||
- {id: 108, cat: Audio/Lossless, desc: "NewAge, Relax"}
|
||||
- {id: 109, cat: Audio/Lossless, desc: "Шансон, Авторская и Военная песня"}
|
||||
- {id: 110, cat: Audio/Lossless, desc: "Музыка других жанров"}
|
||||
- {id: 111, cat: Audio/Lossless, desc: "Саундтреки, Караоке и Минусовки"}
|
||||
- {id: 123, cat: Audio/Lossless, desc: "Мюзиклы и рок-оперы"}
|
||||
# Games
|
||||
- {id: 3, cat: PC/Games, desc: "Игры"}
|
||||
- {id: 23, cat: PC/Games, desc: "PC"}
|
||||
- {id: 24, cat: Console/XBox, desc: "XBox"}
|
||||
- {id: 25, cat: Console/XBox 360, desc: "XBox360"}
|
||||
- {id: 26, cat: Console/PS3, desc: "PS2"}
|
||||
- {id: 27, cat: Console/PS3, desc: "PS3"}
|
||||
- {id: 28, cat: Console/PS Vita, desc: "PSP, PSVita"}
|
||||
- {id: 29, cat: Console/PS4, desc: "PS4"}
|
||||
- {id: 32, cat: PC/Games, desc: "Другие"}
|
||||
# Software
|
||||
- {id: 7, cat: PC/0day, desc: "Софт"}
|
||||
- {id: 33, cat: PC/ISO, desc: "ОС"}
|
||||
- {id: 34, cat: PC/0day, desc: "Офисные приложения"}
|
||||
- {id: 35, cat: PC/0day, desc: "Мультимедиа"}
|
||||
- {id: 36, cat: PC/0day, desc: "Web & программирование"}
|
||||
- {id: 37, cat: PC/0day, desc: "Системы проектирования и моделирования"}
|
||||
- {id: 38, cat: PC/0day, desc: "Бизнес-системы"}
|
||||
- {id: 39, cat: PC/0day, desc: "Графика и 3D"}
|
||||
- {id: 41, cat: PC/0day, desc: "Интернет и Безопасность"}
|
||||
- {id: 42, cat: PC/0day, desc: "Утилиты"}
|
||||
- {id: 43, cat: PC/0day, desc: "Драйвера"}
|
||||
- {id: 124, cat: PC, desc: "Обучающие курсы"}
|
||||
- {id: 117, cat: PC, desc: "Другое"}
|
||||
# Cartoons
|
||||
- {id: 5, cat: Movies/Other, desc: "Мультфильмы"}
|
||||
- {id: 53, cat: Movies/Other, desc: "Полнометражные"}
|
||||
- {id: 54, cat: Movies/Other, desc: "Короткометражные"}
|
||||
- {id: 130, cat: TV/Other, desc: "Сериалы"}
|
||||
- {id: 56, cat: Movies/Other, desc: "Другие"}
|
||||
# Anime
|
||||
- {id: 131, cat: TV/Anime, desc: "Аниме"}
|
||||
- {id: 4, cat: Movies/Other, desc: "Основной"}
|
||||
- {id: 132, cat: TV/Anime, desc: "Основной (DVD/HD/BD)"}
|
||||
- {id: 133, cat: TV/Anime, desc: "Сериалы (OAV/OVA/ONA)"}
|
||||
- {id: 134, cat: TV/Anime, desc: "Сериалы (OAV/OVA/ONA)(DVD/HD/BD)"}
|
||||
- {id: 147, cat: TV/Anime, desc: "Аниме без русской озвучки"}
|
||||
- {id: 135, cat: TV/Anime, desc: "Клипы (AMV)"}
|
||||
- {id: 61, cat: Books/Comics, desc: "Манга, картинки и прочее"}
|
||||
- {id: 136, cat: Audio, desc: "OST"}
|
||||
# Books
|
||||
- {id: 6, cat: Books, desc: "Книги"}
|
||||
- {id: 44, cat: Books/EBook, desc: "Художественные"}
|
||||
- {id: 45, cat: Books/Technical, desc: "Научно-популярные"}
|
||||
- {id: 46, cat: Books/Technical, desc: "Обучающие"}
|
||||
- {id: 47, cat: Books/Mags, desc: "Журналы"}
|
||||
- {id: 48, cat: Books/Other, desc: "Другие"}
|
||||
- {id: 126, cat: Books/Other, desc: "На иностранных языках"}
|
||||
- {id: 92, cat: Books/Other, desc: "Ноты и музыкальная литература"}
|
||||
# Audiobooks
|
||||
- {id: 9, cat: Audio/Audiobook, desc: "Аудиокниги"}
|
||||
- {id: 49, cat: Audio/Audiobook, desc: "Художественные"}
|
||||
- {id: 50, cat: Audio/Audiobook, desc: "Научно-популярные"}
|
||||
- {id: 51, cat: Audio/Audiobook, desc: "Обучающие"}
|
||||
- {id: 148, cat: Audio/Audiobook, desc: "Для мобильных устройств"}
|
||||
- {id: 52, cat: Audio/Audiobook, desc: "Другие"}
|
||||
# Imagery
|
||||
- {id: 11, cat: Other, desc: "Изображения"}
|
||||
- {id: 57, cat: Other, desc: "Клипарты"}
|
||||
- {id: 58, cat: Other, desc: "Обложки"}
|
||||
- {id: 59, cat: Other, desc: "Обои рабочего стола"}
|
||||
- {id: 60, cat: Other, desc: "Комиксы"}
|
||||
- {id: 127, cat: Other, desc: "Фотографии"}
|
||||
- {id: 62, cat: Other, desc: "Другие"}
|
||||
# Everything for mobile
|
||||
- {id: 141, cat: PC/Mobile-Other, desc: "Всё для мобильных"}
|
||||
- {id: 142, cat: Movies/Other, desc: "Видео"}
|
||||
- {id: 138, cat: PC/Mobile-Android, desc: "Игры Android"}
|
||||
- {id: 137, cat: PC/Mobile-iOS, desc: "Игры iPhone/iPod/iPad"}
|
||||
- {id: 30, cat: PC/Mobile-Other, desc: "Игры для других платформ"}
|
||||
- {id: 143, cat: PC/Mobile-Android, desc: "Софт Android"}
|
||||
- {id: 144, cat: PC/Mobile-iOS, desc: "Софт iPhone/iPod/iPad"}
|
||||
- {id: 114, cat: PC/Mobile-Other, desc: "Софт для других платформ"}
|
||||
- {id: 146, cat: PC/Mobile-Other, desc: "Рингтоны"}
|
||||
# 3D видео (3D video) categories are repeats of Видео (Video) categories
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q, album, artist]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: striprussian
|
||||
type: checkbox
|
||||
label: Strip Russian Letters
|
||||
default: false
|
||||
- name: addrussian
|
||||
type: checkbox
|
||||
label: Add RUSSIAN to end of all titles to improve language detection by Sonarr and Radarr. Will cause English-only results to be misidentified.
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 3
|
||||
options:
|
||||
3: created
|
||||
5: seeders
|
||||
4: size
|
||||
2: name
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: 2
|
||||
options:
|
||||
2: desc
|
||||
1: asc
|
||||
|
||||
download:
|
||||
infohash:
|
||||
hash:
|
||||
selector: tr.rknblock > td.lista
|
||||
title:
|
||||
selector: a[href^="/torrent/"]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: validfilename
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://seedoff.zannn.top/search?page=ajax&search=&active=0&category=0&options=0&recommend=0&have_quality=0&types_search=0&period=0&genres=&order=3&by=2
|
||||
- path: search
|
||||
inputs:
|
||||
page: ajax
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 all, 1 active, 2 dead
|
||||
active: 0
|
||||
category: 0
|
||||
# 0 name, 1 name & desc
|
||||
options: 0
|
||||
recommend: 0
|
||||
have_quality: 0
|
||||
# 0 whole word, 1 partial word
|
||||
types_search: 0
|
||||
period: 0
|
||||
genres: ""
|
||||
order: "{{ .Config.sort }}"
|
||||
by: "{{ .Config.type }}"
|
||||
keywordsfilters:
|
||||
- name: re_replace # S01 to 1
|
||||
args: ["(?i)\\bS0*(\\d+)\\b", "$1"]
|
||||
- name: re_replace # S01E01 to 1 1
|
||||
args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", "$1 $2"]
|
||||
|
||||
rows:
|
||||
selector: table.lista tbody tr:has(a[href^="/torrent/"])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="/index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
title:
|
||||
selector: a[href^="/torrent/"]
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Кураж-Бамбей", "kurazh"]
|
||||
- name: replace
|
||||
args: ["Кубик в Кубе", "Kubik"]
|
||||
- name: replace
|
||||
args: ["Кравец", "Kravec"]
|
||||
- name: replace
|
||||
args: ["Пифагор", "Pifagor"]
|
||||
- name: replace
|
||||
args: ["Невафильм", "Nevafilm"]
|
||||
- name: replace
|
||||
args: ["Лицензия", "Lic"]
|
||||
- name: replace
|
||||
args: ["селезень", "selezen"]
|
||||
- name: re_replace
|
||||
args: ["\\((\\d+-*\\d*)\\s+[Сс]езоны?:?\\s+(?:(\\d+-*\\d*)\\s+(?:[Сс]ери[ийя]|выпуски?(?:ов)?)(?:.*\\d+)?)?\\)(.*)\\s+((?:[12][0-9]{3}-?){1,})(.*)", "$3 - S$1E$2 - $4 $5"]
|
||||
- name: re_replace
|
||||
args: ["\\((?:(\\d+-*\\d*)\\s+(?:[Сс]ери[ийя]|выпуски?(?:ов)?)(?:.*\\d+)?)?\\)(.*)\\s+((?:[12][0-9]{3}-?){1,})(.*)", "$2 - E$1 - $3 $4"]
|
||||
- name: re_replace
|
||||
args: ["(\\([А-Яа-яЁё\\W]+\\))|(^[А-Яа-яЁё\\W\\d]+\\/ ((?:[12][0-9]{3}-?){1,}))|(^[А-Яа-яЁё\\W\\d]+\\/ )|([а-яА-ЯЁё \\-]+,+)|([а-яА-ЯЁё]+)", "{{ if .Config.striprussian }}$3{{ else }}$0{{ end }}"]
|
||||
- name: append
|
||||
args: "{{ if .Config.addrussian }} - RUSSIAN{{ else }}{{ end }}"
|
||||
- name: re_replace
|
||||
args: ["(.*)(Blu-Ray\\s*(?:Disc|EUR|CEE)?)\\s*(\\d+[pi])", "$1 BR-DISK $3"]
|
||||
- name: replace
|
||||
args: ["-Rip", "Rip"]
|
||||
- name: replace
|
||||
args: ["WEB-DL", "WEBDL"]
|
||||
- name: replace
|
||||
args: ["WEBDLRip", "WEBDL"]
|
||||
- name: replace
|
||||
args: ["HDTVRip", "HDTV"]
|
||||
details:
|
||||
selector: a[href^="/torrent/"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="/torrent/"]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: a[href^="/torrent/"]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.*?) width"
|
||||
date:
|
||||
selector: td:nth-last-child(4)
|
||||
filters:
|
||||
# 26.04.2022
|
||||
- name: append
|
||||
args: " +03:00" # MSK
|
||||
- name: dateparse
|
||||
args: "02.01.2006 -07:00"
|
||||
size:
|
||||
selector: td:nth-last-child(5)
|
||||
seeders:
|
||||
selector: td:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td:nth-last-child(2)
|
||||
grabs:
|
||||
selector: td:nth-last-child(1)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# engine n/a
|
@@ -7,11 +7,11 @@ type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://use.selezen.club/
|
||||
- https://mel.selezen.net/
|
||||
- https://www.selezen.net/
|
||||
- https://selezen.org/
|
||||
legacylinks:
|
||||
- https://www.selezen.site/
|
||||
- https://www.selezen.net/
|
||||
- https://mel.selezen.net/
|
||||
- https://s1.selezen.site/
|
||||
|
||||
caps:
|
||||
|
@@ -57,7 +57,6 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
|
||||
search:
|
||||
paths:
|
||||
|
@@ -70,6 +70,12 @@ search:
|
||||
args: ["(.+?)in\\s(.+?)", "$2"]
|
||||
- name: replace
|
||||
args: ["Freeleech", ""]
|
||||
- name: replace
|
||||
args: ["Seeding", ""]
|
||||
- name: replace
|
||||
args: ["Downloaded", ""]
|
||||
- name: replace
|
||||
args: ["Leeching", ""]
|
||||
- name: trim
|
||||
title:
|
||||
selector: a[href*="/view/torrent.php?hash="]
|
||||
|
@@ -7,9 +7,6 @@ type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://tasmanit.es/
|
||||
certificates:
|
||||
- 23C30AC9655A8A7351A549538062B8C6B0D01A78 # expired 24 Jan 2022
|
||||
- 4325e8f1f13f6074f2bed6a6186fe183791ab32d # expired 1 March 2022
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -17,7 +14,7 @@ caps:
|
||||
- {id: 23, cat: TV, desc: "AU-AUTOGEN"}
|
||||
- {id: 8, cat: TV, desc: "Australian Comedy"}
|
||||
- {id: 18, cat: TV, desc: "Australian Crime Shows"}
|
||||
- {id: 14, cat: TV, desc: "Australian Documentaries"}
|
||||
- {id: 14, cat: TV/Documentary, desc: "Australian Documentaries"}
|
||||
- {id: 9, cat: TV, desc: "Australian Dramas"}
|
||||
- {id: 10, cat: TV, desc: "Australian Game/Quiz Shows"}
|
||||
- {id: 12, cat: TV, desc: "Australian Kids Shows"}
|
||||
@@ -29,12 +26,13 @@ caps:
|
||||
- {id: 17, cat: TV, desc: "Australian Science Shows"}
|
||||
- {id: 80, cat: TV, desc: "Australian Soaps"}
|
||||
- {id: 16, cat: TV, desc: "Australian Talkshows"}
|
||||
- {id: 22, cat: TV, desc: "Australian Movies"}
|
||||
- {id: 22, cat: Movies, desc: "Australian Movies"}
|
||||
- {id: 82, cat: Audio, desc: "Australian Podcasts"}
|
||||
- {id: 73, cat: TV, desc: "New Zealand TV"}
|
||||
- {id: 61, cat: TV, desc: "NZ-AUTOGEN"}
|
||||
- {id: 47, cat: TV, desc: "New Zealand Comedy"}
|
||||
- {id: 58, cat: TV, desc: "New Zealand Crime Shows"}
|
||||
- {id: 53, cat: TV, desc: "New Zealand Documentaries"}
|
||||
- {id: 53, cat: TV/Documentary, desc: "New Zealand Documentaries"}
|
||||
- {id: 48, cat: TV, desc: "New Zealand Dramas"}
|
||||
- {id: 49, cat: TV, desc: "New Zealand Game/Quiz Shows"}
|
||||
- {id: 51, cat: TV, desc: "New Zealand Kids Shows"}
|
||||
@@ -45,15 +43,16 @@ caps:
|
||||
- {id: 54, cat: TV, desc: "New Zealand Science Shows"}
|
||||
- {id: 81, cat: TV, desc: "New Zealand Soaps"}
|
||||
- {id: 57, cat: TV, desc: "New Zealand Talkshows"}
|
||||
- {id: 59, cat: TV, desc: "New Zealand Movies"}
|
||||
- {id: 59, cat: Movies, desc: "New Zealand Movies"}
|
||||
- {id: 36, cat: TV, desc: "New Zealand TV"}
|
||||
- {id: 55, cat: TV, desc: "SATV - All"}
|
||||
- {id: 55, cat: TV, desc: "South African TV"}
|
||||
- {id: 7, cat: TV/Other, desc: "New Zealand TV Other"}
|
||||
- {id: 7, cat: TV/Other, desc: "TV Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
@@ -116,9 +115,7 @@ search:
|
||||
date:
|
||||
selector: td:nth-child(2)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
text: 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
text: 1
|
||||
# TS Special Edition
|
||||
|
@@ -113,6 +113,13 @@ settings:
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)<li>Refresh the page by pressing <b>F5</b><li>Click on the first row entry<li>Select the <b>Headers</b> tab on the Right panel<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: useragent
|
||||
type: text
|
||||
label: User-Agent
|
||||
- name: info_useragent
|
||||
type: info
|
||||
label: How to get the User-Agent
|
||||
default: "<ol><li>From the same place you fetched the cookie,<li>Find <b>'user-agent:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole user-agent string <i>(everything after 'user-agent: ')</i> and <b>Paste</b> here.</ol>"
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
@@ -127,6 +134,9 @@ login:
|
||||
selector: a[href="/account/"]
|
||||
|
||||
search:
|
||||
headers:
|
||||
User-Agent: ["{{ .Config.useragent }}"]
|
||||
|
||||
paths:
|
||||
# 25 results per page
|
||||
- path: "torrents/?filename={{ .Keywords }}&freeleech={{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
|
195
src/Jackett.Common/Definitions/tmghub.yml
Normal file
195
src/Jackett.Common/Definitions/tmghub.yml
Normal file
@@ -0,0 +1,195 @@
|
||||
---
|
||||
id: tmghub
|
||||
name: TmGHuB
|
||||
description: "TmGHuB (TH) is an INDIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://tmghub.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
#Movies
|
||||
- {id: 29, cat: Movies, desc: "Movie Packs"}
|
||||
- {id: 30, cat: Movies, desc: "V.I.P"}
|
||||
- {id: 13, cat: Movies/BluRay, desc: "BD-25/BD-50"}
|
||||
- {id: 32, cat: Movies/BluRay, desc: "1080p BluRay"}
|
||||
- {id: 33, cat: Movies/HD, desc: "BDRip / 720p"}
|
||||
- {id: 11, cat: Movies/DVD, desc: "DVD-R/DVD-DL"}
|
||||
- {id: 22, cat: Movies/DVD, desc: "Encoded DVDs"}
|
||||
- {id: 17, cat: Movies/WEB-DL, desc: "WEB-DL/DTH"}
|
||||
- {id: 14, cat: Movies/DVD, desc: "DVD-Rips"}
|
||||
- {id: 15, cat: Movies/HD, desc: "DTH/HD-Rip"}
|
||||
- {id: 20, cat: Movies/SD, desc: "VHS/TV-Rip"}
|
||||
- {id: 21, cat: Movies, desc: "Video CDs"}
|
||||
- {id: 19, cat: Movies, desc: "Pre Releases "}
|
||||
- {id: 42, cat: Movies, desc: "Dubbed Movies"}
|
||||
- {id: 44, cat: Movies, desc: "TmG Special"}
|
||||
#Music
|
||||
- {id: 27, cat: Audio, desc: "MP3/FLAC/WAV"}
|
||||
- {id: 23, cat: Audio/Video, desc: "Music Videos"}
|
||||
- {id: 37, cat: Audio, desc: "Music Packs"}
|
||||
#Television
|
||||
- {id: 40, cat: TV, desc: "TV Shows"}
|
||||
- {id: 28, cat: TV, desc: "TV Series"}
|
||||
- {id: 25, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 26, cat: TV/Documentary, desc: "Documentary"}
|
||||
#Books
|
||||
- {id: 38, cat: Books/EBook, desc: "E-Books"}
|
||||
- {id: 34, cat: Books, desc: "Guides / Tutorials"}
|
||||
#Others
|
||||
- {id: 5, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 39, cat: Other, desc: "Religious"}
|
||||
- {id: 43, cat: Other, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile. Default is 30.
|
||||
- name: info_grabs
|
||||
type: info
|
||||
label: Search results
|
||||
default: Note that torrents that you have previously downloaded will not be included in results.<br /> You are not allowed to download a torrent twice without informing admin.
|
||||
- name: thankyou
|
||||
type: text
|
||||
label: Thank You Comment
|
||||
- name: info
|
||||
type: info
|
||||
label: Thank you comment
|
||||
default: This site requires you to leave a Thank You comment before you can download.<br /> Enter your personalised comment above, at least 8 characters long.
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 3
|
||||
options:
|
||||
3: created
|
||||
5: seeders
|
||||
4: size
|
||||
2: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: 2
|
||||
options:
|
||||
2: desc
|
||||
1: asc
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: form
|
||||
form: form[action^="index.php?page=login"]
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: tr td span[style="color:#FF0000;"]
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
download:
|
||||
before:
|
||||
path: "{{ .DownloadUri.AbsoluteUri }}"
|
||||
method: post
|
||||
inputs:
|
||||
comment: "{{ .Config.thankyou }}"
|
||||
confirm: Confirm
|
||||
selectors:
|
||||
- selector: td a[href^="download.php"]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://tmghub.org/index.php?page=torrents&search=&category=29;13;32;33;11;22;17;14;15&uploader=0&options=0&active=0&gold=0&langsel=-1
|
||||
- path: index.php
|
||||
inputs:
|
||||
page: torrents
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
category: "{{ if .Categories }}{{ range .Categories }}{{.}};{{end}}{{ else }}0{{ end }}"
|
||||
uploader: 0
|
||||
# 0=title, 1=title&descr, 2=descr, 3 imdbid
|
||||
options: "{{ if .Query.IMDBID }}3{{ else }}0{{ end }}"
|
||||
# 0 all, 1 activeonly, 2 deadonly
|
||||
active: 0
|
||||
# 0 all, 1 classic, 2 silver, 3 gold, 4 silver&gold
|
||||
gold: "{{ if .Config.freeleech }}3{{ else }}0{{ end }}"
|
||||
# -1 all, 0 unk, 1 eng, etc
|
||||
langsel: -1
|
||||
order: "{{ .Config.sort }}"
|
||||
by: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: "table#tottest[width=\"100%\"] tr:has(a[href^=\"index.php?page=torrent-details\"]):not(:has(img[title=\"Allready Grabbed !!\"]))"
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: td a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
title:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
details:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
attribute: href
|
||||
imdbid:
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.+?) width"
|
||||
date:
|
||||
# 6 weeks ago
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Added\\:(\\d+ \\w+ \\w+)<"
|
||||
- name: timeago
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="gold/gold.gif"]: 0
|
||||
img[src="gold/silver.gif"]: 0.5
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 0.7
|
||||
minimumseedtime:
|
||||
# 2 hours (as seconds = 2 x 60 x 60)
|
||||
text: 7200
|
||||
# xbtit
|
@@ -176,8 +176,6 @@ search:
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Uploaded (.+?) by"
|
||||
- name: replace
|
||||
args: [" at ", " "]
|
||||
- name: fuzzytime
|
||||
date_unix:
|
||||
# within the hour (unix)
|
||||
|
@@ -40,7 +40,6 @@ caps:
|
||||
- {id: Logiciels, cat: PC, desc: "Software"}
|
||||
- {id: Jeux-PC, cat: PC/Games, desc: "PC Games"}
|
||||
- {id: Jeux-Consoles, cat: Console/XBox 360, desc: "Console Games"}
|
||||
- {id: Porno, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
@@ -7,12 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentqq140.com/
|
||||
- https://torrentqq141.com/
|
||||
legacylinks:
|
||||
- https://torrentqq121.com/
|
||||
- https://torrentqq122.com/
|
||||
- https://torrentqq123.com/
|
||||
- https://torrentqq125.com/
|
||||
- https://torrentqq126.com/
|
||||
- https://torrentqq127.com/
|
||||
- https://torrentqq128.com/
|
||||
@@ -27,6 +23,7 @@ legacylinks:
|
||||
- https://torrentqq137.com/
|
||||
- https://torrentqq138.com/
|
||||
- https://torrentqq139.com/
|
||||
- https://torrentqq140.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -7,11 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentsir55.com/
|
||||
- https://torrentsir56.com/
|
||||
legacylinks:
|
||||
- https://torrentsir43.com/
|
||||
- https://torrentsir44.com/
|
||||
- https://torrentsir45.com/
|
||||
- https://torrentsir46.com/
|
||||
- https://torrentsir47.com/
|
||||
- https://torrentsir48.com/
|
||||
@@ -24,6 +21,9 @@ legacylinks:
|
||||
- http://torrentsir53.com/
|
||||
- https://torrentsir54.com/
|
||||
- http://torrentsir54.com/
|
||||
- https://torrentsir55.com/
|
||||
- http://torrentsir55.com/
|
||||
- http://torrentsir56.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -7,12 +7,10 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentview57.com/
|
||||
- https://torrentview60.com/
|
||||
legacylinks:
|
||||
- https://torrentview.net/
|
||||
- https://torrentview.co/
|
||||
- https://torrentview36.com/
|
||||
- https://torrentview37.com/
|
||||
- https://torrentview38.com/
|
||||
- https://torrentview39.com/
|
||||
- https://torrentview40.com/
|
||||
@@ -26,6 +24,7 @@ legacylinks:
|
||||
- https://torrentview50.com/
|
||||
- https://torrentview52.com/
|
||||
- https://torrentview53.com/
|
||||
- https://torrentview57.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -7,10 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentwiz41.com/
|
||||
- https://torrentwiz42.com/
|
||||
legacylinks:
|
||||
- https://torrentwiz25.me/
|
||||
- https://torrentwiz26.me/
|
||||
- https://torrentwiz27.me/
|
||||
- https://torrentwiz28.me/
|
||||
- https://torrentwiz29.me/
|
||||
@@ -25,6 +23,7 @@ legacylinks:
|
||||
- https://torrentwiz38.com/
|
||||
- https://torrentwiz39.com/
|
||||
- https://torrentwiz40.com/
|
||||
- https://torrentwiz41.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -14,35 +14,27 @@ legacylinks:
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 36, cat: Movies, desc: "Film"}
|
||||
- {id: 76, cat: Movies, desc: "Film Almanca [Tek Dil!]"}
|
||||
- {id: 78, cat: Movies, desc: "Film İngilizce [NL Altyazı!]"}
|
||||
- {id: 76, cat: Movies, desc: "Film Yabancı Dil - Altyazısız"}
|
||||
- {id: 59, cat: Movies, desc: "Film Türk Filmi"}
|
||||
- {id: 61, cat: Movies/3D, desc: "Film 3D"}
|
||||
- {id: 18, cat: Movies, desc: "Anime - Çizgi"}
|
||||
- {id: 20, cat: Movies, desc: "Film Boxset"}
|
||||
- {id: 22, cat: Movies/DVD, desc: "Film DVD Disk"}
|
||||
- {id: 24, cat: Movies/BluRay, desc: "Film Bluray Disk"}
|
||||
- {id: 26, cat: Movies/UHD, desc: "4Film K UHD Disk"}
|
||||
- {id: 24, cat: Movies/BluRay, desc: "Film 4K/1080P Bluray Disk"}
|
||||
- {id: 28, cat: Movies/HD, desc: "Film X265"}
|
||||
- {id: 30, cat: Movies/HD, desc: "Film X264"}
|
||||
- {id: 69, cat: Movies/WEB-DL, desc: "Film H264 WEB-DL"}
|
||||
- {id: 63, cat: Movies/SD, desc: "Film XviD"}
|
||||
- {id: 63, cat: Movies/SD, desc: "Film 3D/DVD/XviD"}
|
||||
- {id: 51, cat: Other, desc: "Diğer"}
|
||||
- {id: 62, cat: Other, desc: "Diğer Eğitim"}
|
||||
- {id: 52, cat: Other, desc: "Diğer Belgesel"}
|
||||
- {id: 53, cat: Other, desc: "Diğer Dini Yayınlar"}
|
||||
- {id: 54, cat: TV/Sport, desc: "Spor"}
|
||||
- {id: 55, cat: Other, desc: "Diğer Duvar Kağıtları"}
|
||||
- {id: 56, cat: Other, desc: "Diğer Her Şey"}
|
||||
- {id: 56, cat: Other, desc: "Diğer Her Şey"}
|
||||
- {id: 65, cat: Books/EBook, desc: "E-Kitap"}
|
||||
- {id: 2, cat: Console, desc: "Oyun"}
|
||||
- {id: 46, cat: Console, desc: "Oyun PC"}
|
||||
- {id: 3, cat: Console, desc: "Oyun Sony PS"}
|
||||
- {id: 4, cat: Console, desc: "Oyun Wii"}
|
||||
- {id: 14, cat: Console, desc: "Oyun XboX"}
|
||||
- {id: 16, cat: Console, desc: "Oyun Nintendo"}
|
||||
- {id: 16, cat: Console, desc: "Oyun Konsol"}
|
||||
- {id: 35, cat: TV, desc: "Netflix"}
|
||||
- {id: 41, cat: TV, desc: "Netflix Anime - Çizgi"}
|
||||
- {id: 41, cat: TV, desc: "Netflix Animasyon"}
|
||||
- {id: 39, cat: TV, desc: "Netflix Film"}
|
||||
- {id: 38, cat: TV, desc: "Netflix Dizi"}
|
||||
- {id: 40, cat: TV, desc: "Netflix Belgesel"}
|
||||
@@ -55,17 +47,16 @@ caps:
|
||||
- {id: 88, cat: TV, desc: "Dijital Platform TV+"}
|
||||
- {id: 89, cat: TV, desc: "Dijital Platform Diger"}
|
||||
- {id: 90, cat: TV, desc: "Dijital Platform MUBi"}
|
||||
- {id: 91, cat: TV, desc: "Dijital Platform Vodafone"}
|
||||
- {id: 94, cat: TV, desc: "Dijital Platform Apple TV+"}
|
||||
- {id: 95, cat: TV, desc: "Dijital Platform DSmart GO"}
|
||||
- {id: 94, cat: TV, desc: "Dijital Platform ATVP+"}
|
||||
- {id: 98, cat: TV, desc: "Dijital Platform DSNP"}
|
||||
- {id: 31, cat: TV, desc: "Dizi"}
|
||||
- {id: 32, cat: TV, desc: "Dizi Yerli"}
|
||||
- {id: 33, cat: TV, desc: "Dizi Yabancı Orjinal Dil / Tr Dublaj "}
|
||||
- {id: 33, cat: TV, desc: "Dizi Yabancı / TR Dublaj"}
|
||||
- {id: 34, cat: TV, desc: "Dizi Boxset"}
|
||||
- {id: 42, cat: Audio, desc: "Müzik"}
|
||||
- {id: 43, cat: Audio, desc: "Müzik Türkçe"}
|
||||
- {id: 43, cat: Audio, desc: "Müzik Yerli"}
|
||||
- {id: 44, cat: Audio, desc: "Müzik Yabancı"}
|
||||
- {id: 45, cat: Audio, desc: "Müzik Seri Albüm - Diskografi"}
|
||||
- {id: 45, cat: Audio, desc: "Müzik Diskografi"}
|
||||
- {id: 47, cat: PC, desc: "Programlar"}
|
||||
- {id: 48, cat: PC, desc: "Programlar Windows"}
|
||||
- {id: 49, cat: PC, desc: "Programlar MaC"}
|
||||
@@ -167,8 +158,6 @@ search:
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Uploaded (.+?) by"
|
||||
- name: replace
|
||||
args: [" at ", " "]
|
||||
- name: fuzzytime
|
||||
date_unix:
|
||||
# within the hour (unix)
|
||||
|
@@ -190,9 +190,9 @@ search:
|
||||
- name: replace
|
||||
args: [": ", ":"]
|
||||
- name: replace
|
||||
args: ["Ayer a las", "Yesterday"]
|
||||
args: ["Ayer a las", "Yesterday at"]
|
||||
- name: replace
|
||||
args: ["Hoy en", "Today"]
|
||||
args: ["Hoy en", "Today at"]
|
||||
- name: replace
|
||||
args: ["Lunes a", "Monday at"]
|
||||
- name: replace
|
||||
@@ -209,7 +209,7 @@ search:
|
||||
args: ["Sábado a", "Saturday at"]
|
||||
- name: replace
|
||||
args: ["Domingo a", "Sunday at"]
|
||||
- name: fuzzytime # eg: Yesterday 14:22 or Monday at 14:22
|
||||
- name: fuzzytime # eg: Yesterday at 14:22 or Monday at 14:22
|
||||
date3:
|
||||
selector: td.torrent_name:contains("Uploaded"):contains("-"), .torrentOwner:contains("Uploaded"):contains("-")
|
||||
optional: true
|
||||
@@ -226,11 +226,7 @@ search:
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(?<=Uploaded )(.*)(?= by)"
|
||||
- name: replace
|
||||
args: ["Yesterday at", "Yesterday"]
|
||||
- name: replace
|
||||
args: ["Today at", "Today"]
|
||||
- name: fuzzytime # eg: Yesterday 14:22 or Monday at 14:22
|
||||
- name: fuzzytime # eg: Yesterday at 14:22 or Monday at 14:22
|
||||
date:
|
||||
text: "{{ if or .Result.date1 .Result.date2 .Result.date3 .Result.date4 }}{{ or .Result.date1 .Result.date2 .Result.date3 .Result.date4 }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
|
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: xiteme
|
||||
name: x-ite.me
|
||||
description: "Tracker for LGBTQ movies, TV, books, magazines, anime, PC and XXX."
|
||||
description: "Tracker for LGBTQ movies, TV, books, magazines, anime, PC and 3X."
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
|
@@ -119,9 +119,10 @@ search:
|
||||
category: "{{ if .Categories }}{{ range .Categories }}{{.}}+{{end}}{{ else }}{{ end }}"
|
||||
search: "{{ if .Query.TMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
tmdbid: "{{ .Query.TMDBID }}"
|
||||
freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
$raw: "{{ if .Config.freeleech }}&freeleech=1{{ else }}{{ end }}"
|
||||
response:
|
||||
type: json
|
||||
noResultsMessage: '"descr": "no result"'
|
||||
|
||||
rows:
|
||||
selector: torrents
|
||||
|
@@ -27,7 +27,6 @@ caps:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
|
@@ -44,7 +44,7 @@ namespace Jackett.Common.Indexers
|
||||
},
|
||||
MovieSearchParams = new List<MovieSearchParam>
|
||||
{
|
||||
MovieSearchParam.Q
|
||||
MovieSearchParam.Q, MovieSearchParam.ImdbId, MovieSearchParam.TmdbId
|
||||
}
|
||||
},
|
||||
configService: configService,
|
||||
@@ -91,21 +91,26 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
|
||||
// TODO: IMDB search is available but it requires to parse the details page
|
||||
var qc = new NameValueCollection
|
||||
{
|
||||
{ "order_by", "time" },
|
||||
{ "order_way", "desc" },
|
||||
{ "action", "basic" },
|
||||
{ "searchsubmit", "1" },
|
||||
{ "searchstr", query.IsImdbQuery ? query.ImdbID : query.GetQueryString() }
|
||||
{ "searchsubmit", "1" }
|
||||
};
|
||||
|
||||
if (query.IsImdbQuery)
|
||||
qc.Add("imdb", query.ImdbID);
|
||||
else if (query.IsTmdbQuery)
|
||||
qc.Add("tmdb", query.TmdbID.ToString());
|
||||
else
|
||||
qc.Add("searchstr", query.GetQueryString());
|
||||
|
||||
var catList = MapTorznabCapsToTrackers(query);
|
||||
foreach (var cat in catList)
|
||||
qc.Add($"filter_cat[{cat}]", "1");
|
||||
|
||||
// remove . as not used in titles
|
||||
// remove . as not used in titles
|
||||
var searchUrl = BrowseUrl + "?" + qc.GetQueryString().Replace(".", " ");
|
||||
var results = await RequestWithCookiesAsync(searchUrl);
|
||||
try
|
||||
@@ -147,10 +152,12 @@ namespace Jackett.Common.Indexers
|
||||
}
|
||||
};
|
||||
|
||||
// TODO: TMDb is also available
|
||||
var qImdb = row.QuerySelector("a[href^=\"https://www.imdb.com\"]");
|
||||
var imdb = qImdb != null ? ParseUtil.GetImdbID(qImdb.GetAttribute("href").Split('/').Last()) : null;
|
||||
|
||||
qImdb = row.QuerySelector("a[href^=\"https://www.themoviedb.org\"]");
|
||||
var tmdb = qImdb != null ? ParseUtil.GetLongFromString(qImdb.GetAttribute("href").Split('/').Last()) : null;
|
||||
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
MinimumRatio = 1,
|
||||
@@ -163,6 +170,7 @@ namespace Jackett.Common.Indexers
|
||||
Details = details,
|
||||
Guid = link,
|
||||
Imdb = imdb,
|
||||
TMDb = tmdb,
|
||||
Poster = poster,
|
||||
Seeders = seeders,
|
||||
Peers = leechers + seeders,
|
||||
|
@@ -1,231 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Dom;
|
||||
using AngleSharp.Html.Parser;
|
||||
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.Linq;
|
||||
using NLog;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
// To comply with the rules for this tracker, only the acronym is used and no publicly displayed URLs to the site.
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class BB : BaseWebIndexer
|
||||
{
|
||||
private string BaseUrl => StringUtil.FromBase64("aHR0cHM6Ly9iYWNvbmJpdHMub3JnLw==");
|
||||
private Uri BaseUri => new Uri(BaseUrl);
|
||||
private string LoginUrl => BaseUri + "login.php";
|
||||
private string SearchUrl => BaseUri + "torrents.php?searchtags=&tags_type=0&order_by=s3&order_way=desc&disablegrouping=1&";
|
||||
|
||||
private new ConfigurationDataBasicLogin configData
|
||||
{
|
||||
get => (ConfigurationDataBasicLogin)base.configData;
|
||||
set => base.configData = value;
|
||||
}
|
||||
|
||||
public BB(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps,
|
||||
ICacheService cs)
|
||||
: base(id: "bb",
|
||||
name: "bB",
|
||||
description: "bB is a Private Torrent Tracker for 0DAY / GENERAL",
|
||||
link: StringUtil.FromBase64("aHR0cHM6Ly9iYWNvbmJpdHMub3JnLw=="),
|
||||
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: w,
|
||||
logger: l,
|
||||
p: ps,
|
||||
cacheService: cs,
|
||||
configData: new ConfigurationDataBasicLogin())
|
||||
{
|
||||
Encoding = Encoding.UTF8;
|
||||
Language = "en-US";
|
||||
Type = "private";
|
||||
|
||||
AddCategoryMapping(1, TorznabCatType.Audio);
|
||||
AddCategoryMapping(1, TorznabCatType.AudioMP3);
|
||||
AddCategoryMapping(1, TorznabCatType.AudioLossless);
|
||||
AddCategoryMapping(2, TorznabCatType.PC);
|
||||
AddCategoryMapping(3, TorznabCatType.BooksEBook);
|
||||
AddCategoryMapping(4, TorznabCatType.AudioAudiobook);
|
||||
AddCategoryMapping(5, TorznabCatType.Other);
|
||||
AddCategoryMapping(6, TorznabCatType.BooksMags);
|
||||
AddCategoryMapping(7, TorznabCatType.BooksComics);
|
||||
AddCategoryMapping(8, TorznabCatType.TVAnime);
|
||||
AddCategoryMapping(9, TorznabCatType.Movies);
|
||||
AddCategoryMapping(10, TorznabCatType.TVHD);
|
||||
AddCategoryMapping(10, TorznabCatType.TVSD);
|
||||
AddCategoryMapping(10, TorznabCatType.TV);
|
||||
AddCategoryMapping(11, TorznabCatType.PCGames);
|
||||
AddCategoryMapping(12, TorznabCatType.Console);
|
||||
AddCategoryMapping(13, TorznabCatType.Other);
|
||||
AddCategoryMapping(14, TorznabCatType.Other);
|
||||
}
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
{
|
||||
LoadValuesFromJson(configJson);
|
||||
var pairs = new Dictionary<string, string> {
|
||||
{ "username", configData.Username.Value },
|
||||
{ "password", configData.Password.Value },
|
||||
{ "keeplogged", "1" },
|
||||
{ "login", "Log In!" }
|
||||
};
|
||||
|
||||
var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, SiteLink);
|
||||
await ConfigureIfOK(response.Cookies, response.ContentString != null && response.ContentString.Contains("logout.php"), () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
var messageEl = dom.QuerySelectorAll("#loginform");
|
||||
var messages = new List<string>();
|
||||
for (var i = 0; i < 13; i++)
|
||||
{
|
||||
var child = messageEl[0].ChildNodes[i];
|
||||
messages.Add(child.Text().Trim());
|
||||
}
|
||||
var message = string.Join(" ", messages);
|
||||
throw new ExceptionWithConfigData(message, configData);
|
||||
});
|
||||
|
||||
return IndexerConfigurationStatus.RequiresTesting;
|
||||
}
|
||||
|
||||
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
var searchStrings = new List<string>(new[] { query.GetQueryString() });
|
||||
|
||||
if (string.IsNullOrEmpty(query.Episode) && (query.Season > 0))
|
||||
// Tracker naming rules: If query is for a whole season, "Season #" instead of "S##".
|
||||
searchStrings.Add((query.SanitizedSearchTerm + " " + string.Format("\"Season {0}\"", query.Season)).Trim());
|
||||
|
||||
var categories = MapTorznabCapsToTrackers(query);
|
||||
var request_urls = new List<string>();
|
||||
|
||||
foreach (var searchString in searchStrings)
|
||||
{
|
||||
var queryCollection = new NameValueCollection
|
||||
{
|
||||
{ "action", "basic" }
|
||||
};
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchString))
|
||||
{
|
||||
queryCollection.Add("searchstr", searchString);
|
||||
}
|
||||
|
||||
foreach (var cat in categories)
|
||||
{
|
||||
queryCollection.Add("filter_cat[" + cat + "]", "1");
|
||||
}
|
||||
|
||||
// remove . as not used in titles
|
||||
request_urls.Add(SearchUrl + queryCollection.GetQueryString().Replace(".", " "));
|
||||
}
|
||||
|
||||
var downloadTasksQuery = from url in request_urls select RequestWithCookiesAndRetryAsync(url);
|
||||
|
||||
var responses = await Task.WhenAll(downloadTasksQuery.ToArray());
|
||||
|
||||
for (var i = 0; i < searchStrings.Count(); i++)
|
||||
{
|
||||
var results = responses[i];
|
||||
// Occasionally the cookies become invalid, login again if that happens
|
||||
if (results.IsRedirect)
|
||||
{
|
||||
await ApplyConfiguration(null);
|
||||
results = await RequestWithCookiesAndRetryAsync(request_urls[i]);
|
||||
}
|
||||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(results.ContentString);
|
||||
var rows = dom.QuerySelectorAll("#torrent_table > tbody > tr.torrent");
|
||||
foreach (var row in rows)
|
||||
{
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 172800 // 48 hours
|
||||
};
|
||||
|
||||
var catStr = row.Children[0].FirstElementChild.GetAttribute("href").Split(new[] { '[', ']' })[1];
|
||||
release.Category = MapTrackerCatToNewznab(catStr);
|
||||
|
||||
var qDetails = row.Children[1].QuerySelector("a[title='View Torrent']");
|
||||
release.Details = new Uri(BaseUri + qDetails.GetAttribute("href"));
|
||||
release.Guid = release.Details;
|
||||
|
||||
var qDownload = row.Children[1].QuerySelector("a[title='Download']");
|
||||
release.Link = new Uri(BaseUri + qDownload.GetAttribute("href"));
|
||||
|
||||
var dateStr = row.Children[3].TextContent.Trim().Replace(" and", "");
|
||||
release.PublishDate = DateTimeUtil.FromTimeAgo(dateStr);
|
||||
|
||||
var sizeStr = row.Children[4].TextContent;
|
||||
release.Size = ReleaseInfo.GetBytes(sizeStr);
|
||||
|
||||
release.Files = ParseUtil.CoerceInt(row.Children[2].TextContent.Trim());
|
||||
release.Seeders = ParseUtil.CoerceInt(row.Children[7].TextContent.Trim());
|
||||
release.Peers = ParseUtil.CoerceInt(row.Children[8].TextContent.Trim()) + release.Seeders;
|
||||
|
||||
var grabs = row.QuerySelector("td:nth-child(6)").TextContent;
|
||||
release.Grabs = ParseUtil.CoerceInt(grabs);
|
||||
|
||||
if (row.QuerySelector("strong:contains(\"Freeleech!\")") != null)
|
||||
release.DownloadVolumeFactor = 0;
|
||||
else
|
||||
release.DownloadVolumeFactor = 1;
|
||||
|
||||
release.UploadVolumeFactor = 1;
|
||||
|
||||
var title = row.QuerySelector("td:nth-child(2)");
|
||||
foreach (var element in title.QuerySelectorAll("span, strong, div, br"))
|
||||
element.Remove();
|
||||
|
||||
release.Title = ParseUtil.NormalizeMultiSpaces(title.TextContent.Replace(" - ]", "]"));
|
||||
|
||||
if (catStr == "10") //change "Season #" to "S##" for TV shows
|
||||
release.Title = Regex.Replace(release.Title, @"Season (\d+)",
|
||||
m => string.Format("S{0:00}", int.Parse(m.Groups[1].Value)));
|
||||
|
||||
releases.Add(release);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnParseError(results.ContentString, ex);
|
||||
}
|
||||
}
|
||||
return releases;
|
||||
}
|
||||
}
|
||||
}
|
@@ -109,36 +109,6 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
public virtual void SaveConfig() => configurationService.Save(this as IIndexer, configData.ToJson(protectionService, forDisplay: false));
|
||||
|
||||
protected void LoadLegacyCookieConfig(JToken jsonConfig)
|
||||
{
|
||||
var legacyCookieHeader = (string)jsonConfig["cookie_header"];
|
||||
if (!string.IsNullOrEmpty(legacyCookieHeader))
|
||||
{
|
||||
CookieHeader = legacyCookieHeader;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Legacy cookie key
|
||||
var jcookies = jsonConfig["cookies"];
|
||||
if (jcookies is JArray)
|
||||
{
|
||||
var array = (JArray)jcookies;
|
||||
legacyCookieHeader = string.Empty;
|
||||
for (var i = 0; i < array.Count; i++)
|
||||
{
|
||||
if (i != 0)
|
||||
legacyCookieHeader += "; ";
|
||||
legacyCookieHeader += array[i];
|
||||
}
|
||||
CookieHeader = legacyCookieHeader;
|
||||
}
|
||||
else if (jcookies != null)
|
||||
{
|
||||
CookieHeader = (string)jcookies;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void LoadValuesFromJson(JToken jsonConfig, bool useProtectionService = false)
|
||||
{
|
||||
IProtectionService ps = null;
|
||||
@@ -171,78 +141,11 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
if (jsonConfig is JArray)
|
||||
{
|
||||
if (!MigratedFromDPAPI(jsonConfig))
|
||||
{
|
||||
LoadValuesFromJson(jsonConfig, true);
|
||||
IsConfigured = true;
|
||||
}
|
||||
}
|
||||
// read and upgrade old settings file format
|
||||
else if (jsonConfig is object)
|
||||
{
|
||||
LoadLegacyCookieConfig(jsonConfig);
|
||||
SaveConfig();
|
||||
LoadValuesFromJson(jsonConfig, true);
|
||||
IsConfigured = true;
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: Remove this section once users have moved off DPAPI
|
||||
private bool MigratedFromDPAPI(JToken jsonConfig)
|
||||
{
|
||||
var isWindows = Environment.OSVersion.Platform == PlatformID.Win32NT;
|
||||
|
||||
if (!isWindows && DotNetCoreUtil.IsRunningOnDotNetCore)
|
||||
{
|
||||
// User isn't running Windows, but is running on .NET Core framework, no access to the DPAPI, so don't bother trying to migrate
|
||||
return false;
|
||||
}
|
||||
|
||||
LoadValuesFromJson(jsonConfig, false);
|
||||
|
||||
StringConfigurationItem passwordPropertyValue = null;
|
||||
var passwordValue = "";
|
||||
|
||||
try
|
||||
{
|
||||
// try dynamic items first (e.g. all cardigann indexers)
|
||||
passwordPropertyValue = (StringConfigurationItem)configData.GetDynamicByName("password");
|
||||
|
||||
if (passwordPropertyValue == null) // if there's no dynamic password try the static property
|
||||
{
|
||||
passwordPropertyValue = (StringConfigurationItem)configData.GetType().GetProperty("Password").GetValue(configData, null);
|
||||
|
||||
// protection is based on the item.Name value (property name might be different, example: Abnormal), so check the Name again
|
||||
if (!string.Equals(passwordPropertyValue.Name, "password", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
logger.Debug($"Skipping non default password property (unencrpyted password) for [{Id}] while attempting migration");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
passwordValue = passwordPropertyValue.Value;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
logger.Debug($"Unable to source password for [{Id}] while attempting migration, likely a tracker without a password setting");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(passwordValue))
|
||||
{
|
||||
try
|
||||
{
|
||||
protectionService.UnProtect(passwordValue);
|
||||
//Password successfully unprotected using Microsoft.AspNetCore.DataProtection, no further action needed as we've already converted the password previously
|
||||
return false;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (ex.Message != "The provided payload cannot be decrypted because it was not protected with this protection provider.")
|
||||
logger.Info($"Password could not be unprotected using Microsoft.AspNetCore.DataProtection - {Id} : " + ex);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
else
|
||||
logger.Warn("Some of the configuration files (.json) are in the old format. Please, update Jackett.");
|
||||
}
|
||||
|
||||
protected async Task ConfigureIfOK(string cookies, bool isLoggedin, Func<Task> onError)
|
||||
@@ -386,22 +289,26 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
public virtual async Task<IndexerResult> ResultsForQuery(TorznabQuery query, bool isMetaIndexer)
|
||||
{
|
||||
if (!CanHandleQuery(query) || !CanHandleCategories(query, isMetaIndexer))
|
||||
// we make a copy just in case some C# indexer modifies the object.
|
||||
// without the copy, if you make a request with several indexers, all indexers share the query object.
|
||||
var queryCopy = query.Clone();
|
||||
|
||||
if (!CanHandleQuery(queryCopy) || !CanHandleCategories(queryCopy, isMetaIndexer))
|
||||
return new IndexerResult(this, new ReleaseInfo[0], false);
|
||||
|
||||
if (query.Cache)
|
||||
if (queryCopy.Cache)
|
||||
{
|
||||
var cachedReleases = cacheService.Search(this, query);
|
||||
var cachedReleases = cacheService.Search(this, queryCopy);
|
||||
if (cachedReleases != null)
|
||||
return new IndexerResult(this, cachedReleases, true);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var results = await PerformQuery(query);
|
||||
results = FilterResults(query, results);
|
||||
results = FixResults(query, results);
|
||||
cacheService.CacheResults(this, query, results.ToList());
|
||||
var results = await PerformQuery(queryCopy);
|
||||
results = FilterResults(queryCopy, results);
|
||||
results = FixResults(queryCopy, results);
|
||||
cacheService.CacheResults(this, queryCopy, results.ToList());
|
||||
errorCount = 0;
|
||||
expireAt = DateTime.Now.Add(HealthyStatusValidity);
|
||||
return new IndexerResult(this, results, false);
|
||||
|
@@ -1399,7 +1399,10 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
if (response.Status != HttpStatusCode.OK)
|
||||
throw new Exception($"Error Parsing Json Response: Status={response.Status} Response={results}");
|
||||
if (response.Status == HttpStatusCode.OK && SearchPath.Response != null && SearchPath.Response.NoResultsMessage != null && ((SearchPath.Response.NoResultsMessage.Equals(results)) || (SearchPath.Response.NoResultsMessage == String.Empty && results == String.Empty)))
|
||||
if (response.Status == HttpStatusCode.OK
|
||||
&& SearchPath.Response != null
|
||||
&& SearchPath.Response.NoResultsMessage != null
|
||||
&& (results.Contains(SearchPath.Response.NoResultsMessage) || (SearchPath.Response.NoResultsMessage == String.Empty && results == String.Empty)))
|
||||
continue;
|
||||
var parsedJson = JToken.Parse(results);
|
||||
if (parsedJson == null)
|
||||
|
@@ -35,6 +35,7 @@ namespace Jackett.Common.Indexers
|
||||
"https://cinecalidad.mrunblock.icu/",
|
||||
"https://www.cinecalidad.lat/",
|
||||
"https://cinecalidad3.com/",
|
||||
"https://www5.cine-calidad.com/",
|
||||
"https://www.cine-calidad.com/"
|
||||
};
|
||||
|
||||
@@ -43,7 +44,7 @@ namespace Jackett.Common.Indexers
|
||||
: base(id: "cinecalidad",
|
||||
name: "Cinecalidad",
|
||||
description: "Películas Full HD en Latino Dual.",
|
||||
link: "https://www5.cine-calidad.com/",
|
||||
link: "https://v3.cine-calidad.com/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
MovieSearchParams = new List<MovieSearchParam> { MovieSearchParam.Q }
|
||||
|
@@ -227,19 +227,14 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
// match the words in the query with the titles
|
||||
if (matchWords && !CheckTitleMatchWords(query.SearchTerm, title))
|
||||
{
|
||||
return releases;
|
||||
}
|
||||
|
||||
var detailsStr = anchor.GetAttribute("href");
|
||||
var cat = detailsStr.Split('/')[3];
|
||||
var categories = MapTrackerCatToNewznab(cat);
|
||||
|
||||
// return results only for requested categories
|
||||
if (query.Categories.Any() && !query.Categories.Contains(categories.First()))
|
||||
{
|
||||
if (query.Categories.Any() && !MapTorznabCapsToTrackers(query).Contains(cat))
|
||||
return releases;
|
||||
}
|
||||
|
||||
var publishStr = row.QuerySelectorAll("td")[2].TextContent.Trim();
|
||||
var publishDate = TryToParseDate(publishStr, DateTime.Now);
|
||||
|
@@ -39,7 +39,7 @@ namespace Jackett.Common.Indexers
|
||||
private const string SearchUrl = "buscar/";
|
||||
|
||||
public override string[] AlternativeSiteLinks { get; protected set; } = {
|
||||
"https://dontorrent.tel/",
|
||||
"https://dontorrent.cx/",
|
||||
"https://todotorrents.net/",
|
||||
"https://tomadivx.net/",
|
||||
"https://seriesblanco.one/",
|
||||
@@ -60,6 +60,8 @@ namespace Jackett.Common.Indexers
|
||||
"https://dontorrent.run/",
|
||||
"https://dontorrent.cat/",
|
||||
"https://dontorrent.pl/",
|
||||
"https://dontorrent.tel/",
|
||||
"https://dontorrent.nl/",
|
||||
"https://dontorrent.eu/"
|
||||
};
|
||||
|
||||
@@ -78,7 +80,7 @@ namespace Jackett.Common.Indexers
|
||||
: base(id: "dontorrent",
|
||||
name: "DonTorrent",
|
||||
description: "DonTorrent is a SPANISH public tracker for MOVIES / TV / GENERAL",
|
||||
link: "https://dontorrent.tel/",
|
||||
link: "https://dontorrent.cx/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
|
@@ -25,13 +25,7 @@ namespace Jackett.Common.Indexers
|
||||
name: "ExoticaZ",
|
||||
description: "ExoticaZ (YourExotic) is a Private Torrent Tracker for 3X",
|
||||
link: "https://exoticaz.to/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
MovieSearchParams = new List<MovieSearchParam>
|
||||
{
|
||||
MovieSearchParam.Q
|
||||
}
|
||||
},
|
||||
caps: new TorznabCapabilities(),
|
||||
configService: configService,
|
||||
client: wc,
|
||||
logger: l,
|
||||
|
@@ -72,7 +72,7 @@ namespace Jackett.Common.Indexers.Meta
|
||||
|
||||
var fallbackStrategies = fallbackStrategyProvider.FallbackStrategiesForQuery(query);
|
||||
var fallbackQueries = fallbackStrategies.Select(async f => await f.FallbackQueries()).SelectMany(t => t.Result);
|
||||
var fallbackTasks = fallbackQueries.SelectMany(q => indexers.Where(i => !i.CanHandleQuery(query) && i.CanHandleQuery(q)).Select(i => i.ResultsForQuery(q.Clone(), true)));
|
||||
var fallbackTasks = fallbackQueries.SelectMany(q => indexers.Where(i => !i.CanHandleQuery(query) && i.CanHandleQuery(q)).Select(i => i.ResultsForQuery(q, true)));
|
||||
var tasks = supportedTasks.Concat(fallbackTasks.ToList()); // explicit conversion to List to execute LINQ query
|
||||
|
||||
// When there are many indexers used by a metaindexer querying each and every one of them can take very very
|
||||
|
@@ -1,388 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using AngleSharp.Dom;
|
||||
using AngleSharp.Html.Dom;
|
||||
using AngleSharp.Html.Parser;
|
||||
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.Linq;
|
||||
using NLog;
|
||||
using static Jackett.Common.Models.IndexerConfig.ConfigurationData;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
// This tracker uses a hybrid Luminance (based on GazelleTracker)
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class MoreThanTV : BaseWebIndexer
|
||||
{
|
||||
public override string[] LegacySiteLinks { get; protected set; } = {
|
||||
"https://www.morethan.tv/"
|
||||
};
|
||||
|
||||
private string LoginUrl => SiteLink + "login";
|
||||
private string BrowseUrl => SiteLink + "torrents/browse";
|
||||
private string DownloadUrl => SiteLink + "torrents.php";
|
||||
private string DetailsUrl => SiteLink + "details.php";
|
||||
|
||||
private string _sort;
|
||||
private string _order;
|
||||
|
||||
private ConfigurationDataBasicLogin ConfigData => (ConfigurationDataBasicLogin)configData;
|
||||
|
||||
private readonly Dictionary<string, string> _emulatedBrowserHeaders = new Dictionary<string, string>();
|
||||
|
||||
public MoreThanTV(IIndexerConfigurationService configService, WebClient c, Logger l, IProtectionService ps,
|
||||
ICacheService cs)
|
||||
: base(id: "morethantv",
|
||||
name: "MoreThanTV",
|
||||
description: "Private torrent tracker for TV / MOVIES, and the internal tracker for the release group DRACULA.",
|
||||
link: "https://www.morethantv.me/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
{
|
||||
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
|
||||
},
|
||||
MovieSearchParams = new List<MovieSearchParam>
|
||||
{
|
||||
MovieSearchParam.Q
|
||||
}
|
||||
},
|
||||
configService: configService,
|
||||
client: c,
|
||||
logger: l,
|
||||
p: ps,
|
||||
cacheService: cs,
|
||||
configData: new ConfigurationDataBasicLogin())
|
||||
{
|
||||
Encoding = Encoding.UTF8;
|
||||
Language = "en-US";
|
||||
Type = "private";
|
||||
|
||||
var sort = new SingleSelectConfigurationItem("Sort requested from site", new Dictionary<string, string>
|
||||
{
|
||||
{"time", "time"},
|
||||
{"size", "size"},
|
||||
{"snatched", "snatched"},
|
||||
{"seeders", "seeders"},
|
||||
{"leechers", "leechers"},
|
||||
})
|
||||
{ Value = "time" };
|
||||
configData.AddDynamic("sort", sort);
|
||||
|
||||
var order = new SingleSelectConfigurationItem("Order requested from site", new Dictionary<string, string>
|
||||
{
|
||||
{"desc", "desc"},
|
||||
{"asc", "asc"}
|
||||
})
|
||||
{ Value = "desc" };
|
||||
configData.AddDynamic("order", order);
|
||||
|
||||
AddCategoryMapping(1, TorznabCatType.Movies);
|
||||
AddCategoryMapping(2, TorznabCatType.TV);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse and Return CSRF token
|
||||
/// </summary>
|
||||
/// <param name="content"></param>
|
||||
/// <returns></returns>
|
||||
private string GetToken(string content)
|
||||
{
|
||||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(content.Trim());
|
||||
return dom.QuerySelector<IHtmlInputElement>("input[name=\"token\"]").Value;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new Exception("Token Could not be parsed from Response, Error?", e);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Emulate browser headers -- REQUIRED
|
||||
/// </summary>
|
||||
private void SetRequestHeaders()
|
||||
{
|
||||
_emulatedBrowserHeaders.Clear();
|
||||
|
||||
_emulatedBrowserHeaders.Add("referer", SiteLink);
|
||||
_emulatedBrowserHeaders.Add("Upgrade-Insecure-Requests", "1");
|
||||
_emulatedBrowserHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36");
|
||||
}
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
{
|
||||
LoadValuesFromJson(configJson);
|
||||
|
||||
var pairs = new Dictionary<string, string> {
|
||||
{ "username", ConfigData.Username.Value },
|
||||
{ "password", ConfigData.Password.Value },
|
||||
{ "submit", "login" },
|
||||
{ "keeplogged", "1" },
|
||||
{ "cinfo", "3440|1440|24|360" }
|
||||
};
|
||||
|
||||
SetRequestHeaders();
|
||||
|
||||
// Fetch CSRF token
|
||||
// We need to clean the old cookies to avoid issues
|
||||
var preRequest = await RequestWithCookiesAndRetryAsync(LoginUrl, referer: SiteLink, headers: _emulatedBrowserHeaders, cookieOverride: "");
|
||||
// Check if user is logged in. /login redirects to / if so)
|
||||
if (preRequest.IsRedirect)
|
||||
{
|
||||
await FollowIfRedirect(preRequest, SiteLink, null, preRequest.Cookies, true);
|
||||
}
|
||||
|
||||
// sid was not set after redirect, attempt to log in again
|
||||
if (!preRequest.Cookies.Contains("sid="))
|
||||
{
|
||||
string token = null;
|
||||
|
||||
try
|
||||
{
|
||||
token = GetToken(preRequest.ContentString);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
var errorMessage = ParseErrorMessage(preRequest);
|
||||
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||
}
|
||||
|
||||
// Add CSRF Token to payload
|
||||
pairs.Add("token", token);
|
||||
|
||||
var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, preRequest.Cookies, true, null, SiteLink, headers: _emulatedBrowserHeaders);
|
||||
|
||||
await ConfigureIfOK(response.Cookies, response.Cookies.Contains("sid="), () =>
|
||||
{
|
||||
// Couldn't find "sid" cookie, so check for error
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
var errorMessage = dom.QuerySelector(".flash.error").TextContent.Trim();
|
||||
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||
});
|
||||
}
|
||||
|
||||
return IndexerConfigurationStatus.RequiresTesting;
|
||||
}
|
||||
|
||||
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
|
||||
var searchQuery = query.GetQueryString();
|
||||
searchQuery = searchQuery.Replace("Marvels", "Marvel"); // strip 's for better results
|
||||
var newSearchQuery = Regex.Replace(searchQuery, @"(S\d{2})$", "$1*"); // If we're just seaching for a season (no episode) append an * to include all episodes of that season.
|
||||
await GetReleasesAsync(releases, query, newSearchQuery);
|
||||
|
||||
// Always search for torrent groups (complete seasons) too
|
||||
var seasonMatch = new Regex(@".*\s[Ss]{1}\d{2}([Ee]{1}\d{2,3})?$").Match(searchQuery);
|
||||
if (seasonMatch.Success)
|
||||
{
|
||||
newSearchQuery = Regex.Replace(searchQuery, @"[Ss]{1}\d{2}([Ee]{1}\d{2,3})?", $"Season {query.Season}");
|
||||
await GetReleasesAsync(releases, query, newSearchQuery);
|
||||
}
|
||||
|
||||
return releases;
|
||||
}
|
||||
|
||||
public override void LoadValuesFromJson(JToken jsonConfig, bool useProtectionService = false)
|
||||
{
|
||||
base.LoadValuesFromJson(jsonConfig, useProtectionService);
|
||||
|
||||
var sort = (SingleSelectConfigurationItem)configData.GetDynamic("sort");
|
||||
_sort = sort != null ? sort.Value : "time";
|
||||
|
||||
var order = (SingleSelectConfigurationItem)configData.GetDynamic("order");
|
||||
_order = order != null && order.Value.Equals("asc") ? order.Value : "desc";
|
||||
}
|
||||
|
||||
private string GetTorrentSearchUrl(TorznabQuery query, string searchQuery)
|
||||
{
|
||||
var qc = new NameValueCollection
|
||||
{
|
||||
{ "order_by", _sort },
|
||||
{ "order_way", _order },
|
||||
{ "action", "advanced" },
|
||||
{ "sizetype", "gb" },
|
||||
{ "sizerange", "0.01" },
|
||||
{ "title", searchQuery }
|
||||
};
|
||||
|
||||
if (query.Categories.Contains(TorznabCatType.Movies.ID))
|
||||
{
|
||||
qc.Add("filter_cat[1]", "1"); // HD Movies
|
||||
qc.Add("filter_cat[2]", "1"); // SD Movies
|
||||
}
|
||||
|
||||
if (query.Categories.Contains(TorznabCatType.TV.ID))
|
||||
{
|
||||
qc.Add("filter_cat[3]", "1"); // HD Episode
|
||||
qc.Add("filter_cat[4]", "1"); // SD Episode
|
||||
qc.Add("filter_cat[5]", "1"); // HD Season
|
||||
qc.Add("filter_cat[6]", "1"); // SD Season
|
||||
}
|
||||
|
||||
return BrowseUrl + "?" + qc.GetQueryString();
|
||||
}
|
||||
|
||||
private async Task GetReleasesAsync(ICollection<ReleaseInfo> releases, TorznabQuery query, string searchQuery)
|
||||
{
|
||||
var searchUrl = GetTorrentSearchUrl(query, searchQuery);
|
||||
var response = await RequestWithCookiesAndRetryAsync(searchUrl);
|
||||
if (response.IsRedirect)
|
||||
{
|
||||
// re-login
|
||||
await ApplyConfiguration(null);
|
||||
response = await RequestWithCookiesAndRetryAsync(searchUrl);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.ParseDocument(response.ContentString);
|
||||
var torrents = document.QuerySelectorAll("#torrent_table > tbody > tr.torrent");
|
||||
var movies = new[] { "movie" };
|
||||
var tv = new[] { "season", "episode" };
|
||||
|
||||
// Loop through all torrents checking for groups
|
||||
foreach (var torrent in torrents)
|
||||
{
|
||||
// Parse required data
|
||||
var downloadAnchor = torrent.QuerySelector("span a[href^=\"/torrents.php?action=download\"]");
|
||||
var title = downloadAnchor.ParentElement.ParentElement.ParentElement.QuerySelector("a[class=\"overlay_torrent\"]").TextContent.Trim();
|
||||
title = CleanUpTitle(title);
|
||||
|
||||
var category = torrent.QuerySelector(".cats_col div").GetAttribute("title");
|
||||
// default to Other
|
||||
var categoryId = TorznabCatType.Other.ID;
|
||||
|
||||
if (movies.Any(category.Contains))
|
||||
categoryId = TorznabCatType.Movies.ID;
|
||||
else if (tv.Any(category.Contains))
|
||||
categoryId = TorznabCatType.TV.ID;
|
||||
|
||||
releases.Add(GetReleaseInfo(torrent, downloadAnchor, title, categoryId));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnParseError(response.ContentString, ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gather Release info from torrent table. Target using css
|
||||
/// </summary>
|
||||
/// <param name="row"></param>
|
||||
/// <param name="downloadAnchor"></param>
|
||||
/// <param name="title"></param>
|
||||
/// <param name="category"></param>
|
||||
/// <returns></returns>
|
||||
private ReleaseInfo GetReleaseInfo(IElement row, IElement downloadAnchor, string title, int category)
|
||||
{
|
||||
|
||||
// count from bottom
|
||||
const int FILES_COL = 7;
|
||||
/*const int COMMENTS_COL = 7;*/
|
||||
const int DATE_COL = 6;
|
||||
const int FILESIZE_COL = 5;
|
||||
const int SNATCHED_COL = 4;
|
||||
const int SEEDS_COL = 3;
|
||||
const int LEECHERS_COL = 2;
|
||||
/*const int USER_COL = 1;*/
|
||||
|
||||
|
||||
var downloadAnchorHref = (downloadAnchor as IHtmlAnchorElement).Href;
|
||||
var queryParams = HttpUtility.ParseQueryString(downloadAnchorHref, Encoding.UTF8);
|
||||
var torrentId = queryParams["id"];
|
||||
|
||||
var qFiles = row.QuerySelector("td:nth-last-child(" + FILES_COL + ")").TextContent;
|
||||
|
||||
var fileCount = ParseUtil.CoerceLong(qFiles);
|
||||
var qPublishDate = row.QuerySelector("td:nth-last-child(" + DATE_COL + ") .time").Attributes["title"].Value;
|
||||
var publishDate = DateTime.ParseExact(qPublishDate, "MMM dd yyyy, HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime();
|
||||
var qPoster = row.QuerySelector("div.tp-banner img")?.GetAttribute("src");
|
||||
var poster = (qPoster != null && !qPoster.Contains("caticons")) ? new Uri(qPoster) : null;
|
||||
var description = row.QuerySelector("div.tags")?.TextContent.Trim();
|
||||
var fileSize = row.QuerySelector("td:nth-last-child(" + FILESIZE_COL + ")").TextContent.Trim();
|
||||
var snatched = row.QuerySelector("td:nth-last-child(" + SNATCHED_COL + ")").TextContent.Trim();
|
||||
var seeds = row.QuerySelector("td:nth-last-child(" + SEEDS_COL + ")").TextContent.Trim();
|
||||
var leechs = row.QuerySelector("td:nth-last-child(" + LEECHERS_COL + ")").TextContent.Trim();
|
||||
|
||||
if (fileSize.Length <= 0 || snatched.Length <= 0 || seeds.Length <= 0 || leechs.Length <= 0)
|
||||
{
|
||||
// Size (xx.xx GB[ (Max)]) Snatches (xx) Seeders (xx) Leechers (xx)
|
||||
throw new Exception($"We expected 4 torrent datas.");
|
||||
}
|
||||
|
||||
var size = ReleaseInfo.GetBytes(fileSize);
|
||||
var grabs = int.Parse(snatched, NumberStyles.AllowThousands, CultureInfo.InvariantCulture);
|
||||
var seeders = int.Parse(seeds, NumberStyles.AllowThousands, CultureInfo.InvariantCulture);
|
||||
var leechers = int.Parse(leechs, NumberStyles.AllowThousands, CultureInfo.InvariantCulture);
|
||||
var detailsUri = new Uri(DetailsUrl + "?torrentid=" + torrentId);
|
||||
var downloadLink = new Uri(DownloadUrl + "?action=download&id=" + torrentId);
|
||||
|
||||
return new ReleaseInfo
|
||||
{
|
||||
Title = title,
|
||||
Category = new List<int> { category },
|
||||
Link = downloadLink,
|
||||
PublishDate = publishDate,
|
||||
Poster = poster,
|
||||
Description = description,
|
||||
Seeders = seeders,
|
||||
Peers = seeders + leechers,
|
||||
Files = fileCount,
|
||||
Size = size,
|
||||
Grabs = grabs,
|
||||
Guid = downloadLink,
|
||||
Details = detailsUri,
|
||||
DownloadVolumeFactor = 0, // ratioless tracker
|
||||
UploadVolumeFactor = 1
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse Error Messages from using CSS classes
|
||||
/// </summary>
|
||||
/// <param name="response"></param>
|
||||
/// <returns></returns>
|
||||
private string ParseErrorMessage(WebResult response)
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
var errorMessage = response.Status == System.Net.HttpStatusCode.Forbidden
|
||||
? dom.QuerySelector(".time").Parent.TextContent.Trim()
|
||||
: dom.QuerySelector(".flash.error").TextContent.Trim();
|
||||
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clean Up any title stuff
|
||||
/// </summary>
|
||||
/// <param name="title"></param>
|
||||
/// <returns></returns>
|
||||
private string CleanUpTitle(string title)
|
||||
{
|
||||
return title
|
||||
.Replace(".", " ")
|
||||
.Replace("4K", "2160p"); // sonarr cleanup
|
||||
}
|
||||
}
|
||||
}
|
@@ -33,6 +33,7 @@ namespace Jackett.Common.Models.Config
|
||||
|
||||
public int Port { get; set; }
|
||||
public bool AllowExternal { get; set; }
|
||||
public bool AllowCORS { get; set; }
|
||||
public string APIKey { get; set; }
|
||||
public string AdminPassword { get; set; }
|
||||
public string InstanceId { get; set; }
|
||||
|
@@ -14,6 +14,8 @@ namespace Jackett.Common.Models.DTO
|
||||
[DataMember]
|
||||
public bool external { get; set; }
|
||||
[DataMember]
|
||||
public bool cors { get; set; }
|
||||
[DataMember]
|
||||
public string api_key { get; set; }
|
||||
[DataMember]
|
||||
public string blackholedir { get; set; }
|
||||
@@ -66,6 +68,7 @@ namespace Jackett.Common.Models.DTO
|
||||
this.notices = notices;
|
||||
port = config.Port;
|
||||
external = config.AllowExternal;
|
||||
cors = config.AllowCORS;
|
||||
api_key = config.APIKey;
|
||||
blackholedir = config.BlackholeDir;
|
||||
updatedisabled = config.UpdateDisabled;
|
||||
|
@@ -79,6 +79,7 @@ namespace Jackett.Server.Controllers
|
||||
var originalAllowExternal = serverConfig.AllowExternal;
|
||||
var port = config.port;
|
||||
var external = config.external;
|
||||
var cors = config.cors;
|
||||
var saveDir = config.blackholedir;
|
||||
var updateDisabled = config.updatedisabled;
|
||||
var preRelease = config.prerelease;
|
||||
@@ -113,10 +114,12 @@ namespace Jackett.Server.Controllers
|
||||
var omdbApiUrl = config.omdburl;
|
||||
|
||||
if (config.basepathoverride != serverConfig.BasePathOverride)
|
||||
{
|
||||
webHostRestartNeeded = true;
|
||||
}
|
||||
|
||||
if (config.cors != serverConfig.AllowCORS)
|
||||
webHostRestartNeeded = true;
|
||||
|
||||
serverConfig.AllowCORS = cors;
|
||||
serverConfig.UpdateDisabled = updateDisabled;
|
||||
serverConfig.UpdatePrerelease = preRelease;
|
||||
serverConfig.BasePathOverride = basePathOverride;
|
||||
|
@@ -30,6 +30,8 @@ namespace Jackett.Server
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
private const string AllowAllOrigins = "AllowAllOrigins";
|
||||
|
||||
public Startup(IConfiguration configuration) => Configuration = configuration;
|
||||
|
||||
public IConfiguration Configuration { get; }
|
||||
@@ -37,9 +39,14 @@ namespace Jackett.Server
|
||||
// This method gets called by the runtime. Use this method to add services to the container.
|
||||
public IServiceProvider ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddResponseCompression();
|
||||
services.AddResponseCompression()
|
||||
.AddCors(
|
||||
options =>
|
||||
{
|
||||
options.AddPolicy(name: AllowAllOrigins, corsPolicyBuilder => corsPolicyBuilder.AllowAnyOrigin());
|
||||
|
||||
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
|
||||
})
|
||||
.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
|
||||
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
|
||||
options =>
|
||||
{
|
||||
@@ -49,8 +56,6 @@ namespace Jackett.Server
|
||||
options.Cookie.Name = "Jackett";
|
||||
});
|
||||
|
||||
|
||||
|
||||
#if NET461
|
||||
services.AddMvc(
|
||||
config => config.Filters.Add(
|
||||
@@ -141,6 +146,9 @@ namespace Jackett.Server
|
||||
|
||||
app.UseAuthentication();
|
||||
|
||||
if (Helper.ServerConfiguration.AllowCORS)
|
||||
app.UseCors(AllowAllOrigins);
|
||||
|
||||
app.UseMvc();
|
||||
}
|
||||
#else
|
||||
@@ -183,6 +191,9 @@ namespace Jackett.Server
|
||||
|
||||
app.UseRouting();
|
||||
|
||||
if (Helper.ServerConfiguration.AllowCORS)
|
||||
app.UseCors(AllowAllOrigins);
|
||||
|
||||
app.UseEndpoints(endpoints => endpoints.MapControllers());
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user