Compare commits

...

55 Commits

Author SHA1 Message Date
Garfield69
212e03ec7f trackeors: fix cats. resolves #12808 2022-01-14 14:24:37 +13:00
ilike2burnthing
56a2b7f2a0 issue_template: last fix 2022-01-13 19:37:47 +00:00
ilike2burnthing
a23b6fc673 issue_template: typo fix 2022-01-13 19:35:54 +00:00
ilike2burnthing
b90f15b37f issue_templates: update (#12815) 2022-01-13 19:27:31 +00:00
Garfield69
1299a1aa72 Update TodoTorrents.cs 2022-01-14 07:10:19 +13:00
Lyuu
e524572af3 todotorrents: new indexer (#12813) 2022-01-14 07:06:17 +13:00
ilike2burnthing
533ecae219 contributing: update for vs2022 (#12811) 2022-01-14 06:44:22 +13:00
Lyuu
a3d3456f41 newpct: bump domain (#12812) 2022-01-14 06:43:54 +13:00
Garfield69
e19e3e820b torrentsir: bump domain 2022-01-13 08:16:46 +13:00
Garfield69
e7859b2db5 docspedia: add new cat 2022-01-13 08:14:04 +13:00
Garfield69
98c5c2f149 extremetorrents: try downloadv1.php else download.php resolves #12617 2022-01-12 21:15:15 +13:00
ilike2burnthing
11e4fce764 trackeros: switch to API 2022-01-12 08:14:30 +00:00
Garfield69
fe3dc0f766 trackeros: update. #12808 2022-01-12 19:24:51 +13:00
Garfield69
a7cd5e442e trackeros: switch to unit3d 5.3.0 api. #12808
untested, the categories need to be confirmed.
2022-01-12 19:20:53 +13:00
Garfield69
650cc8bb9a pornorip: removed. resolves #7524 2022-01-12 16:06:00 +13:00
dctorrent1337
5b357e6019 bj-share: Update categories (#12806) 2022-01-12 14:13:10 +13:00
Garfield69
50bdadc18d add hawke-uno a private site. resolves #12804 2022-01-11 20:26:09 +13:00
Garfield69
dfc27a7434 polishsource: fix for error from #11917 resolves #12484 2022-01-11 09:19:46 +13:00
ilike2burnthing
4aec424e0a alleenretail: restore indexer, site back up. #12557 (#12801) 2022-01-10 09:29:44 +00:00
Garfield69
ad86088b3c Update README.md 2022-01-10 18:19:45 +13:00
Garfield69
a101eec991 Update README.md 2022-01-10 15:25:16 +13:00
Garfield69
f1c6dca9bf secretcinema: drop artist from release titles. resolves #12799 2022-01-10 14:56:04 +13:00
Diego Heras
bd13e1256f core: Implement /health endpoint (healthcheck). Resolves #12784 (#12798) 2022-01-09 23:15:50 +01:00
ilike2burnthing
c01b8a3a33 digitalcore: update categories, pt2 #12794 2022-01-09 18:44:00 +00:00
Diego Heras
7ac6c43040 digitalcore: update categories. resolves #12794 (#12796) 2022-01-09 19:38:45 +01:00
Diego Heras
1f0751f634 core: make FlareSolverr Max Timeout configurable. resolves #12750 (#12795) 2022-01-09 19:38:14 +01:00
Garfield69
c6b575b79c cpasbienclone: new search path. resolves #12791 2022-01-10 06:37:16 +13:00
ilike2burnthing
8e4d797d1b assorted: remove unrelated results (#12790) 2022-01-10 06:08:58 +13:00
ilike2burnthing
fa5bf831f6 torrentby: change to http 2022-01-08 11:22:22 +00:00
ilike2burnthing
ae33faa652 hdu: ignore expired certificate 2022-01-08 11:09:30 +00:00
ilike2burnthing
bac28c0302 danishbytes: add official mirror *2.org 2022-01-08 04:20:52 +00:00
Garfield69
271f4d45e5 anime-free: expired CA 2022-01-08 17:17:54 +13:00
Garfield69
53c61453a6 oncesearch: removed. resolves #10539 2022-01-08 17:11:45 +13:00
Garfield69
6a15031197 torrentqq: bump domain 2022-01-08 17:08:36 +13:00
Garfield69
e5c19c246c krazyzone: config info about 0 results 2022-01-08 16:48:35 +13:00
Garfield69
3a184f41a2 moviesite: set to semi-private 2022-01-08 16:36:26 +13:00
Garfield69
ec42b35aba pier720: set to semi-private. resolves #12785 2022-01-08 15:37:41 +13:00
Garfield69
d4bd5d747d animeworld: alter order to prevent false match. #12022 2022-01-08 08:48:03 +13:00
Garfield69
ef40af260b animeworld: update categories. resolves #12022 2022-01-08 08:43:51 +13:00
Garfield69
b17c2482d0 spidertk: switch to cookie method. resolves #12718 2022-01-07 17:21:17 +13:00
Garfield69
67db83ac07 Update README.md 2022-01-07 16:14:00 +13:00
Garfield69
6e9ed2973f SkipTheCommercials: replaced by SkipTheCommercials(API) #8682 2022-01-07 13:32:48 +13:00
Garfield69
23a01eb8d2 TellyTorrent: replaced by TellyTorrent(API) #8682 2022-01-07 13:31:31 +13:00
Garfield69
23891d5cba Shareisland: replaced by Shareisland(API) #8682 2022-01-07 13:30:08 +13:00
Garfield69
03df949e4f Aither: replaced by Aither(API) #8682 2022-01-07 13:28:42 +13:00
Garfield69
82d97331c9 DataScene: replaced by DataScene(API) #8682 2022-01-07 13:27:41 +13:00
Garfield69
1265a6aa53 ReelFLiX: replaced by ReelFLiX(API) #8682 2022-01-07 13:26:40 +13:00
Garfield69
73aea6f5ff BrSociety: replaced by BrSociety(API) #8682 2022-01-07 13:24:04 +13:00
Garfield69
aaf7b7d9e0 AnimeWorld: replaced by AnimeWorld(API) #8682 2022-01-07 13:22:15 +13:00
Garfield69
af5c32e3aa DesiTorrents: replaced by DesiTorrents (API) #8682 2022-01-07 13:19:29 +13:00
Garfield69
41f66b15b4 blutopia: replaced by Blutopia (API) #8682 2022-01-07 13:16:37 +13:00
Garfield69
9b67eef230 blutopia: new torrents page html. resolves #12775 2022-01-07 09:07:02 +13:00
ilike2burnthing
caeeb8cde2 assorted: change unblockit proxy domain *.how (#12773) 2022-01-06 05:27:51 +00:00
Maxim Grishin
5d99a7c90b Make select style applied to all (#12772) 2022-01-06 09:26:44 +13:00
Garfield69
de6949f303 demonoid: new layout
now includes posters and imdb
2022-01-05 18:36:01 +13:00
84 changed files with 1494 additions and 2904 deletions

View File

@@ -51,6 +51,7 @@ body:
description: |
Place any relevant error messages you noticed from the logs here.
Make sure you attach the full logs with your personal information removed in case we need more information.
render: text
validations:
required: true
- type: textarea

View File

@@ -32,11 +32,11 @@ body:
- Minimum Seeding Time and Minimum Ratio (if Private): MST 24hrs, MR 1.0
- Additional Comments: IMDB search has to be enabled in account settings, often has hcaptcha at login
value: |
- Name:
- URL:
- Description:
- Minimum Seeding Time and Minimum Ratio (if Private):
- Additional Comments:
- Name:
- URL:
- Description:
- Minimum Seeding Time and Minimum Ratio (if Private):
- Additional Comments:
render: markdown
validations:
required: true

View File

@@ -104,24 +104,31 @@ We've developed the guide below to make sure we're all on the same page because
The following guide assumes you've never worked with a Visual Studio project with GitHub before.
This will give you the minimum necessary tools to get started. There are plenty of optional tools that may help you, but we won't cover those here.
- The guide is currently only geared towards developing on Windows using Visual Studio Community 2019.
- The guide is currently only geared towards developing on Windows using Visual Studio Community 2022.
If you use something else, please add it here for others.
<details open=true> <summary> Windows </summary>
<details open=true> <summary> Visual Studio 2019 </summary>
<details open=true> <summary> Visual Studio 2022 </summary>
- Install [Visual Studio Community 2019](http://visualstudio.com) for free.
- Install [Visual Studio Community 2022](https://visualstudio.microsoft.com/vs/) for free.
- About 2GB download. 8GB installed.
- Make sure it includes the following Workloads/Components:
- .Net Desktop Development
- .Net Core Cross-Platform Development
- GitHub extension for Visual Studio
- [Connect and synchronize your forked repository to Visual Studio](https://doc.fireflymigration.com/working-with-github-fork-in-visual-studio.html)
- Open `Tools -> NuGet Package Manager -> Package Manager Console`
- From the PMC, run `dotnet tool install -g dotnet-format` and `dotnet restore`
- Run `Build -> Rebuild Solution` to restore NuGet packages
- Ensure `Jackett.Server` is the Startup Project (instead of `Jackett.Service`), and the Run Target (instead of `IIS Express`)
- Make sure it includes the following Workload and Individual Components:
- .NET desktop development
- .Net Framework 4.6.1 SDK
- .Net Framework 4.6.1 targeting pack
- From the `Get Started` screen:
- `Clone a repository -> Browse a repository -> GitHub -> Sign in -> clone your forked repository`
- Double-click `Jackett.sln` in `Solution Explorer` to load your project
- Ensure `Jackett.Server` is the Startup Project (instead of `Jackett.Service`) and the Run Target (instead of `IIS Express`)
- Open `Tools -> NuGet Package Manager -> Package Manager Console`
- From the PMC, with `Jackett.Service` as the default project, run:
- `dotnet tool install -g dotnet-format`
- `dotnet msbuild /restore`
- `dotnet restore`
- `dotnet build`
- [For more information on working with your forked GitHub repository in Visual Studio](https://doc.fireflymigration.com/working-with-github-fork-in-visual-studio.html)
- UPDATE: changes are now made in `Git Changes` and `Git Repository` (instead of `Team Explorer`)
</details>

View File

@@ -104,7 +104,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* NNTT
* NoNaMe Club (NNM-Club)
* Nyaa.si
* OnceSearch
* OneJAV
* OpenSharing
* OxTorrent
@@ -115,7 +114,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* Pornforall
* PornLeech
* PornoLive
* PornoRip
* PornosLab
* PornoTor
* PornoTorrent
@@ -138,6 +136,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* sosulki
* SubsPlease
* sukebei.Nyaa.si
* TodoTorrents
* The Pirate Bay (TPB)
* Tokyo Tosho
* Torlock
@@ -181,6 +180,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
<details> <summary> <b> Supported Semi-Private Trackers </b> </summary>
* 720pier
* AniDUB
* Anime-Free
* AnimeLayer
@@ -246,7 +246,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* 3D Torrents (3DT) [![(invite needed)][inviteneeded]](#)
* 4thD (4th Dimension)
* 52PT
* 720pier
* Abnormal
* ABtorrents (ABT + RNS)
* Acid Lounge (A-L)
@@ -254,6 +253,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* Aftershock
* Aidoru!Online
* Aither
* Alleen Retail
* AlphaRatio (AR)
* AmigosShareClub
* anasch.cc
@@ -368,6 +368,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* HaiDan
* Haitang
* HappyFappy
* Hawke-uno
* HD Dolby
* HD-Bits.com [![(invite needed)][inviteneeded]](#)
* HD-Forever (HDF)
@@ -401,7 +402,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* Il Corsaro Verde
* Indietorrents [![(invite needed)][inviteneeded]](#)
* IPTorrents (IPT)
* ImmortalSeed (iS) [![(invite needed)][inviteneeded]](#)
* ImmortalSeed (iS)
* Immortuos [![(invite needed)][inviteneeded]](#)
* Insane Tracker
* IPTorrents (IPT)
@@ -490,7 +491,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* RacingForMe (RFM)
* RedBits
* Red Star Torrent (RST) [![(invite needed)][inviteneeded]](#)
* Redacted (PassTheHeadphones) [![(invite needed)][inviteneeded]](#)
* Redacted (PassTheHeadphones)
* Resurrect The Net
* RetroFlix
* RevolutionTT
@@ -778,6 +779,7 @@ For these cases, [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr) ha
Setting up this service is optional, most indexers don't need it.
* Install FlareSolverr service (following their instructions)
* Configure **FlareSolverr API URL** in Jackett. For example: http://172.17.0.2:8191
* It is recommended to keep the default value in **FlareSolverr Max Timeout (ms)**
## Configuring OMDb
This feature is used as a fallback (when using the aggregate Indexer) to get the movie/series title if only the IMDB ID is provided in the request.

View File

@@ -247,7 +247,7 @@ pre {
white-space: nowrap;
}
.dataTables_length select, .dataTables_filter input, .dataTable.compact tfoot td select {
.dataTables_filter input, select {
display: inline-block;
height: 26px;
padding: 0 8px;

View File

@@ -130,6 +130,7 @@ function loadJackettSettings() {
}
$("#jackett-flaresolverrurl").val(data.flaresolverrurl);
$("#jackett-flaresolverr-maxtimeout").val(data.flaresolverr_maxtimeout);
$("#jackett-omdbkey").val(data.omdbkey);
$("#jackett-omdburl").val(data.omdburl);
var password = data.password;
@@ -1500,6 +1501,7 @@ function bindUIButtons() {
var jackett_cache_ttl = $("#jackett-cache-ttl").val();
var jackett_cache_max_results_per_indexer = $("#jackett-cache-max-results-per-indexer").val();
var jackett_flaresolverr_url = $("#jackett-flaresolverrurl").val();
var jackett_flaresolverr_maxtimeout = $("#jackett-flaresolverr-maxtimeout").val();
var jackett_omdb_key = $("#jackett-omdbkey").val();
var jackett_omdb_url = $("#jackett-omdburl").val();
@@ -1522,6 +1524,7 @@ function bindUIButtons() {
cache_ttl: jackett_cache_ttl,
cache_max_results_per_indexer: jackett_cache_max_results_per_indexer,
flaresolverrurl: jackett_flaresolverr_url,
flaresolverr_maxtimeout: jackett_flaresolverr_maxtimeout,
omdbkey: jackett_omdb_key,
omdburl: jackett_omdb_url,
proxy_type: jackett_proxy_type,

View File

@@ -231,7 +231,7 @@ pre {
white-space: nowrap;
}
.dataTables_length select, .dataTables_filter input, .dataTable.compact tfoot td select {
.dataTables_filter input, select {
display: inline-block;
height: 26px;
padding: 0 8px;

View File

@@ -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=PR12083" media="only screen and (min-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=11662" media="only screen and (max-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../custom.css?changed=PR12772" media="only screen and (min-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=PR12772" 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">
@@ -191,16 +191,20 @@
</div>
<div class="input-area">
<span class="input-header">Cache TTL (seconds): </span>
<input id="jackett-cache-ttl" class="form-control input-right" type="text" value="" placeholder="">
<input id="jackett-cache-ttl" class="form-control input-right" type="text" value="" placeholder="2100">
</div>
<div class="input-area">
<span class="input-header">Cache max results per indexer: </span>
<input id="jackett-cache-max-results-per-indexer" class="form-control input-right" type="text" value="" placeholder="">
<input id="jackett-cache-max-results-per-indexer" class="form-control input-right" type="text" value="" placeholder="1000">
</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">
</div>
<div class="input-area">
<span class="input-header">FlareSolverr Max Timeout (ms): </span>
<input id="jackett-flaresolverr-maxtimeout" class="form-control input-right" type="text" value="" placeholder="55000">
</div>
<div class="input-area">
<span class="input-header">OMDB API key: </span>
<input id="jackett-omdbkey" class="form-control input-right" type="text" value="" placeholder="">
@@ -732,6 +736,6 @@
</script>
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
<script type="text/javascript" src="../custom.js?changed=2021103101"></script>
<script type="text/javascript" src="../custom.js?changed=2022010901"></script>
</body>
</html>

View File

@@ -13,27 +13,9 @@ links:
- https://x1337x.ws/
- https://x1337x.eu/
- https://x1337x.se/
- https://1337x.unblockit.tv/
- https://1337x.unblockit.how/
- https://1337x.nocensor.biz/
legacylinks:
- https://1337x.unblocked.earth/
- https://1337x.unblockit.pro/
- https://1337x.unblockit.one/
- https://1337x.black-mirror.xyz/
- https://1337x.unblocked.casa/
- https://1337x.proxyportal.fun/
- https://1337x.uk-unblock.xyz/
- https://1337x.ind-unblock.xyz/
- https://1337x.unblockninja.com/ # 403 Forbidden
- https://1337x.unblockit.me/
- https://1337x.unblockit.pw/
- https://1337x.unblockit.id/
- https://1337x.unblockit.win/
- https://1337x.unblocked.bar/
- https://1337x.proxyportal.pw/
- https://1337x.uk-unblock.pro/
- https://1337x.unblockit.top/
- https://1337x.unblockit.lat/
- https://1337x.unblockit.app/
- https://1337.root.yt/
- https://1337x.unblocked.rest/
@@ -53,6 +35,7 @@ legacylinks:
- https://1337x.nocensor.work/
- https://1337x.unblockit.kim/
- https://1337x.unblockit.bz/
- https://1337x.unblockit.tv/
caps:
categorymappings:

View File

@@ -1,196 +0,0 @@
---
id: aither
name: Aither
description: "Aither is a Private Torrent Tracker for HD MOVIES / TV"
language: en-US
type: private
encoding: UTF-8
links:
- https://aither.cc/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 9, cat: TV/Sport, desc: "Sport"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: Console, desc: "Games"}
- {id: 10, cat: PC, desc: "Software & Apps"}
- {id: 11, cat: Books, desc: "Ebooks & Magazines"}
- {id: 14, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 15, cat: Other, desc: "Education"}
- {id: 6, cat: XXX, desc: "XXX"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-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: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
name: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
mediainfo: ""
keywords: ""
uploader: ""
tmdbId: "{{ .Query.TMDBID }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tvdbId: "{{ .Query.TVDBID }}"
malId: ""
startYear: ""
endYear: ""
playlistId: ""
collectionId: ""
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
grabs:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(1)
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
i[class*="fa-star text-bold"]: 0 # Freeleech From Token
i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
i[class*="fa-globe text-blue"]: 0 # Global Freeleech
i[class*="fa-star text-gold"]: 0 # Freeleech
i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
"*": 1
uploadvolumefactor:
case:
i[class*="fa-gem text-green"]: 2 # Single Torrent Double Upload
i[class*="fa-globe text-green"]: 2 # Global Double Upload
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
# global MR is 0.4 but torrents must be seeded for 3 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# UNIT3D 5.3.0

View File

@@ -0,0 +1,186 @@
---
id: alleenretail
name: Alleen Retail
description: "Alleen Retail is a DUTCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: nl-NL
type: private
encoding: UTF-8
links:
- http://www.alleenretail.org/ # does not support https ERR_CONNECTION_REFUSED
caps:
categorymappings:
- {id: 2, cat: Movies/DVD, desc: "Films DVD"}
- {id: 17, cat: Movies, desc: "Films Promo"}
- {id: 3, cat: Audio/Video, desc: "Muziek Video"}
- {id: 4, cat: Audio/Video, desc: "Cabaret"}
- {id: 18, cat: Movies, desc: "Films Kids"}
- {id: 6, cat: TV, desc: "TV Series"}
- {id: 19, cat: Other, desc: "Overigen"}
- {id: 20, cat: TV/Documentary, desc: "Documentaire"}
- {id: 9, cat: PC/Games, desc: "Games PC"}
- {id: 10, cat: Books/Mags, desc: "Magazines"}
- {id: 11, cat: Movies/SD, desc: "Films AVI/DivX"}
- {id: 22, cat: Movies, desc: "Films Classics"}
- {id: 8, cat: Audio, desc: "Muziek"}
- {id: 23, cat: PC/Mac, desc: "Software Mac"}
- {id: 1, cat: Books/Comics, desc: "Stripboeken"}
- {id: 13, cat: PC/Mobile-Android, desc: "Android"}
- {id: 14, cat: PC/Mobile-Other, desc: "Navigatie"}
- {id: 7, cat: PC/0day, desc: "Software PC"}
- {id: 12, cat: PC/Mobile-iOS, desc: "iOS"}
- {id: 21, cat: Movies/HD, desc: "Films HD"}
- {id: 5, cat: Audio/Audiobook, desc: "Luisterboeken"}
- {id: 15, cat: XXX, desc: "18+"}
- {id: 24, cat: Movies/UHD, desc: "Films Blu-ray/3D/4K"}
- {id: 16, cat: Books/EBook, desc: "Ebooks"}
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: 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. Enter your personalised comment above.
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table.main:contains("Aanmelden mislukt")
test:
path: /
selector: a[href="logout.php"]
# download:
# before:
# # /comment.php?action=add&tid=166386
# path: comment.php
# method: post
# inputs:
# action: add
# tid: "{{ .DownloadUri.Query.id }}"
# text: "{{ .Config.thankyou }}"
# submit: Opslaan
# selectors:
# - selector: a[href^="download.php?id="]
# attribute: href
search:
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
incldead: 1
# does not support imdbid search and does not return imdb link in results
rows:
selector: table.mainouter
filters:
- name: andmatch
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
filters:
- name: re_replace
args: ["(?i)seizoen\\s*(\\d{1,2})\\s*(tot|t\/m)\\s*(\\d{1,2})", "S$1-$3"]
- name: re_replace
args: ["(?i)(seizoen\\s*)(\\d{1,2})", "S$2"]
- name: re_replace
args: ["(?i)(afl.\\s*|aflevering\\s*)(\\d{1,2})", "E$2"]
- name: re_replace
args: ["(?i)compleet", "Complete"]
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
size:
selector: a[href^="details_bestanden.php?torrent_id="]
filters:
- name: regexp
args: "(.+?) in"
files:
selector: a[href^="details_bestanden.php?torrent_id="]
filters:
- name: regexp
args: "in (\\d+) bestan"
grabs:
selector: table tr:nth-child(2) td:nth-child(1)
date:
selector: table tr:nth-child(2) td:nth-child(3)
filters:
- name: replace
args: ["januari", "January"]
- name: replace
args: ["februari", "February"]
- name: replace
args: ["maart", "March"]
- name: replace
args: ["april", "April"]
- name: replace
args: ["mei", "May"]
- name: replace
args: ["juni", "June"]
- name: replace
args: ["juli", "July"]
- name: replace
args: ["augustus", "August"]
- name: replace
args: ["september", "September"]
- name: replace
args: ["oktober", "October"]
- name: replace
args: ["november", "November"]
- name: replace
args: ["december", "December"]
- name: re_replace
args: ["\\s*om\\s*", " "]
- name: append
args: " +01:00" # CET
- name: dateparse
args: "2 January 2006 15:04:05 -07:00"
seeders_optional:
optional: true
selector: table tr:nth-child(3) td:nth-child(6) font b
seeders:
text: "{{ if .Result.seeders_optional }}{{ .Result.seeders_optional }}{{ else }}0{{ end }}"
leechers_optional:
optional: true
selector: table tr:nth-child(3) td:nth-child(6) font b:nth-child(2)
leechers:
text: "{{ if .Result.leechers_optional }}{{ .Result.leechers_optional }}{{ else }}0{{ end }}"
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
minimumratio:
# between 1.00 and 1.50 is required, and above 1.50 prohibited
text: 1.25
# engine n/a

View File

@@ -6,6 +6,8 @@ language: ru-RU
type: semi-private
encoding: windows-1251
testlinktorrent: false
certificates:
- 2b49b401259cb893f37de9eff343f7d356b1c2f2 # expired 8 January 2022
links:
- https://anime-free.biz/
legacylinks:

View File

@@ -11,18 +11,21 @@ links:
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies/Other, desc: "Anime Movie"}
- {id: 2, cat: TV/Anime, desc: "Anime Serie"}
- {id: 3, cat: Audio, desc: "Anime Musik/OST"}
- {id: 1, cat: Movies/Other, desc: "Anime Filme"}
- {id: 2, cat: TV/Anime, desc: "Anime Serien"}
- {id: 3, cat: Audio, desc: "Anime Musik / OSTs"}
- {id: 4, cat: PC/Games, desc: "Anime Spiele"}
- {id: 5, cat: XXX, desc: "Hentai"}
- {id: 6, cat: PC, desc: "Spiele Linux"}
- {id: 5, cat: XXX, desc: "Anime Hentai"}
- {id: 6, cat: PC, desc: "Software"}
- {id: 7, cat: Other, desc: "Sonstiges"}
- {id: 8, cat: Movies, desc: "Filme"}
- {id: 9, cat: TV, desc: "Serien"}
- {id: 10, cat: PC/Games, desc: "Spiele"}
- {id: 11, cat: Audio, desc: "Musik"}
- {id: 12, cat: Books, desc: "Mangas"}
- {id: 12, cat: Books, desc: "Manga"}
- {id: 13, cat: Movies, desc: "Cartoon Filme"}
- {id: 14, cat: TV, desc: "Cartoon Serie"}
- {id: 15, cat: XXX, desc: "H-Manga / Doujinshi"}
modes:
search: [q]
@@ -78,18 +81,21 @@ search:
category:
selector: category
case:
"Anime Movie": 1
"Anime Serie": 2
"Anime Musik/OST": 3
"Anime Filme": 1
"Anime Serien": 2
"Anime Musik / OSTs": 3
"Anime Spiele": 4
"Hentai": 5
"Spiele Linux": 6
"Anime Hentai": 5
"Software": 6
"Sonstiges": 7
"Filme": 8
"Serien": 9
"Spiele": 10
"Musik": 11
"Mangas": 12
"Manga": 12
"Cartoon Filme": 13
"Cartoon Serie": 14
"H-Manga / Doujinshi": 15
"Filme": 8
title:
selector: name
details:

View File

@@ -1,193 +0,0 @@
---
id: animeworld
name: AnimeWorld
description: "AnimeWorld (AW) is a GERMAN Private site for ANIME / MANGA / HENTAI"
language: de-DE
type: private
encoding: UTF-8
links:
- https://animeworld.cx/
caps:
categorymappings:
- {id: 1, cat: Movies/Other, desc: "Anime Movie"}
- {id: 2, cat: TV/Anime, desc: "Anime Serie"}
- {id: 3, cat: Audio, desc: "Anime Musik/OST"}
- {id: 4, cat: PC/Games, desc: "Anime Spiele"}
- {id: 5, cat: XXX, desc: "Hentai"}
- {id: 6, cat: PC, desc: "Spiele Linux"}
- {id: 7, cat: Other, desc: "Sonstiges"}
- {id: 8, cat: Movies, desc: "Filme"}
- {id: 9, cat: TV, desc: "Serien"}
- {id: 10, cat: PC/Games, desc: "Spiele"}
- {id: 11, cat: Audio, desc: "Musik"}
- {id: 12, cat: Books, desc: "Mangas"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-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: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
name: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
mediainfo: ""
keywords: ""
uploader: ""
tmdbId: "{{ .Query.TMDBID }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tvdbId: "{{ .Query.TVDBID }}"
malId: ""
startYear: ""
endYear: ""
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
grabs:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(1)
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
i[class*="fa-star text-bold"]: 0 # Freeleech From Token
i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
i[class*="fa-globe text-blue"]: 0 # Global Freeleech
i[class*="fa-star text-gold"]: 0 # Freeleech
i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
"*": 1
uploadvolumefactor:
case:
i[class*="fa-gem text-green"]: 2 # Single Torrent Double Upload
i[class*="fa-globe text-green"]: 2 # Global Double Upload
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
minimumseedtime:
# 7 day (as seconds = 7 x 24 x 60 x 60)
text: 604800
# UNIT3D 5.3.0

View File

@@ -126,6 +126,8 @@ search:
rows:
selector: table.torrent tr.torrent
filters:
- name: andmatch
fields:
category:

View File

@@ -9,7 +9,7 @@ links:
- http://audiobookbay.nl/ # site forces http, does not support https
- http://audiobookbay.ws/
- http://audiobookbayabb.com/
- https://audiobookbay.unblockit.tv/
- https://audiobookbay.unblockit.how/
legacylinks:
- https://audiobookbay.la/
- https://audiobookbay.unblockit.lat/
@@ -27,6 +27,7 @@ legacylinks:
- http://audiobookbay.net/
- https://audiobookbay.unblockit.kim/
- https://audiobookbay.unblockit.bz/
- https://audiobookbay.unblockit.tv/
caps:
categorymappings:

View File

@@ -101,6 +101,8 @@ search:
rows:
selector: table > tbody#highlighted > tr:has(a[href^="browse.php?cat="])
filters:
- name: andmatch
fields:
category:

View File

@@ -119,8 +119,14 @@ search:
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
keywordsfilters:
- name: re_replace
args: ["(\\w+)", " +$1"] # prepend + to each word
rows:
selector: div.torrentrow:has(a[href^="download.php?torrent="])
filters:
- name: andmatch
fields:
category:

View File

@@ -119,6 +119,8 @@ search:
rows:
selector: table.table-bordered tr:has(a[href^="download.php?torrent="])
filters:
- name: andmatch
fields:
category:

View File

@@ -1,195 +0,0 @@
---
id: blutopia
name: Blutopia
description: "Blutopia (BLU) is a Private Torrent Tracker for HD MOVIES / TV"
language: en-US
type: private
encoding: UTF-8
links:
- https://blutopia.xyz/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Movies/Other, desc: "FANRES"}
- {id: 5, cat: Movies/Other, desc: "Trailer"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
name: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
mediainfo: ""
keywords: ""
uploader: ""
tmdbId: "{{ .Query.TMDBID }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tvdbId: "{{ .Query.TVDBID }}"
malId: ""
startYear: ""
endYear: ""
playlistId: ""
collectionId: ""
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
grabs:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(1)
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
span.torrent-listings-global-freeleech: 0
span.torrent-listings-personal-freeleech: 0
span.torrent-listings-freeleech-token: 0
span.torrent-listings-featured: 0
span.torrent-listings-freeleech[data-original-title*="25%"]: 0.75
span.torrent-listings-freeleech[data-original-title*="50%"]: 0.5
span.torrent-listings-freeleech[data-original-title*="75%"]: 0.25
span.torrent-listings-freeleech[data-original-title*="100%"]: 0
span.torrent-listings-special-freeleech: 0
"*": 1
uploadvolumefactor:
case:
span.torrent-listings-global-double-upload: 2
span.torrent-listings-double-upload: 2
span.torrent-listings-featured: 2
span.torrent-listings-special-double-upload: 2
"*": 1
# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 7 day (as seconds = 7 x 24 x 60 x 60)
text: 604800
# UNIT3D 5.3.1b

View File

@@ -1,183 +0,0 @@
---
id: brsociety
name: BrSociety
description: "BrSociety (SemeandoCC) is a BRAZILIAN Private Torrent Tracker for E-LEARNING"
language: pt-BR
type: private
encoding: UTF-8
links:
- https://brsociety.club/
caps:
categorymappings:
- {id: 1, cat: TV, desc: "Cursos (courses)"}
- {id: 2, cat: Books/EBook, desc: "eBooks"}
- {id: 5, cat: Books/Mags, desc: "Revistas (Magazines)"}
- {id: 3, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 4, cat: Other, desc: "Arquivos de Auxilio (Help Files)"}
modes:
search: [q]
tv-search: [q]
book-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: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
name: "{{ .Keywords }}"
description: ""
mediainfo: ""
keywords: ""
uploader: ""
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download_check/"]
attribute: href
filters:
- name: replace
args: ["download_check", "download"]
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
grabs:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(1)
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
i[class*="fa-star text-bold"]: 0 # Freeleech From Token
i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
i[class*="fa-globe text-blue"]: 0 # Global Freeleech
i[class*="fa-star text-gold"]: 0 # Freeleech
i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
"*": 1
uploadvolumefactor:
case:
i[class*="fa-gem text-green"]: 2 # Single Torrent Double Upload
i[class*="fa-globe text-green"]: 2 # Global Double Upload
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
minimumratio:
text: 1.0
minimumseedtime:
# 5 days (as seconds = 5 x 24 x 60 x 60)
text: 432000
# UNIT3D 5.3.0

View File

@@ -55,17 +55,17 @@ settings:
default: false
- name: sort
type: select
label: Sort requested from site (Only works for searches with Keywords)
default: ?trie-date-d
label: Sort requested from site (Works only for searches with Keywords)
default: trie-date-d
options:
?trie-date-d: created desc
?trie-date-a: created asc
?trie-seeds-d: seeders desc
?trie-seeds-a: seeders asc
?trie-poid-d: size desc
?trie-poid-a: size asc
?trie-nom-d: title desc
?trie-nom-a: title asc
trie-date-d: created desc
trie-date-a: created asc
trie-seeds-d: seeders desc
trie-seeds-a: seeders asc
trie-poid-d: size desc
trie-poid-a: size asc
trie-nom-d: title desc
trie-nom-a: title asc
download:
selectors:
@@ -74,7 +74,7 @@ download:
search:
paths:
- path: "{{ if .Keywords }}search_torrent/{{ .Keywords }}{{ .Config.sort }}{{ else }}home/{{ end }}"
- path: "{{ if .Keywords }}search_torrent/{{ .Keywords }}.html,{{ .Config.sort }}{{ else }}home/{{ end }}"
rows:
selector: table.table-corps > tbody > tr:has(a)

View File

@@ -1,197 +0,0 @@
---
id: datascene
name: DataScene
description: "DataScene (DS) is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://datascene.xyz/
legacylinks:
- http://datascene.net/
- https://datascene.net/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: PC/Games, desc: "Game"}
- {id: 5, cat: PC/0day, desc: "Application"}
- {id: 6, cat: XXX, desc: "XXX"}
- {id: 7, cat: PC/Mobile-Other, desc: "Mobile"}
- {id: 8, cat: Books/EBook, desc: "E-Book"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-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: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
name: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
mediainfo: ""
keywords: ""
uploader: ""
tmdbId: "{{ .Query.TMDBID }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tvdbId: "{{ .Query.TVDBID }}"
malId: ""
startYear: ""
endYear: ""
playlistId: ""
collectionId: ""
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
size:
selector: td:nth-last-child(4)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
grabs:
selector: td:nth-last-child(1)
date:
selector: td:has(a.view-torrent) spam:last-child span:last-child
remove: a
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
# i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
# i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
# i[class*="fa-star text-bold"]: 0 # Freeleech From Token
# i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
i[class*="fa-trophy data-toggle"]: 0 # Global Freeleech
# i[class*="fa-star text-gold"]: 0 # Freeleech
# i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
"*": 1
uploadvolumefactor:
case:
i[class*="fa-angle-double-up"]: 2 # Single Torrent Double Upload
# i[class*="fa-globe text-green"]: 2 # Global Double Upload
# i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
minimumratio:
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# UNIT3D 5.3.0 (custom)

View File

@@ -1,7 +1,7 @@
---
id: demonoid
name: Demonoid
description: "Demonoid is a Public torrent site for MOVIES / TV / GENERAL"
description: "Demonoid is a Semi-Private torrent site for MOVIES / TV / GENERAL"
language: en-US
type: semi-private
encoding: UTF-8
@@ -11,19 +11,10 @@ links:
- https://www.dnoid.to/
- https://www.dnoid.pw/
- https://demonoidevmsgasmojajlhikwetsr4pxzw6xkjt3dgdv6nr5yxvsamid.onion.ly/
- https://demonoid.unblockit.tv/
- https://demonoid.unblockit.how/
- https://demonoid.torrentbay.to/
- https://demonoid.nocensor.biz/
legacylinks:
- https://demonoid.unblockit.pro/
- https://demonoid.unblockit.one/
- https://demonoid.unblockit.me/
- https://dnoid.black-mirror.xyz/
- https://dnoid.unblocked.casa/
- https://dnoid.proxyportal.fun/
- https://dnoid.uk-unblock.xyz/
- https://dnoid.ind-unblock.xyz/
- https://demonoid.unblockit.pw/
- https://demonoid.unblockit.id/
- https://demonoid.unblockit.win/
- https://demonoid.unblockit.top/
@@ -43,6 +34,7 @@ legacylinks:
- https://demonoid.nocensor.work/
- https://demonoid.unblockit.kim/
- https://demonoid.unblockit.bz/
- https://demonoid.unblockit.tv/
caps:
categorymappings:
@@ -357,10 +349,10 @@ search:
rows:
# only the default theme "Demonoid - v5" is supported
selector: table.table:has(td.torrent__table-today) > tbody > tr:has(td[class^="tone_"])
selector: table.table tbody tr.table__row:has(td[class*="tone_"])
after: 1
dateheaders:
selector: tr td.torrent__table-today:not(:contains("Sponsored links"))
selector: tr td.table__separator:not(:contains("Sponsored links"))
filters:
- name: replace
args: ["Added ", ""]
@@ -368,27 +360,30 @@ search:
args: ["on ", ""]
fields:
title_default:
selector: a[href^="/files/details/"]
title_optional:
selector: a[href^="/files/details/"]
optional: true
attribute: title
title:
text: "{{ if .Result.title_optional }}{{ .Result.title_optional }}{{ else }}{{ .Result.title_default }}{{ end }}"
category:
selector: span.torrent__table-info > a:nth-child(2)
selector: span.table__column__subtext > a:nth-child(2)
attribute: href
optional: true
filters:
- name: querystring
args: subcategory
title:
selector: a[href^="/files/details/"]
details:
selector: a[href^="/files/details/"]
attribute: href
download:
selector: a[href^="/files/details/"]
attribute: href
poster:
selector: div[title]
attribute: data-bs-content
filters:
- name: regexp
args: src='(.+?)'
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
description:
selector: td:nth-last-child(7)
size:

View File

@@ -1,187 +0,0 @@
---
id: desitorrents
name: DesiTorrents
description: "Desitorrents is a Private Torrent Tracker for BOLLYWOOD / TOLLYWOOD / MUSIC"
language: en-US
type: private
encoding: UTF-8
links:
- https://desitorrents.tv/
- https://desitorrents.rocks/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-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: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
name: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
mediainfo: ""
keywords: ""
uploader: ""
tmdbId: "{{ .Query.TMDBID }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tvdbId: "{{ .Query.TVDBID }}"
malId: ""
startYear: ""
endYear: ""
playlistId: ""
collectionId: ""
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
rows:
selector: table > tbody > tr:has(a[href*="/download/"])
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: td div a
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: td div a
attribute: href
poster:
selector: div img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
size:
selector: td:nth-last-child(6)
seeders:
selector: td:nth-last-child(5)
leechers:
selector: td:nth-last-child(4)
grabs:
selector: td:nth-last-child(3)
date:
selector: td:nth-last-child(2)
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
i[class*="fa-id-badge"]: 0 # 24 Hour FreeLeech From BON Store
i[class*="fa-trophy"]: 0 # Special FreeLeech For Certain User Groups
i[class*="fa-coins"]: 0 # Freeleech From Token
i[class*="fa-globe"]: 0 # Global Freeleech
i[class*="fa-star"]: 0 # Freeleech
i[class*="fa-certificate"]: 0 # Featured Torrent
"*": 1
uploadvolumefactor:
case:
i[class*="fa-gem"]: 2 # Single Torrent Double Upload
i[class*="fa-globe"]: 2 # Global Double Upload
i[class*="fa-certificate"]: 2 # Featured Torrent
"*": 1
minimumratio:
text: 1.0
minimumseedtime:
# 7 day (as seconds = 7 x 24 x 60 x 60)
text: 604800
# UNIT3D 5.3.0 (custom)

View File

@@ -14,6 +14,7 @@ caps:
- {id: 2, cat: Movies/SD, desc: Movies/SD}
- {id: 3, cat: Movies/BluRay, desc: Movies/BluRay}
- {id: 4, cat: Movies/UHD, desc: Movies/4K}
- {id: 38, cat: Movies/UHD, desc: Movies/UHD}
- {id: 5, cat: Movies/HD, desc: Movies/720p}
- {id: 6, cat: Movies/HD, desc: Movies/1080p}
- {id: 7, cat: Movies/HD, desc: Movies/PACKS}
@@ -33,6 +34,8 @@ caps:
- {id: 23, cat: Audio/Lossless, desc: Music/FLAC}
- {id: 24, cat: Audio/Video, desc: Music/MTV}
- {id: 29, cat: Audio, desc: Music/PACKS}
- {id: 39, cat: Audio/Video, desc: Music/DVD}
- {id: 40, cat: Audio/Video, desc: Music/Bluray}
- {id: 25, cat: PC/Games, desc: Games/PC}
- {id: 26, cat: Console, desc: Games/NSW}
- {id: 27, cat: PC/Mac, desc: Games/Mac}
@@ -44,6 +47,7 @@ caps:
- {id: 36, cat: XXX, desc: XXX/Movies/HD}
- {id: 37, cat: XXX/UHD, desc: XXX/Movies/4K}
- {id: 34, cat: XXX/ImageSet, desc: XXX/Imagesets}
- {id: 41, cat: XXX, desc: XXX/PACKS}
modes:
search: [q]

View File

@@ -17,6 +17,7 @@ caps:
- {id: 68, cat: Books/Comics, desc: "Comics"}
- {id: 59, cat: TV/Documentary, desc: "Docs/Movies"}
- {id: 60, cat: TV/Documentary, desc: "Docs/TV"}
- {id: 79, cat: TV, desc: "Educational"}
- {id: 71, cat: Other, desc: "Fonts"}
- {id: 72, cat: Books, desc: "IT Books"}
- {id: 57, cat: Books/Mags, desc: "Magazine"}

View File

@@ -155,6 +155,8 @@ search:
rows:
selector: tr[id^="tor_"]:has(a[href^="./dl.php?id="])
filters:
- name: andmatch
fields:
title:

View File

@@ -9,32 +9,13 @@ followredirect: true
links:
- https://www.ettvcentral.com/
- https://ettv.unblockninja.com/
- https://ettv.unblockit.tv/
- https://ettv.unblockit.how/
- https://ettv.nocensor.biz/
legacylinks:
- https://www.ettv.tv/
- https://www.ettv.to/
- https://ettv.unblockit.pro/
- https://ettv.unblockit.one/
- https://ettv.black-mirror.xyz/
- https://ettv.unblocked.casa/
- https://ettv.proxyportal.fun/
- https://ettv.uk-unblock.xyz/
- https://ettv.ind-unblock.xyz/
- https://ettv.unblockit.me/
- https://ettv.unblockit.pw/
- https://ettv.unblockit.id/
- https://ettv.unblockit.win/
- https://www.ettvdl.com/
- https://ettv.unblocked.bar/
- https://ettv.proxyportal.pw/
- https://ettv.uk-unblock.pro/
- https://ettv.root.yt/
- https://www.ettv.be/
- https://ettv.unblockit.top/
- https://ettv.unblockit.lat/
- https://ettv.unblockit.app/
- https://ettv.unblocked.rest/
- https://ettv.unblockit.dev/
- https://ettv.unblockit.ltd/
- https://ettv.unblockit.link/
@@ -50,6 +31,7 @@ legacylinks:
- https://ettv.nocensor.work/
- https://ettv.unblockit.kim/
- https://ettv.unblockit.bz/
- https://ettv.unblockit.tv/
caps:
categorymappings:

View File

@@ -7,12 +7,13 @@ type: public
encoding: UTF-8
links:
- https://extratorrent.st/
- https://extratorrent.unblockit.tv/
- https://extratorrent.unblockit.how/
- https://extratorrent.nocensor.biz/
legacylinks:
- https://extratorrent.nocensor.work/
- https://extratorrent.unblockit.kim/
- https://extratorrent.unblockit.bz/
- https://extratorrent.unblockit.tv/
caps:
categorymappings:

View File

@@ -78,6 +78,8 @@ download:
text: "{{ .Config.thankyou }}"
submit: Opslaan
selectors:
- selector: a[href^="downloadv1.php?id="]
attribute: href
- selector: a[href^="download.php?id="]
attribute: href

View File

@@ -12,32 +12,13 @@ links:
- https://eztv.tf/
- https://eztv.yt/
- https://eztv.unblockninja.com/
- https://eztv.unblockit.tv/
- https://eztv.unblockit.how/
- https://eztv.nocensor.biz/
legacylinks:
- https://eztv.ag/ # redirects to .re
- https://eztv.it/ # redirects to .re
- https://eztv.ch/ # redirects to .re
- https://eztv.unblockit.pro/
- https://eztv.unblockit.one/
- https://eztv.black-mirror.xyz/
- https://eztv.unblocked.casa/
- https://eztv.proxyportal.fun/
- https://eztv.uk-unblock.xyz/
- https://eztv.ind-unblock.xyz/
- https://eztv.unblockit.me/
- https://eztv.unblockit.pw/
- https://eztv.unblockit.id/
- https://eztv.unblockit.win/
- https://eztv.unblocked.bar/
- https://eztv.proxyportal.pw/
- https://eztv.uk-unblock.pro/
- https://eztv.unblockit.top/
- https://eztv.unblockit.lat/
- https://eztv.io/
- https://eztv.unblockit.app/
- https://eztv.root.yt/
- https://eztv.unblocked.rest/
- https://eztv.unblockit.dev/
- https://eztv.unblockit.ltd/
- https://eztv.unblockit.link/
@@ -53,6 +34,7 @@ legacylinks:
- https://eztv.nocensor.work/
- https://eztv.unblockit.kim/
- https://eztv.unblockit.bz/
- https://eztv.unblockit.tv/
caps:
categories:

View File

@@ -98,6 +98,8 @@ search:
rows:
selector: table.main > tbody > tr:has(a[href^="/lataa.php/"])
filters:
- name: andmatch
fields:
category:

View File

@@ -9,27 +9,11 @@ followredirect: true
links:
- https://glodls.to/
- https://www.gtdb.to/
- https://glotorrents.unblockit.tv/
- https://glotorrents.unblockit.how/
- https://glotorrents.nocensor.biz/
legacylinks:
- https://glodls.rocks/
- https://glotorrents.unblockit.pro/
- https://glotorrents.unblockit.one/
- https://glodls.black-mirror.xyz/
- https://glodls.unblocked.casa/
- https://glodls.proxyportal.fun/
- https://glodls.uk-unblock.xyz/
- https://glodls.ind-unblock.xyz/
- https://glotorrents.unblockit.me/
- https://glotorrents.unblockit.pw/
- https://glotorrents.unblockit.id/
- https://glotorrents.unblockit.win/
- https://glodls.unblocked.bar/
- https://glodls.proxyportal.pw/
- https://glodls.uk-unblock.pro/
- https://gtdb.to/
- https://glotorrents.unblockit.top/
- https://glotorrents.unblockit.lat/
- https://glotorrents.unblockit.app/
- https://glodls.unblocked.rest/
- https://glotorrents.unblockit.dev/
@@ -47,6 +31,7 @@ legacylinks:
- https://glotorrents.nocensor.work/
- https://glotorrents.unblockit.kim/
- https://glotorrents.unblockit.bz/
- https://glotorrents.unblockit.tv/
caps:
categorymappings:

View File

@@ -0,0 +1,118 @@
---
id: hawke-uno
name: hawke-uno
description: "hawke-uno is a Private Torrent Tracker for (X265 / HEVC) MOVIES / TV"
language: en-US
type: private
encoding: UTF-8
links:
- https://www.hawke.uno/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://www.hawke.uno/\" target =_blank>hawke-uno</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
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 }}"
response:
type: json
attribute: attributes
rows:
selector: data
count:
selector: meta.total
fields:
category:
selector: category
case:
Movie: 1
TV: 2
title:
selector: name
details:
selector: details_link
download:
selector: download_link
poster:
selector: poster
imdbid:
selector: imdb_id
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
files:
selector: num_file
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# 2021-10-18T00:34:50.000000Z"
selector: created_at
size:
selector: size
downloadvolumefactor:
# api returns 0=false, 1=true
selector: freeleech
case:
0: 1 # not free
1: 0 # freeleech
uploadvolumefactor:
# api returns 0=false, 1=true
selector: double_upload
case:
0: 1 # normal
1: 2 # double
# minimumratio:
# text: 0.4
# minimumseedtime:
# 5 days (as seconds = 5 x 24 x 60 x 60)
# text: 432000
# json UNIT3D 5.3.0

View File

@@ -9,6 +9,8 @@ links:
- https://pt.upxin.net/
legacylinks:
- http://pt.upxin.net/
certificates:
- d52ca3e97d730541d8f81452185e4481225f3a2d # expired 06/Jan/2022
caps:
categorymappings:

View File

@@ -68,7 +68,8 @@ search:
search: "{{ .Keywords }}"
incldead: 1
polish: 0
blah: 0
# 0 both, 1 name, 2 desc
blah: 1
rows:
selector: table#line > tbody > tr:has(a[href^="details.php?id="])

View File

@@ -143,6 +143,10 @@ settings:
options:
desc: desc
asc: asc
- name: info_results
type: info
label: Search results
default: "If you are getting <b>0 results</b> then access the site with your browser and <b>mark as read</b> all PMs."
login:
path: takelogin.php

View File

@@ -9,7 +9,7 @@ followredirect: true
# changes to this indexer should also be made to limetorrentsclone
links:
- https://www.limetorrents.pro/
- https://limetorrents.unblockit.tv/
- https://limetorrents.unblockit.how/
- https://limetorrents.unblockninja.com/
- https://limetorrents.nocensor.biz/
legacylinks:
@@ -17,27 +17,6 @@ legacylinks:
- https://www.limetorrents.cc/
- https://www.limetorrents.me/
- https://www.limetorrents.zone/ # redirects to .info
- https://limetorrents.unblockit.pro/
- https://limetorrents.unblockit.one/
- https://limetorrents.black-mirror.xyz/
- https://limetorrents.unblocked.casa/
- https://limetorrents.proxyportal.fun/
- https://limetorrents.uk-unblock.xyz/
- https://limetorrents.ind-unblock.xyz/
- https://limetorrents.unblocked.bar/
- https://limetorrents.proxyportal.pw/
- https://limetorrents.uk-unblock.pro/
- https://limetorrents.unblockit.me/
- https://limetorrents.unblockit.pw/
- https://limetorrents.unblockit.id/
- https://limetorrents.unblockit.win/
- https://limetorrents.unblockit.top/
- https://limetorrents.unblockit.lat/
- https://limetorrents.unblockit.app/
- https://limetorrents.unblockit.dev/
- https://limetorrents.unblockit.ltd/
- https://limetorrents.unblockit.link/
- https://limetorrents.unblockit.buzz/
- https://limetorrents.unblockit.club/
- https://limetorrents.unblockit.onl/
- https://www.limetorrents.info/
@@ -53,6 +32,7 @@ legacylinks:
- https://limetorrents.nocensor.work/
- https://limetorrents.unblockit.kim/
- https://limetorrents.unblockit.bz/
- https://limetorrents.unblockit.tv/
caps:
categorymappings:

View File

@@ -1,9 +1,9 @@
---
id: moviesite
name: Moviesite
description: "Moviesite is a HUNGARIAN private tracker for MOVIES / TV / GENERAL"
description: "Moviesite is a HUNGARIAN Semi-Private tracker for MOVIES / TV / GENERAL"
language: hu-HU
type: private
type: semi-private
encoding: ISO-8859-2
links:
- http://moviesite.info.hu/ # does not support https ERR_CONNECTION_REFUSED

View File

@@ -1,142 +0,0 @@
---
id: oncesearch
name: OnceSearch
description: "OnceSearch is a Public Torrent Tracker for 3X"
language: en-US
type: public
encoding: UTF-8
links:
- http://oncesearch.com/ # https is not supported
caps:
categories:
Amateur: XXX
Anal: XXX
Anime: XXX
Asian: XXX
Ass Lick: XXX
BBW: XXX
BDSM: XXX
Bi-Sexual: XXX
Big Ass: XXX
Big Butts: XXX
Big Dick: XXX
Big Tits: XXX
Blonde: XXX
Blowjob: XXX
Brunette: XXX
Busty: XXX
Classic: XXX
Comics: XXX
Creampie: XXX
Cumshot: XXX
Deepthroat: XXX
Ebony: XXX
Erotic: XXX
Facial: XXX
Fetish: XXX
Fishnets: XXX
Fisting: XXX
Foot: XXX
Foreign: XXX
Gangbang: XXX
Gay: XXX
Glamour Girls: XXX
Gonzo: XXX
Group Sex: XXX
Hairy: XXX
Handjob: XXX
Hardcore: XXX
Homemade: XXX
Interracial: XXX
Latin: XXX
Lesbian: XXX
Lingerie: XXX
Massage: XXX
Masturbation: XXX
Mature: XXX
MILF: XXX
Nude Photography: XXX
Nylons: XXX
Oiled: XXX
Oral: XXX
Orgy: XXX
Outdoor: XXX
Pissing: XXX
Pregnant: XXX
Public: XXX
Redhead: XXX
Retro: XXX
Sex Toys: XXX
Shemale: XXX
Solo: XXX
Squirt: XXX
Tattoo: XXX
Teen: XXX
Threesome: XXX
Uncensored: XXX
XXX: XXX
Porno Clips: XXX
Porno HD Movies: XXX
Porno Other: XXX
Porno Pics: XXX
modes:
search: [q]
settings: []
search:
paths:
# http://oncesearch.com/search/advanced/-/Olivia%20Sin%20Deep/0/any
# http://oncesearch.com/category/latest-torrents
# site supports only single cat search so we default to all
- path: "{{ if .Keywords }}search/advanced/-/{{ .Keywords }}/0/any{{ else }}category/latest-torrents{{ end }}"
rows:
selector: table.table-striped > tbody > tr
filters:
- name: andmatch
fields:
category:
text: XXX
category|noappend:
optional: true
selector: p > a:last-of-type
title:
selector: span
details:
selector: a[href^="/details/"]
attribute: href
download:
selector: a[href^="/file/"][title="Download Torrent"]
attribute: href
optional: true
magnet:
selector: a[href^="magnet:?xt="]
attribute: href
optional: true
date:
selector: td:nth-child(3)
filters:
- name: timeago
files_optional:
selector: td:nth-child(4)
optional: true
files:
text: "{{ if .Result.files_optional }}{{ .Result.files_optional }}{{ else }}1{{ end }}"
size_optional:
selector: td:nth-child(5)
optional: true
size:
text: "{{ if .Result.size_optional }}{{ .Result.size_optional }}{{ else }}256 MB{{ end }}"
seeders:
text: 1
leechers:
text: 0
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -8,30 +8,13 @@ encoding: UTF-8
followredirect: true
links:
- https://www.oxtorrent.be/
- https://oxtorrent.unblockit.tv/
- https://oxtorrent.unblockit.how/
- https://oxtorrent.nocensor.biz/
legacylinks:
- https://wwv.oxtorrent.com/
- https://www.smartorrent.tv/
- https://oxtorrent.black-mirror.xyz/
- https://oxtorrent.unblocked.casa/
- https://oxtrorrent.proxyportal.fun/
- https://oxtorrent.uk-unblock.xyz/
- https://oxtorrent.ind-unblock.xyz/
- https://www.oxtorrent.com/
- https://www.oxtorrent.pw/
- https://oxtorrent.unblocked.bar/
- https://oxtorrent.proxyportal.pw/
- https://oxtorrent.uk-unblock.pro/
- https://oxtorrent.unblocked.rest/
- https://www.oxtorrent.cc/
- https://www.oxtorrent.bz/
- https://www.oxtorrent.ws/
- https://wvw.oxtorrent.ws/
- https://oxtorrent.unblocked.monster/
- https://www.oxtorrent.tv/
- https://www.oxtorrent.ph/
- https://wvw.oxtorrent.pe/
- https://www.oxtorrent.pe/
- https://www.oxtorrent.co/
- https://oxtorrent.unblockit.uno/
@@ -47,6 +30,7 @@ legacylinks:
- https://www.oxtorrent.pl/
- https://oxtorrent.unblockit.bz/
- https://www.oxtorrent.vc/
- https://oxtorrent.unblockit.tv/
caps:
categorymappings:

View File

@@ -1,9 +1,9 @@
---
id: pier720
name: 720pier
description: "720pier is a RUSSIAN Private Torrent Tracker for HD SPORTS"
description: "720pier is a RUSSIAN Semi-Private Torrent Tracker for HD SPORTS"
language: ru-RU
type: private
type: semi-private
encoding: UTF-8
links:
- https://720pier.ru/

View File

@@ -9,12 +9,9 @@ followredirect: true
links:
- https://pirateiro.com/
- https://pirateiro.eu/
- https://pirateiro.unblockit.tv/
- https://pirateiro.unblockit.how/
legacylinks:
- http://pirateiro.com/
- https://pirateiro.unblockit.pro/
- https://pirateiro.unblockit.one/
- https://pirateiro.unblockit.me/
- https://pirateiro.unblockit.pw/
- https://pirateiro.unblockit.id/
- https://pirateiro.unblockit.win/
@@ -33,6 +30,7 @@ legacylinks:
- https://pirateiro.unblockit.ws/
- https://pirateiro.unblockit.kim/
- https://pirateiro.unblockit.bz/
- https://pirateiro.unblockit.tv/
caps:
categorymappings:

View File

@@ -145,16 +145,12 @@ search:
filters:
- name: append
args: "Language: polish\n<br>"
- name: prepend
args: "{{ .Result.description }}"
subbed:
optional: true
selector: img[src="pic/napisy.png"]
filters:
- name: append
args: "Subbed\n<br>"
- name: prepend
args: "{{ .Result.description }}"
description:
text: "{{ .Result.genre }}{{ .Result.language }}{{ .Result.subbed }}"
imdbid:

View File

@@ -1,224 +0,0 @@
---
id: pornorip
name: PornoRip
description: "PornoRip is a RUSSIAN Public Torrent Tracker for 3X"
language: ru-RU
type: public
encoding: UTF-8
links:
- https://www.pornorip.biz/
caps:
categorymappings:
- {id: 1, cat: XXX, desc: "Порно Трекер / XXX Torrent Tracker"}
- {id: 2, cat: XXX, desc: "Зарубежные порнофильмы / Pornofilms"}
- {id: 29, cat: XXX, desc: "Зарубежные порнофильмы / Pornofilms Гонзо-фильмы / Gonzo & All Sex"}
- {id: 30, cat: XXX, desc: "Зарубежные порнофильмы / Pornofilms Фильмы с сюжетом / Feature"}
- {id: 31, cat: XXX, desc: "Зарубежные порнофильмы / Pornofilms Лесбо-фильмы / Lesbo"}
- {id: 32, cat: XXX, desc: "Зарубежные порнофильмы / Pornofilms Этнические фильмы / Ethnic"}
- {id: 35, cat: XXX, desc: "Зарубежные порнофильмы / Pornofilms Эротические фильмы / Erotic & Documentary"}
- {id: 70, cat: XXX, desc: "Зарубежные порнофильмы / Pornofilms Классика / Classic Porn"}
- {id: 33, cat: XXX, desc: "Зарубежные порнофильмы / Pornofilms HD порнофильмы / HD Porn Movies"}
- {id: 10, cat: XXX, desc: "Порноролики / Porn Clips"}
- {id: 42, cat: XXX, desc: "Порноролики / Porn Clips Сайтрипы / SiteRip's"}
- {id: 43, cat: XXX, desc: "Порноролики / Porn Clips Сайтрипы HD / SiteRip's HD Video"}
- {id: 73, cat: XXX, desc: "Порноролики / Porn Clips Сайтрипы UHD / 4K UHD (2160p) Porn Video"}
- {id: 78, cat: XXX, desc: "Порноролики / Porn Clips 3D & Virtual Reality Porn Videos (VR)"}
- {id: 44, cat: XXX, desc: "Порноролики / Porn Clips Сцены из фильмов / Movie Scenes"}
- {id: 45, cat: XXX, desc: "Порноролики / Porn Clips Порноролики Разное / Various Clips"}
- {id: 40, cat: XXX, desc: "Порноролики / Porn Clips Паки сайтрипов / SiteRip's Packs"}
- {id: 41, cat: XXX, desc: "Порноролики / Porn Clips Паки по актрисам / Actresses Clips Packs"}
- {id: 3, cat: XXX, desc: "Японское порно / Japan Porn"}
- {id: 79, cat: XXX, desc: "Chinese Movies"}
- {id: 80, cat: XXX, desc: "Japanese Movies"}
- {id: 18, cat: XXX, desc: "Русское порно / Russian Porn"}
- {id: 36, cat: XXX, desc: "Русское порно / Russian Porn Русские порнофильмы / Russian Porn Films"}
- {id: 37, cat: XXX, desc: "Русское порно / Russian Porn Паки русских порнороликов / Russian Clips Packs"}
- {id: 39, cat: XXX, desc: "Русское порно / Russian Porn Русское любительское порно видео / Russian Amateur Porn Video"}
- {id: 4, cat: XXX, desc: "Эротические студии и Фотосеты, Комиксы, Журналы / Erotic, Pictures, Magazines & Comix"}
- {id: 46, cat: XXX, desc: "Эротические студии и Фотосеты, Комиксы, Журналы / Erotic, Pictures, Magazines & Comix Эротические студии видео / Erotic Video Library"}
- {id: 47, cat: XXX, desc: "Эротические студии и Фотосеты, Комиксы, Журналы / Erotic, Pictures, Magazines & Comix Эротические студии Фото / Erotic Picture Gallery"}
- {id: 48, cat: XXX, desc: "Эротические студии и Фотосеты, Комиксы, Журналы / Erotic, Pictures, Magazines & Comix Паки сайтрипов эротических студий / Erotic Picture SiteRip's"}
- {id: 49, cat: XXX, desc: "Эротические студии и Фотосеты, Комиксы, Журналы / Erotic, Pictures, Magazines & Comix Любительское фото / Amateur Picture"}
- {id: 50, cat: XXX, desc: "Эротические студии и Фотосеты, Комиксы, Журналы / Erotic, Pictures, Magazines & Comix Подборки по актрисам / Actresses Picture Packs"}
- {id: 51, cat: XXX, desc: "Эротические студии и Фотосеты, Комиксы, Журналы / Erotic, Pictures, Magazines & Comix Подборки сайтрипов / SiteRip's Picture Packs"}
- {id: 52, cat: XXX, desc: "Эротические студии и Фотосеты, Комиксы, Журналы / Erotic, Pictures, Magazines & Comix Подборки сетов / Picture Sets"}
- {id: 53, cat: XXX, desc: "Эротические студии и Фотосеты, Комиксы, Журналы / Erotic, Pictures, Magazines & Comix Нетрадиционное порно фото"}
- {id: 76, cat: XXX, desc: "Эротические студии и Фотосеты, Комиксы, Журналы / Erotic, Pictures, Magazines & Comix Комиксы и рисунки, Журналы / Magazines & Comix"}
- {id: 6, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn"}
- {id: 56, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn Бисексуалы / Bisexual"}
- {id: 57, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn Транссексуалы / Shemale Transsexual"}
- {id: 58, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn БДСМ / BDSM"}
- {id: 59, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn Женское доминирование и страпон / Femdom & Strapon"}
- {id: 60, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn Подглядывание / Voyeur"}
- {id: 61, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn Фистинг и дилдо / Fisting & Dildo"}
- {id: 62, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn Беременные / Pregnant Preggo"}
- {id: 63, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn Буккаке / Bukkake"}
- {id: 64, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn Мочеиспускание / Peeing"}
- {id: 65, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn Фетиш / Fetish"}
- {id: 66, cat: XXX, desc: "Нетрадиционное порно / Special Interest Porn Копро / Scat"}
- {id: 5, cat: XXX, desc: "Мультфильмы, Хентай и игры / Сartoons, Hentai & Games"}
- {id: 54, cat: XXX, desc: "Мультфильмы, Хентай и игры / Сartoons, Hentai & Games Хентай"}
- {id: 55, cat: XXX, desc: "Мультфильмы, Хентай и игры / Сartoons, Hentai & Games Игры"}
- {id: 74, cat: XXX, desc: "Мультфильмы, Хентай и игры / Сartoons, Hentai & GamesПорно Мультики"}
- {id: 7, cat: XXX, desc: "Гей-порно / Gay porn"}
- {id: 67, cat: XXX, desc: "Гей-порно / Gay porn Полнометражные гей-фильмы / Full Length Gay Movies"}
- {id: 68, cat: XXX, desc: "Гей-порно / Gay porn Ролики, SiteRip'ы и сцены из гей-фильмов / Gay Clips & Movie Scenes"}
- {id: 16, cat: XXX, desc: "Форум PornoRip.biz"}
- {id: 17, cat: XXX, desc: "Форум PornoRip.biz Новости Порно Индустрии"}
- {id: 69, cat: XXX, desc: "Форум PornoRip.biz Правила, инструкции, FAQ"}
- {id: 71, cat: XXX, desc: "Форум PornoRip.biz Новости трекера!"}
- {id: 72, cat: XXX, desc: "Форум PornoRip.biz Общение"}
- {id: 77, cat: XXX, desc: "Форум PornoRip.biz ОбщениеАрхив"}
modes:
search: [q]
settings:
- name: sort
type: select
label: Sort requested from site
default: t
options:
t: created
ts: seeders
sz: size
i: title
- name: type
type: select
label: Order requested from site
default: d
options:
d: desc
a: asc
search:
paths:
# https://www.pornorip.biz/search.php?tracker_search=torrent&keywords=slut&terms=all&fp=1&author=&sc=1&sf=titleonly&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search
- path: search.php
inputs:
tracker_search: torrent
keywords: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
terms: all
author: ""
sc: 1
sf: titleonly
sr: topics
sk: "{{ .Config.sort }}"
sd: "{{ .Config.type }}"
st: 0
ch: 300
t: 0
submit: Search
$raw: "{{ range .Categories }}&fid[]={{.}}{{end}}"
rows:
selector: div.forumbg > div.inner > ul.topiclist > li.row > dl.icon:has(a[href^="./download/file.php?id="])
filters:
- name: andmatch
fields:
title:
selector: a.topictitle
filters:
- name: re_replace
args: ["^\\[[\\w ]*\\]\\s?", ""]
details:
selector: a.topictitle
attribute: href
category:
selector: dt a:last-of-type
attribute: href
filters:
- name: regexp
args: "-f(\\d+).html$"
download:
selector: a[href^="./download/file.php?id="]
attribute: href
size:
selector: dt b:nth-of-type(2)
filters:
- name: replace
args: ["ТБ", "TB"]
- name: replace
args: ["ГБ", "GB"]
- name: replace
args: ["МБ", "MB"]
- name: replace
args: ["КБ", "KB"]
seeders:
selector: span.seed
leechers:
selector: span.leech
grabs:
selector: span.complet
date_day:
# Сегодня, 12:35
selector: dt:contains("Сегодня"), dt:contains("Вчера")
optional: true
filters:
- name: regexp
args: "»\\s+(.+?)\\s+в"
- name: replace
args: ["Сегодня", "Today"]
- name: replace
args: ["Вчера", "Yesterday"]
- name: fuzzytime
date_ago:
# 46 минут назад
selector: dt:contains("назад")
optional: true
filters:
- name: regexp
args: "»\\s+(.+?)\\s+в"
- name: replace
args: ["назад", "ago"]
- name: replace
args: ["секунд", "seconds"]
- name: replace
args: ["минут", "minutes"]
- name: replace
args: ["часов", "hours"]
- name: timeago
date_year:
# 12 янв 2019, 11:26
selector: dt:not(:contains("Сегодня")):not(:contains("Вчера")):not(:contains("назад"))
optional: true
filters:
- name: regexp
args: "»\\s+(.+?)\\s+в"
- name: replace
args: ["янв", "Jan"]
- name: replace
args: ["фев", "Feb"]
- name: replace
args: ["мар", "Mar"]
- name: replace
args: ["апр", "Apr"]
- name: replace
args: ["май", "May"]
- name: replace
args: ["июн", "Jun"]
- name: replace
args: ["июл", "Jul"]
- name: replace
args: ["авг", "Aug"]
- name: replace
args: ["сен", "Sep"]
- name: replace
args: ["окт", "Oct"]
- name: replace
args: ["ноя", "Nov"]
- name: replace
args: ["дек", "Dec"]
- name: append
args: " +03:00" # MSK
- name: dateparse
args: "02 Jan 2006, 15:04 -07:00"
date:
text: "{{ if or .Result.date_year .Result.date_ago .Result.date_day }}{{ or .Result.date_year .Result.date_ago .Result.date_day }}{{ else }}now{{ end }}"
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# phpBB

View File

@@ -1,191 +0,0 @@
---
id: reelflix
name: ReelFLiX
description: "ReelFLiX (HD4Free,LegacyHD) is a Private Torrent Tracker for HD MOVIES"
language: en-US
type: private
encoding: UTF-8
links:
- https://reelflix.xyz/
legacylinks:
- https://legacyhd.org/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-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: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
name: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
mediainfo: ""
keywords: ""
uploader: ""
tmdbId: "{{ .Query.TMDBID }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tvdbId: "{{ .Query.TVDBID }}"
malId: ""
startYear: ""
endYear: ""
playlistId: ""
collectionId: ""
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
grabs:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(1)
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
span.torrent-listings-global-freeleech: 0
span.torrent-listings-personal-freeleech: 0
span.torrent-listings-freeleech-token: 0
span.torrent-listings-featured: 0
span.torrent-listings-freeleech i[data-original-title*="25%"]: 0.75
span.torrent-listings-freeleech i[data-original-title*="50%"]: 0.5
span.torrent-listings-freeleech i[data-original-title*="75%"]: 0.25
span.torrent-listings-freeleech i[data-original-title*="100%"]: 0
span.torrent-listings-special-freeleech: 0
"*": 1
uploadvolumefactor:
case:
span.torrent-listings-global-double-upload: 2
span.torrent-listings-double-upload: 2
span.torrent-listings-featured: 2
span.torrent-listings-special-double-upload: 2
"*": 1
minimumratio:
text: 0.4
minimumseedtime:
# 5 days (as seconds = 5 x 24 x 60 x 60)
text: 432000
# UNIT3D 5.3.0

View File

@@ -150,6 +150,8 @@ search:
rows:
selector: tr[id^="tor_"]
filters:
- name: andmatch
fields:
category:

View File

@@ -1,228 +0,0 @@
---
id: shareisland
name: Shareisland
description: "A general italian tracker"
language: it-IT
type: private
encoding: UTF-8
links:
- https://shareisland.org/
legacylinks:
- http://shareisland.org/
- http://www.shareisland.org/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "Serie TV"}
- {id: 15, cat: Books/EBook, desc: "Ebook"}
- {id: 17, cat: Books/Mags, desc: "Riviste e Giornali"}
- {id: 19, cat: XXX, desc: "XXX"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 7, cat: PC/Games, desc: "Games"}
- {id: 23, cat: PC, desc: "Software"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-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: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
name: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
mediainfo: ""
keywords: ""
uploader: ""
tmdbId: "{{ .Query.TMDBID }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tvdbId: "{{ .Query.TVDBID }}"
malId: ""
startYear: ""
endYear: ""
playlistId: ""
collectionId: ""
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
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"]
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
filters:
- name: re_replace # replace special characters with " " (space)
args: ["[\\[!\"#$%&'()*+,\\-.\\/:;<=>?@[\\]^_`{|}~]", " "]
- name: diacritics
args: replace
- name: re_replace # replace multiple spaces
args: ["[ ]{2,}", " "]
# normalize to SXXEYY format
- name: re_replace # S01 E01 to S01E01
args: ["(?i)\\bS(\\d+)\\sE(\\d+)\\b", "S$1E$2"]
- name: re_replace # 01x01 to S01E01
args: ["(?i)(\\d{2})x(\\d+)", "S$1E$2"]
- name: re_replace # 1x01 to S01E01
args: ["(?i)\\b(\\d{1})x(\\d+)", "S0$1E$2"]
- name: re_replace # Stagione X --> S0X
args: ["(?i)\\bStagion[ei]\\s?(\\d{1})\\b|\\bSeason'?s?\\s?(\\d{1})\\b", "S0$1$2"]
- name: re_replace # Stagione XX --> SXX
args: ["(?i)\\bStagion[ei]\\s?(\\d{2,})\\b|\\bSeason'?s?\\s?(\\d{2,})\\b", "S$1$2"]
- name: re_replace # Episodio 4 to E4
args: ["(?i)\\b(?:[\\/\\|]?Episodio\\s?(\\d+)|Puntata\\s?(\\d+))", "E$1$2"]
- name: re_replace # Episodi 4 5 to E04-05
args: ["(?i)\\b(?:Puntate\\s*)(\\d+)\\s?(\\d+)", "E0$1-0$2"]
- name: re_replace # rimozioni varie
args: ["(?i)(Serie completa|Completat?a?|in pausa)", ""]
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
grabs:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(1)
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
i[class*="fa-star text-bold"]: 0 # Freeleech From Token
i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
i[class*="fa-globe text-blue"]: 0 # Global Freeleech
i[class*="fa-star text-gold"]: 0 # Freeleech
i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
"*": 1
uploadvolumefactor:
case:
i[class*="fa-gem text-green"]: 2 # Single Torrent Double Upload
i[class*="fa-globe text-green"]: 2 # Global Double Upload
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 7 day (as seconds = 7 x 24 x 60 x 60)
text: 604800
# UNIT3D 5.3.0

View File

@@ -1,183 +0,0 @@
---
id: skipthecommercials
name: SkipTheCommercials
description: "SkipTheCommercials (STC) is a Private Torrent Tracker for TV"
language: en-US
type: private
encoding: UTF-8
links:
- https://skipthecommericals.xyz/
caps:
categorymappings:
- {id: 2, cat: TV, desc: "TV Show"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
name: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
mediainfo: ""
keywords: ""
uploader: ""
tmdbId: "{{ .Query.TMDBID }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tvdbId: "{{ .Query.TVDBID }}"
malId: ""
startYear: ""
endYear: ""
playlistId: ""
collectionId: ""
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
grabs:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(1)
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
i[class*="fa-star text-bold"]: 0 # Freeleech From Token
i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
i[class*="fa-globe text-blue"]: 0 # Global Freeleech
i[class*="fa-star text-gold"]: 0 # Freeleech
i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
"*": 1
uploadvolumefactor:
case:
i[class*="fa-gem text-green"]: 2 # Single Torrent Double Upload
i[class*="fa-globe text-green"]: 2 # Global Double Upload
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
# UNIT3D 5.3.0

View File

@@ -119,6 +119,8 @@ search:
rows:
selector: tr.t-row
filters:
- name: andmatch
fields:
category:

View File

@@ -71,19 +71,13 @@ caps:
book-search: [q]
settings:
- name: username
- name: cookie
type: text
label: Username
- name: password
type: password
label: Password
- name: 2facode
type: text
label: 2FA code
- name: info_2fa
label: Cookie
- name: info
type: info
label: "About 2FA code"
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the SpiderTK Web Site. Otherwise just leave it empty."
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
@@ -110,26 +104,9 @@ settings:
asc: asc
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
method: cookie
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
two_step_code: "{{ .Config.2facode }}"
logout: ""
securelogin: ""
ssl: yes
trackerssl: ""
error:
- selector: td.embedded:has(h2:contains("Echoué")) # invalid captcha
- selector: td.embedded:has(h2:contains("Échec")) # invalid uid or pwd
message:
selector: td.text
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href="logout.php"]

View File

@@ -1,197 +0,0 @@
---
id: tellytorrent
name: TellyTorrent
description: "TellyTorrent is an INDIAN Private Tracker for MOVIES / TV"
language: en-US
type: private
encoding: UTF-8
links:
- https://telly.wtf/
legacylinks:
- https://tellytorrent.net/
- https://telly.cc/
- https://telly.to/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: Movies/WEB-DL, desc: "Web Originals"}
- {id: 5, cat: PC/Games, desc: "Games"}
- {id: 6, cat: PC/0day, desc: "Application"}
- {id: 7, cat: PC/Mobile-Other, desc: "Mobile App"}
- {id: 8, cat: Movies, desc: "Movies"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-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: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
name: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
mediainfo: ""
keywords: ""
uploader: ""
tmdbId: "{{ .Query.TMDBID }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tvdbId: "{{ .Query.TVDBID }}"
malId: ""
startYear: ""
endYear: ""
playlistId: ""
collectionId: ""
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
grabs:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(1)
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
i[class*="fa-star text-bold"]: 0 # Freeleech From Token
i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
i[class*="fa-globe text-blue"]: 0 # Global Freeleech
i[class*="fa-star text-gold"]: 0 # Freeleech
i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
"*": 1
uploadvolumefactor:
case:
i[class*="fa-gem text-green"]: 2 # Single Torrent Double Upload
i[class*="fa-globe text-green"]: 2 # Global Double Upload
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 7 day (as seconds = 7 x 24 x 60 x 60)
text: 604800
# UNIT3D 5.3.0

View File

@@ -111,6 +111,8 @@ search:
rows:
selector: table.table-bordered tr:has(a[href^="download.php?torrent="])
filters:
- name: andmatch
fields:
category:

View File

@@ -10,15 +10,10 @@ links:
- https://www.torlock.com/
- https://www.torlock2.com/
- https://www.torlock.icu/
- https://torlock.unblockit.tv/
- https://torlock.unblockit.how/
- https://torlock.nocensor.biz/
legacylinks:
- https://torlock.com/
- https://torlock.unblockit.pro/
- https://torlock.unblockit.one/
- https://torlock.unblockit.me/
- https://torlock.unblockit.pw/
- https://torlock.unblockit.id/
- https://torlock.unblockit.win/
- https://torlock.unblockit.top/
- https://torlock.unblockit.lat/
@@ -37,6 +32,7 @@ legacylinks:
- https://torlock.nocensor.work/
- https://torlock.unblockit.kim/
- https://torlock.unblockit.bz/
- https://torlock.unblockit.tv/
caps:
# dont forget to update the search fields category case block

View File

@@ -53,6 +53,8 @@ search:
rows:
selector: div.webResult:has(a.magneto[data-src])
filters:
- name: andmatch
fields:
category:

View File

@@ -6,9 +6,9 @@ language: ru-RU
type: public
encoding: UTF-8
links:
- https://torrent.by/
certificates:
- 7536f57e6640c3fce3784736994be95585a85dfb
- http://torrent.by/
legacylinks:
- https://torrent.by/ # ERR_CONNECTION_REFUSED
caps:
categories:

View File

@@ -8,23 +8,9 @@ encoding: UTF-8
followredirect: true
links:
- https://www.torrentdownload.info/
- https://torrentdownload.unblockit.tv/
- https://torrentdownload.unblockit.how/
- https://torrentdownload.nocensor.biz/
legacylinks:
- https://torrentdownload.unblockit.pro/
- https://torrentdownload.unblockit.one/
- https://torrentdownload.black-mirror.xyz/
- https://torrentdownload.unblocked.casa/
- https://torrentdownload.proxyportal.fun/
- https://torrentdownload.uk-unblock.xyz/
- https://torrentdownload.ind-unblock.xyz/
- https://torrentdownload.unblockit.me/
- https://torrentdownload.unblockit.pw/
- https://torrentdownload.unblockit.id/
- https://torrentdownload.unblockit.win/
- https://torrentdownload.unblocked.bar/
- https://torrentdownload.proxyportal.pw/
- https://torrentdownload.uk-unblock.pro/
- https://torrentdownload.unblockit.top/
- https://torrentdownload.unblockit.lat/
- https://torrentdownload.unblockit.app/
@@ -44,6 +30,7 @@ legacylinks:
- https://torrentdownload.nocensor.work/
- https://torrentdownload.unblockit.kim/
- https://torrentdownload.unblockit.bz/
- https://torrentdownload.unblockit.tv/
caps:
categorymappings:

View File

@@ -9,24 +9,9 @@ followredirect: true
links:
- https://www.torrentdownloads.info/
- https://www.torrentdownloads.pro/
- https://torrentdownloads.unblockit.tv/
- https://torrentdownloads.unblockit.how/
- https://torrentdownloads.nocensor.biz/
legacylinks:
- https://torrentdownloads.unblockit.pro/
- https://torrentdownloads.unblockit.one/
- https://torrentdownloads.black-mirror.xyz/
- https://torrentdownloads.unblocked.casa/
- https://torrentdownloads.proxyportal.fun/
- https://torrentdownloads.uk-unblock.xyz/
- https://torrentdownloads.ind-unblock.xyz/
- https://torrentdownloads.unblockit.me/
- https://torrentdownloads.unblockit.pw/
- https://torrentdownloads.unblockit.id/
- https://torrentdownloads.unblockit.win/
- https://torrentdownloads.unblocked.bar/
- https://torrentdownloads.proxyportal.pw/
- https://torrentdownloads.uk-unblock.pro/
- https://torrentdownloads.unblockit.top/
- https://torrentdownloads.unblockit.lat/
- https://torrentdownloads.unblockit.app/
- https://torrentdownloads.unblocked.rest/
@@ -46,6 +31,7 @@ legacylinks:
- https://torrentdownloads.nocensor.work/
- https://torrentdownloads.unblockit.kim/
- https://torrentdownloads.unblockit.bz/
- https://torrentdownloads.unblockit.tv/
caps:
categorymappings:

View File

@@ -9,13 +9,9 @@ followredirect: true
links:
- https://www.torrentfunk.com/
- https://www.torrentfunk2.com/
- https://torrentfunk.unblockit.tv/
- https://torrentfunk.unblockit.how/
- https://torrentfunk.nocensor.biz/
legacylinks:
- https://torrentfunk.unblockit.pro/
- https://torrentfunk.unblockit.one/
- https://torrentfunk.unblockit.me/
- https://torrentfunk.unblockit.pw/
- https://torrentfunk.unblockit.id/
- https://torrentfunk.unblockit.win/
- https://torrentfunk.unblockit.top/
@@ -35,6 +31,7 @@ legacylinks:
- https://torrentfunk.nocensor.work/
- https://torrentfunk.unblockit.kim/
- https://torrentfunk.unblockit.bz/
- https://torrentfunk.unblockit.tv/
caps:
categorymappings:

View File

@@ -11,28 +11,11 @@ links:
- https://torrentgalaxy.mx/
- https://torrentgalaxy.su/
- https://torrentgalaxy.unblockninja.com/
- https://torrentgalaxy.unblockit.tv/
- https://torrentgalaxy.unblockit.how/
- https://torrentgalaxy.nocensor.biz/
legacylinks:
- https://torrentgalaxy.org/ # redirects to *.to
- https://torrentgalaxy.unblockit.pro/
- https://torrentgalaxy.unblockit.one/
- https://tgx.black-mirror.xyz/
- https://tgx.unblocked.casa/
- https://tgx.proxyportal.fun/
- https://tgx.uk-unblock.xyz/
- https://tgx.ind-unblock.xyz/
- https://torrentgalaxy.unblockit.me/
- https://torrentgalaxy.unblockit.pw/
- https://torrentgalaxy.unblockit.id/
- https://torrentgalaxy.unblockit.win/
- https://torrentgalaxy.pw/ # proxy list only
- https://tgx.unblocked.bar/
- https://tgx.proxyportal.pw/
- https://tgx.uk-unblock.pro/
- https://torrentgalaxy.unblockit.top/
- https://torrentgalaxy.unblockit.lat/
- https://torrentgalaxy.unblockit.app/
- https://torrentgalaxy.root.yt/
- https://tgx.unblocked.rest/
- https://torrentgalaxy.unblockit.dev/
@@ -50,6 +33,7 @@ legacylinks:
- https://torrentgalaxy.nocensor.work/
- https://torrentgalaxy.unblockit.kim/
- https://torrentgalaxy.unblockit.bz/
- https://torrentgalaxy.unblockit.tv/
caps:
categorymappings:

View File

@@ -28,6 +28,8 @@ search:
rows:
selector: div.moviefilm
filters:
- name: andmatch
fields:
category:

View File

@@ -7,9 +7,8 @@ type: public
encoding: UTF-8
followredirect: true
links:
- https://torrentqq123.com/
- https://torrentqq125.com/
legacylinks:
- https://torrentqq103.com/
- https://torrentqq104.com/
- https://torrentqq105.com/
- https://torrentqq106.com/
@@ -28,6 +27,7 @@ legacylinks:
- https://torrentqq120.com/
- https://torrentqq121.com/
- https://torrentqq122.com/
- https://torrentqq123.com/
caps:
categorymappings:

View File

@@ -7,7 +7,7 @@ type: public
encoding: UTF-8
followredirect: true
links:
- https://torrentsir45.com/
- https://torrentsir46.com/
legacylinks:
- https://torrentsir31.com/
- https://torrentsir33.com/
@@ -22,6 +22,7 @@ legacylinks:
- https://torrentsir42.com/
- https://torrentsir43.com/
- https://torrentsir44.com/
- https://torrentsir45.com/
caps:
categorymappings:

View File

@@ -0,0 +1,173 @@
---
id: trackeros-api
name: Trackeros (API)
description: "Trackeros is a Private SPANISH Tracker for HD MOVIES / TV / GENERAL"
language: es-ES
type: private
encoding: UTF-8
links:
- https://trackeros.tk/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Películas"}
- {id: 2, cat: TV, desc: "Series"}
- {id: 3, cat: Audio, desc: "Musica"}
- {id: 7, cat: Audio/Video, desc: "Espectáculos"}
- {id: 8, cat: TV/Documentary, desc: "Documentales"}
- {id: 4, cat: Console, desc: "Consolas"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://trackeros.tk/\" target =_blank>Trackeros</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
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 }}"
response:
type: json
attribute: attributes
rows:
selector: data
count:
selector: meta.total
fields:
category:
selector: category
case:
Películas: 1
Series: 2
Musica: 3
Espectáculos: 7
Documentales: 8
Consolas: 4
title:
selector: name
filters:
- name: re_replace
args: ["[\\[\\]]", " "] # remove [ and ]
- name: re_replace
args: [" +", " "] # remove duplicate spaces
- name: re_replace
args: ["(?i)microhd", "BDRip MicroHD"]
- name: re_replace
args: ["(?i)(m1080p|mhd1080p)", "1080p MicroHD"]
- name: re_replace
args: ["(?i)(m720p|mhd720p)", "720p MicroHD"]
- name: re_replace
args: ["(?i)brrip", "BDRip"]
- name: re_replace # Temporada 1 to S01
args: ["(?i)\\btemporada *(\\d{1,2})\\b", "S$1"]
- name: re_replace # T1 to S01
args: ["\\bT(\\d{1,2})\\b", "S$1"]
- name: re_replace # S1 to S01 / E1 to E01
args: ["\\b([SE])(\\d)\\b", "${1}0$2"]
- name: re_replace # S01 E01 to S01E01 / T01E01 to S01E01
args: ["\\b[ST](\\d{1,2}) *E(\\d{1,2})\\b", "S$1E$2"]
- name: re_replace # S1 a S2 to S1-2
args: ["(S\\d{1,2})( a S*| A S*| a la S*| A LA S*)(\\d{1,2})", "$1-$3"]
- name: re_replace # S01E01 E02 E03 to S01E01-02-03 (2 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (3 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (4 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (5 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (6 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (7 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (8 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (9 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (10 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # 2x6 to S02E06
args: ["\\b(\\d{1,2})x(\\d{1,2})\\b", "S$1E$2"]
- name: append
args: " MULTi/SPANiSH" # Add language for Sonarr/Radarr
details:
selector: details_link
download:
selector: download_link
poster:
selector: poster
imdbid:
selector: imdb_id
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
files:
selector: num_file
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# 2021-10-18T00:34:50.000000Z"
selector: created_at
size:
selector: size
downloadvolumefactor:
# api returns 0=false, 1=true
selector: freeleech
case:
0: 1 # not free
1: 0 # freeleech
uploadvolumefactor:
# api returns 0=false, 1=true
selector: double_upload
case:
0: 1 # normal
1: 2 # double
minimumratio:
text: 0.4
minimumseedtime:
# 32 hours => 32 * 60 * 60 seconds
text: 115200
# json UNIT3D 5.3.0

View File

@@ -1,236 +0,0 @@
---
id: trackeros
name: Trackeros
description: "Trackeros is a Private SPANISH Tracker for HD MOVIES / TV / GENERAL"
language: es-ES
type: private
encoding: UTF-8
links:
- https://trackeros.tk
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Películas"}
- {id: 2, cat: TV, desc: "Series"}
- {id: 3, cat: Audio, desc: "Música"}
- {id: 4, cat: Console, desc: "Juegos"}
- {id: 8, cat: TV/Documentary, desc: "Documentales"}
- {id: 7, cat: Audio/Video, desc: "Conciertos"}
- {id: 5, cat: PC, desc: "Aplicaciones"}
- {id: 6, cat: Other, desc: "Otros"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-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: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents/filter
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
search: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
uploader: ""
imdb: "{{ .Query.IMDBIDShort }}"
tvdb: "{{ .Query.TVDBID }}"
tmdb: "{{ .Query.TMDBID }}"
mal: ""
igdb: ""
start_year: ""
end_year: ""
sorting: "{{ .Config.sort }}"
direction: "{{ .Config.type }}"
qty: 100
page: 0
view: list
freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
filters:
- name: re_replace
args: ["[\\[\\]]", " "] # remove [ and ]
- name: re_replace
args: [" +", " "] # remove duplicate spaces
- name: re_replace
args: ["(?i)microhd", "BDRip MicroHD"]
- name: re_replace
args: ["(?i)(m1080p|mhd1080p)", "1080p MicroHD"]
- name: re_replace
args: ["(?i)(m720p|mhd720p)", "720p MicroHD"]
- name: re_replace
args: ["(?i)brrip", "BDRip"]
- name: re_replace # Temporada 1 to S01
args: ["(?i)\\btemporada *(\\d{1,2})\\b", "S$1"]
- name: re_replace # T1 to S01
args: ["\\bT(\\d{1,2})\\b", "S$1"]
- name: re_replace # S1 to S01 / E1 to E01
args: ["\\b([SE])(\\d)\\b", "${1}0$2"]
- name: re_replace # S01 E01 to S01E01 / T01E01 to S01E01
args: ["\\b[ST](\\d{1,2}) *E(\\d{1,2})\\b", "S$1E$2"]
- name: re_replace # S1 a S2 to S1-2
args: ["(S\\d{1,2})( a S*| A S*| a la S*| A LA S*)(\\d{1,2})", "$1-$3"]
- name: re_replace # S01E01 E02 E03 to S01E01-02-03 (2 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (3 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (4 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (5 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (6 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (7 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (8 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (9 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # continuation (10 episodes)
args: ["([E-]\\d{1,2})( E| a E*| A E*| al E*| AL E*)(\\d{1,2})", "$1-$3"]
- name: re_replace # 2x6 to S02E06
args: ["\\b(\\d{1,2})x(\\d{1,2})\\b", "S$1E$2"]
- name: append
args: " MULTi/SPANiSH" # Add language for Sonarr/Radarr
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["&w=52&h=80", "&w=180&h=270"] # for display on dashboard
- name: replace
args: ["https://images.weserv.nl/?url=https://via.placeholder.com/52x80&w=180&h=270", ""]
size:
selector: td:nth-last-child(4)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
grabs:
selector: td:nth-last-child(1)
date:
selector: time
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
i[class*="fa-star text-bold"]: 0 # Freeleech From Token
i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
i[class*="fa-globe text-blue"]: 0 # Global Freeleech
i[class*="fa-star text-gold"]: 0 # Freeleech
i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
"*": 1
uploadvolumefactor:
case:
i[class*="fa-gem text-green"]: 2 # Single Torrent Double Upload
i[class*="fa-globe text-green"]: 2 # Global Double Upload
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
minimumratio:
text: 0.4
minimumseedtime:
# 32 hours => 32 * 60 * 60 seconds
text: 115200
# UNIT3D 4.x.x

View File

@@ -123,8 +123,14 @@ search:
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
keywordsfilters:
- name: re_replace
args: ["(\\w+)", " +$1"] # prepend + to each word
rows:
selector: table.table-bordered tr:has(a[href^="download.php?torrent="])
filters:
- name: andmatch
fields:
category:

View File

@@ -9,7 +9,7 @@ requestDelay: 2.5 # 2.5 requests per second (2 causes problems)
links:
# dont forget to update the details, download and poster replace args
- https://yts.mx/
- https://yts.unblockit.tv/
- https://yts.unblockit.how/
- https://yts.unblockninja.com/
- https://yts.nocensor.biz/
legacylinks:
@@ -31,6 +31,7 @@ legacylinks:
- https://yts.nocensor.work/
- https://yts.unblockit.kim/
- https://yts.unblockit.bz/
- https://yts.unblockit.tv/
caps:
categorymappings:

View File

@@ -81,6 +81,8 @@ search:
rows:
selector: "table[style=\"border: solid #000000 1px;\"] > tbody > tr:has(a[href^=\"takedownload.php?id=\"])"
filters:
- name: andmatch
fields:
category:

View File

@@ -9,23 +9,9 @@ followredirect: true
links:
- https://zooqle.com/
- https://zooqle.unblockninja.com/
- https://zooqle.unblockit.tv/
- https://zooqle.unblockit.how/
- https://zooqle.nocensor.biz/
legacylinks:
- https://zooqle.unblockit.pro/
- https://zooqle.unblockit.one/
- https://zooqle.black-mirror.xyz/
- https://zooqle.unblocked.casa/
- https://zooqle.proxyportal.fun/
- https://zooqle.uk-unblock.xyz/
- https://zooqle.ind-unblock.xyz/
- https://zooqle.unblockit.me/
- https://zooqle.unblockit.pw/
- https://zooqle.unblockit.id/
- https://zooqle.unblockit.win/
- https://zooqle.unblocked.bar/
- https://zooqle.proxyportal.pw/
- https://zooqle.uk-unblock.pro/
- https://zooqle.unblockit.top/
- https://zooqle.unblockit.lat/
- https://zooqle.unblockit.app/
@@ -45,6 +31,7 @@ legacylinks:
- https://zooqle.nocensor.work/
- https://zooqle.unblockit.kim/
- https://zooqle.unblockit.bz/
- https://zooqle.unblockit.tv/
caps:
categorymappings:

View File

@@ -95,28 +95,29 @@ namespace Jackett.Common.Indexers
Language = "pt-BR";
Type = "private";
AddCategoryMapping(14, TorznabCatType.TVAnime, "Anime");
AddCategoryMapping(3, TorznabCatType.PC0day, "Aplicativos");
AddCategoryMapping(8, TorznabCatType.Other, "Apostilas/Tutoriais");
AddCategoryMapping(19, TorznabCatType.AudioAudiobook, "Audiobook");
AddCategoryMapping(16, TorznabCatType.TVOther, "Desenho Animado");
AddCategoryMapping(18, TorznabCatType.TVDocumentary, "Documentários");
AddCategoryMapping(10, TorznabCatType.Books, "E-Books");
AddCategoryMapping(20, TorznabCatType.TVSport, "Esportes");
AddCategoryMapping(1, TorznabCatType.Movies, "Filmes");
AddCategoryMapping(12, TorznabCatType.MoviesOther, "Histórias em Quadrinhos");
AddCategoryMapping(5, TorznabCatType.Audio, "Músicas");
AddCategoryMapping(7, TorznabCatType.Other, "Outros");
AddCategoryMapping(9, TorznabCatType.BooksMags, "Revistas");
AddCategoryMapping(2, TorznabCatType.TV, "Seriados");
AddCategoryMapping(17, TorznabCatType.TV, "Shows");
AddCategoryMapping(13, TorznabCatType.TV, "Stand Up Comedy");
AddCategoryMapping(11, TorznabCatType.Other, "Video-Aula");
AddCategoryMapping(6, TorznabCatType.TV, "Vídeos de TV");
AddCategoryMapping(3, TorznabCatType.PC, "Aplicativos");
AddCategoryMapping(4, TorznabCatType.PCGames, "Jogos");
AddCategoryMapping(199, TorznabCatType.XXX, "Filmes Adultos");
AddCategoryMapping(200, TorznabCatType.XXX, "Jogos Adultos");
AddCategoryMapping(201, TorznabCatType.XXXImageSet, "Fotos Adultas");
AddCategoryMapping(5, TorznabCatType.BooksComics, "Mangás");
AddCategoryMapping(6, TorznabCatType.TV, "Vídeos de TV");
AddCategoryMapping(7, TorznabCatType.Other, "Outros");
AddCategoryMapping(8, TorznabCatType.TVSport, "Esportes");
AddCategoryMapping(9, TorznabCatType.BooksMags, "Revistas");
AddCategoryMapping(10, TorznabCatType.BooksEBook, "E-Books");
AddCategoryMapping(11, TorznabCatType.AudioAudiobook, "Audiobook");
AddCategoryMapping(12, TorznabCatType.BooksComics, "HQs");
AddCategoryMapping(13, TorznabCatType.TVOther, "Stand Up Comedy");
AddCategoryMapping(14, TorznabCatType.TVAnime, "Animes");
AddCategoryMapping(15, TorznabCatType.XXXImageSet, "Fotos Adultas");
AddCategoryMapping(16, TorznabCatType.TVOther, "Desenhos Animado");
AddCategoryMapping(17, TorznabCatType.TVDocumentary, "Documentários");
AddCategoryMapping(18, TorznabCatType.Other, "Cursos");
AddCategoryMapping(19, TorznabCatType.XXX, "Filmes Adultos");
AddCategoryMapping(20, TorznabCatType.XXXOther, "Jogos Adultos");
AddCategoryMapping(21, TorznabCatType.XXXOther, "Mangás Adultos");
AddCategoryMapping(22, TorznabCatType.XXXOther, "Animes Adultos");
AddCategoryMapping(23, TorznabCatType.XXXOther, "HQs Adultos");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)

View File

@@ -23,6 +23,11 @@ namespace Jackett.Common.Indexers
private new ConfigurationDataAPIKey configData => (ConfigurationDataAPIKey)base.configData;
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://danishbytes.club/",
"https://danishbytes2.org/"
};
public override string[] LegacySiteLinks { get; protected set; } = {
"https://danishbytes.org/"
};

View File

@@ -45,7 +45,7 @@ namespace Jackett.Common.Indexers
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://www.epublibre.org/",
"https://epublibre.unblockit.tv/"
"https://epublibre.unblockit.how/"
};
public override string[] LegacySiteLinks { get; protected set; } = {
@@ -63,7 +63,8 @@ namespace Jackett.Common.Indexers
"https://epublibre.unblockit.ws/",
"https://epublibre.unblockit.li/",
"https://epublibre.unblockit.kim/",
"https://epublibre.unblockit.bz/"
"https://epublibre.unblockit.bz/",
"https://epublibre.unblockit.tv/"
};
public EpubLibre(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps,

View File

@@ -38,7 +38,7 @@ namespace Jackett.Common.Indexers
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://www.mejortorrentes.net/",
"https://mejortorrent.nocensor.biz/",
"https://mejortorrent.unblockit.tv/"
"https://mejortorrent.unblockit.how/"
};
public override string[] LegacySiteLinks { get; protected set; } = {
@@ -58,7 +58,8 @@ namespace Jackett.Common.Indexers
"https://mejortorrent.nocensor.space/",
"https://www.mejortorrentes.com/",
"https://www.mejortorrento.info/",
"https://mejortorrent.nocensor.work/"
"https://mejortorrent.nocensor.work/",
"https://mejortorrent.unblockit.tv/"
};
public MejorTorrent(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps,

View File

@@ -99,14 +99,11 @@ namespace Jackett.Common.Indexers
private readonly string[] _voUrls = { "serie-vo", "serievo" };
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://atomixhq.net/",
"https://pctmix1.unblockit.tv/"
"https://atomixhq.top/",
"https://pctmix1.unblockit.how/"
};
public override string[] LegacySiteLinks { get; protected set; } = {
"http://descargas2020.com/",
"http://www.tvsinpagar.com/",
"http://torrentlocura.com/",
"https://pctnew.site",
"https://descargas2020.site",
"http://torrentrapid.com/",
@@ -115,7 +112,6 @@ namespace Jackett.Common.Indexers
"https://descargas2020.org/",
"https://pctnew.org/",
"https://pctreload.com/",
"https://pctmix1.unblockit.uno/",
"https://pctmix1.unblockit.ch/",
"https://pctmix1.unblockit.ws/",
"https://pctmix1.unblockit.li/",
@@ -126,7 +122,9 @@ namespace Jackett.Common.Indexers
"https://pctmix1.unblockit.kim/",
"https://atomixhq.com/",
"https://pctmix1.unblockit.bz/",
"https://atomixhq.one/"
"https://atomixhq.one/",
"https://pctmix1.unblockit.tv/",
"https://atomixhq.net/"
};
public NewPCT(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps,

View File

@@ -52,6 +52,17 @@ namespace Jackett.Common.Indexers
var results = await base.PerformQuery(query);
// results must contain search terms
results = results.Where(release => query.MatchQueryStringAND(release.Title));
foreach (var release in results)
{
// SecretCinema loads artist with the movie director and the gazelleTracker abstract
// places it in front of the movie separated with a dash.
// We need to strip it or Radarr will not get a title match for automatic DL
var artistEndsAt = release.Title.IndexOf(" - ");
if (artistEndsAt > -1)
{
release.Title = release.Title.Substring(artistEndsAt + 3);
}
}
return results;
}

View File

@@ -0,0 +1,727 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using AngleSharp.Html.Parser;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils;
using Newtonsoft.Json.Linq;
using NLog;
using static Jackett.Common.Models.IndexerConfig.ConfigurationData;
using WebClient = Jackett.Common.Utils.Clients.WebClient;
namespace Jackett.Common.Indexers
{
[ExcludeFromCodeCoverage]
public class TodoTorrents : BaseWebIndexer
{
private static class TodoTorrentsCatType
{
public static string Pelicula => "pelicula";
public static string Pelicula4K => "pelicula4k";
public static string Serie => "serie";
public static string SerieHD => "seriehd";
public static string Documental => "documental";
public static string Musica => "musica";
public static string Variado => "variado";
public static string Juego => "juego";
}
private const string NewTorrentsUrl = "/ultimos";
private const string SearchUrl = "/buscar/";
public override string[] AlternativeSiteLinks { get; protected set; } = {
};
public override string[] LegacySiteLinks { get; protected set; } = {
"https://todotorrents.net"
};
private static Dictionary<string, string> CategoriesMap => new Dictionary<string, string>
{
{ "/pelicula/", TodoTorrentsCatType.Pelicula },
{ "/serie/", TodoTorrentsCatType.Serie },
{ "/documental", TodoTorrentsCatType.Documental },
{ "/musica/", TodoTorrentsCatType.Musica },
{ "/variado/", TodoTorrentsCatType.Variado },
{ "/juego/", TodoTorrentsCatType.Juego } //games, it can be pc or console
};
public TodoTorrents(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps,
ICacheService cs)
: base(id: "todotorrents",
name: "TodoTorrents",
description: "TodoTorrents is a SPANISH public tracker for MOVIES / TV / GENERAL",
link: "https://todotorrents.net/",
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,
}
},
configService: configService,
client: w,
logger: l,
p: ps,
cacheService: cs,
configData: new ConfigurationData())
{
Encoding = Encoding.UTF8;
Language = "es-ES";
Type = "public";
var matchWords = new BoolConfigurationItem("Match words in title") { Value = true };
configData.AddDynamic("MatchWords", matchWords);
//configData.AddDynamic("flaresolverr", new DisplayInfoConfigurationItem("FlareSolverr", "This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href=\"https://github.com/Jackett/Jackett#configuring-flaresolverr\" target=\"_blank\">FlareSolver</a> to access it."));
AddCategoryMapping(TodoTorrentsCatType.Pelicula, TorznabCatType.Movies, "Pelicula");
AddCategoryMapping(TodoTorrentsCatType.Pelicula4K, TorznabCatType.MoviesUHD, "Peliculas 4K");
AddCategoryMapping(TodoTorrentsCatType.Serie, TorznabCatType.TVSD, "Serie");
AddCategoryMapping(TodoTorrentsCatType.SerieHD, TorznabCatType.TVHD, "Serie HD");
AddCategoryMapping(TodoTorrentsCatType.Musica, TorznabCatType.Audio, "Música");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
LoadValuesFromJson(configJson);
var releases = await PerformQuery(new TorznabQuery());
await ConfigureIfOK(string.Empty, releases.Any(), () =>
throw new Exception("Could not find releases from this URL"));
return IndexerConfigurationStatus.Completed;
}
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
var matchWords = ((BoolConfigurationItem)configData.GetDynamic("MatchWords")).Value;
matchWords = query.SearchTerm != "" && matchWords;
// we remove parts from the original query
query = ParseQuery(query);
var releases = string.IsNullOrEmpty(query.SearchTerm) ?
await PerformQueryNewest(query) :
await PerformQuerySearch(query, matchWords);
return releases;
}
public override async Task<byte[]> Download(Uri link)
{
var downloadUrl = link.ToString();
if (downloadUrl.Contains("cdn.pizza"))
{
return await base.Download(link);
}
var parser = new HtmlParser();
// Eg https://todotorrents.net/pelicula/24797/Halloween-Kills
var result = await RequestWithCookiesAsync(downloadUrl);
if (result.Status != HttpStatusCode.OK)
throw new ExceptionWithConfigData(result.ContentString, configData);
var dom = parser.ParseDocument(result.ContentString);
//var info = dom.QuerySelectorAll("div.descargar > div.card > div.card-body").First();
//var title = info.QuerySelector("h2.descargarTitulo").TextContent;
var dlStr = dom.QuerySelector("div.text-center > p > a");
//dl site starts with "//cdn.pizza" and they accept https so use it
downloadUrl = dlStr != null ? string.Format("https:{0}", dlStr.GetAttribute("href")) : "";
var content = await base.Download(new Uri(downloadUrl));
return content;
}
private async Task<List<ReleaseInfo>> PerformQueryNewest(TorznabQuery query)
{
var releases = new List<ReleaseInfo>();
var url = SiteLink + NewTorrentsUrl;
var result = await RequestWithCookiesAsync(url);
if (result.Status != HttpStatusCode.OK)
throw new ExceptionWithConfigData(result.ContentString, configData);
logger.Debug("\naaa");
try
{
var searchResultParser = new HtmlParser();
var doc = searchResultParser.ParseDocument(result.ContentString);
var rows = doc.QuerySelector("div.seccion#ultimos_torrents > div.card > div.card-body > div");
var parsedDetailsLink = new List<string>();
string rowTitle = null;
string rowDetailsLink = null;
string rowPublishDate = null;
string rowQuality = null;
foreach (var row in rows.Children)
{
if (row.TagName.Equals("DIV"))
{
//div class="h5 text-dark">PELÍCULAS:</div>
continue;
}
//<span class="text-muted">2022-01-12</span>
//<a href='pelicula/24797/Halloween-Kills' class="text-primary">Halloween Kills</a>
//<span class="text-muted">(MicroHD-1080p)</span>
if (row.TagName.Equals("A"))
{
rowTitle = row.TextContent;
rowDetailsLink = SiteLink + row.GetAttribute("href");
}
if (row.TagName.Equals("SPAN"))
{
if (DateTime.TryParse(row.TextContent, out var publishDate))
{
rowPublishDate = publishDate.ToString();
}
//quality
if (Regex.IsMatch(row.TextContent, "([()])"))
{
rowQuality = row.TextContent;
}
}
if (row.TagName.Equals("BR"))
{
// we add parsed items to rowDetailsLink to avoid duplicates in newest torrents
// list results
if (!parsedDetailsLink.Contains(rowDetailsLink) && rowTitle != null)
{
var cat = GetCategoryFromURL(rowDetailsLink);
switch (cat)
{
case "pelicula":
case "serie":
case "musica":
await ParseRelease(releases, rowDetailsLink, rowTitle, cat, rowQuality, query, false);
parsedDetailsLink.Add(rowDetailsLink);
break;
default:
break;
}
// clean the current row
rowTitle = null;
rowDetailsLink = null;
rowPublishDate = null;
rowQuality = null;
}
}
}
}
catch (Exception ex)
{
OnParseError(result.ContentString, ex);
}
return releases;
}
private async Task<List<ReleaseInfo>> PerformQuerySearch(TorznabQuery query, bool matchWords)
{
var releases = new List<ReleaseInfo>();
// search only the longest word, we filter the results later
var searchTerm = GetLongestWord(query.SearchTerm);
var url = SiteLink + SearchUrl + searchTerm;
var result = await RequestWithCookiesAsync(url);
if (result.Status != HttpStatusCode.OK)
throw new ExceptionWithConfigData(result.ContentString, configData);
try
{
var searchResultParser = new HtmlParser();
var doc = searchResultParser.ParseDocument(result.ContentString);
var rows = doc.QuerySelectorAll("div.seccion#buscador > div.card > div.card-body > p");
if (rows.First().TextContent.Contains("Introduce alguna palabra para buscar con al menos 2 letras."))
{
return releases; //no enough search terms
}
foreach (var row in rows.Skip(2))
{
//href=/pelicula/6981/Saga-Spiderman
var link = string.Format("{0}{1}", SiteLink.TrimEnd('/'), row.QuerySelector("p > span > a").GetAttribute("href"));
var title = row.QuerySelector("p > span > a").TextContent;
var cat = GetCategory(title, link);
var quality = "";
switch (GetCategoryFromURL(link))
{
case "pelicula":
case "serie":
quality = Regex.Replace(row.QuerySelector("p > span > span").TextContent, "([()])", "");
break;
}
switch (cat)
{
case "pelicula":
case "pelicula4k":
case "serie":
case "seriehd":
case "musica":
await ParseRelease(releases, link, title, cat, quality, query, matchWords);
break;
default: //ignore different categories
break;
}
}
}
catch (Exception ex)
{
OnParseError(result.ContentString, ex);
}
return releases;
}
private async Task ParseRelease(ICollection<ReleaseInfo> releases, string link, string title, string category, string quality, TorznabQuery query, bool matchWords)
{
// Remove trailing dot if there's one.
title = title.Trim();
if (title.EndsWith("."))
title = title.Remove(title.Length - 1).Trim();
//There's no public publishDate
//var publishDate = TryToParseDate(publishStr, DateTime.Now);
// return results only for requested categories
if (query.Categories.Any() && !query.Categories.Contains(MapTrackerCatToNewznab(category).First()))
return;
// match the words in the query with the titles
if (matchWords && !CheckTitleMatchWords(query.SearchTerm, title))
return;
switch (category)
{
case "pelicula":
case "pelicula4k":
await ParseMovieRelease(releases, link, query, title, quality);
break;
case "serie":
case "seriehd":
await ParseSeriesRelease(releases, link, query, title, quality);
break;
case "musica":
await ParseMusicRelease(releases, link, query, title);
break;
default:
break;
}
}
private async Task ParseMusicRelease(ICollection<ReleaseInfo> releases, string link, TorznabQuery query, string title)
{
var result = await RequestWithCookiesAsync(link);
if (result.Status != HttpStatusCode.OK)
throw new ExceptionWithConfigData(result.ContentString, configData);
var searchResultParser = new HtmlParser();
var doc = searchResultParser.ParseDocument(result.ContentString);
var data = doc.QuerySelector("div.descargar > div.card > div.card-body");
//var _title = data.QuerySelector("h2.descargarTitulo").TextContent;
//var data2 = data.QuerySelectorAll("div.d-inline-block > p");
//var yearStr = data2[0].TextContent;
var data3 = data.QuerySelectorAll("div.text-center > div.d-inline-block");
var publishStr = data3[0].TextContent; //"Fecha: {0}" -- needs trimming
var sizeStr = data3[1].TextContent; //"Tamaño: {0}" -- needs trimming, contains number of episodes available
var publishDate = TryToParseDate(publishStr, DateTime.Now);
var size = ReleaseInfo.GetBytes(sizeStr);
var release = GenerateRelease(title, link, link, GetCategory(title, link), publishDate, size);
releases.Add(release);
}
private async Task ParseSeriesRelease(ICollection<ReleaseInfo> releases, string link, TorznabQuery query, string title, string quality)
{
var result = await RequestWithCookiesAsync(link);
if (result.Status != HttpStatusCode.OK)
throw new ExceptionWithConfigData(result.ContentString, configData);
var searchResultParser = new HtmlParser();
var doc = searchResultParser.ParseDocument(result.ContentString);
var data = doc.QuerySelector("div.descargar > div.card > div.card-body");
//var _title = data.QuerySelector("h2.descargarTitulo").TextContent;
//var data2 = data.QuerySelectorAll("div.d-inline-block > p");
//var quality = data2[0].TextContent; //"Formato: {0}" -- needs trimming
//var episodes = data2[1].TextContent; //"Episodios: {0}" -- needs trimming, contains number of episodes available
var data3 = data.QuerySelectorAll("div.d-inline-block > table.table > tbody > tr");
foreach (var row in data3)
{
var episodeData = row.QuerySelectorAll("td");
var episodeTitle = episodeData[0].TextContent; //it may contain two episodes divided by '&', eg '1x01 & 1x02'
var downloadLink = "https:" + episodeData[1].QuerySelector("a").GetAttribute("href"); // URL like "//cdn.pizza/"
var episodePublishStr = episodeData[2].TextContent;
var episodePublish = TryToParseDate(episodePublishStr, DateTime.Now);
// Convert the title to Scene format
episodeTitle = ParseSeriesTitle(title, episodeTitle, query);
// if the original query was in scene format, we filter the results to match episode
// query.Episode != null means scene title
if (query.Episode != null && !episodeTitle.Contains(query.GetEpisodeSearchString()))
continue;
// guess size
var size = 536870912L; // 512 MB
if (episodeTitle.ToLower().Contains("720p"))
size = 1073741824L; // 1 GB
if (episodeTitle.ToLower().Contains("1080p"))
size = 4294967296L; // 4 GB
size *= GetEpisodeCountFromTitle(episodeTitle);
var release = GenerateRelease(episodeTitle, link, downloadLink, GetCategory(title, link), episodePublish, size);
releases.Add(release);
}
}
private async Task ParseMovieRelease(ICollection<ReleaseInfo> releases, string link, TorznabQuery query, string title, string quality)
{
title = title.Trim();
var result = await RequestWithCookiesAsync(link);
if (result.Status != HttpStatusCode.OK)
throw new ExceptionWithConfigData(result.ContentString, configData);
var searchResultParser = new HtmlParser();
var doc = searchResultParser.ParseDocument(result.ContentString);
// parse tags in title, we need to put the year after the real title (before the tags)
// Harry Potter And The Deathly Hallows: Part 1 [subs. Integrados]
var tags = "";
var queryMatches = Regex.Matches(title, @"[\[\(]([^\]\)]+)[\]\)]", RegexOptions.IgnoreCase);
foreach (Match m in queryMatches)
{
var tag = m.Groups[1].Value.Trim().ToUpper();
if (tag.Equals("4K")) // Fix 4K quality. Eg Harry Potter Y La Orden Del Fénix [4k]
quality = "(UHD 4K 2160p)";
else if (tag.Equals("FULLBLURAY")) // Fix 4K quality. Eg Harry Potter Y El Cáliz De Fuego (fullbluray)
quality = "(COMPLETE BLURAY)";
else // Add the tag to the title
tags += " " + tag;
title = title.Replace(m.Groups[0].Value, "");
}
title = title.Trim();
// clean quality
if (quality != null)
{
var queryMatch = Regex.Match(quality, @"[\[\(]([^\]\)]+)[\]\)]", RegexOptions.IgnoreCase);
if (queryMatch.Success)
quality = queryMatch.Groups[1].Value;
quality = quality.Trim().Replace("-", " ");
quality = Regex.Replace(quality, "HDRip", "BDRip", RegexOptions.IgnoreCase); // fix for Radarr
}
// add the year
title = query.Year != null ? title + " " + query.Year : title;
// add the tags
title += tags;
// add spanish
title += " SPANISH";
// add quality
if (quality != null)
title += " " + quality;
var info = doc.QuerySelectorAll("div.descargar > div.card > div.card-body").First();
var moreinfo = info.QuerySelectorAll("div.text-center > div.d-inline-block");
long size = 0;
if (moreinfo.Length == 2)
{
size = ReleaseInfo.GetBytes(moreinfo[1].QuerySelector("p").TextContent);
}
var release = GenerateRelease(title, link, link, GetCategory(title, link), DateTime.Now, size);
releases.Add(release);
}
private ReleaseInfo GenerateRelease(string title, string link, string downloadLink, string cat,
DateTime publishDate, long size)
{
var dl = new Uri(downloadLink);
var _link = new Uri(link);
var release = new ReleaseInfo
{
Title = title,
Details = _link,
Link = dl,
Guid = dl,
Category = MapTrackerCatToNewznab(cat),
PublishDate = publishDate,
Size = size,
Files = 1,
Seeders = 1,
Peers = 2,
DownloadVolumeFactor = 0,
UploadVolumeFactor = 1
};
return release;
}
private static bool CheckTitleMatchWords(string queryStr, string title)
{
// this code split the words, remove words with 2 letters or less, remove accents and lowercase
var queryMatches = Regex.Matches(queryStr, @"\b[\w']*\b");
var queryWords = from m in queryMatches.Cast<Match>()
where !string.IsNullOrEmpty(m.Value) && m.Value.Length > 2
select Encoding.UTF8.GetString(Encoding.GetEncoding("ISO-8859-8").GetBytes(m.Value.ToLower()));
var titleMatches = Regex.Matches(title, @"\b[\w']*\b");
var titleWords = from m in titleMatches.Cast<Match>()
where !string.IsNullOrEmpty(m.Value) && m.Value.Length > 2
select Encoding.UTF8.GetString(Encoding.GetEncoding("ISO-8859-8").GetBytes(m.Value.ToLower()));
titleWords = titleWords.ToArray();
return queryWords.All(word => titleWords.Contains(word));
}
private static TorznabQuery ParseQuery(TorznabQuery query)
{
// Eg. Marco.Polo.2014.S02E08
// the season/episode part is already parsed by Jackett
// query.SanitizedSearchTerm = Marco.Polo.2014.
// query.Season = 2
// query.Episode = 8
var searchTerm = query.SanitizedSearchTerm;
// replace punctuation symbols with spaces
// searchTerm = Marco Polo 2014
searchTerm = Regex.Replace(searchTerm, @"[-._\(\)@/\\\[\]\+\%]", " ");
searchTerm = Regex.Replace(searchTerm, @"\s+", " ");
searchTerm = searchTerm.Trim();
// we parse the year and remove it from search
// searchTerm = Marco Polo
// query.Year = 2014
var r = new Regex("([ ]+([0-9]{4}))$", RegexOptions.IgnoreCase);
var m = r.Match(searchTerm);
if (m.Success)
{
query.Year = int.Parse(m.Groups[2].Value);
searchTerm = searchTerm.Replace(m.Groups[1].Value, "");
}
// remove some words
searchTerm = Regex.Replace(searchTerm, @"\b(espa[ñn]ol|spanish|castellano|spa)\b", "", RegexOptions.IgnoreCase);
query.SearchTerm = searchTerm;
return query;
}
private static string ParseSeriesTitle(string title, string episodeTitle, TorznabQuery query)
{
// parse title
// title = The Mandalorian - 1ª Temporada
// title = The Mandalorian - 1ª Temporada [720p]
// title = Grace and Frankie - 5ª Temporada [720p]: 5x08 al 5x13.
var newTitle = title.Split(new[] { " - " }, StringSplitOptions.RemoveEmptyEntries)[0].Trim();
// newTitle = The Mandalorian
// parse episode title
var newEpisodeTitle = episodeTitle.Trim();
// episodeTitle = 5x08 al 5x13.
// episodeTitle = 2x01 - 2x02 - 2x03.
var matches = Regex.Matches(newEpisodeTitle, "([0-9]+)x([0-9]+)", RegexOptions.IgnoreCase);
if (matches.Count > 1)
{
newEpisodeTitle = "";
foreach (Match m in matches)
if (newEpisodeTitle.Equals(""))
newEpisodeTitle += "S" + m.Groups[1].Value.PadLeft(2, '0')
+ "E" + m.Groups[2].Value.PadLeft(2, '0');
else
newEpisodeTitle += "-E" + m.Groups[2].Value.PadLeft(2, '0');
// newEpisodeTitle = S05E08-E13
// newEpisodeTitle = S02E01-E02-E03
}
else
{
// episodeTitle = 1x04 - 05.
var m = Regex.Match(newEpisodeTitle, "^([0-9]+)x([0-9]+)[^0-9]+([0-9]+)[.]?$", RegexOptions.IgnoreCase);
if (m.Success)
newEpisodeTitle = "S" + m.Groups[1].Value.PadLeft(2, '0')
+ "E" + m.Groups[2].Value.PadLeft(2, '0') + "-"
+ "E" + m.Groups[3].Value.PadLeft(2, '0');
// newEpisodeTitle = S01E04-E05
else
{
// episodeTitle = 1x02
// episodeTitle = 1x02 -
// episodeTitle = 1x08 - CONTRASEÑA: WWW.PCTNEW ORG bebe
m = Regex.Match(newEpisodeTitle, "^([0-9]+)x([0-9]+)(.*)$", RegexOptions.IgnoreCase);
if (m.Success)
{
newEpisodeTitle = "S" + m.Groups[1].Value.PadLeft(2, '0')
+ "E" + m.Groups[2].Value.PadLeft(2, '0');
// newEpisodeTitle = S01E02
if (!m.Groups[3].Value.Equals(""))
newEpisodeTitle += " " + m.Groups[3].Value.Replace(" -", "").Trim();
// newEpisodeTitle = S01E08 CONTRASEÑA: WWW.PCTNEW ORG bebe
}
}
}
// if the original query was in scene format, we have to put the year back
// query.Episode != null means scene title
var year = query.Episode != null && query.Year != null ? " " + query.Year : "";
newTitle += year + " " + newEpisodeTitle;
newTitle += " SPANISH";
// multilanguage
if (title.ToLower().Contains("ES-EN"))
newTitle += " ENGLISH";
//quality
if (title.ToLower().Contains("720p"))
newTitle += " 720p";
else if (title.ToLower().Contains("1080p"))
newTitle += " 1080p";
else
newTitle += " SDTV";
if (title.ToLower().Contains("HDTV"))
newTitle += " HDTV";
if (title.ToLower().Contains("x265"))
newTitle += " x265";
else
newTitle += " x264";
// return The Mandalorian S01E04 SPANISH 720p HDTV x264
return newTitle;
}
public static int GetEpisodeCountFromTitle(string title)
{
var matches = Regex.Matches(title, "E[0-9+]");
var count = matches.Count;
if (count == 0)
return 0; //no episodes in title
//eg E1-E9
if (count == 2)
{
var first = title.Substring(matches[0].Index, matches[1].Index - matches[0].Index - 1);
var last = title.Substring(matches[1].Index, 3); //"Exx"
if (first.StartsWith("E") && last.StartsWith("E"))
{
var first_ep = int.Parse(first.Substring(1, 2));
var last_ep = int.Parse(last.Substring(1, 2));
return last_ep - first_ep + 1; //E01-E03 -> 3 episodes
}
}
return count;
}
public static string GetCategory(string title, string url)
{
var cat = GetCategoryFromURL(url);
switch (cat)
{
case "pelicula":
case "pelicula4k":
if (title.Contains("4K"))
{
cat = TodoTorrentsCatType.Pelicula4K;
}
break;
case "serie":
case "seriehd":
if (title.Contains("720p") || title.Contains("1080p"))
{
cat = TodoTorrentsCatType.SerieHD;
}
break;
default:
break;
}
return cat;
}
public static string GetCategoryFromURL(string url)
{
return CategoriesMap
.Where(categoryMap => url.Contains(categoryMap.Key))
.Select(categoryMap => categoryMap.Value)
.FirstOrDefault();
}
private static string GetLongestWord(string text)
{
var words = text.Split(' ');
if (!words.Any())
return null;
var longestWord = words.First();
foreach (var word in words)
if (word.Length >= longestWord.Length)
longestWord = word;
return longestWord;
}
private static DateTime TryToParseDate(string dateToParse, DateTime dateDefault)
{
try
{
return DateTime.ParseExact(dateToParse, "yyyy-MM-dd", CultureInfo.InvariantCulture);
}
catch
{
// ignored
}
return dateDefault;
}
}
}

View File

@@ -20,6 +20,7 @@ namespace Jackett.Common.Models.Config
// Sonarr 15min, Radarr 60min, LazyLibrarian 20min, Readarr 15min, Lidarr = 15min
CacheTtl = 2100; // 35 minutes is a reasonable value for all of them and to avoid race conditions
CacheMaxResultsPerIndexer = 1000;
FlareSolverrMaxTimeout = 55000;
RuntimeSettings = runtimeSettings;
}
@@ -43,6 +44,7 @@ namespace Jackett.Common.Models.Config
public long CacheTtl { get; set; }
public long CacheMaxResultsPerIndexer { get; set; }
public string FlareSolverrUrl { get; set; }
public int FlareSolverrMaxTimeout { get; set; }
public string OmdbApiKey { get; set; }
public string OmdbApiUrl { get; set; }

View File

@@ -36,6 +36,8 @@ namespace Jackett.Common.Models.DTO
[DataMember]
public string flaresolverrurl { get; set; }
[DataMember]
public int flaresolverr_maxtimeout { get; set; }
[DataMember]
public string omdbkey { get; set; }
[DataMember]
public string omdburl { get; set; }
@@ -73,6 +75,7 @@ namespace Jackett.Common.Models.DTO
cache_ttl = config.CacheTtl;
cache_max_results_per_indexer = config.CacheMaxResultsPerIndexer;
flaresolverrurl = config.FlareSolverrUrl;
flaresolverr_maxtimeout = config.FlareSolverrMaxTimeout;
omdbkey = config.OmdbApiKey;
omdburl = config.OmdbApiUrl;
app_version = version;

View File

@@ -77,7 +77,7 @@ namespace Jackett.Common.Utils.Clients
using (var clearanceHandlr = new ClearanceHandler(serverConfig.FlareSolverrUrl))
{
clearanceHandlr.MaxTimeout = 55000;
clearanceHandlr.MaxTimeout = serverConfig.FlareSolverrMaxTimeout;
clearanceHandlr.ProxyUrl = serverConfig.GetProxyUrl(false);
using (var clientHandlr = new HttpClientHandler
{

View File

@@ -56,7 +56,7 @@ namespace Jackett.Common.Utils.Clients
{
clearanceHandlr = new ClearanceHandler(serverConfig.FlareSolverrUrl)
{
MaxTimeout = 55000,
MaxTimeout = serverConfig.FlareSolverrMaxTimeout,
ProxyUrl = serverConfig.GetProxyUrl(false)
};
clientHandlr = new HttpClientHandler

View File

@@ -0,0 +1,23 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
namespace Jackett.Server.Controllers
{
[AllowAnonymous]
[Route("health")]
public class HealthcheckController : Controller
{
[HttpGet]
[HttpHead]
public Task<IActionResult> Health()
{
var jsonReply = new JObject
{
["status"] = "OK"
};
return Task.FromResult<IActionResult>(Json(jsonReply));
}
}
}

View File

@@ -113,7 +113,8 @@ namespace Jackett.Server.Controllers
serverConfig.RuntimeSettings.BasePath = serverService.BasePath();
configService.SaveConfig(serverConfig);
if (config.flaresolverrurl != serverConfig.FlareSolverrUrl)
if (config.flaresolverrurl != serverConfig.FlareSolverrUrl ||
config.flaresolverr_maxtimeout != serverConfig.FlareSolverrMaxTimeout)
{
if (string.IsNullOrWhiteSpace(config.flaresolverrurl))
config.flaresolverrurl = "";
@@ -121,7 +122,11 @@ namespace Jackett.Server.Controllers
|| !(uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps))
throw new Exception("FlareSolverr API URL is invalid. Example: http://127.0.0.1:8191");
if (config.flaresolverr_maxtimeout < 5000)
throw new Exception("FlareSolverr Max Timeout must be greater than 5000 ms.");
serverConfig.FlareSolverrUrl = config.flaresolverrurl;
serverConfig.FlareSolverrMaxTimeout = config.flaresolverr_maxtimeout;
configService.SaveConfig(serverConfig);
webHostRestartNeeded = true;
}

View File

@@ -261,9 +261,10 @@ namespace Jackett.Updater
"Definitions/angietorrents.yml",
"Definitions/academictorrents.yml",
"Definitions/alein.yml",
"Definitions/aither.yml", // switch to *-API #8682
"Definitions/alexfilm.yml",
"Definitions/alleenretail.yml",
"Definitions/anidex.yml", // migrated to C#
"Definitions/animeworld.yml", // switch to *-API #8682
"Definitions/aox.yml",
"Definitions/apollo.yml", // migrated to C# gazelle base tracker
"Definitions/archetorrent.yml",
@@ -281,7 +282,9 @@ namespace Jackett.Updater
"Definitions/bitme.yml",
"Definitions/bittorrentam.yml",
"Definitions/blubits.yml",
"Definitions/blutopia.yml", // switch to *-API #8682
"Definitions/brobits.yml",
"Definitions/brsociety.yml", // switch to *-API #8682
"Definitions/bt-scene.yml",
"Definitions/btbit.yml",
"Definitions/btdb.yml",
@@ -302,8 +305,10 @@ namespace Jackett.Updater
"Definitions/darmowetorenty.yml", // migrated to C#
"Definitions/danishbytes.yml", // migrated to C#
"Definitions/DasUnerwartete.yml",
"Definitions/datascene.yml", // switch to *-API #8682
"Definitions/demonsite.yml",
"Definitions/desireleasers.yml",
"Definitions/desitorrents.yml", // switch to *-API #8682
"Definitions/devils-playground.yml",
"Definitions/devilsplayground.yml",
"Definitions/digbt.yml",
@@ -409,15 +414,18 @@ namespace Jackett.Updater
"Definitions/onlineselfeducation.yml",
"Definitions/onlyscene.yml",
"Definitions/obscure.yml",
"Definitions/oncesearch.yml",
"Definitions/passionetorrent.yml",
"Definitions/pleasuredome.yml",
"Definitions/polishtracker.yml",
"Definitions/pornorip.yml",
"Definitions/pt99.yml",
"Definitions/qctorrent.yml",
"Definitions/qxr.yml",
"Definitions/rapidetracker.yml",
"Definitions/rarbg.yml", // migrated to C#
"Definitions/redtopia.yml",
"Definitions/reelflix.yml", // switch to *-API #8682
"Definitions/renegade.yml",
"Definitions/retroflix.yml", // migrated to C#
"Definitions/rgu.yml",
@@ -434,11 +442,13 @@ namespace Jackett.Updater
"Definitions/secretcinema.yml", // migrated to C# gazelle base tracker
"Definitions/seedpeer.yml",
"Definitions/sharefiles.yml",
"Definitions/shareisland.yml", // switch to *-API #8682
"Definitions/sharespacedb.yml",
"Definitions/shareuniversity.yml",
"Definitions/sharingue.yml",
"Definitions/shellife.yml",
"Definitions/shokweb.yml",
"Definitions/skipthecommercials.yml", // switch to *-API #8682
"Definitions/skytorrents.yml",
"Definitions/skytorrents-lol.yml",
"Definitions/skytorrents-to.yml",
@@ -454,6 +464,7 @@ namespace Jackett.Updater
"Definitions/tenyardtracker.yml", // to be migrated to c#, #795
"Definitions/tbplus.yml",
"Definitions/tehconnection.yml",
"Definitions/tellytorrent.yml", // switch to *-API #8682
"Definitions/tfile.yml",
"Definitions/the-madhouse.yml",
"Definitions/themoviecave.yml",
@@ -486,6 +497,7 @@ namespace Jackett.Updater
"Definitions/torrentz2k.yml",
"Definitions/torrof.yml",
"Definitions/torviet.yml",
"Definitions/trackeros.yml", // switch to *-API #12807
"Definitions/tspate.yml",
"Definitions/ttobogo.yml",
"Definitions/turknova.yml",