mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-11 06:12:14 +02:00
Compare commits
56 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
363d08634a | ||
![]() |
2b503e01a1 | ||
![]() |
a838dbcb6c | ||
![]() |
16f96e0419 | ||
![]() |
5fe974afad | ||
![]() |
593bbb37d3 | ||
![]() |
c9fbc7268b | ||
![]() |
a32ad215cd | ||
![]() |
34509d284f | ||
![]() |
2ca7975d3d | ||
![]() |
e8dbaa4a8e | ||
![]() |
a6fd4c3da1 | ||
![]() |
1b3365d8ad | ||
![]() |
a822b3c4f4 | ||
![]() |
ff663cc202 | ||
![]() |
4c3dbb4746 | ||
![]() |
a4ba0d21d9 | ||
![]() |
859da99442 | ||
![]() |
1cbeb74c8e | ||
![]() |
4ae705eb15 | ||
![]() |
b469c2e764 | ||
![]() |
2712ff432b | ||
![]() |
9da64d5bbf | ||
![]() |
5d21a69b07 | ||
![]() |
a083090b5e | ||
![]() |
27ae1b3e82 | ||
![]() |
f0245900e4 | ||
![]() |
4ea6ce6cc2 | ||
![]() |
f905e44b09 | ||
![]() |
fa1ee57072 | ||
![]() |
da56368720 | ||
![]() |
a61991fcdb | ||
![]() |
8051e87d2a | ||
![]() |
a0eb39f87b | ||
![]() |
b3d2ad94a7 | ||
![]() |
a6154898ed | ||
![]() |
9b39e1c3c2 | ||
![]() |
656702cde7 | ||
![]() |
34114c23fc | ||
![]() |
31c629c862 | ||
![]() |
be34f78be0 | ||
![]() |
219d9548a1 | ||
![]() |
88a24cad1e | ||
![]() |
a86e1e82f2 | ||
![]() |
747394fce7 | ||
![]() |
09229dcf29 | ||
![]() |
5afc1a1c9a | ||
![]() |
505948b69a | ||
![]() |
68e72e41cf | ||
![]() |
573ba5b41f | ||
![]() |
dfd1ec375b | ||
![]() |
3fa0b76b59 | ||
![]() |
c830a59d58 | ||
![]() |
d05767fd3b | ||
![]() |
08ab66a447 | ||
![]() |
6ee45ec0b2 |
4
.github/no_information_provided.md
vendored
4
.github/no_information_provided.md
vendored
@@ -5,5 +5,5 @@ You've created an issue, but haven't provided any details to allow the community
|
||||
Provide a description of the feature request or bug, the more details the better.
|
||||
If you are experiencing an issue with a tracker, a **full enhanced log must be included**. Instructions for obtaining logs are here: https://github.com/Jackett/Jackett#troubleshooting
|
||||
|
||||
**Jackett version**:
|
||||
**Mono version** (if not using Windows):
|
||||
(At the bottom of your Jackett Dashboard page) **Jackett version**:
|
||||
(if you installed using Jackett.Binaries.Mono.tar.gz) **Mono version**:
|
||||
|
62
README.md
62
README.md
@@ -16,9 +16,9 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
|
||||
|
||||
#### Supported Systems
|
||||
* Windows using .NET 4.6.1 or above [Download here](https://www.microsoft.com/net/framework/versions/net461).
|
||||
* Linux
|
||||
* macOS using Mono 5.8 or above. [Download here](http://www.mono-project.com/download/).
|
||||
* Windows 7SP1 or greater using .NET 4.6.1 or above [Download here](https://www.microsoft.com/net/framework/versions/net461)
|
||||
* Linux ([supported operating systems here](https://github.com/dotnet/core/blob/master/release-notes/2.1/2.1-supported-os.md))
|
||||
* macOS 10.12 or greater
|
||||
|
||||
### Supported Public Trackers
|
||||
* 1337x
|
||||
@@ -107,6 +107,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* RuTracker
|
||||
* Sharewood
|
||||
* SkTorrent
|
||||
* SoundPark
|
||||
* Union Fansub
|
||||
* Vanila
|
||||
* XtreMeZone (MYXZ)
|
||||
@@ -134,6 +135,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* Audiobook Torrents (ABT)
|
||||
* AudioNews (AN)
|
||||
* Awesome-HD (AHD)
|
||||
* AVG (Audio Video Games)
|
||||
* Avistaz (AsiaTorrents)
|
||||
* B2S-Share
|
||||
* Back-ups
|
||||
@@ -151,7 +153,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* BitMeTV
|
||||
* BitsPiracy
|
||||
* Bitspyder
|
||||
* BitTorrentFiles [![(invite needed)][inviteneeded]](#)
|
||||
* BitTorrentFiles
|
||||
* BitTurk
|
||||
* BJ-Share (BJ)
|
||||
* BlueBird
|
||||
@@ -271,6 +273,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* P2PBG
|
||||
* Passione Torrent <!-- maintained by bonny1992 -->
|
||||
* PassThePopcorn (PTP)
|
||||
* Peers.FM
|
||||
* PiratBit
|
||||
* PirateTheNet (PTN)
|
||||
* PiXELHD (PxHD)
|
||||
@@ -328,12 +331,13 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* The Show
|
||||
* The-Torrents
|
||||
* The Vault
|
||||
* Tigers-dl
|
||||
* Torrent Network (TN)
|
||||
* Torrent Sector Crew (TSC)
|
||||
* Torrent.LT
|
||||
* TorrentBD
|
||||
* TorrentBytes (TBy)
|
||||
* TorrentCCF (TCCF) [![(invite needed)][inviteneeded]](#)
|
||||
* TorrentCCF (TCCF)
|
||||
* TorrentDay (TD)
|
||||
* Torrentech (TTH)
|
||||
* TorrentHeaven
|
||||
@@ -388,8 +392,8 @@ Using the all indexer has no advantages (besides reduced management overhead), o
|
||||
|
||||
To get all Jackett indexers including their capabilities you can use `t=indexers` on the all indexer. To get only configured/unconfigured indexers you can also add `configured=true/false` as query parameter.
|
||||
|
||||
## Installation on Windows
|
||||
|
||||
## Installation on Windows
|
||||
We recommend you install Jackett as a Windows service using the supplied installer. You may also download the zipped version if you would like to configure everything manually.
|
||||
|
||||
To get started with using the installer for Jackett, follow the steps below:
|
||||
@@ -405,20 +409,30 @@ When installed as a service the tray icon acts as a way to open/start/stop Jacke
|
||||
|
||||
Jackett can also be run from the command line if you would like to see log messages (Ensure the server isn't already running from the tray/service). This can be done by using "JackettConsole.exe" (for Command Prompt), found in the Jackett data folder: "%ProgramData%\Jackett".
|
||||
|
||||
## Install on Linux (AMDx64)
|
||||
1. Download and extract the latest `Jackett.Binaries.LinuxAMDx64.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett with the command `./jackett`
|
||||
2. (Optional) To install Jackett as a service, open the Terminal and run `sudo ./install_service_systemd.sh` You need root permissions to install the service. The service will start on each logon. You can always stop it by running `systemctl stop jackett.service` from Terminal. You can start it again it using `systemctl start jackett.service`. Logs are stored as usual under `~/.config/Jackett/log.txt` and also in `journalctl -u jackett.service`.
|
||||
|
||||
## Install on Linux (AMDx64)
|
||||
On most operating systems all the required dependencies will already be present. In case they are not, you can refer to this page https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore2x#linux-distribution-dependencies
|
||||
|
||||
### Install as service
|
||||
To install Jackett as a service, open the Terminal and run `sudo ./install_service_systemd.sh` You need root permissions to install the service. The service will start on each logon. You can always stop it by running `systemctl stop jackett.service` from Terminal. You can start it again it using `systemctl start jackett.service`. Logs are stored as usual under `~/.config/Jackett/log.txt` and also in `journalctl -u jackett.service`.
|
||||
|
||||
### Run without installing as a service
|
||||
Download and extract the latest `Jackett.Binaries.LinuxAMDx64.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett with the command `./jackett`
|
||||
|
||||
### home directory
|
||||
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
|
||||
|
||||
## Install on Linux (ARMv7 or above)
|
||||
1. Download and extract the latest `Jackett.Binaries.LinuxARM32.tar.gz` or `Jackett.Binaries.LinuxARM64.tar.gz` (32 bit is the most common on ARM) release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett with the command `./jackett`
|
||||
2. (Optional) To install Jackett as a service, open the Terminal and run `sudo ./install_service_systemd.sh` You need root permissions to install the service. The service will start on each logon. You can always stop it by running `systemctl stop jackett.service` from Terminal. You can start it again it using `systemctl start jackett.service`. Logs are stored as usual under `~/.config/Jackett/log.txt` and also in `journalctl -u jackett.service`.
|
||||
|
||||
## Install on Linux (ARMv7 or above)
|
||||
On most operating systems all the required dependencies will already be present. In case they are not, you can refer to this page https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore2x#linux-distribution-dependencies
|
||||
|
||||
### Install as service
|
||||
To install Jackett as a service, open the Terminal and run `sudo ./install_service_systemd.sh` You need root permissions to install the service. The service will start on each logon. You can always stop it by running `systemctl stop jackett.service` from Terminal. You can start it again it using `systemctl start jackett.service`. Logs are stored as usual under `~/.config/Jackett/log.txt` and also in `journalctl -u jackett.service`.
|
||||
|
||||
### Run without installing as a service
|
||||
Download and extract the latest `Jackett.Binaries.LinuxARM32.tar.gz` or `Jackett.Binaries.LinuxARM64.tar.gz` (32 bit is the most common on ARM) release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett with the command `./jackett`
|
||||
|
||||
### home directory
|
||||
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
|
||||
|
||||
|
||||
@@ -437,35 +451,39 @@ If you want to run it with a user without a /home directory you need to add `Env
|
||||
|
||||
Mono must be compiled with the Roslyn compiler (default), using MCS will cause "An error has occurred." errors (See https://github.com/Jackett/Jackett/issues/2704).
|
||||
|
||||
|
||||
### Installation on Linux via Ansible
|
||||
|
||||
On a RHEL/Centos 7 system: [linuxhq.jackett](https://galaxy.ansible.com/linuxhq/jackett)
|
||||
|
||||
On an Ubuntu 16 system: [chrisjohnson00.jackett](https://galaxy.ansible.com/chrisjohnson00/jackett)
|
||||
|
||||
|
||||
## Installation on macOS
|
||||
|
||||
### Prerequisites
|
||||
Install [Mono 5.8](http://www.mono-project.com/download/#download-mac) or better (using the latest pkg installer is recommended).
|
||||
* Setup ssl support by running `curl -sS https://curl.haxx.se/ca/cacert.pem | cert-sync --user /dev/stdin`
|
||||
macOS 10.12 or greater
|
||||
|
||||
### Install as service
|
||||
1. Download and extract the latest `Jackett.Binaries.Mono.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases).
|
||||
2. Open the extracted folder and double-click on `install_service_macos_mono`.
|
||||
1. Download and extract the latest `Jackett.Binaries.macOS.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases).
|
||||
2. Open the extracted folder and double-click on `install_service_macos`.
|
||||
3. If the installation was a success, you can close the Terminal window.
|
||||
|
||||
The service will start on each logon. You can always stop it by running `launchctl unload ~/Library/LaunchAgents/org.user.Jackett.plist` from Terminal. You can start it again it using `launchctl load ~/Library/LaunchAgents/org.user.Jackett.plist`.
|
||||
Logs are stored as usual under `~/.config/Jackett/log.txt`.
|
||||
|
||||
### Run without installing as a service
|
||||
Download and extract the latest `Jackett.Binaries.Mono.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett using mono with the command `mono --debug JackettConsole.exe`.
|
||||
Download and extract the latest `Jackett.Binaries.macOS.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett with the command `./jackett`.
|
||||
|
||||
|
||||
## Installation using Docker
|
||||
Detailed instructions are available at [LinuxServer.io Jackett Docker](https://hub.docker.com/r/linuxserver/jackett/). The Jackett Docker is highly recommended, especially if you are having Mono stability issues or having issues running Mono on your system eg. QNAP, Synology. Thanks to [LinuxServer.io](https://linuxserver.io)
|
||||
|
||||
|
||||
## Installation on Synology
|
||||
Jackett is available as beta package from [SynoCommunity](https://synocommunity.com/)
|
||||
|
||||
|
||||
## Running Jackett behind a reverse proxy
|
||||
When running jackett behind a reverse proxy make sure that the original hostname of the request is passed to Jackett. If HTTPS is used also set the X-Forwarded-Proto header to "https". Don't forget to adjust the "Base Path Override" Jackett option accordingly.
|
||||
|
||||
@@ -558,7 +576,7 @@ cd Jackett/src
|
||||
|
||||
# dotnet core version
|
||||
dotnet publish Jackett.Server -f netcoreapp2.2 --self-contained -r osx-x64 -c Debug # takes care of everything
|
||||
./Jackett.Server/bin/Debug/netcoreapp2.2/osx-x64/JackettConsole # run jackett
|
||||
./Jackett.Server/bin/Debug/netcoreapp2.2/osx-x64/jackett # run jackett
|
||||
```
|
||||
|
||||
### Linux
|
||||
@@ -571,14 +589,8 @@ cd Jackett/src
|
||||
|
||||
# dotnet core version
|
||||
dotnet publish Jackett.Server -f netcoreapp2.2 --self-contained -r linux-x64 -c Debug # takes care of everything
|
||||
./Jackett.Server/bin/Debug/netcoreapp2.2/linux-x64/JackettConsole # run jackett
|
||||
./Jackett.Server/bin/Debug/netcoreapp2.2/linux-x64/jackett # run jackett
|
||||
```
|
||||
<!--
|
||||
# mono version (currently broken)
|
||||
nuget restore Jackett.sln # prepare dependencies
|
||||
msbuild Jackett.Server/Jackett.Server.csproj /t:Build /p:Configuration=Debug # compile
|
||||
mono Jackett.Server/bin/Debug/JackettServer.exe # run jackett
|
||||
-->
|
||||
|
||||
## Screenshots
|
||||
|
||||
|
@@ -270,6 +270,11 @@ table td.fit{
|
||||
text-align: right;
|
||||
margin-right: 1em;
|
||||
}
|
||||
input#searchquery{
|
||||
|
||||
input#searchquery {
|
||||
width:400px;
|
||||
}
|
||||
|
||||
#proxy-warning {
|
||||
color: red;
|
||||
}
|
||||
|
@@ -100,6 +100,7 @@ function loadJackettSettings() {
|
||||
})
|
||||
|
||||
reloadIndexers();
|
||||
proxyWarning(data.proxy_url);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1221,4 +1222,18 @@ function bindUIButtons() {
|
||||
doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
|
||||
});
|
||||
});
|
||||
|
||||
$('#jackett-proxy-url').on('input', function () {
|
||||
proxyWarning($(this).val());
|
||||
});
|
||||
}
|
||||
|
||||
function proxyWarning(input) {
|
||||
if (input != null && input.trim() !== "") {
|
||||
$('#proxy-warning').show();
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#proxy-warning').hide();
|
||||
}
|
||||
}
|
||||
|
@@ -281,6 +281,10 @@ div#jackett-releases-datatable_wrapper {
|
||||
width: 100%;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
input#searchquery{
|
||||
input#searchquery {
|
||||
width:50%;
|
||||
}
|
||||
|
||||
#proxy-warning {
|
||||
color: red;
|
||||
}
|
||||
|
@@ -34,8 +34,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="../custom.css?changed=2017083001" media="only screen and (min-device-width: 480px)">
|
||||
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=2017083001" media="only screen and (max-device-width: 480px)">
|
||||
<link rel="stylesheet" type="text/css" href="../custom.css?changed=20190401" media="only screen and (min-device-width: 480px)">
|
||||
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=20190401" 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">
|
||||
@@ -87,8 +87,10 @@
|
||||
<h4>Adding a Jackett indexer to RSS clients (RSS feed)</h4>
|
||||
<ol>
|
||||
<li>Click on the indexers corresponding <button type="button" class="btn btn-xs btn-info">Copy RSS Feed</button> button and paste it into the URL field of the RSS client.</li>
|
||||
<li>You can adjust the <b>q</b> (search string) and <b>cat</b> (categories) arguments accordingly.
|
||||
E.g. <b>...&cat=2030,2040&q=big+buck+bunny</b> will search for "big buck bunny" in the Movies/SD (2030) and Movies/HD (2040) categories (See the indexer configuration for available categories).</li>
|
||||
<li>
|
||||
You can adjust the <b>q</b> (search string) and <b>cat</b> (categories) arguments accordingly.
|
||||
E.g. <b>...&cat=2030,2040&q=big+buck+bunny</b> will search for "big buck bunny" in the Movies/SD (2030) and Movies/HD (2040) categories (See the indexer configuration for available categories).
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
<hr />
|
||||
@@ -138,6 +140,12 @@
|
||||
<option value="2">socks5</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="proxy-warning" hidden>
|
||||
<span>
|
||||
WARNING: The proxy option is unstable and potentially leaks requests. If no fix from the community is forthcoming
|
||||
in the next few months, the proxy option will be removed from Jackett. Recommendation is to use a VPN.
|
||||
</span>
|
||||
</div>
|
||||
<div class="input-area">
|
||||
<span class="input-header">Proxy url: </span>
|
||||
<input id="jackett-proxy-url" class="form-control input-right" type="text" value="" placeholder="Blank to disable">
|
||||
@@ -663,6 +671,6 @@
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
|
||||
<script type="text/javascript" src="../custom.js?changed=20180711"></script>
|
||||
<script type="text/javascript" src="../custom.js?changed=20190401"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -6,6 +6,8 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://bittorrentfiles.me/
|
||||
legacylinks:
|
||||
- https://www.Bittorrentfiles.me/
|
||||
|
||||
caps:
|
||||
|
@@ -10,6 +10,18 @@
|
||||
legacylinks:
|
||||
- http://amigos-share.club/
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: info_results
|
||||
type: info
|
||||
label: "Search results"
|
||||
default: "Set <b>Exibição De Torrents</b> to <b>Lista</b> in your <b>Minhas Configurações</b>.<br />Using <b>Capas</b> is not supported and will return 0 results."
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 107, cat: XXX, desc: "Adultos: Gay"}
|
||||
@@ -48,7 +60,7 @@
|
||||
- {id: 2, cat: Movies, desc: "Filmes: Terror"}
|
||||
- {id: 1, cat: Movies, desc: "Filmes: Ação"}
|
||||
- {id: 80, cat: Movies, desc: "Filmes: Aventura"}
|
||||
- {id: 70, cat: Other, desc: "Fotos: XXX"}
|
||||
- {id: 70, cat: XXX, desc: "Fotos: XXX"}
|
||||
- {id: 79, cat: Console/PS4, desc: "Jogos: Ps4"}
|
||||
- {id: 47, cat: PC/Games, desc: "Jogos: Pc"}
|
||||
- {id: 61, cat: Console, desc: "Jogos: Emuladores e Roms"}
|
||||
@@ -130,18 +142,18 @@
|
||||
error:
|
||||
- selector: div.alert-error
|
||||
test:
|
||||
path: index.php
|
||||
path: torrents-search.php
|
||||
selector: a[href="account-logout.php"]
|
||||
|
||||
ratio:
|
||||
path: index.php
|
||||
path: torrents-search.php
|
||||
selector: li:contains("Ratio:") a b
|
||||
|
||||
search:
|
||||
paths:
|
||||
# http://amigos-share.club/torrents-search.php?search=&c1=1&c19=1&c36=1&incldead=0&freeleech=0&lang=0sort=id&order=desc&page=1
|
||||
- path: torrents-search.php
|
||||
# site displays just 21 results, no profile options found to change this, so we attempt to fetch 5 pages
|
||||
# site displays just 9 results, no profile options found to change this, so we attempt to fetch 5 pages
|
||||
- path: torrents-search.php
|
||||
inputs:
|
||||
page: 1
|
||||
@@ -157,13 +169,13 @@
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
incldead: 0
|
||||
incldead: 1
|
||||
freeleech: 0
|
||||
lang: 0
|
||||
sort: "id"
|
||||
order: "desc"
|
||||
rows:
|
||||
selector: table.table-striped > tbody > tr:has(a[href^="torrents-details.php?id="])
|
||||
selector: table > tbody > tr:has(a[href^="torrents-details.php?id="])
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
@@ -173,6 +185,12 @@
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=\"(.*?)\""
|
||||
category:
|
||||
selector: td:first-child img
|
||||
attribute: src
|
||||
@@ -195,7 +213,7 @@
|
||||
"[src$=\"/E-books.png\"]": "67"
|
||||
"[src$=\"/Revista.png\"]": "68"
|
||||
"[src$=\"/Aventura.png\"]": "80"
|
||||
"[src$=\"/XXX.png\"]": "70"
|
||||
"[src$=\"/Revistas-XXX.png\"]": "70"
|
||||
"[src$=\"/Jogos-Ps4.png\"]": "79"
|
||||
"[src$=\"/Jogos-PC.png\"]": "47"
|
||||
"[src$=\"/Jogos-EmuladoreseRoms.png\"]": "61"
|
||||
@@ -281,14 +299,14 @@
|
||||
date:
|
||||
text: now
|
||||
size:
|
||||
selector: td:nth-child(2) span.label-info
|
||||
selector: td:nth-child(2) span.badge-info
|
||||
seeders:
|
||||
selector: td:nth-child(4)
|
||||
leechers:
|
||||
selector: td:nth-child(5)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"span.label-success i:contains(\"FREE\")": "0"
|
||||
"span.badge-success:contains(\"FREE\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
|
@@ -78,10 +78,10 @@
|
||||
- name: downloadlink
|
||||
type: select
|
||||
label: Download link
|
||||
default: "magnet:"
|
||||
default: "magnet:?xt="
|
||||
options:
|
||||
"/download/" : ".torrent"
|
||||
"magnet:": "magnet"
|
||||
"/get/key:" : ".torrent"
|
||||
"magnet:?xt=": "magnet"
|
||||
|
||||
login:
|
||||
path: /
|
||||
@@ -100,7 +100,7 @@
|
||||
selector: a[href="/users/logout/"]
|
||||
|
||||
download:
|
||||
selector: a[href^="{{ .Config.downloadlink }}"]
|
||||
selector: a[href*="{{ .Config.downloadlink }}"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
|
@@ -25,10 +25,19 @@
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: 1
|
||||
error:
|
||||
- selector: form[action*="/login"] .text-red
|
||||
- selector: div.has-error
|
||||
test:
|
||||
path: torrents
|
||||
selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: torrents
|
||||
selector: li:has(i.fa-sync-alt)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Ratio : (\\d+)"
|
||||
|
||||
search:
|
||||
paths:
|
||||
@@ -36,23 +45,24 @@
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
|
||||
description: ""
|
||||
uploader: ""
|
||||
imdb: "{{ .Query.IMDBIDShort }}"
|
||||
tvdb: ""
|
||||
tmdb: ""
|
||||
mal: ""
|
||||
sorting: created_at
|
||||
direction: desc
|
||||
sort: "created_at"
|
||||
direction: "desc"
|
||||
qty: 100
|
||||
rows:
|
||||
selector: table > tbody > tr
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="/category/"]
|
||||
selector: a[href*="/categories/"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "/category/.*?\\.(\\d+)"
|
||||
args: "/categories/.*?\\.(\\d+)"
|
||||
title:
|
||||
selector: a.view-torrent
|
||||
download:
|
||||
@@ -61,17 +71,28 @@
|
||||
details:
|
||||
selector: a.view-torrent
|
||||
attribute: href
|
||||
banner:
|
||||
optional: true
|
||||
selector: div.torrent-poster img
|
||||
attribute: src
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/600x900", ""]
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d\.]+)
|
||||
imdb:
|
||||
optional: true
|
||||
selector: a[href*="www.imdb.com/title/tt"]
|
||||
attribute: href
|
||||
date:
|
||||
selector: time
|
||||
filters:
|
||||
@@ -100,12 +121,17 @@
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
"i[data-original-title=\"Personal Freeleech\"]": "0" # 24 Hour FreeLeech From BON Store
|
||||
"i[data-original-title=\"Special Freeleech\"]": "0" # Special FreeLeech For Certain User Groups
|
||||
"i[data-original-title=\"Freeleech Token\"]": "0" # Freeleech From Token
|
||||
"i[data-original-title=\"Global FreeLeech\"]": "0" # Global Freeleech
|
||||
"i[data-original-title=\"Freeleech\"]": "0" # Freeleech
|
||||
"i[data-original-title=\"Featured\"]": "0" # Featured Torrent
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
|
||||
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
|
||||
"i[data-original-title=\"Double Upload\"]": "2" # Single Torrent Double Upload
|
||||
"i[data-original-title=\"Global Double Upload\"]": "2" # Global Double Upload
|
||||
"i[data-original-title=\"Featured\"]": "2" # Featured Torrent
|
||||
"*": "1"
|
||||
# UNIT3D
|
||||
# UNIT3D 1.9.2
|
||||
|
299
src/Jackett.Common/Definitions/avg.yml
Normal file
299
src/Jackett.Common/Definitions/avg.yml
Normal file
@@ -0,0 +1,299 @@
|
||||
---
|
||||
site: avg
|
||||
name: AVG
|
||||
description: "Audio Video Games (BestRepack) is a RUSSIAN Private Torrent Tracker for GAMES"
|
||||
language: ru-ru
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://avg.club/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 110, cat: PC/Games, desc: "Репаки от R.G. Catalyst"}
|
||||
- {id: 146, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Горячие новинки"}
|
||||
- {id: 112, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Action"}
|
||||
- {id: 113, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Fighting"}
|
||||
- {id: 114, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst RPG"}
|
||||
- {id: 118, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Аркады"}
|
||||
- {id: 120, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Квесты и приключения"}
|
||||
- {id: 122, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Стратегии"}
|
||||
- {id: 124, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Симуляторы"}
|
||||
- {id: 126, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Гонки"}
|
||||
- {id: 147, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Горячие новинки"}
|
||||
- {id: 115, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Action"}
|
||||
- {id: 116, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Fighting"}
|
||||
- {id: 117, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst RPG"}
|
||||
- {id: 119, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Аркады"}
|
||||
- {id: 121, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Квесты и приключения"}
|
||||
- {id: 123, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Стратегии"}
|
||||
- {id: 125, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Симуляторы"}
|
||||
- {id: 127, cat: PC/Games, desc: "Игры PC (Репаки) от R.G. Catalyst Гонки"}
|
||||
- {id: 9, cat: PC/Games, desc: "Игры PC (Репаки) Горячие новинки"}
|
||||
- {id: 2, cat: PC/Games, desc: "Игры PC (Репаки) Action"}
|
||||
- {id: 8, cat: PC/Games, desc: "Игры PC (Репаки) Fighting"}
|
||||
- {id: 3, cat: PC/Games, desc: "Игры PC (Репаки) RPG"}
|
||||
- {id: 7, cat: PC/Games, desc: "Игры PC (Репаки) Аркады"}
|
||||
- {id: 6, cat: PC/Games, desc: "Игры PC (Репаки) Квесты и приключения"}
|
||||
- {id: 4, cat: PC/Games, desc: "Игры PC (Репаки) Стратегии"}
|
||||
- {id: 5, cat: PC/Games, desc: "Игры PC (Репаки) Симуляторы"}
|
||||
- {id: 73, cat: PC/Games, desc: "Игры PC (Репаки) Гонки"}
|
||||
- {id: 149, cat: PC/Games, desc: "Игры PC (Репаки) «Стройбат»"}
|
||||
- {id: 148, cat: PC/Games, desc: "Игры PC (Оригиналы) Горячие новинки"}
|
||||
- {id: 129, cat: PC/Games, desc: "Игры PC (Оригиналы) Action"}
|
||||
- {id: 131, cat: PC/Games, desc: "Игры PC (Оригиналы) Fighting"}
|
||||
- {id: 133, cat: PC/Games, desc: "Игры PC (Оригиналы) RPG"}
|
||||
- {id: 135, cat: PC/Games, desc: "Игры PC (Оригиналы) Аркады"}
|
||||
- {id: 137, cat: PC/Games, desc: "Игры PC (Оригиналы) Квесты и приключения"}
|
||||
- {id: 139, cat: PC/Games, desc: "Игры PC (Оригиналы) Стратегии"}
|
||||
- {id: 141, cat: PC/Games, desc: "Игры PC (Оригиналы) Симуляторы"}
|
||||
- {id: 143, cat: PC/Games, desc: "Игры PC (Оригиналы) Гонки"}
|
||||
- {id: 19, cat: PC/Games, desc: "Игры PC (Оригиналы) Релизы с GOG.com (игры без защиты)"}
|
||||
- {id: 130, cat: PC/Games, desc: "Игры PC (Оригиналы) Релизы с GOG.com (игры без защиты) Action"}
|
||||
- {id: 132, cat: PC/Games, desc: "Игры PC (Оригиналы) Релизы с GOG.com (игры без защиты) Fighting"}
|
||||
- {id: 134, cat: PC/Games, desc: "Игры PC (Оригиналы) Релизы с GOG.com (игры без защиты) RPG"}
|
||||
- {id: 136, cat: PC/Games, desc: "Игры PC (Оригиналы) Релизы с GOG.com (игры без защиты) Аркады"}
|
||||
- {id: 138, cat: PC/Games, desc: "Игры PC (Оригиналы) Релизы с GOG.com (игры без защиты) Квесты и приключения"}
|
||||
- {id: 140, cat: PC/Games, desc: "Игры PC (Оригиналы) Релизы с GOG.com (игры без защиты) Стратегии"}
|
||||
- {id: 142, cat: PC/Games, desc: "Игры PC (Оригиналы) Релизы с GOG.com (игры без защиты) Симуляторы"}
|
||||
- {id: 144, cat: PC/Games, desc: "Игры PC (Оригиналы) Релизы с GOG.com (игры без защиты) Гонки"}
|
||||
- {id: 145, cat: PC/Games, desc: "Игры PC (Оригиналы) Релизы с GOG.com (игры без защиты) Linux / MacOS"}
|
||||
- {id: 10, cat: PC/Games, desc: "Игры PC (Оригиналы) Горячие новинки"}
|
||||
- {id: 11, cat: PC/Games, desc: "Игры PC (Оригиналы) Action"}
|
||||
- {id: 12, cat: PC/Games, desc: "Игры PC (Оригиналы) Fighting"}
|
||||
- {id: 13, cat: PC/Games, desc: "Игры PC (Оригиналы) RPG"}
|
||||
- {id: 14, cat: PC/Games, desc: "Игры PC (Оригиналы) Аркады"}
|
||||
- {id: 15, cat: PC/Games, desc: "Игры PC (Оригиналы) Квесты и приключения"}
|
||||
- {id: 16, cat: PC/Games, desc: "Игры PC (Оригиналы) Стратегии"}
|
||||
- {id: 17, cat: PC/Games, desc: "Игры PC (Оригиналы) Симуляторы"}
|
||||
- {id: 74, cat: PC/Games, desc: "Игры PC (Оригиналы) Гонки"}
|
||||
- {id: 98, cat: PC/Games, desc: "Игры PC (Оригиналы) Игры для Linux"}
|
||||
- {id: 99, cat: PC/Games, desc: "Игры PC (Оригиналы) Игры для MacOS"}
|
||||
- {id: 70, cat: Console/Xbox, desc: "Игры для консолей Xbox"}
|
||||
- {id: 71, cat: Console/PSP, desc: "Игры для консолей Playstation"}
|
||||
- {id: 72, cat: Console/Other, desc: "Игры для консолей Другие консоли"}
|
||||
- {id: 34, cat: Movies, desc: "Кинематограф Новинки"}
|
||||
- {id: 109, cat: Movies/HD, desc: "Кинематограф Новинки HD Remux / Blu-Ray Discs"}
|
||||
- {id: 108, cat: Movies/HD, desc: "Кинематограф Новинки HD Rips (720p,1080p)"}
|
||||
- {id: 20, cat: Movies, desc: "Кинематограф Отечественное кино"}
|
||||
- {id: 21, cat: Movies, desc: "Кинематограф Зарубежное кино"}
|
||||
- {id: 28, cat: TV, desc: "Отечественные сериалы"}
|
||||
- {id: 27, cat: TV, desc: "Зарубежные сериалы"}
|
||||
- {id: 29, cat: TV, desc: "Мультфильмы"}
|
||||
- {id: 30, cat: TV, desc: "Мультсериалы"}
|
||||
- {id: 37, cat: TV, desc: "Документальное кино"}
|
||||
- {id: 38, cat: TV, desc: "Концерты и передачи"}
|
||||
- {id: 67, cat: TV/Anime, desc: "Аниме Релизы"}
|
||||
- {id: 45, cat: Audio, desc: "Музыка Тяжелая и альтернативная музыка"}
|
||||
- {id: 85, cat: Audio, desc: "Музыка Эстрадная и поп-музыка"}
|
||||
- {id: 77, cat: Audio, desc: "Музыка Электронная музыка"}
|
||||
- {id: 58, cat: Audio, desc: "Музыка Рэп, хип-хоп, R`n`B"}
|
||||
- {id: 78, cat: Audio, desc: "Музыка Фолк, этническая и народная музыка"}
|
||||
- {id: 42, cat: Audio, desc: "Музыка Классическая и академическая музыка"}
|
||||
- {id: 82, cat: Audio, desc: "Музыка New Age, Chillout, музыка для медитации"}
|
||||
- {id: 79, cat: Audio, desc: "Музыка Джаз, блюз"}
|
||||
- {id: 80, cat: Audio, desc: "Музыка Авторская песня, шансон"}
|
||||
- {id: 49, cat: Audio, desc: "Музыка Саундтреки"}
|
||||
- {id: 50, cat: Audio, desc: "Музыка Саундтреки Саундтреки к фильмам, мультфильмам, сериалам"}
|
||||
- {id: 51, cat: Audio, desc: "Музыка Саундтреки Саундтреки к играм"}
|
||||
- {id: 81, cat: Audio, desc: "Музыка Прочая музыка"}
|
||||
- {id: 83, cat: Audio, desc: "Музыка Прочая музыка Неофициальные сборники"}
|
||||
- {id: 156, cat: PC, desc: "Программное обеспечение Live CD, DVD, USB версии"}
|
||||
- {id: 157, cat: PC, desc: "Программное обеспечение Windows 10 и более поздние"}
|
||||
- {id: 158, cat: PC, desc: "Программное обеспечение Windows 8.1 и более ранние"}
|
||||
- {id: 159, cat: PC, desc: "Программное обеспечение Обновления и языковые пакеты"}
|
||||
- {id: 160, cat: PC, desc: "Программное обеспечение Серверные версии"}
|
||||
- {id: 193, cat: PC/Mac, desc: "Программное обеспечение macOS"}
|
||||
- {id: 194, cat: PC/Mac, desc: "Программное обеспечение macOS Stable (Release)"}
|
||||
- {id: 195, cat: PC/Mac, desc: "Программное обеспечение macOS Dev (Beta)"}
|
||||
- {id: 164, cat: PC/Mac, desc: "Программное обеспечение macOS Дистрибутивы Linux"}
|
||||
- {id: 163, cat: PC/Mac, desc: "Программное обеспечение macOS *nix OS"}
|
||||
- {id: 162, cat: PC/Mac, desc: "Программное обеспечение macOS Программное обеспечение"}
|
||||
- {id: 165, cat: PC, desc: "Программное обеспечение Мультимедиа и графика"}
|
||||
- {id: 172, cat: PC, desc: "Программное обеспечение Мультимедиа и графика Аудио-редакторы"}
|
||||
- {id: 171, cat: PC, desc: "Программное обеспечение Мультимедиа и графика Видео-редакторы"}
|
||||
- {id: 170, cat: PC, desc: "Программное обеспечение Мультимедиа и графика Графические редакторы"}
|
||||
- {id: 169, cat: PC, desc: "Программное обеспечение Мультимедиа и графика Материалы для аудио"}
|
||||
- {id: 168, cat: PC, desc: "Программное обеспечение Мультимедиа и графика Материалы для видео"}
|
||||
- {id: 167, cat: PC, desc: "Программное обеспечение Мультимедиа и графика Материалы для графики"}
|
||||
- {id: 166, cat: PC, desc: "Программное обеспечение Мультимедиа и графика Моделирование, рендеринг, плагины"}
|
||||
- {id: 173, cat: PC, desc: "Программное обеспечение Программирование и веб-разработка"}
|
||||
- {id: 177, cat: PC, desc: "Программное обеспечение Программирование и веб-разработка DDK/SDK"}
|
||||
- {id: 178, cat: PC, desc: "Программное обеспечение Программирование и веб-разработка Веб-редакторы"}
|
||||
- {id: 176, cat: PC, desc: "Программное обеспечение Программирование и веб-разработка Системы управления базами данных (СУБД)"}
|
||||
- {id: 175, cat: PC, desc: "Программное обеспечение Программирование и веб-разработка Компиляторы и среды разработки"}
|
||||
- {id: 174, cat: PC, desc: "Программное обеспечение Программирование и веб-разработка Компоненты и дополнения"}
|
||||
- {id: 179, cat: PC/0day, desc: "Программное обеспечение Windows Software"}
|
||||
- {id: 188, cat: PC/0day, desc: "Программное обеспечение Windows Software Интернет-приложения"}
|
||||
- {id: 187, cat: PC/0day, desc: "Программное обеспечение Windows Software Информационная безопасность"}
|
||||
- {id: 186, cat: PC/0day, desc: "Программное обеспечение Windows Software Офисные приложения и редакторы"}
|
||||
- {id: 185, cat: PC/0day, desc: "Программное обеспечение Windows Software Переводчики и словари"}
|
||||
- {id: 184, cat: PC/0day, desc: "Программное обеспечение Windows Software Проигрыватели и кодеки"}
|
||||
- {id: 183, cat: PC/0day, desc: "Программное обеспечение Windows Software Работа с носителями и медиа"}
|
||||
- {id: 182, cat: PC/0day, desc: "Программное обеспечение Windows Software Системные приложения"}
|
||||
- {id: 181, cat: PC/0day, desc: "Программное обеспечение Windows Software Эмуляторы"}
|
||||
- {id: 180, cat: PC/0day, desc: "Программное обеспечение Windows Software Прочие приложения"}
|
||||
- {id: 197, cat: PC/0day, desc: "Программное обеспечение Windows Software Архиваторы и файловые менеджеры"}
|
||||
- {id: 203, cat: PC/0day, desc: "Программное обеспечение Windows Software Проигрыватели и кодеки"}
|
||||
- {id: 202, cat: PC/0day, desc: "Программное обеспечение Windows Software Офисные приложения и редакторы"}
|
||||
- {id: 201, cat: PC/0day, desc: "Программное обеспечение Windows Software Работа с носителями и медиа"}
|
||||
- {id: 200, cat: PC/0day, desc: "Программное обеспечение Windows Software Информационная безопасность"}
|
||||
- {id: 199, cat: PC/0day, desc: "Программное обеспечение Windows Software Интернет-приложения"}
|
||||
- {id: 198, cat: PC/0day, desc: "Программное обеспечение Windows Software Системные приложения"}
|
||||
- {id: 22, cat: Other, desc: "Прочее Оформление релизов"}
|
||||
- {id: 53, cat: Other, desc: "Прочее Оформление релизов Оформление релизов (игры)"}
|
||||
- {id: 54, cat: Other, desc: "Прочее Оформление релизов Оформление релизов (кино/мультфильмы/аниме)"}
|
||||
- {id: 55, cat: Other, desc: "Прочее Оформление релизов Оформление релизов (музыка)"}
|
||||
- {id: 192, cat: Other, desc: "Прочее Оформление релизов Оформление релизов (софт)"}
|
||||
- {id: 31, cat: Other, desc: "Прочее Обновления/DLC"}
|
||||
- {id: 102, cat: Other, desc: "Прочее Обновления/DLC для MacOS"}
|
||||
- {id: 101, cat: Other, desc: "Прочее Обновления/DLC для Linux"}
|
||||
- {id: 100, cat: Other, desc: "Прочее Обновления/DLC для Windows"}
|
||||
- {id: 76, cat: Other, desc: "Прочее Языковые пакеты"}
|
||||
- {id: 103, cat: Other, desc: "Прочее Языковые пакеты для MacOS"}
|
||||
- {id: 104, cat: Other, desc: "Прочее Языковые пакеты для Linux"}
|
||||
- {id: 105, cat: Other, desc: "Прочее Языковые пакеты для Windows"}
|
||||
- {id: 84, cat: Other, desc: "Прочее Демо-, альфа-, бета-версии"}
|
||||
- {id: 32, cat: Other, desc: "Прочее NoCD/NoDVD"}
|
||||
- {id: 75, cat: Other, desc: "Прочее Моды"}
|
||||
- {id: 106, cat: Other, desc: "Прочее Моды Моды для Titan Quest (+ Immortal Throne)"}
|
||||
- {id: 95, cat: Other, desc: "Прочее Моды Моды для Dungeon Siege"}
|
||||
- {id: 94, cat: Other, desc: "Прочее Моды Моды для Resident Evil 4"}
|
||||
- {id: 93, cat: Other, desc: "Прочее Моды Моды для Doom III"}
|
||||
- {id: 92, cat: Other, desc: "Прочее Моды Плагины для TESV Skyrim"}
|
||||
- {id: 91, cat: Other, desc: "Прочее Моды Плагины для TESIV Oblivion"}
|
||||
- {id: 90, cat: Other, desc: "Прочее Моды Плагины для TESIII Morrowind"}
|
||||
- {id: 97, cat: Other, desc: "Прочее Пиратки"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
"login_username": "{{ .Config.username }}"
|
||||
"login_password": "{{ .Config.password }}"
|
||||
autologin: 1
|
||||
login: "Log in"
|
||||
error:
|
||||
- selector: table.error tr td div.msg:not(:contains(">>>"))
|
||||
test:
|
||||
path: tracker.php
|
||||
selector: a[href="./login.php?logout=1"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: tracker.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{ if .Categories }}{{ range .Categories }}f[]={{.}}&{{end}}{{else}}f[]=-1{{end}}"
|
||||
prev_allw: 1
|
||||
prev_a: 0
|
||||
prev_dla: 0
|
||||
prev_dlc: 0
|
||||
prev_dld: 0
|
||||
prev_dlw: 0
|
||||
prev_my: 0
|
||||
prev_new: 0
|
||||
prev_sd: 0
|
||||
prev_da: 1
|
||||
prev_dc: 0
|
||||
prev_df: 1
|
||||
prev_ds: 0
|
||||
prev_tor_type: 0
|
||||
# sort by 1=registered 2=topicTitle 4=completed 10=seed 11=leech 12=up 13=down 5=replies 6=views 7=size 8=lastPost 9=seedLastSeen
|
||||
o: 1
|
||||
# 1=asc 2=desc
|
||||
s: 2
|
||||
# show category
|
||||
dc: 0
|
||||
# show forum
|
||||
df: 1
|
||||
# show author
|
||||
da: 1
|
||||
# show speed
|
||||
ds: 0
|
||||
# -1=all time
|
||||
tm: -1
|
||||
# seed not seen -1=disregard
|
||||
sns: -1
|
||||
# group releases -1=not selected
|
||||
srg: -1
|
||||
nm: "{{ .Keywords }}"
|
||||
# find a username
|
||||
pn: ""
|
||||
submit: " Search "
|
||||
|
||||
rows:
|
||||
selector: tr[id^="tor_"]
|
||||
fields:
|
||||
title:
|
||||
selector: td a.genmed b
|
||||
details:
|
||||
selector: td a.genmed
|
||||
attribute: href
|
||||
download:
|
||||
selector: td a.tr-dl
|
||||
attribute: href
|
||||
category:
|
||||
selector: td a.gen
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "=(\\d+)\\."
|
||||
size:
|
||||
selector: td a.tr-dl
|
||||
seeders:
|
||||
selector: td.seedmed
|
||||
leechers:
|
||||
selector: td.leechmed
|
||||
# Russian and Ukranian and English languages are supported
|
||||
grabs:
|
||||
optional: true
|
||||
selector: td[title^="Ответов"]
|
||||
grabs:
|
||||
optional: true
|
||||
selector: td[title^="Відповідей"]
|
||||
grabs:
|
||||
optional: true
|
||||
selector: td[title^="Replies"]
|
||||
# date for English, Russian, Ukrainian
|
||||
date:
|
||||
selector: td[title="Added"] p:last-of-type, td[title="Добавлен"] p:last-of-type, td[title="Додано"] p:last-of-type
|
||||
filters:
|
||||
# replace month abbreviations
|
||||
- name: re_replace
|
||||
args: ["Янв|Січ", "Jan"]
|
||||
- name: re_replace
|
||||
args: ["Фев|Лют", "Feb"]
|
||||
- name: re_replace
|
||||
args: ["Мар|Бер", "Mar"]
|
||||
- name: re_replace
|
||||
args: ["Апр|Кві", "Apr"]
|
||||
- name: re_replace
|
||||
args: ["Май|Травень", "May"]
|
||||
- name: re_replace
|
||||
args: ["Июн|Чер", "Jun"]
|
||||
- name: re_replace
|
||||
args: ["Июл|Лип", "Jul"]
|
||||
- name: re_replace
|
||||
args: ["Авг|Сер", "Aug"]
|
||||
- name: re_replace
|
||||
args: ["Сен|Вер", "Sep"]
|
||||
- name: re_replace
|
||||
args: ["Окт|Жов", "Oct"]
|
||||
- name: re_replace
|
||||
args: ["Ноя|Лис", "Nov"]
|
||||
- name: re_replace
|
||||
args: ["Дек|Грудень", "Dec"]
|
||||
- name: dateparse
|
||||
args: "2-Jan-06"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="styles/images/tor_gold.gif"]: "0"
|
||||
img[src="styles/images/tor_silver.gif"]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
@@ -135,13 +135,24 @@
|
||||
- name: replace
|
||||
args: ["×", ""]
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
selector: td:nth-child(5):contains('.')
|
||||
optional: true
|
||||
remove: font
|
||||
filters:
|
||||
- name: replace
|
||||
args: [". ", " "]
|
||||
- name: prepend
|
||||
args: "2019."
|
||||
- name: re_replace
|
||||
args: ["([0-9]{4}).([0-9]+).([0-9]+) (.*)", "$2.$3.$1 $4"]
|
||||
date:
|
||||
selector: td:nth-child(5):contains('ma'), td:nth-child(5):contains("tegnap"), td:nth-child(5):contains('-')
|
||||
optional: true
|
||||
remove: font
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["ma", "today"]
|
||||
- name: replace
|
||||
args: ["tegnap", "yesterday"]
|
||||
|
||||
description:
|
||||
selector: td:nth-child(2) > div
|
||||
|
@@ -25,8 +25,9 @@
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: 1
|
||||
error:
|
||||
- selector: form[action*="/login"] .text-red
|
||||
- selector: div.has-error
|
||||
test:
|
||||
path: torrents
|
||||
|
||||
@@ -36,12 +37,13 @@
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
|
||||
description: ""
|
||||
uploader: ""
|
||||
imdb: "{{ .Query.IMDBIDShort }}"
|
||||
tvdb: ""
|
||||
tmdb: ""
|
||||
mal: ""
|
||||
sorting: created_at
|
||||
sort: created_at
|
||||
direction: desc
|
||||
qty: 100
|
||||
rows:
|
||||
@@ -61,6 +63,13 @@
|
||||
details:
|
||||
selector: a.view-torrent
|
||||
attribute: href
|
||||
banner:
|
||||
optional: true
|
||||
selector: div.torrent-poster img
|
||||
attribute: src
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/600x900", ""]
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
@@ -74,7 +83,7 @@
|
||||
args: ([\d\.]+)
|
||||
imdb:
|
||||
optional: true
|
||||
selector: a[href^="https://www.imdb.com/title/"]
|
||||
selector: a[href*="www.imdb.com/title/tt"]
|
||||
attribute: href
|
||||
date:
|
||||
selector: time
|
||||
@@ -117,4 +126,4 @@
|
||||
"i[data-original-title=\"Global Double Upload\"]": "2" # Global Double Upload
|
||||
"i[data-original-title=\"Featured\"]": "2" # Featured Torrent
|
||||
"*": "1"
|
||||
# UNIT3D
|
||||
# UNIT3D 1.9.2
|
||||
|
@@ -28,7 +28,7 @@
|
||||
password: "{{ .Config.password }}"
|
||||
remember: 1
|
||||
error:
|
||||
- selector: form[action*="/login"] .text-red
|
||||
- selector: div.has-error
|
||||
test:
|
||||
path: torrents
|
||||
selector: a[href$="/logout"]
|
||||
@@ -84,15 +84,15 @@
|
||||
args: ["https://via.placeholder.com/600x900", ""]
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d\.]+)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
imdb:
|
||||
optional: true
|
||||
selector: a[href*="www.imdb.com/title/tt"]
|
||||
@@ -138,4 +138,4 @@
|
||||
"i[data-original-title=\"Global Double Upload\"]": "2" # Global Double Upload
|
||||
"i[data-original-title=\"Featured\"]": "2" # Featured Torrent
|
||||
"*": "1"
|
||||
# UNIT3D 1.9
|
||||
# UNIT3D 1.9.2
|
||||
|
@@ -67,7 +67,9 @@
|
||||
filters:
|
||||
# now we put the date at the right place according scene naming rules using .Result.site_date
|
||||
- name: replace
|
||||
args: ["FRENCH", "{{ .Result.site_date }} FRENCH"]
|
||||
args: [" FRENCH", " {{ .Result.site_date }} FRENCH"]
|
||||
- name: replace
|
||||
args: ["MULTI", "{{ .Result.site_date }} MULTI"]
|
||||
- name: replace
|
||||
args: ["TRUEFRENCH", "{{ .Result.site_date }} TRUEFRENCH"]
|
||||
- name: replace
|
||||
|
@@ -16,21 +16,28 @@
|
||||
categorymappings:
|
||||
- {id: films, cat: Movies, desc: "Movies"}
|
||||
- {id: series, cat: TV, desc: "TV"}
|
||||
- {id: musique, cat: Audio, desc: "Music"}
|
||||
- {id: ebook, cat: Books, desc: "Ebook"}
|
||||
- {id: logiciels, cat: PC, desc: "Software"}
|
||||
- {id: jeux-pc, cat: PC/Games, desc: "PC Games"}
|
||||
- {id: jeux-consoles, cat: Console, desc: "Console Games"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings: []
|
||||
|
||||
download:
|
||||
selector: div#btn-download a
|
||||
selector: div.btn-download a
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "{{if .Keywords}}recherche/{{.Keywords}}{{else}}{{end}}"
|
||||
rows:
|
||||
selector: div#gauche > table > tbody > tr:has(a)
|
||||
selector: table.table-corps > tbody > tr:has(a)
|
||||
fields:
|
||||
site_date:
|
||||
selector: a
|
||||
@@ -43,7 +50,9 @@
|
||||
filters:
|
||||
# now we put the date at the right place according scene naming rules using .Result.site_date
|
||||
- name: replace
|
||||
args: ["FRENCH", "{{ .Result.site_date }} FRENCH"]
|
||||
args: [" FRENCH", " {{ .Result.site_date }} FRENCH"]
|
||||
- name: replace
|
||||
args: ["MULTI", "{{ .Result.site_date }} MULTI"]
|
||||
- name: replace
|
||||
args: ["TRUEFRENCH", "{{ .Result.site_date }} TRUEFRENCH"]
|
||||
- name: replace
|
||||
@@ -61,21 +70,21 @@
|
||||
selector: div.poid
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) Ko", "$1X00"]
|
||||
args: [ "\\.(\\d)Ko", "$1X00"]
|
||||
- name: re_replace
|
||||
args: [ " Ko", "000"]
|
||||
args: [ "Ko", "000"]
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) Mo", "$1X00000"]
|
||||
args: [ "\\.(\\d)Mo", "$1X00000"]
|
||||
- name: re_replace
|
||||
args: [ " Mo", "000000"]
|
||||
args: [ "Mo", "000000"]
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) Go", "$1X00000000"]
|
||||
args: [ "\\.(\\d)Go", "$1X00000000"]
|
||||
- name: re_replace
|
||||
args: [ " Go", "000000000"]
|
||||
args: [ "Go", "000000000"]
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) To", "$1X00000000000"]
|
||||
args: [ "\\.(\\d)To", "$1X00000000000"]
|
||||
- name: re_replace
|
||||
args: [ " To", "000000000000"]
|
||||
args: [ "To", "000000000000"]
|
||||
- name: replace
|
||||
args: [ "X", "" ]
|
||||
date:
|
||||
|
@@ -15,10 +15,11 @@
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 5, cat: PC/0day, desc: "Apps"}
|
||||
- {id: 6, cat: Books, desc: "Books"}
|
||||
- {id: 6, cat: Books, desc: "eBooks"}
|
||||
- {id: 7, cat: PC/Games, desc: "Games"}
|
||||
- {id: 8, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 9, cat: Other, desc: "Other"}
|
||||
- {id: 9, cat: Other, desc: "Others"}
|
||||
- {id: 10, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -31,10 +32,19 @@
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: 1
|
||||
error:
|
||||
- selector: table.main:contains("Login Failed!")
|
||||
- selector: div.has-error
|
||||
test:
|
||||
path: torrents
|
||||
selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: torrents
|
||||
selector: li:has(i.fa-sync-alt)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Ratio : (\\d+)"
|
||||
|
||||
search:
|
||||
paths:
|
||||
@@ -42,13 +52,14 @@
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
|
||||
description: ""
|
||||
uploader: ""
|
||||
imdb: "{{ .Query.IMDBIDShort }}"
|
||||
tvdb: ""
|
||||
tmdb: ""
|
||||
mal: ""
|
||||
sorting: created_at
|
||||
direction: desc
|
||||
sort: "created_at"
|
||||
direction: "desc"
|
||||
qty: 100
|
||||
rows:
|
||||
selector: table > tbody > tr
|
||||
@@ -67,17 +78,28 @@
|
||||
details:
|
||||
selector: a.view-torrent
|
||||
attribute: href
|
||||
banner:
|
||||
optional: true
|
||||
selector: div.torrent-poster img
|
||||
attribute: src
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/600x900", ""]
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d\.]+)
|
||||
imdb:
|
||||
optional: true
|
||||
selector: a[href*="www.imdb.com/title/tt"]
|
||||
attribute: href
|
||||
date:
|
||||
selector: time
|
||||
filters:
|
||||
@@ -106,12 +128,17 @@
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
"i[data-original-title=\"Personal Freeleech\"]": "0" # 24 Hour FreeLeech From BON Store
|
||||
"i[data-original-title=\"Special Freeleech\"]": "0" # Special FreeLeech For Certain User Groups
|
||||
"i[data-original-title=\"Freeleech Token\"]": "0" # Freeleech From Token
|
||||
"i[data-original-title=\"Global FreeLeech\"]": "0" # Global Freeleech
|
||||
"i[data-original-title=\"Freeleech\"]": "0" # Freeleech
|
||||
"i[data-original-title=\"Featured\"]": "0" # Featured Torrent
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
|
||||
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
|
||||
"i[data-original-title=\"Double Upload\"]": "2" # Single Torrent Double Upload
|
||||
"i[data-original-title=\"Global Double Upload\"]": "2" # Global Double Upload
|
||||
"i[data-original-title=\"Featured\"]": "2" # Featured Torrent
|
||||
"*": "1"
|
||||
# UNIT3D
|
||||
# UNIT3D 1.9.2
|
||||
|
@@ -6,6 +6,8 @@
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.elitetorrent.io/
|
||||
legacylinks:
|
||||
- https://www.elitetorrent.biz/
|
||||
|
||||
caps:
|
||||
|
@@ -7,7 +7,7 @@
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www.gktorrent.tv/
|
||||
- https://www.gktorrent.net/
|
||||
legacylinks:
|
||||
- https://www.gktorrent.com/
|
||||
- http://www.gktorrent.com/
|
||||
@@ -23,8 +23,9 @@
|
||||
- https://www.gktorrent.org/
|
||||
- https://www.gktorrent.me/
|
||||
- https://www.rantop.org/
|
||||
- https://www.gktorrent.net/
|
||||
- https://www.gktorrent.cx/
|
||||
- https://www.gktorrent.tv/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: movies, cat: Movies, desc: "Movies"}
|
||||
@@ -62,7 +63,9 @@
|
||||
filters:
|
||||
# now we put the date at the right place according scene naming rules using .Result.site_date
|
||||
- name: replace
|
||||
args: ["FRENCH", "{{ .Result.site_date }} FRENCH"]
|
||||
args: [" FRENCH", " {{ .Result.site_date }} FRENCH"]
|
||||
- name: replace
|
||||
args: ["MULTI", "{{ .Result.site_date }} MULTI"]
|
||||
- name: replace
|
||||
args: ["TRUEFRENCH", "{{ .Result.site_date }} TRUEFRENCH"]
|
||||
- name: replace
|
||||
|
@@ -8,6 +8,18 @@
|
||||
links:
|
||||
- https://hdf.world/
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: usetoken
|
||||
type: checkbox
|
||||
label: Always try to use the FreeLeech Token
|
||||
default: false
|
||||
|
||||
caps:
|
||||
categories:
|
||||
1: Movies
|
||||
@@ -49,9 +61,17 @@
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
fields:
|
||||
download:
|
||||
download-regular:
|
||||
selector: a[href^="torrents.php?action=download&"]
|
||||
attribute: href
|
||||
download-usetoken:
|
||||
selector: a[href^="torrents.php?action=download&"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: append
|
||||
args: "&usetoken=1"
|
||||
download:
|
||||
text: "{{if .Config.usetoken}}{{ .Result.download-usetoken }}{{else}}{{ .Result.download-regular }}{{end}}"
|
||||
title:
|
||||
selector: div.group_info
|
||||
remove: span:nth-child(1), div.tags
|
||||
@@ -210,7 +230,7 @@
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"div.group_info:contains(\"↓Free\")": "0"
|
||||
"div.group_info:contains(\"/ Free\")": "0"
|
||||
"div.group_info:contains(\"↓75%\")": "0.75"
|
||||
"div.group_info:contains(\"↓50%\")": "0.50"
|
||||
"div.group_info:contains(\"↓25%\")": "0.25"
|
||||
|
@@ -59,16 +59,12 @@
|
||||
# - path: "{{if .Keywords}}argh.php?search={{ .Keywords}}
|
||||
# {{else}}/recenti
|
||||
# {{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=0{{else}}/recenti{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=1{{else}}/recenti{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=2{{else}}/recenti{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=3{{else}}/recenti{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=4{{else}}/recenti{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=5{{else}}/recenti{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=6{{else}}/recenti{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=7{{else}}/recenti{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=8{{else}}/recenti{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=9{{else}}/recenti{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=0{{else}}/browse/0{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=1{{else}}/browse/1{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=2{{else}}/browse/2{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=3{{else}}/browse/3{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=4{{else}}/browse/4{{end}}"
|
||||
- path: "{{if .Keywords}}advsearch.php?&category={{range .Categories}}{{.}};{{end}}&search={{ .Keywords}}&order=data&by=DESC&page=5{{else}}/browse/5{{end}}"
|
||||
keywordsfilters:
|
||||
- name: diacritics
|
||||
args: replace
|
||||
|
@@ -86,6 +86,10 @@
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
captcha:
|
||||
type: image
|
||||
selector: img[src^="access_code/"]
|
||||
input: private_key
|
||||
error:
|
||||
- selector: tr td span[style="color:#FF0000;"]
|
||||
test:
|
||||
|
@@ -34,9 +34,15 @@
|
||||
paths:
|
||||
# https://monova.to/search?term=vikings+s05e05
|
||||
# https://monova.to/video
|
||||
- path: "{{if .Keywords}}search?term={{.Keywords}}{{else}}video{{end}}"
|
||||
# https://monova.org/video?page=2
|
||||
- path: "{{if .Keywords}}search?term={{.Keywords}}?page=1{{else}}video?page=1{{end}}"
|
||||
- path: "{{if .Keywords}}search?term={{.Keywords}}?page=2{{else}}video?page=2{{end}}"
|
||||
- path: "{{if .Keywords}}search?term={{.Keywords}}?page=3{{else}}video?page=3{{end}}"
|
||||
- path: "{{if .Keywords}}search?term={{.Keywords}}?page=4{{else}}video?page=4{{end}}"
|
||||
- path: "{{if .Keywords}}search?term={{.Keywords}}?page=5{{else}}video?page=5{{end}}"
|
||||
rows:
|
||||
selector: tr.desktop:not(tr.success)
|
||||
#selector: tr.desktop:not(tr.success)
|
||||
selector: tr.desktop
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
@@ -56,7 +62,11 @@
|
||||
selector: td.torrent_name a
|
||||
attribute: href
|
||||
size:
|
||||
optional: true
|
||||
selector: td.center-align
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["N/A","500 MB"]
|
||||
seeders:
|
||||
text: "1"
|
||||
leechers:
|
||||
@@ -66,9 +76,14 @@
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
date:
|
||||
optional: true
|
||||
selector: td.torrent_name
|
||||
remove: a
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["added ",""]
|
||||
- name: replace
|
||||
args: [" ago.*$",""]
|
||||
- name: replace
|
||||
args: ["min.","minutes"]
|
||||
- name: timeago
|
||||
|
126
src/Jackett.Common/Definitions/peersfm.yml
Normal file
126
src/Jackett.Common/Definitions/peersfm.yml
Normal file
@@ -0,0 +1,126 @@
|
||||
---
|
||||
site: peersfm
|
||||
name: Peers.FM
|
||||
description: "Peers.FM is a RUSSIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: ru-ru
|
||||
type: private
|
||||
encoding: windows-1251
|
||||
links:
|
||||
- https://peers.fm/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 18, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 17, cat: PC, desc: "Database"}
|
||||
- {id: 25, cat: TV, desc: "EDU"}
|
||||
- {id: 14, cat: Movies/HD, desc: "HD Видео"}
|
||||
- {id: 7, cat: Other, desc: "Images"}
|
||||
- {id: 15, cat: PC/Mac, desc: "Mac"}
|
||||
- {id: 26, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
- {id: 24, cat: TV, desc: "TV Show"}
|
||||
- {id: 1, cat: PC, desc: "WaReZ"}
|
||||
- {id: 10, cat: XXX, desc: "XXX"}
|
||||
- {id: 9, cat: Audio/Audiobook, desc: "Аудиокниги"}
|
||||
- {id: 3, cat: PC/Games, desc: "Игры/GameZ"}
|
||||
- {id: 2, cat: Audio/Video, desc: "Клипы/Концерты"}
|
||||
- {id: 8, cat: Books/Magazines, desc: "Книги/Журналы"}
|
||||
- {id: 20, cat: Audio/Lossless, desc: "Музыка/Lossless"}
|
||||
- {id: 11, cat: Audio/Mp3, desc: "Музыка/Mp3"}
|
||||
- {id: 13, cat: TV, desc: "Мультфильмы"}
|
||||
- {id: 12, cat: Other, desc: "Разное/Miscellaneous"}
|
||||
- {id: 4, cat: Movies/DVD, desc: "Фильмы DVD"}
|
||||
- {id: 6, cat: Movies, desc: "Фильмы MPEG4"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
SSL: 1
|
||||
error:
|
||||
- selector: table[width="400"] tr td
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href="/logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0=active 1=incl dead 2=only dead 3=FREE
|
||||
incldead: 1
|
||||
rows:
|
||||
selector: table[width="940px"] > tbody > tr:has(a[href^="details.php?id="])
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
download:
|
||||
selector: a[href^="download.php/"]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: a[href^="download.php/"]
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
# replace month abbreviations
|
||||
- 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: dateparse
|
||||
args: "15:04:0502 Jan 2006"
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/free_100.png"]: "0"
|
||||
img[src="pic/free_75.png"]: "0.25"
|
||||
img[src="pic/free_50.png"]: "0.5"
|
||||
img[src="pic/free_25.png"]: "0.75"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
@@ -12,55 +12,55 @@
|
||||
categorymappings:
|
||||
- {id: 17, cat: Movies/Other, desc: "VCD/SVCD - SVCD/VCD"}
|
||||
- {id: 78, cat: Movies/Other, desc: "VCD/SVCD - Estrenos VCD/SVCD"}
|
||||
- {id: 14, cat: Movies/SD, desc: "XVID - Series"}
|
||||
- {id: 45, cat: Movies/SD, desc: "XVID - Animación"}
|
||||
- {id: 46, cat: Movies/SD, desc: "XVID - Deportes"}
|
||||
- {id: 47, cat: Movies/SD, desc: "XVID - Documentales"}
|
||||
- {id: 14, cat: TV/SD, desc: "XVID - Series"}
|
||||
- {id: 45, cat: TV/Anime, desc: "XVID - Animación"}
|
||||
- {id: 46, cat: TV/Sport, desc: "XVID - Deportes"}
|
||||
- {id: 47, cat: TV/Documentary, desc: "XVID - Documentales"}
|
||||
- {id: 33, cat: Movies/SD, desc: "XVID - Estrenos"}
|
||||
- {id: 48, cat: Movies/SD, desc: "XVID - Películas"}
|
||||
- {id: 114, cat: Movies/SD, desc: "XVID - Estrenos BajaCalidad"}
|
||||
- {id: 12, cat: Movies/SD, desc: "XVID - Adulto (+18)"}
|
||||
- {id: 51, cat: Movies/SD, desc: "XVID - Música"}
|
||||
- {id: 37, cat: Movies/DVD, desc: "DVD - Animación"}
|
||||
- {id: 38, cat: Movies/DVD, desc: "DVD - Deportes"}
|
||||
- {id: 39, cat: Movies/DVD, desc: "DVD - Documentales"}
|
||||
- {id: 12, cat: XXX/XviD, desc: "XVID - Adulto (+18)"}
|
||||
- {id: 51, cat: Audio/Video, desc: "XVID - Música"}
|
||||
- {id: 37, cat: TV/Anime, desc: "DVD - Animación"}
|
||||
- {id: 38, cat: TV/Sport, desc: "DVD - Deportes"}
|
||||
- {id: 39, cat: TV/Documentary, desc: "DVD - Documentales"}
|
||||
- {id: 40, cat: Movies/DVD, desc: "DVD - Películas"}
|
||||
- {id: 41, cat: Movies/DVD, desc: "DVD - Series"}
|
||||
- {id: 42, cat: Movies/DVD, desc: "DVD - Adulto (+18)"}
|
||||
- {id: 43, cat: Movies/DVD, desc: "DVD - Música"}
|
||||
- {id: 106, cat: Movies/HD, desc: "HDRip - Animación"}
|
||||
- {id: 107, cat: Movies/HD, desc: "HDRip - Deportes"}
|
||||
- {id: 108, cat: Movies/HD, desc: "HDRip - Documentales"}
|
||||
- {id: 41, cat: TV/SD, desc: "DVD - Series"}
|
||||
- {id: 42, cat: XXX/DVD, desc: "DVD - Adulto (+18)"}
|
||||
- {id: 43, cat: Audio/Video, desc: "DVD - Música"}
|
||||
- {id: 106, cat: TV/Anime, desc: "HDRip - Animación"}
|
||||
- {id: 107, cat: TV/Sport, desc: "HDRip - Deportes"}
|
||||
- {id: 108, cat: TV/Documentary, desc: "HDRip - Documentales"}
|
||||
- {id: 109, cat: Movies/HD, desc: "HDRip - Películas"}
|
||||
- {id: 110, cat: Movies/HD, desc: "HDRip - Series"}
|
||||
- {id: 112, cat: Movies/HD, desc: "HDRip - Adulto (+18)"}
|
||||
- {id: 111, cat: Movies/HD, desc: "HDRip - Música"}
|
||||
- {id: 117, cat: Movies/3D, desc: "3D - Animación"}
|
||||
- {id: 118, cat: Movies/3D, desc: "3D - Deportes"}
|
||||
- {id: 119, cat: Movies/3D, desc: "3D - Documentales"}
|
||||
- {id: 110, cat: TV/HD, desc: "HDRip - Series"}
|
||||
- {id: 112, cat: XXX/x264, desc: "HDRip - Adulto (+18)"}
|
||||
- {id: 111, cat: Audio/Video, desc: "HDRip - Música"}
|
||||
- {id: 117, cat: TV/Anime, desc: "3D - Animación"}
|
||||
- {id: 118, cat: TV/Sport, desc: "3D - Deportes"}
|
||||
- {id: 119, cat: TV/Documentary, desc: "3D - Documentales"}
|
||||
- {id: 120, cat: Movies/3D, desc: "3D - Películas"}
|
||||
- {id: 121, cat: Movies/3D, desc: "3D - Adulto (+18)"}
|
||||
- {id: 126, cat: Movies/HD, desc: "Micro HD - Animación"}
|
||||
- {id: 127, cat: Movies/HD, desc: "Micro HD - Deportes"}
|
||||
- {id: 128, cat: Movies/HD, desc: "Micro HD - Documentales"}
|
||||
- {id: 121, cat: XXX, desc: "3D - Adulto (+18)"}
|
||||
- {id: 126, cat: TV/Anime, desc: "Micro HD - Animación"}
|
||||
- {id: 127, cat: TV/Sport, desc: "Micro HD - Deportes"}
|
||||
- {id: 128, cat: TV/Documentary, desc: "Micro HD - Documentales"}
|
||||
- {id: 57, cat: Movies/HD, desc: "Micro HD - Películas"}
|
||||
- {id: 124, cat: Movies/HD, desc: "Micro HD - Series"}
|
||||
- {id: 129, cat: Movies/HD, desc: "Micro HD - Adulto"}
|
||||
- {id: 130, cat: Movies/HD, desc: "Micro HD - Música"}
|
||||
- {id: 53, cat: Movies/HD, desc: "HD - Animación"}
|
||||
- {id: 54, cat: Movies/HD, desc: "HD - Deportes"}
|
||||
- {id: 55, cat: Movies/HD, desc: "HD - Documentales"}
|
||||
- {id: 124, cat: TV/HD, desc: "Micro HD - Series"}
|
||||
- {id: 129, cat: XXX/x264, desc: "Micro HD - Adulto"}
|
||||
- {id: 130, cat: Audio/Video, desc: "Micro HD - Música"}
|
||||
- {id: 53, cat: TV/Anime, desc: "HD - Animación"}
|
||||
- {id: 54, cat: TV/Sport, desc: "HD - Deportes"}
|
||||
- {id: 55, cat: TV/Documentary, desc: "HD - Documentales"}
|
||||
- {id: 56, cat: Movies/HD, desc: "HD - BDrip/BDremux/FullBD"}
|
||||
- {id: 58, cat: Movies/HD, desc: "HD - WEB-DL/Line Dubbed"}
|
||||
- {id: 59, cat: Movies/HD, desc: "HD - Series"}
|
||||
- {id: 63, cat: Movies/HD, desc: "HD - Adulto (+18)"}
|
||||
- {id: 61, cat: Movies/HD, desc: "HD - Música"}
|
||||
- {id: 136, cat: Movies/UHD, desc: "UHD - Animación"}
|
||||
- {id: 137, cat: Movies/UHD, desc: "UHD - Deportes"}
|
||||
- {id: 138, cat: Movies/UHD, desc: "UHD - Documentales"}
|
||||
- {id: 59, cat: TV/HD, desc: "HD - Series"}
|
||||
- {id: 63, cat: XXX/x264, desc: "HD - Adulto (+18)"}
|
||||
- {id: 61, cat: Audio/Video, desc: "HD - Música"}
|
||||
- {id: 136, cat: TV/Anime, desc: "UHD - Animación"}
|
||||
- {id: 137, cat: TV/Sport, desc: "UHD - Deportes"}
|
||||
- {id: 138, cat: TV/Documentary, desc: "UHD - Documentales"}
|
||||
- {id: 139, cat: Movies/UHD, desc: "UHD - Películas"}
|
||||
- {id: 140, cat: Movies/UHD, desc: "UHD - Series"}
|
||||
- {id: 141, cat: Movies/UHD, desc: "UHD - Adulto (+18)"}
|
||||
- {id: 140, cat: TV/UHD, desc: "UHD - Series"}
|
||||
- {id: 141, cat: XXX/x264, desc: "UHD - Adulto (+18)"}
|
||||
- {id: 69, cat: Audio/MP3, desc: "MP3"}
|
||||
- {id: 70, cat: Audio/Lossless, desc: "FLAC"}
|
||||
- {id: 71, cat: Audio/Other, desc: "Otros Formatos"}
|
||||
|
@@ -50,7 +50,7 @@
|
||||
password: "{{ .Config.password }}"
|
||||
remember: 1
|
||||
error:
|
||||
- selector: form[action$="/login"] .text-red
|
||||
- selector: div.has-error
|
||||
test:
|
||||
path: torrents
|
||||
selector: a[href$="/logout"]
|
||||
@@ -96,11 +96,11 @@
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d\.]+)
|
||||
@@ -132,12 +132,17 @@
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
"i[data-original-title=\"Personal Freeleech\"]": "0" # 24 Hour FreeLeech From BON Store
|
||||
"i[data-original-title=\"Special Freeleech\"]": "0" # Special FreeLeech For Certain User Groups
|
||||
"i[data-original-title=\"Freeleech Token\"]": "0" # Freeleech From Token
|
||||
"i[data-original-title=\"Global FreeLeech\"]": "0" # Global Freeleech
|
||||
"i[data-original-title=\"Freeleech\"]": "0" # Freeleech
|
||||
"i[data-original-title=\"Featured\"]": "0" # Featured Torrent
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
|
||||
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
|
||||
"i[data-original-title=\"Double Upload\"]": "2" # Single Torrent Double Upload
|
||||
"i[data-original-title=\"Global Double Upload\"]": "2" # Global Double Upload
|
||||
"i[data-original-title=\"Featured\"]": "2" # Featured Torrent
|
||||
"*": "1"
|
||||
# UNIT3D
|
||||
# UNIT3D 1.9.2
|
||||
|
@@ -53,8 +53,9 @@
|
||||
- path: filterTorrents
|
||||
inputs:
|
||||
search: "{{ .Keywords }}"
|
||||
description: ""
|
||||
uploader: ""
|
||||
sort: created_at
|
||||
sorting: created_at
|
||||
direction: desc
|
||||
qty: 100
|
||||
rows:
|
||||
|
129
src/Jackett.Common/Definitions/soundpark.yml
Normal file
129
src/Jackett.Common/Definitions/soundpark.yml
Normal file
@@ -0,0 +1,129 @@
|
||||
---
|
||||
site: soundpark
|
||||
name: SoundPark
|
||||
description: "SoundPark Semi-Private RUSSIAN site dedicated to MUSIC."
|
||||
language: ru-RU
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://soundpark-club.com/
|
||||
- https://soundpark-club.casa/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
"Music": Audio
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: login
|
||||
method: form
|
||||
form: form[action="/login"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
returnto: ""
|
||||
error:
|
||||
- selector: div.stdmsg_text
|
||||
test:
|
||||
path: /
|
||||
selector: a[href="/logout"]
|
||||
|
||||
download:
|
||||
selector: a[href^="/album/download-torrent/"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "{{if .Keywords}}search{{else}}music{{end}}"
|
||||
inputs:
|
||||
q: "{{ .Keywords }}"
|
||||
num: 50
|
||||
|
||||
rows:
|
||||
# first selector is for the music page (recent uploads) and the second selector is for the search page
|
||||
selector: div[itemscope] > table.browse_albums, div.div-rellist
|
||||
fields:
|
||||
title:
|
||||
selector: tr:nth-child(1) td:nth-child(1) h2 a, div h3 a
|
||||
details:
|
||||
selector: tr:nth-child(1) td:nth-child(1) h2 a, div h3 a
|
||||
attribute: href
|
||||
category:
|
||||
text: "Music"
|
||||
banner:
|
||||
selector: tr:nth-child(2) td:nth-child(1) a img, div i img
|
||||
attribute: src
|
||||
optional: true
|
||||
download:
|
||||
selector: tr:nth-child(1) td:nth-child(1) h2 a, div h3 a
|
||||
attribute: href
|
||||
# dates come in two flavours:
|
||||
# Russian, Spanish and English supported
|
||||
date:
|
||||
# fix for spanish yesterday, the time is not present
|
||||
text: now
|
||||
date:
|
||||
# Today at 22:28:10
|
||||
# Yesterday at 10:18:40
|
||||
# Вчера в 10:18:40
|
||||
# Hoy a las 07:33:17
|
||||
selector: tr:nth-child(1) > td:nth-child(2) > div.details > span:nth-child(1):contains(":"), div > span.edit:contains(":")
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" at ", " "]
|
||||
- name: re_replace
|
||||
args: ["Ayer a las|Вчера в", "Yesterday"]
|
||||
- name: re_replace
|
||||
args: ["Hoy a las|Сегодня в", "Today"]
|
||||
date:
|
||||
# 3 april 2019
|
||||
selector: tr:nth-child(1) > td:nth-child(2) > div.details > span:nth-child(1):not(:contains(":")), div > span.edit:not(:contains(":"))
|
||||
optional: true
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["enero|января", "January"]
|
||||
- name: re_replace
|
||||
args: ["febrero|февраля", "February"]
|
||||
- name: re_replace
|
||||
args: ["marzo|марта ", "March"]
|
||||
- name: re_replace
|
||||
args: ["abril|апреля", "April"]
|
||||
- name: re_replace
|
||||
args: ["mayo|мая", "May"]
|
||||
- name: re_replace
|
||||
args: ["junio|июня", "June"]
|
||||
- name: re_replace
|
||||
args: ["julio|июля", "July"]
|
||||
- name: re_replace
|
||||
args: ["agosto|августа", "August"]
|
||||
- name: re_replace
|
||||
args: ["septiembre|сентября", "September"]
|
||||
- name: re_replace
|
||||
args: ["octubre|октября", "October"]
|
||||
- name: re_replace
|
||||
args: ["noviembre|ноября", "November"]
|
||||
- name: re_replace
|
||||
args: ["diciembre|декабря", "December"]
|
||||
- name: dateparse
|
||||
args: "2 January 2006"
|
||||
size:
|
||||
# search page does not have size.
|
||||
text: "500 MB"
|
||||
size:
|
||||
# but today's page can, if the content fixed-length string contains a title that is not too long.
|
||||
selector: tr:nth-child(2) td.descr meta
|
||||
attribute: content
|
||||
optional: true
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Size: (.*?),"
|
||||
seeders:
|
||||
text: 1
|
||||
leechers:
|
||||
text: 1
|
||||
downloadvolumefactor:
|
||||
text: 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
@@ -67,24 +67,16 @@
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["heures", "hours"]
|
||||
- name: replace
|
||||
args: ["heure", "hour"]
|
||||
- name: replace
|
||||
args: ["jours", "days"]
|
||||
- name: replace
|
||||
args: ["jour", "day"]
|
||||
- name: replace
|
||||
args: ["semaines", "weeks"]
|
||||
- name: replace
|
||||
args: ["semaine", "week"]
|
||||
- name: replace
|
||||
args: ["mois", "months"]
|
||||
args: ["moi", "month"]
|
||||
- name: replace
|
||||
args: ["ans", "years"]
|
||||
- name: replace
|
||||
args: ["an", "year"]
|
||||
args: [" an", " year"]
|
||||
- name: append
|
||||
args: " ago"
|
||||
size:
|
||||
|
194
src/Jackett.Common/Definitions/tigers-dl.yml
Normal file
194
src/Jackett.Common/Definitions/tigers-dl.yml
Normal file
@@ -0,0 +1,194 @@
|
||||
---
|
||||
site: tigers-dl
|
||||
name: Tigers-dl
|
||||
description: "Tigers-dl is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-fr
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.tigers-dl.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Cam et Screener
|
||||
- {id: 81, cat: Movies, desc: "Cam ts / tc / Fr"}
|
||||
- {id: 82, cat: Movies, desc: "Cam ts / tc / US"}
|
||||
# Movies
|
||||
- {id: 11, cat: Movies, desc: "Action"}
|
||||
- {id: 13, cat: Movies, desc: "Animation"}
|
||||
- {id: 14, cat: Movies, desc: "Arts Martiaux"}
|
||||
- {id: 15, cat: Movies, desc: "Aventure"}
|
||||
- {id: 16, cat: Movies, desc: "Biographies"}
|
||||
- {id: 17, cat: Movies, desc: "Comedie dramatique"}
|
||||
- {id: 18, cat: Movies, desc: "Comedie musicale"}
|
||||
- {id: 19, cat: Movies, desc: "Comedie"}
|
||||
- {id: 20, cat: Movies, desc: "Divers"}
|
||||
- {id: 21, cat: Movies, desc: "Documentaires"}
|
||||
- {id: 22, cat: Movies, desc: "Drame"}
|
||||
- {id: 23, cat: Movies, desc: "Epouvante-horreur"}
|
||||
- {id: 24, cat: Movies, desc: "Espionnage"}
|
||||
- {id: 25, cat: Movies, desc: "Famille"}
|
||||
- {id: 26, cat: Movies, desc: "Fantastique"}
|
||||
- {id: 27, cat: Movies, desc: "Guerre"}
|
||||
- {id: 28, cat: Movies, desc: "Historique"}
|
||||
- {id: 29, cat: Movies, desc: "Musical"}
|
||||
- {id: 30, cat: Movies, desc: "Peplum"}
|
||||
- {id: 31, cat: Movies, desc: "Policier"}
|
||||
- {id: 32, cat: Movies, desc: "Romance"}
|
||||
- {id: 33, cat: Movies, desc: "Science fiction"}
|
||||
- {id: 34, cat: Movies, desc: "Thriller"}
|
||||
- {id: 35, cat: Movies, desc: "Western"}
|
||||
- {id: 42, cat: Movies, desc: "Coffret"}
|
||||
- {id: 43, cat: Movies, desc: "Trilogie"}
|
||||
- {id: 71, cat: Movies, desc: "Anciens Films"}
|
||||
# Music / Concert
|
||||
- {id: 37, cat: Audio/MP3, desc: "Music Mp3"}
|
||||
- {id: 38, cat: Audio, desc: "Concerts"}
|
||||
- {id: 39, cat: Audio, desc: "Megamix"}
|
||||
- {id: 40, cat: Audio, desc: "Compilation"}
|
||||
- {id: 41, cat: Audio, desc: "Spectacles"}
|
||||
# Animation
|
||||
- {id: 45, cat: TV, desc: "wall disney"}
|
||||
- {id: 46, cat: TV, desc: "Dessins animé"}
|
||||
- {id: 47, cat: TV/Anime, desc: "Manga"}
|
||||
# Apps
|
||||
- {id: 7, cat: PC/0day, desc: "Apps Win"}
|
||||
- {id: 8, cat: PC, desc: "Apps Linux"}
|
||||
- {id: 9, cat: PC/Mac, desc: "Apps Mac"}
|
||||
- {id: 77, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
# Games
|
||||
- {id: 49, cat: PC/Games, desc: "Jeux PC"}
|
||||
- {id: 50, cat: Console/PSP, desc: "PSP"}
|
||||
- {id: 51, cat: Console/Wii, desc: "wii"}
|
||||
- {id: 52, cat: Console/PS3, desc: "PS3"}
|
||||
- {id: 53, cat: Console/PS4, desc: "PS4"}
|
||||
- {id: 61, cat: Console/Xbox, desc: "Xbox 360"}
|
||||
# E-BOOKS
|
||||
- {id: 55, cat: Books, desc: "Livres français"}
|
||||
- {id: 56, cat: Books, desc: "BD"}
|
||||
- {id: 57, cat: Books, desc: "Journaux"}
|
||||
- {id: 58, cat: Books, desc: "Magazines"}
|
||||
- {id: 59, cat: Books, desc: "Cuisine"}
|
||||
- {id: 60, cat: Books, desc: "Science"}
|
||||
- {id: 76, cat: Books, desc: "Informatiques"}
|
||||
# Series TV
|
||||
- {id: 63, cat: TV/SD, desc: "Séries VF"}
|
||||
- {id: 64, cat: TV/HD, desc: "Séries VF 720p"}
|
||||
- {id: 65, cat: TV/HD, desc: "Séries VF 1080p"}
|
||||
- {id: 66, cat: TV/SD, desc: "Séries VOSTFR"}
|
||||
- {id: 67, cat: TV/HD, desc: "Séries VOSTFR 720p"}
|
||||
- {id: 68, cat: TV/HD, desc: "Séries VOSTFR 1080p"}
|
||||
- {id: 69, cat: TV/SD, desc: "Séries VO"}
|
||||
- {id: 70, cat: TV, desc: "Anciennes Séries !!!"}
|
||||
# Movies Porno
|
||||
- {id: 73, cat: XXX, desc: "Films porno - V.I.P"}
|
||||
- {id: 74, cat: XXX, desc: "BD porno"}
|
||||
- {id: 75, cat: XXX, desc: "Manga"}
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: form
|
||||
form: form[action="index.php?page=login"]
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.lista span[style="color:#FF0000;"]
|
||||
test:
|
||||
path: index.php
|
||||
selector: :has(a[href="logout.php"])
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://www.tigers-dl.net/index.php?page=torrents&search=venom&category=0&active=0&order=3&by=2
|
||||
- path: index.php
|
||||
inputs:
|
||||
page: "torrents"
|
||||
category: "{{range .Categories}}{{.}};{{end}}"
|
||||
search: "{{.Keywords}}"
|
||||
# 0=all 1=active only 2=dead only
|
||||
active: 0
|
||||
# 1=cat. 2=name 3=age 4=size 5=seed 6=leech 7=comm
|
||||
order: 3
|
||||
# 1=desc 2=asc
|
||||
by: 2
|
||||
|
||||
rows:
|
||||
selector: table.lista tr:has(a[href^="index.php?page=torrent-details"])
|
||||
fields:
|
||||
title:
|
||||
selector: td a[href*="torrent-details"]
|
||||
details:
|
||||
selector: td a[href*="torrent-details"]
|
||||
attribute: href
|
||||
category:
|
||||
selector: td a[href*="category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
download:
|
||||
selector: td a[href^="download.php?id="]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: td a[href*="id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.+?) width="
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
date:
|
||||
selector: td:nth-child(9)
|
||||
filters:
|
||||
filters:
|
||||
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portoguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch
|
||||
- name: re_replace
|
||||
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut)", "minute"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(dakika|minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur)", "hour"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(saat|tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden)", "hours"]
|
||||
- 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)(gün|päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen)", "days"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица)", "week"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(?i) (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(?i) (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
- name: append
|
||||
args: " ago"
|
||||
downloadvolumefactor:
|
||||
text: "1"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
@@ -63,7 +63,9 @@
|
||||
filters:
|
||||
# now we put the date at the right place according scene naming rules using .Result.site_date
|
||||
- name: replace
|
||||
args: ["FRENCH", "{{ .Result.site_date }} FRENCH"]
|
||||
args: [" FRENCH", " {{ .Result.site_date }} FRENCH"]
|
||||
- name: replace
|
||||
args: ["MULTI", "{{ .Result.site_date }} MULTI"]
|
||||
- name: replace
|
||||
args: ["TRUEFRENCH", "{{ .Result.site_date }} TRUEFRENCH"]
|
||||
- name: replace
|
||||
|
@@ -7,11 +7,12 @@
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www2.torrent9.ch/
|
||||
- https://wwv.torrent9.vg/
|
||||
legacylinks:
|
||||
- https://www.torrents9.pw/
|
||||
- https://www.torrent9.ch/
|
||||
- https://www1.torrent9.ch/
|
||||
- https://www2.torrent9.ch/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -72,7 +73,9 @@
|
||||
filters:
|
||||
# now we put the date at the right place according scene naming rules using .Result.site_date
|
||||
- name: replace
|
||||
args: ["FRENCH", "{{ .Result.site_date }} FRENCH"]
|
||||
args: [" FRENCH", " {{ .Result.site_date }} FRENCH"]
|
||||
- name: replace
|
||||
args: ["MULTI", "{{ .Result.site_date }} MULTI"]
|
||||
- name: replace
|
||||
args: ["TRUEFRENCH", "{{ .Result.site_date }} TRUEFRENCH"]
|
||||
- name: replace
|
||||
|
@@ -82,7 +82,10 @@
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
|
||||
- name: info_results
|
||||
type: info
|
||||
label: "Search results"
|
||||
default: "<ol><li>Only the Classic profile is supported.<li>Make sure to set the <b>TorrentList-Layout</b> option in your profile to <b>Klassisches Layout, sehr breite Darstellung.</b><li>And for best results set the <b>Torrents pro Seite</b> to <b>100.</b></ol>"
|
||||
login:
|
||||
path: landing.php
|
||||
method: form
|
||||
@@ -117,98 +120,60 @@
|
||||
orderby: "added"
|
||||
sort: "desc"
|
||||
rows:
|
||||
selector: table.tableinborder:has(a[href^="download_ssl.php"])
|
||||
selector: table.tablebrowse > tbody > tr:has(a[href^="download_ssl.php"])
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php"]
|
||||
attribute: title
|
||||
category:
|
||||
selector: td[style][colspan]
|
||||
case:
|
||||
td[style$="#000033;"]:contains("Android"): 65
|
||||
td[style$="#000033;"]:contains("iOS"): 83
|
||||
td[style$="#000033;"]:contains("Linux"): 107
|
||||
td[style$="#000033;"]:contains("MAC"): 48
|
||||
td[style$="#000033;"]:contains("Sonstige"): 109
|
||||
td[style$="#000033;"]:contains("Win"): 22
|
||||
td[style$="#1d2f8c;"]:contains("aBooks"): 24
|
||||
td[style$="#1d2f8c;"]:contains("Disco's"): 104
|
||||
td[style$="#1d2f8c;"]:contains("Hörspiel"): 38
|
||||
td[style$="#1d2f8c;"]:contains("Musik"): 6
|
||||
td[style$="#1d2f8c;"]:contains("Tracks"): 82
|
||||
td[style$="#1d2f8c;"]:contains("Videos"): 29
|
||||
td[style$="#000000;"]:contains("3D"): 113
|
||||
td[style$="#000000;"]:contains("HD"): 76
|
||||
td[style$="#000000;"]:contains("Packs"): 78
|
||||
td[style$="#000000;"]:contains("SD"): 75
|
||||
td[style$="#000000;"]:contains("Sonstige"): 114
|
||||
td[style$="#000000;"]:contains("Untouched"): 77
|
||||
td[style$="#55316e;"]:contains("1080p"): 54
|
||||
td[style$="#55316e;"]:contains("3D"): 5
|
||||
td[style$="#55316e;"]:contains("720p"): 55
|
||||
td[style$="#55316e;"]:contains("Anime"): 111
|
||||
td[style$="#55316e;"]:contains("BluRay"): 43
|
||||
td[style$="#55316e;"]:contains("DVDR"): 20
|
||||
td[style$="#55316e;"]:contains("Int"): 120
|
||||
td[style$="#55316e;"]:contains("Remux"): 119
|
||||
td[style$="#55316e;"]:contains("UHD"): 121
|
||||
td[style$="#55316e;"]:contains("UHD Remux"): 124
|
||||
td[style$="#55316e;"]:contains("SD"): 36
|
||||
td[style$="#620000;"]:contains("Anime"): 112
|
||||
td[style$="#620000;"]:contains("HD"): 69
|
||||
td[style$="#620000;"]:contains("Int"): 72
|
||||
td[style$="#620000;"]:contains("Packs"): 68
|
||||
td[style$="#620000;"]:contains("SD"): 66
|
||||
td[style$="#620000;"]:contains("TV-Shows"): 108
|
||||
td[style$="#003300;"]:contains("Diverses"): 117
|
||||
td[style$="#003300;"]:contains("eBooks"): 28
|
||||
td[style$="#003300;"]:contains("Sport"): 42
|
||||
td[style$="#003300;"]:contains("Tutorials"): 103
|
||||
td[style$="#003300;"]:contains("Wallpaper"): 9
|
||||
td[style$="#FF00FF;"]:contains("XXX"): 64
|
||||
td[style$="#FF3300;"]:contains("MAC"): 115
|
||||
td[style$="#FF3300;"]:contains("Nintendo"): 37
|
||||
td[style$="#FF3300;"]:contains("PC"): 4
|
||||
td[style$="#FF3300;"]:contains("PSX"): 58
|
||||
td[style$="#FF3300;"]:contains("Sonstige"): 116
|
||||
td[style$="#FF3300;"]:contains("XBOX"): 50
|
||||
selector: a[href*="cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
comments:
|
||||
selector: a[href*="&tocomm="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download_ssl.php"]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: a.thumbnail > span > img
|
||||
attribute: src
|
||||
grabs:
|
||||
selector: td:has(a[href*="&tosnatchers="])
|
||||
selector: td:nth-child(9)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d+) x"
|
||||
args: "(\\d+)"
|
||||
size:
|
||||
selector: td:has(a[href*="&filelist="])
|
||||
selector: td:nth-child(6)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(.*?) in"
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
files:
|
||||
selector: td:has(a[href*="&filelist="]) > b
|
||||
selector: a[href*="&filelist=1"]
|
||||
seeders:
|
||||
selector: td:has(a[href*="&toseeders="]) > font
|
||||
selector: td:has(a[href*="&toseeders="])
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d+)"
|
||||
leechers:
|
||||
selector: td:has(a[href*="&todlers="]) > font
|
||||
selector: td:has(a[href*="&todlers="])
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d+)"
|
||||
date:
|
||||
selector: td:has(a[href*="&tocomm="]) ~ td
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["\\s", " "]
|
||||
- name: dateparse
|
||||
args: "02.01.2006 15:04:05"
|
||||
args: "02.01.200615:04:05"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/oupic.gif"]: "0"
|
||||
img[src="pic/-40.gif"]: "0.6"
|
||||
"font[color=\"#730d1e\"]:contains(\"[OnlyUpload]\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
|
@@ -12,23 +12,20 @@
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Film"}
|
||||
- {id: 2, cat: TV, desc: "Série"}
|
||||
- {id: 3, cat: TV/Anime, desc: "Film d'Animation"}
|
||||
- {id: 5, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 3, cat: TV/Anime, desc: "Animés"}
|
||||
- {id: 5, cat: Audio, desc: "Audios"}
|
||||
- {id: 6, cat: TV/Documentary, desc: "Documentaire"}
|
||||
- {id: 7, cat: Audio, desc: "Musique"}
|
||||
- {id: 8, cat: Audio/Other, desc: "Podcast Audio"}
|
||||
- {id: 7, cat: Other, desc: "Formations"}
|
||||
- {id: 13, cat: Books/Ebook, desc: "eBooks"}
|
||||
- {id: 14, cat: TV, desc: "Spectacle"}
|
||||
- {id: 14, cat: Console, desc: "Jeux"}
|
||||
- {id: 15, cat: Audio/Video, desc: "Concert"}
|
||||
- {id: 18, cat: TV/Anime, desc: "Manga"}
|
||||
- {id: 19, cat: Books/Comics, desc: "Comics"}
|
||||
- {id: 20, cat: Books/Comics, desc: "Bande dessinée"}
|
||||
- {id: 22, cat: Console, desc: "Jeux"}
|
||||
- {id: 25, cat: PC, desc: "Logiciels"}
|
||||
- {id: 27, cat: TV, desc: "Spectacles"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: login
|
||||
@@ -37,18 +34,14 @@
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: 1
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: meta[name="csrf-token"]
|
||||
attribute: content
|
||||
error:
|
||||
- selector: form[action$="/login"] span strong
|
||||
test:
|
||||
path: /
|
||||
path: torrents
|
||||
selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: /
|
||||
path: torrents
|
||||
selector: span:has(i.fa-sync-alt)
|
||||
filters:
|
||||
- name: regexp
|
||||
@@ -59,14 +52,11 @@
|
||||
- path: filterTorrents
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
description: ""
|
||||
uploader: ""
|
||||
imdb: "{{ .Query.IMDBIDShort }}"
|
||||
tvdb: ""
|
||||
tmdb: ""
|
||||
mal: ""
|
||||
sorting: created_at
|
||||
direction: desc
|
||||
sort: "created_at"
|
||||
direction: "desc"
|
||||
qty: 100
|
||||
rows:
|
||||
selector: table > tbody > tr
|
||||
@@ -85,21 +75,17 @@
|
||||
details:
|
||||
selector: a.view-torrent
|
||||
attribute: href
|
||||
imdb:
|
||||
selector: a[href^="https://www.imdb.com/title/"]
|
||||
attribute: href
|
||||
optional: true
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
selector: td:nth-child(4)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d\.]+)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
date:
|
||||
selector: time
|
||||
filters:
|
||||
@@ -117,12 +103,13 @@
|
||||
args: " ago"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
"i[data-original-title=\"Freeleech\"]": "0" # Single Torrent Freeleech
|
||||
"i[data-original-title=\"Global freeleech\"]": "0" # Global Freeleech
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"Global freeleech\"]": "2" # Global Freeleech
|
||||
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
|
||||
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
|
||||
"*": "1"
|
||||
# UNIT3D
|
||||
# UNIT3D 1.?
|
||||
|
@@ -139,6 +139,10 @@
|
||||
type: checkbox
|
||||
label: Enhance sonarr compatibility with anime by renaming episode (xxx to exxx). Works only if episode is at the end of the query. Can disturb movies search. (back to the future 3 -> back to the future e3)
|
||||
default: false
|
||||
- name: sonarrv3hack
|
||||
type: checkbox
|
||||
label: "Enable Full season search hack: Sonarrv3 send 'Series Name SXX' but it won't match 'Series Name - Saison 01' for example so we remove the 'SXX' ==> 'Series Name'"
|
||||
default: true
|
||||
|
||||
login:
|
||||
method: form
|
||||
@@ -159,7 +163,7 @@
|
||||
keywordsfilters:
|
||||
# Full season seach hack: Sonarrv3 send 'Series Name SXX' but it won't match 'Series Name - Saison 01' for example so we remove the 'SXX' ==> 'Series Name'
|
||||
- name: re_replace
|
||||
args: ["(.*)[sS](\\d{1,4})$", "$1"]
|
||||
args: ["(.*)[sS](\\d{1,4})$", "{{ if .Config.sonarrv3hack }}$1{{else}}$1S$2{{end}}"]
|
||||
- name: replace
|
||||
args: ["\"", ""]
|
||||
- name: trim
|
||||
|
@@ -139,6 +139,12 @@ namespace Jackett.Common.Indexers
|
||||
if (string.IsNullOrWhiteSpace(query.SearchTerm) && !query.IsImdbQuery)
|
||||
{
|
||||
var results = await RequestStringWithCookies(TodayUrl);
|
||||
if (results.IsRedirect)
|
||||
{
|
||||
// re-login
|
||||
await ApplyConfiguration(null);
|
||||
results = await RequestStringWithCookies(TodayUrl);
|
||||
}
|
||||
try
|
||||
{
|
||||
const string rowsSelector = "table.torrent_table > tbody > tr:not(tr.colhead)";
|
||||
@@ -274,6 +280,12 @@ namespace Jackett.Common.Indexers
|
||||
searchUrl += "?" + queryCollection.GetQueryString();
|
||||
|
||||
var results = await RequestStringWithCookies(searchUrl);
|
||||
if (results.IsRedirect)
|
||||
{
|
||||
// re-login
|
||||
await ApplyConfiguration(null);
|
||||
results = await RequestStringWithCookies(searchUrl);
|
||||
}
|
||||
try
|
||||
{
|
||||
const string rowsSelector = "table.torrent_table > tbody > tr:not(tr.colhead)";
|
||||
|
@@ -142,7 +142,7 @@ namespace Jackett.Common.Indexers
|
||||
var qRow = row.Cq();
|
||||
|
||||
var qDetails = qRow.Find("div > a[href*=\"details.php?id=\"]"); // details link, release name get's shortened if it's to long
|
||||
var qTitle = qRow.Find("td:eq(1) .tooltip-content div:eq(0)"); // use Title from tooltip
|
||||
var qTitle = qRow.Find(".tooltip-content > div:eq(0)"); // use Title from tooltip
|
||||
if (!qTitle.Any()) // fallback to Details link if there's no tooltip
|
||||
{
|
||||
qTitle = qDetails;
|
||||
@@ -153,7 +153,7 @@ namespace Jackett.Common.Indexers
|
||||
if (qDesciption.Any())
|
||||
release.Description = qDesciption.Get(1).InnerText.Trim();
|
||||
|
||||
var qLink = row.Cq().Find("td:eq(2) a:eq(1)");
|
||||
var qLink = row.Cq().Find("a[href*=\"download.php\"]");
|
||||
release.Link = new Uri(qLink.Attr("href"));
|
||||
release.Guid = release.Link;
|
||||
release.Comments = new Uri(qDetails.Attr("href"));
|
||||
@@ -187,7 +187,11 @@ namespace Jackett.Common.Indexers
|
||||
else
|
||||
release.DownloadVolumeFactor = 1;
|
||||
|
||||
release.UploadVolumeFactor = 1;
|
||||
|
||||
if (qRow.Find("img[title^=\"x2 Torrent\"]").Length >= 1)
|
||||
release.UploadVolumeFactor = 2;
|
||||
else
|
||||
release.UploadVolumeFactor = 1;
|
||||
|
||||
releases.Add(release);
|
||||
}
|
||||
|
@@ -10,7 +10,7 @@ namespace Jackett.Common.Indexers
|
||||
public class Psytorrents : GazelleTracker
|
||||
{
|
||||
private static readonly string[] certificateHashs = new string[] {
|
||||
"455333CC651C249E1A91DFF8EFC2A5F8044FE956", // expired
|
||||
"8375026D07C1EAE2DCE7157ABF255357366AE341", // expired
|
||||
};
|
||||
|
||||
public Psytorrents(IIndexerConfigurationService configService, WebClient webClient, Logger logger, IProtectionService protectionService)
|
||||
|
@@ -8,6 +8,7 @@ using System.Threading.Tasks;
|
||||
using CsQuery;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Models.IndexerConfig.Bespoke;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using Jackett.Common.Utils;
|
||||
using Jackett.Common.Utils.Clients;
|
||||
@@ -23,9 +24,10 @@ namespace Jackett.Common.Indexers
|
||||
private string SearchUrl { get { return SiteLink + "browse.php"; } }
|
||||
private string DownloadUrl { get { return SiteLink + "download.php/{0}/download.torrent"; } }
|
||||
|
||||
private new ConfigurationDataRecaptchaLogin configData
|
||||
|
||||
private new ConfigurationDataSceneTime configData
|
||||
{
|
||||
get { return (ConfigurationDataRecaptchaLogin)base.configData; }
|
||||
get { return (ConfigurationDataSceneTime)base.configData; }
|
||||
set { base.configData = value; }
|
||||
}
|
||||
|
||||
@@ -38,7 +40,7 @@ namespace Jackett.Common.Indexers
|
||||
client: w,
|
||||
logger: l,
|
||||
p: ps,
|
||||
configData: new ConfigurationDataRecaptchaLogin("For best results, change the 'Torrents per page' setting to the maximum in your profile on the SceneTime webpage."))
|
||||
configData: new ConfigurationDataSceneTime())
|
||||
{
|
||||
Encoding = Encoding.GetEncoding("iso-8859-1");
|
||||
Language = "en-us";
|
||||
@@ -183,6 +185,11 @@ namespace Jackett.Common.Indexers
|
||||
qParams.Add("search", query.GetQueryString());
|
||||
}
|
||||
|
||||
// If Only Freeleech Enabled
|
||||
if (configData.Freeleech.Value)
|
||||
{
|
||||
qParams.Add("freeleech", "on");
|
||||
}
|
||||
var searchUrl = SearchUrl + "?" + qParams.GetQueryString();
|
||||
|
||||
var results = await RequestStringWithCookies(searchUrl);
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AngleSharp" Version="0.11.0" />
|
||||
<PackageReference Include="Autofac" Version="4.9.1" />
|
||||
<PackageReference Include="Autofac" Version="4.9.2" />
|
||||
<PackageReference Include="AutoMapper" Version="8.0.0" />
|
||||
<PackageReference Include="BencodeNET" Version="2.3.0" />
|
||||
<PackageReference Include="CloudFlareUtilities" Version="1.3.0" />
|
||||
@@ -20,11 +20,11 @@
|
||||
<PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
|
||||
<PackageReference Include="MimeMapping" Version="1.0.1.12" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
||||
<PackageReference Include="NLog" Version="4.5.11" />
|
||||
<PackageReference Include="NLog" Version="4.6.0" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.1.0" />
|
||||
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="4.5.0" />
|
||||
<PackageReference Include="System.ServiceProcess.ServiceController" Version="4.5.0" />
|
||||
<PackageReference Include="YamlDotNet" Version="5.4.0" />
|
||||
<PackageReference Include="YamlDotNet" Version="6.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@@ -0,0 +1,21 @@
|
||||
namespace Jackett.Common.Models.IndexerConfig.Bespoke
|
||||
{
|
||||
public class ConfigurationDataSceneTime : ConfigurationData
|
||||
{
|
||||
public StringItem Username { get; private set; }
|
||||
public StringItem Password { get; private set; }
|
||||
public RecaptchaItem Captcha { get; private set; }
|
||||
public BoolItem Freeleech { get; private set; }
|
||||
public DisplayItem Instructions { get; private set; }
|
||||
|
||||
public ConfigurationDataSceneTime()
|
||||
: base()
|
||||
{
|
||||
Username = new StringItem { Name = "Username" };
|
||||
Password = new StringItem { Name = "Password" };
|
||||
Captcha = new RecaptchaItem() { Name = "Recaptcha" };
|
||||
Freeleech = new BoolItem() { Name = "Freeleech Only (Optional)", Value = false };
|
||||
Instructions = new DisplayItem("For best results, change the 'Torrents per page' setting to the maximum in your profile on the SceneTime webpage.") { Name = "" };
|
||||
}
|
||||
}
|
||||
}
|
@@ -14,6 +14,7 @@ using Jackett.Common.Models.Config;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using NLog;
|
||||
using Jackett.Common.Helpers;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Jackett.Common.Utils.Clients
|
||||
{
|
||||
@@ -23,6 +24,34 @@ namespace Jackett.Common.Utils.Clients
|
||||
static protected string webProxyUrl;
|
||||
static protected IWebProxy webProxy;
|
||||
|
||||
[DebuggerNonUserCode] // avoid "Exception User-Unhandled" Visual Studio messages
|
||||
static public bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
|
||||
{
|
||||
if (sender.GetType() != typeof(HttpWebRequest))
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
|
||||
var request = (HttpWebRequest)sender;
|
||||
var hash = certificate.GetCertHashString();
|
||||
|
||||
ICollection<string> hosts;
|
||||
|
||||
trustedCertificates.TryGetValue(hash, out hosts);
|
||||
if (hosts != null)
|
||||
{
|
||||
if (hosts.Contains(request.Host))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (sslPolicyErrors != SslPolicyErrors.None)
|
||||
{
|
||||
// Throw exception with certificate details, this will cause a "Exception User-Unhandled" when running it in the Visual Studio debugger.
|
||||
// The certificate is only available inside this function, so we can't catch it at the calling method.
|
||||
throw new Exception("certificate validation failed: " + certificate.ToString());
|
||||
}
|
||||
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
}
|
||||
|
||||
static public void InitProxy(ServerConfig serverConfig)
|
||||
{
|
||||
// dispose old SocksWebProxy
|
||||
@@ -100,30 +129,7 @@ namespace Jackett.Common.Utils.Clients
|
||||
}
|
||||
|
||||
// custom handler for our own internal certificates
|
||||
ServicePointManager.ServerCertificateValidationCallback += delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
|
||||
{
|
||||
if (sender.GetType() != typeof(HttpWebRequest))
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
|
||||
var request = (HttpWebRequest)sender;
|
||||
var hash = certificate.GetCertHashString();
|
||||
|
||||
ICollection<string> hosts;
|
||||
|
||||
trustedCertificates.TryGetValue(hash, out hosts);
|
||||
if (hosts != null)
|
||||
{
|
||||
if (hosts.Contains(request.Host))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (sslPolicyErrors != SslPolicyErrors.None)
|
||||
{
|
||||
throw new Exception("certificate validation failed: " + certificate.ToString());
|
||||
}
|
||||
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
};
|
||||
ServicePointManager.ServerCertificateValidationCallback += ValidateCertificate;
|
||||
}
|
||||
|
||||
override protected async Task<WebClientByteResult> Run(WebRequest webRequest)
|
||||
|
@@ -14,6 +14,7 @@ using Jackett.Common.Models.Config;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using NLog;
|
||||
using Jackett.Common.Helpers;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Jackett.Common.Utils.Clients
|
||||
{
|
||||
@@ -30,6 +31,34 @@ namespace Jackett.Common.Utils.Clients
|
||||
static protected string webProxyUrl;
|
||||
static protected IWebProxy webProxy;
|
||||
|
||||
[DebuggerNonUserCode] // avoid "Exception User-Unhandled" Visual Studio messages
|
||||
static public bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
|
||||
{
|
||||
if (sender.GetType() != typeof(HttpWebRequest))
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
|
||||
var request = (HttpWebRequest)sender;
|
||||
var hash = certificate.GetCertHashString();
|
||||
|
||||
ICollection<string> hosts;
|
||||
|
||||
trustedCertificates.TryGetValue(hash, out hosts);
|
||||
if (hosts != null)
|
||||
{
|
||||
if (hosts.Contains(request.Host))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (sslPolicyErrors != SslPolicyErrors.None)
|
||||
{
|
||||
// Throw exception with certificate details, this will cause a "Exception User-Unhandled" when running it in the Visual Studio debugger.
|
||||
// The certificate is only available inside this function, so we can't catch it at the calling method.
|
||||
throw new Exception("certificate validation failed: " + certificate.ToString());
|
||||
}
|
||||
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
}
|
||||
|
||||
static public void InitProxy(ServerConfig serverConfig)
|
||||
{
|
||||
// dispose old SocksWebProxy
|
||||
@@ -134,30 +163,7 @@ namespace Jackett.Common.Utils.Clients
|
||||
ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072;
|
||||
|
||||
// custom handler for our own internal certificates
|
||||
ServicePointManager.ServerCertificateValidationCallback += delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
|
||||
{
|
||||
if (sender.GetType() != typeof(HttpWebRequest))
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
|
||||
var request = (HttpWebRequest)sender;
|
||||
var hash = certificate.GetCertHashString();
|
||||
|
||||
ICollection<string> hosts;
|
||||
|
||||
trustedCertificates.TryGetValue(hash, out hosts);
|
||||
if (hosts != null)
|
||||
{
|
||||
if (hosts.Contains(request.Host))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (sslPolicyErrors != SslPolicyErrors.None)
|
||||
{
|
||||
throw new Exception("certificate validation failed: " + certificate.ToString());
|
||||
}
|
||||
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
};
|
||||
ServicePointManager.ServerCertificateValidationCallback += ValidateCertificate;
|
||||
}
|
||||
|
||||
override protected async Task<WebClientByteResult> Run(WebRequest webRequest)
|
||||
|
@@ -14,6 +14,7 @@ using Jackett.Common.Models.Config;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using NLog;
|
||||
using Jackett.Common.Helpers;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Jackett.Common.Utils.Clients
|
||||
{
|
||||
@@ -24,6 +25,32 @@ namespace Jackett.Common.Utils.Clients
|
||||
static protected string webProxyUrl;
|
||||
static protected IWebProxy webProxy;
|
||||
|
||||
[DebuggerNonUserCode] // avoid "Exception User-Unhandled" Visual Studio messages
|
||||
static public bool ValidateCertificate(HttpRequestMessage request, X509Certificate2 certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
|
||||
{
|
||||
{
|
||||
var hash = certificate.GetCertHashString();
|
||||
|
||||
ICollection<string> hosts;
|
||||
|
||||
trustedCertificates.TryGetValue(hash, out hosts);
|
||||
if (hosts != null)
|
||||
{
|
||||
if (hosts.Contains(request.RequestUri.Host))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (sslPolicyErrors != SslPolicyErrors.None)
|
||||
{
|
||||
// Throw exception with certificate details, this will cause a "Exception User-Unhandled" when running it in the Visual Studio debugger.
|
||||
// The certificate is only available inside this function, so we can't catch it at the calling method.
|
||||
throw new Exception("certificate validation failed: " + certificate.ToString());
|
||||
}
|
||||
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
}
|
||||
}
|
||||
|
||||
static public void InitProxy(ServerConfig serverConfig)
|
||||
{
|
||||
// dispose old SocksWebProxy
|
||||
@@ -137,26 +164,7 @@ namespace Jackett.Common.Utils.Clients
|
||||
})
|
||||
{
|
||||
// custom certificate validation handler (netcore version)
|
||||
clientHandlr.ServerCertificateCustomValidationCallback = (request, certificate, chain, sslPolicyErrors) =>
|
||||
{
|
||||
var hash = certificate.GetCertHashString();
|
||||
|
||||
ICollection<string> hosts;
|
||||
|
||||
trustedCertificates.TryGetValue(hash, out hosts);
|
||||
if (hosts != null)
|
||||
{
|
||||
if (hosts.Contains(request.RequestUri.Host))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (sslPolicyErrors != SslPolicyErrors.None)
|
||||
{
|
||||
throw new Exception("certificate validation failed: " + certificate.ToString());
|
||||
}
|
||||
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
};
|
||||
clientHandlr.ServerCertificateCustomValidationCallback = ValidateCertificate;
|
||||
|
||||
clearanceHandlr.InnerHandler = clientHandlr;
|
||||
using (var client = new HttpClient(clearanceHandlr))
|
||||
|
@@ -27,7 +27,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac" Version="4.9.1" />
|
||||
<PackageReference Include="Autofac" Version="4.9.2" />
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.4.0" />
|
||||
<PackageReference Include="AutoMapper" Version="8.0.0" />
|
||||
<PackageReference Include="CommandLineParser" Version="2.4.3" />
|
||||
@@ -39,8 +39,8 @@
|
||||
<PackageReference Include="Microsoft.AspNetCore.Rewrite" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0" />
|
||||
<PackageReference Include="NLog" Version="4.5.11" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="4.8.0" />
|
||||
<PackageReference Include="NLog" Version="4.6.0" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="4.8.1" />
|
||||
<PackageReference Include="System.ServiceProcess.ServiceController" Version="4.5.0" />
|
||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.5.1" />
|
||||
</ItemGroup>
|
||||
|
@@ -21,14 +21,14 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac" Version="4.9.1" />
|
||||
<PackageReference Include="Autofac" Version="4.9.2" />
|
||||
<PackageReference Include="FluentAssertions" Version="5.6.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="1.4.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="1.4.0" />
|
||||
<PackageReference Include="NUnit" Version="3.11.0" />
|
||||
<PackageReference Include="NUnit.ConsoleRunner" Version="3.9.0" />
|
||||
<PackageReference Include="NUnit.ConsoleRunner" Version="3.10.0" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
@@ -269,9 +269,6 @@ namespace Jackett.Updater
|
||||
"appsettings.Development.json",
|
||||
"CurlSharp.dll",
|
||||
"CurlSharp.pdb",
|
||||
"Jackett.dll",
|
||||
"Jackett.dll.config",
|
||||
"Jackett.pdb",
|
||||
"Autofac.Integration.WebApi.dll",
|
||||
"Microsoft.Owin.dll",
|
||||
"Microsoft.Owin.FileSystems.dll",
|
||||
|
Reference in New Issue
Block a user