mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-15 00:14:10 +02:00
Compare commits
55 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
212e03ec7f | ||
![]() |
56a2b7f2a0 | ||
![]() |
a23b6fc673 | ||
![]() |
b90f15b37f | ||
![]() |
1299a1aa72 | ||
![]() |
e524572af3 | ||
![]() |
533ecae219 | ||
![]() |
a3d3456f41 | ||
![]() |
e19e3e820b | ||
![]() |
e7859b2db5 | ||
![]() |
98c5c2f149 | ||
![]() |
11e4fce764 | ||
![]() |
fe3dc0f766 | ||
![]() |
a7cd5e442e | ||
![]() |
650cc8bb9a | ||
![]() |
5b357e6019 | ||
![]() |
50bdadc18d | ||
![]() |
dfc27a7434 | ||
![]() |
4aec424e0a | ||
![]() |
ad86088b3c | ||
![]() |
a101eec991 | ||
![]() |
f1c6dca9bf | ||
![]() |
bd13e1256f | ||
![]() |
c01b8a3a33 | ||
![]() |
7ac6c43040 | ||
![]() |
1f0751f634 | ||
![]() |
c6b575b79c | ||
![]() |
8e4d797d1b | ||
![]() |
fa5bf831f6 | ||
![]() |
ae33faa652 | ||
![]() |
bac28c0302 | ||
![]() |
271f4d45e5 | ||
![]() |
53c61453a6 | ||
![]() |
6a15031197 | ||
![]() |
e5c19c246c | ||
![]() |
3a184f41a2 | ||
![]() |
ec42b35aba | ||
![]() |
d4bd5d747d | ||
![]() |
ef40af260b | ||
![]() |
b17c2482d0 | ||
![]() |
67db83ac07 | ||
![]() |
6e9ed2973f | ||
![]() |
23a01eb8d2 | ||
![]() |
23891d5cba | ||
![]() |
03df949e4f | ||
![]() |
82d97331c9 | ||
![]() |
1265a6aa53 | ||
![]() |
73aea6f5ff | ||
![]() |
aaf7b7d9e0 | ||
![]() |
af5c32e3aa | ||
![]() |
41f66b15b4 | ||
![]() |
9b67eef230 | ||
![]() |
caeeb8cde2 | ||
![]() |
5d99a7c90b | ||
![]() |
de6949f303 |
1
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
1
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -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
|
||||
|
10
.github/ISSUE_TEMPLATE/indexer-request.yml
vendored
10
.github/ISSUE_TEMPLATE/indexer-request.yml
vendored
@@ -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
|
||||
|
@@ -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>
|
||||
|
||||
|
12
README.md
12
README.md
@@ -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.
|
||||
|
@@ -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;
|
||||
|
@@ -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,
|
||||
|
@@ -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;
|
||||
|
@@ -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>
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
186
src/Jackett.Common/Definitions/alleenretail.yml
Normal file
186
src/Jackett.Common/Definitions/alleenretail.yml
Normal 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
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
@@ -126,6 +126,8 @@ search:
|
||||
|
||||
rows:
|
||||
selector: table.torrent tr.torrent
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -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:
|
||||
|
@@ -101,6 +101,8 @@ search:
|
||||
|
||||
rows:
|
||||
selector: table > tbody#highlighted > tr:has(a[href^="browse.php?cat="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -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:
|
||||
|
@@ -119,6 +119,8 @@ search:
|
||||
|
||||
rows:
|
||||
selector: table.table-bordered tr:has(a[href^="download.php?torrent="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -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
|
@@ -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
|
@@ -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)
|
||||
|
@@ -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)
|
@@ -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:
|
||||
|
@@ -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)
|
@@ -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]
|
||||
|
@@ -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"}
|
||||
|
@@ -155,6 +155,8 @@ search:
|
||||
|
||||
rows:
|
||||
selector: tr[id^="tor_"]:has(a[href^="./dl.php?id="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
title:
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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:
|
||||
|
@@ -98,6 +98,8 @@ search:
|
||||
|
||||
rows:
|
||||
selector: table.main > tbody > tr:has(a[href^="/lataa.php/"])
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -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:
|
||||
|
118
src/Jackett.Common/Definitions/hawke-uno.yml
Normal file
118
src/Jackett.Common/Definitions/hawke-uno.yml
Normal 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
|
@@ -9,6 +9,8 @@ links:
|
||||
- https://pt.upxin.net/
|
||||
legacylinks:
|
||||
- http://pt.upxin.net/
|
||||
certificates:
|
||||
- d52ca3e97d730541d8f81452185e4481225f3a2d # expired 06/Jan/2022
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -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="])
|
||||
|
@@ -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
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
||||
|
@@ -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
|
@@ -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:
|
||||
|
@@ -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/
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
@@ -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
|
@@ -150,6 +150,8 @@ search:
|
||||
|
||||
rows:
|
||||
selector: tr[id^="tor_"]
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -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
|
@@ -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
|
@@ -119,6 +119,8 @@ search:
|
||||
|
||||
rows:
|
||||
selector: tr.t-row
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -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"]
|
||||
|
@@ -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
|
@@ -111,6 +111,8 @@ search:
|
||||
|
||||
rows:
|
||||
selector: table.table-bordered tr:has(a[href^="download.php?torrent="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -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
|
||||
|
@@ -53,6 +53,8 @@ search:
|
||||
|
||||
rows:
|
||||
selector: div.webResult:has(a.magneto[data-src])
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -28,6 +28,8 @@ search:
|
||||
|
||||
rows:
|
||||
selector: div.moviefilm
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
173
src/Jackett.Common/Definitions/trackeros-api.yml
Normal file
173
src/Jackett.Common/Definitions/trackeros-api.yml
Normal 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
|
@@ -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
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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)
|
||||
|
@@ -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/"
|
||||
};
|
||||
|
@@ -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,
|
||||
|
@@ -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,
|
||||
|
@@ -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,
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
727
src/Jackett.Common/Indexers/TodoTorrents.cs
Normal file
727
src/Jackett.Common/Indexers/TodoTorrents.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -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; }
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
{
|
||||
|
@@ -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
|
||||
|
23
src/Jackett.Server/Controllers/HealthcheckController.cs
Normal file
23
src/Jackett.Server/Controllers/HealthcheckController.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
|
@@ -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",
|
||||
|
Reference in New Issue
Block a user