mirror of
https://github.com/Jackett/Jackett.git
synced 2026-01-01 10:31:45 +01:00
Compare commits
398 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
108213f098 | ||
|
|
861271ac04 | ||
|
|
b378f74202 | ||
|
|
866e1df174 | ||
|
|
0bb231eeca | ||
|
|
fb5c82ff85 | ||
|
|
d9f57b4e13 | ||
|
|
4676972493 | ||
|
|
1d3ac34011 | ||
|
|
634a860f5c | ||
|
|
eb00665df1 | ||
|
|
5e77d27021 | ||
|
|
8fec3ede4e | ||
|
|
ae6d5ccfc6 | ||
|
|
e309d96c51 | ||
|
|
2a3b42f83a | ||
|
|
4819a3c8ed | ||
|
|
34d091942a | ||
|
|
ee2abe6751 | ||
|
|
27f0448caf | ||
|
|
6493037251 | ||
|
|
0cd11e1882 | ||
|
|
cfdafa01c9 | ||
|
|
e3852bcb1b | ||
|
|
e33e95c1b2 | ||
|
|
3d0e777d22 | ||
|
|
aeb3d49c06 | ||
|
|
c2cf5adeb2 | ||
|
|
40ab7280ca | ||
|
|
0c37a191fd | ||
|
|
19547bc58f | ||
|
|
bcbe18214b | ||
|
|
eb60a6854c | ||
|
|
11406697be | ||
|
|
b2b576a72d | ||
|
|
e537e4976e | ||
|
|
490254d16b | ||
|
|
a5cc7d973f | ||
|
|
3e000453a5 | ||
|
|
8f090fabef | ||
|
|
91eb4c37cb | ||
|
|
da43f17558 | ||
|
|
3b3c3b0947 | ||
|
|
06e386c253 | ||
|
|
a2ae2d3384 | ||
|
|
3532a73d59 | ||
|
|
b7daffea87 | ||
|
|
e7b9f8c5ec | ||
|
|
9ada58a6e3 | ||
|
|
c8d974cf52 | ||
|
|
c544de8fed | ||
|
|
93ec102a86 | ||
|
|
92bda2b09b | ||
|
|
1cd0358531 | ||
|
|
222fec2fd0 | ||
|
|
3790cbb894 | ||
|
|
05d5798046 | ||
|
|
9e9deb17c7 | ||
|
|
2aedc4f335 | ||
|
|
dfa708e355 | ||
|
|
6d1997ef96 | ||
|
|
db479d8de8 | ||
|
|
741e6407ce | ||
|
|
141f3e57e5 | ||
|
|
00027a41c1 | ||
|
|
e754d3da9f | ||
|
|
bf54a2f171 | ||
|
|
7b7d0082b6 | ||
|
|
3614b1b3da | ||
|
|
39b0670a29 | ||
|
|
1689c46c91 | ||
|
|
0143bdfe14 | ||
|
|
93a9568a77 | ||
|
|
40079b0365 | ||
|
|
168f04e786 | ||
|
|
861a33f4af | ||
|
|
57c52d9eb2 | ||
|
|
f574dedbe8 | ||
|
|
a6d2ecffbb | ||
|
|
300354ef13 | ||
|
|
4a519226f5 | ||
|
|
6a4f6e3638 | ||
|
|
157b042c0a | ||
|
|
9385218c9d | ||
|
|
7482e8d9c4 | ||
|
|
5501d282de | ||
|
|
123bb4af5f | ||
|
|
4d36dae634 | ||
|
|
eac11ab807 | ||
|
|
b6892f1dc6 | ||
|
|
0695b8f84e | ||
|
|
04995f1a10 | ||
|
|
44d9b3ecc8 | ||
|
|
a311509b7c | ||
|
|
0db4229bd4 | ||
|
|
441aad5a18 | ||
|
|
d8d911abf8 | ||
|
|
7423e3f5bc | ||
|
|
48fea35645 | ||
|
|
cef72f11d0 | ||
|
|
ad3039b70f | ||
|
|
73d590cebd | ||
|
|
1d0790471f | ||
|
|
3b3048aa01 | ||
|
|
183fb56b0a | ||
|
|
466be31e6f | ||
|
|
db42bc944b | ||
|
|
102e7338f9 | ||
|
|
01b30b0743 | ||
|
|
947dbac485 | ||
|
|
0d29e85c80 | ||
|
|
89a28e2e95 | ||
|
|
66b2c20b42 | ||
|
|
e6035bcaa5 | ||
|
|
68aac78360 | ||
|
|
4b02141250 | ||
|
|
8e1d321817 | ||
|
|
3354d37aa3 | ||
|
|
7675214092 | ||
|
|
7af8e1916e | ||
|
|
6d4720e58f | ||
|
|
9928815777 | ||
|
|
a7d65fedfb | ||
|
|
464b142130 | ||
|
|
e1bcdce019 | ||
|
|
ced9bad4f8 | ||
|
|
c6140d7eef | ||
|
|
97f4a9de5d | ||
|
|
be1f6a43a7 | ||
|
|
c8d96990d5 | ||
|
|
e9db6edce8 | ||
|
|
eee7f2999f | ||
|
|
01e5ad792e | ||
|
|
aa02644e05 | ||
|
|
26dd740a53 | ||
|
|
952b6d7f95 | ||
|
|
e8742554c2 | ||
|
|
7229da2fbb | ||
|
|
39db77eb7c | ||
|
|
d866758a0d | ||
|
|
4d72d08e26 | ||
|
|
2e169a8c3a | ||
|
|
978ce0827f | ||
|
|
fe94e4833d | ||
|
|
592f04389f | ||
|
|
5992e6d701 | ||
|
|
d44ebb7d43 | ||
|
|
852142e9ae | ||
|
|
3ba52f15dd | ||
|
|
502a4dc763 | ||
|
|
d336a761a7 | ||
|
|
9240f9d72b | ||
|
|
cab91ff346 | ||
|
|
2a327549f5 | ||
|
|
5748881a29 | ||
|
|
69aa38c1ff | ||
|
|
aa157cfcb9 | ||
|
|
f963f8d173 | ||
|
|
1d75164aaf | ||
|
|
f503f0543e | ||
|
|
333f7297fa | ||
|
|
3fdfc4a142 | ||
|
|
0ac58224f9 | ||
|
|
3d08fcb4b9 | ||
|
|
c2f11306b1 | ||
|
|
07a0c2c828 | ||
|
|
28eaa637df | ||
|
|
8707e6b2e9 | ||
|
|
7a8d83b693 | ||
|
|
403c0ef7e4 | ||
|
|
3374c14311 | ||
|
|
9eade51d89 | ||
|
|
bc9e4a30cb | ||
|
|
0103c48c97 | ||
|
|
29ecf8a584 | ||
|
|
eec07bc5b8 | ||
|
|
bf23878477 | ||
|
|
043085e8f3 | ||
|
|
39e612d60c | ||
|
|
6f8b1b749d | ||
|
|
439e9296f9 | ||
|
|
1332b49370 | ||
|
|
33a7db5ec4 | ||
|
|
2075e914eb | ||
|
|
758ad91a55 | ||
|
|
e9b604d3c4 | ||
|
|
51aa4f35bd | ||
|
|
fc55882f16 | ||
|
|
d03cbefa57 | ||
|
|
e079c90535 | ||
|
|
8591add0bf | ||
|
|
fbbe4f9c45 | ||
|
|
289c5cd24f | ||
|
|
84a45737d3 | ||
|
|
d083cf774a | ||
|
|
f2ce167bbf | ||
|
|
4e04bbbcf4 | ||
|
|
7f5d00e89f | ||
|
|
f777114644 | ||
|
|
7c63a6b8f2 | ||
|
|
f0140999bf | ||
|
|
6f0a249503 | ||
|
|
2e79500f50 | ||
|
|
720b5971d3 | ||
|
|
dba63857e4 | ||
|
|
b05ee653d3 | ||
|
|
84df60368c | ||
|
|
76102ac171 | ||
|
|
3c6e77a2ca | ||
|
|
f6272032a6 | ||
|
|
41fb5e89b4 | ||
|
|
42c9967844 | ||
|
|
e740e2434d | ||
|
|
057df28d1b | ||
|
|
6fbc4b6904 | ||
|
|
cab608f0ec | ||
|
|
f5592d04e2 | ||
|
|
5138496436 | ||
|
|
bcc1e5ff6c | ||
|
|
7eb57d8e9a | ||
|
|
929c12ccc6 | ||
|
|
1ba1b91b8e | ||
|
|
d90a2613fc | ||
|
|
0d25ed2921 | ||
|
|
a07bffa773 | ||
|
|
f0da6ce247 | ||
|
|
32d0a8d703 | ||
|
|
6e2087d5dc | ||
|
|
82f330f4af | ||
|
|
14f86107e1 | ||
|
|
845faf9066 | ||
|
|
7c2b801ee9 | ||
|
|
f96dca5653 | ||
|
|
0e4e9f4253 | ||
|
|
dc38f8c041 | ||
|
|
17f544be36 | ||
|
|
fb59e84def | ||
|
|
de8e33e647 | ||
|
|
cf1bbc603e | ||
|
|
ecc60e59d8 | ||
|
|
e7be6faf2f | ||
|
|
9e3076dde6 | ||
|
|
35103206cf | ||
|
|
29cf00560f | ||
|
|
9ef9302808 | ||
|
|
616b436648 | ||
|
|
702e975d57 | ||
|
|
6c90016c0c | ||
|
|
90152a7eed | ||
|
|
dabd95655b | ||
|
|
4f938e3ea8 | ||
|
|
f21a721ddb | ||
|
|
7d65e60750 | ||
|
|
c87f1b3949 | ||
|
|
08b471fd1e | ||
|
|
4a0d2dcc57 | ||
|
|
91eae526f9 | ||
|
|
11fd2db5a5 | ||
|
|
75e7ce81c2 | ||
|
|
345602926e | ||
|
|
780ea4c631 | ||
|
|
cf9d87a7d8 | ||
|
|
3f2d6f0cee | ||
|
|
22cf450d07 | ||
|
|
8bd7233756 | ||
|
|
2807a71e0e | ||
|
|
b60bcda109 | ||
|
|
4d36165cdf | ||
|
|
44de6e5459 | ||
|
|
d31c593d4b | ||
|
|
0473029277 | ||
|
|
3bef19cbfe | ||
|
|
79fc4850ed | ||
|
|
7cf24e906a | ||
|
|
9870d38cbb | ||
|
|
994604271b | ||
|
|
81f2c7e91c | ||
|
|
b0788e491e | ||
|
|
0faed4e6b0 | ||
|
|
73a3a9aca9 | ||
|
|
1dfe9db7da | ||
|
|
fa56b1d15f | ||
|
|
b31c5d41ca | ||
|
|
df22e39b4e | ||
|
|
08d1e2cc07 | ||
|
|
569558aea5 | ||
|
|
2ceb41324d | ||
|
|
d95e55137a | ||
|
|
57b7173237 | ||
|
|
ce8570c656 | ||
|
|
d8e6f0ec57 | ||
|
|
b4948c924d | ||
|
|
7c36d3a892 | ||
|
|
9aedd68f1c | ||
|
|
0afd9c638a | ||
|
|
3b4eceed87 | ||
|
|
7c7c27847f | ||
|
|
95398b4f06 | ||
|
|
6857d0ad24 | ||
|
|
2cfef12289 | ||
|
|
a3c443e69b | ||
|
|
31ce2ca545 | ||
|
|
12d8340114 | ||
|
|
a4d5c98e12 | ||
|
|
12b60b5a9e | ||
|
|
213f8114ba | ||
|
|
c8a2482fc1 | ||
|
|
8478fb7580 | ||
|
|
cc10d9f233 | ||
|
|
805f0f4e0d | ||
|
|
c5eb78602a | ||
|
|
d7b5ab8595 | ||
|
|
562cfd57a6 | ||
|
|
3d84d12c96 | ||
|
|
2a71dafb0e | ||
|
|
02e2bcdbc2 | ||
|
|
19b496b5c8 | ||
|
|
5c03cab5a2 | ||
|
|
183f9f5649 | ||
|
|
a46b75bef7 | ||
|
|
f6e0d7d239 | ||
|
|
6d893a1ac3 | ||
|
|
175509abc8 | ||
|
|
8900ece8ab | ||
|
|
37dc039de4 | ||
|
|
15b6afb11e | ||
|
|
753913ccc7 | ||
|
|
27d4f2108e | ||
|
|
2fb045e94a | ||
|
|
7756e8da41 | ||
|
|
823e06b84e | ||
|
|
f12571d767 | ||
|
|
bf1e3a1a53 | ||
|
|
6276789738 | ||
|
|
4b66273c19 | ||
|
|
0fad901ecb | ||
|
|
3426e66b3b | ||
|
|
b85721e584 | ||
|
|
16c2e5521a | ||
|
|
42d8c30147 | ||
|
|
338a4cbf6e | ||
|
|
813c449065 | ||
|
|
03549b97aa | ||
|
|
7ee03a9e03 | ||
|
|
8c6ae89204 | ||
|
|
d5c902eb82 | ||
|
|
8a037295d0 | ||
|
|
c4caa62f8b | ||
|
|
d3ea4135b9 | ||
|
|
d0d62eeae9 | ||
|
|
aa6e7b148b | ||
|
|
251a631523 | ||
|
|
4dd49985c3 | ||
|
|
c24368f8f9 | ||
|
|
6b35da8ad0 | ||
|
|
026fa22a37 | ||
|
|
9d6d5265e2 | ||
|
|
a86c30fdd4 | ||
|
|
378b63a658 | ||
|
|
e09092bbaf | ||
|
|
ffdce26639 | ||
|
|
797eff5200 | ||
|
|
b942689dad | ||
|
|
9479eb20b7 | ||
|
|
79d87f4809 | ||
|
|
3a0d99acbe | ||
|
|
6b3f42a667 | ||
|
|
a2d9954a1d | ||
|
|
f5fa7b5217 | ||
|
|
bab4620c04 | ||
|
|
c0b665062e | ||
|
|
117022151b | ||
|
|
a96b7cfca9 | ||
|
|
d8b83c6b07 | ||
|
|
0594e1c52d | ||
|
|
a9c5477003 | ||
|
|
a85e00f236 | ||
|
|
fb3ef03f77 | ||
|
|
77bc342ce9 | ||
|
|
4785955941 | ||
|
|
60b9a34cea | ||
|
|
2e7f2056c4 | ||
|
|
e1afea35b7 | ||
|
|
566817c7cd | ||
|
|
e8eb4319df | ||
|
|
b002220cc3 | ||
|
|
458395d393 | ||
|
|
44aa396564 | ||
|
|
049d035c96 | ||
|
|
14f530a32c | ||
|
|
f2def1f615 | ||
|
|
ed601a0f7d | ||
|
|
271a386722 | ||
|
|
21d7c0e94f | ||
|
|
f9a2da83b2 | ||
|
|
daf2ea202c | ||
|
|
1a57028ca6 | ||
|
|
0a2176fff4 |
15
.gitattributes
vendored
Normal file
15
.gitattributes
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
# Set the default behavior, in case people don't have core.autocrlf set.
|
||||
* text=auto
|
||||
|
||||
# Explicitly declare text files you want to always be normalized and converted
|
||||
# to native line endings on checkout.
|
||||
|
||||
# Declare files that will always have LF line endings on checkout.
|
||||
*.yml text eol=lf
|
||||
|
||||
# Declare files that will always have CRLF line endings on checkout.
|
||||
*.cs text eol=crlf
|
||||
|
||||
# Denote all files that are truly binary and should not be modified.
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
100
.github/appveyor.yml
vendored
Normal file
100
.github/appveyor.yml
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
version: 0.7.{build}
|
||||
skip_tags: true
|
||||
image: Visual Studio 2015
|
||||
configuration: Release
|
||||
assembly_info:
|
||||
patch: true
|
||||
file: '**\AssemblyInfo.*'
|
||||
assembly_version: '{version}'
|
||||
assembly_file_version: '{version}'
|
||||
assembly_informational_version: '{version}'
|
||||
install:
|
||||
- cmd: choco install InnoSetup
|
||||
before_build:
|
||||
- cmd: nuget restore src\Jackett.sln
|
||||
build:
|
||||
verbosity: minimal
|
||||
after_build:
|
||||
- cmd: >-
|
||||
xcopy src\Jackett.Console\bin\Release build.windows\ /e /y
|
||||
|
||||
copy /Y src\Jackett.Service\bin\Release\JackettService.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\
|
||||
|
||||
copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\
|
||||
|
||||
copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\
|
||||
|
||||
copy /Y LICENSE build.windows\LICENSE
|
||||
|
||||
copy /Y README.md build.windows\README.md
|
||||
|
||||
|
||||
xcopy build.windows WindowsBuild\Jackett\ /e /y
|
||||
|
||||
|
||||
msbuild src\Jackett.sln /t:Clean /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
|
||||
|
||||
"C:\Program Files (x86)\Mono\bin\xbuild.bat" src\Jackett.sln /t:Build /p:Configuration=Release /verbosity:minimal /tv:12.0
|
||||
|
||||
|
||||
xcopy src\Jackett.Console\bin\Release build.mono\ /e /y
|
||||
|
||||
copy /Y src\Jackett.Service\bin\Release\JackettService.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\
|
||||
|
||||
copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\
|
||||
|
||||
copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\
|
||||
|
||||
copy /Y LICENSE build.mono\LICENSE
|
||||
|
||||
copy /Y README.md build.mono\README.md
|
||||
|
||||
copy /Y Upstart.config build.mono\Upstart.config
|
||||
|
||||
|
||||
xcopy build.mono MonoBuild\Jackett\ /e /y
|
||||
|
||||
|
||||
"C:\Program Files (x86)\Inno Setup 5\ISCC.exe" Installer.iss
|
||||
|
||||
RENAME Output\setup.exe Jackett.Installer.Windows.exe
|
||||
|
||||
MOVE Output\Jackett.Installer.Windows.exe %APPVEYOR_BUILD_FOLDER%
|
||||
|
||||
|
||||
cd WindowsBuild
|
||||
|
||||
7z a -tzip -r "%APPVEYOR_BUILD_FOLDER%\Jackett.Binaries.Windows.zip" "Jackett\"
|
||||
|
||||
|
||||
cd %APPVEYOR_BUILD_FOLDER%
|
||||
|
||||
cd MonoBuild
|
||||
|
||||
7z a -ttar "%APPVEYOR_BUILD_FOLDER%\Jackett.Binaries.Mono.tar" "Jackett\"
|
||||
|
||||
cd %APPVEYOR_BUILD_FOLDER%
|
||||
|
||||
7z a -tgzip "Jackett.Binaries.Mono.tar.gz" "Jackett.Binaries.Mono.tar"
|
||||
|
||||
|
||||
appveyor PushArtifact Jackett.Installer.Windows.exe
|
||||
|
||||
appveyor PushArtifact Jackett.Binaries.Windows.zip
|
||||
|
||||
appveyor PushArtifact Jackett.Binaries.Mono.tar.gz
|
||||
deploy:
|
||||
- provider: GitHub
|
||||
tag: v$(appveyor_build_version)
|
||||
auth_token:
|
||||
secure: hOg+16YTIbq4kO9u4D1YVOTbWDqgCX6mAQYMbnmBBSw2CiUsZh7OKbupoUb3FtWa
|
||||
draft: true
|
||||
on:
|
||||
branch: master
|
||||
notifications:
|
||||
- provider: GitHubPullRequest
|
||||
auth_token:
|
||||
secure: k6ZZACPbKcvAFiXe/uOmY6Ofs4aw2rgKEWMNA8EilQpdJ6o7ef31we4DPn3SXZzx
|
||||
on_build_success: true
|
||||
on_build_failure: true
|
||||
on_build_status_changed: true
|
||||
BIN
.github/firefox-socks-proxy-settings.png
vendored
Normal file
BIN
.github/firefox-socks-proxy-settings.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
BIN
.github/putty-tunnels-settings.png
vendored
Normal file
BIN
.github/putty-tunnels-settings.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
620
README.md
620
README.md
@@ -1,277 +1,343 @@
|
||||
# Jackett
|
||||
|
||||
[](https://github.com/Jackett/Jackett/issues)
|
||||
[](https://github.com/Jackett/Jackett/pulls)
|
||||
[](https://github.com/Jackett/Jackett/releases/latest)
|
||||
[](https://hub.docker.com/r/linuxserver/jackett/)
|
||||
|
||||
This project is a new fork and is recruiting development help. If you are able to help out please contact us.
|
||||
|
||||
Jackett works as a proxy server: it translates queries from apps ([Sonarr](https://github.com/Sonarr/Sonarr), [Radarr](https://github.com/Radarr/Radarr), [SickRage](https://sickrage.github.io/), [CouchPotato](https://couchpota.to/), [Mylar](https://github.com/evilhero/mylar), etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
|
||||
|
||||
Developer note: The software implements the [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/dev/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
|
||||
|
||||
|
||||
|
||||
#### Supported Systems
|
||||
* Windows using .NET 4.5
|
||||
* Linux and OSX using Mono 4 (mono 3 is no longer supported).
|
||||
|
||||
### Supported Public Trackers
|
||||
* EZTV
|
||||
* Il Corsaro Nero <!-- maintained by bonny1992 -->
|
||||
* Isohunt
|
||||
* KickAssTorrent
|
||||
* KickAssTorrent (kat.how clone)
|
||||
* LimeTorrents
|
||||
* Nyaa <!-- maintained by bonny1992 -->
|
||||
* RARBG
|
||||
* ShowRSS
|
||||
* Sky torrents
|
||||
* The Pirate Bay
|
||||
* TNTVillage <!-- maintained by bonny1992 -->
|
||||
* TorrentProject
|
||||
* Torrentz2
|
||||
|
||||
### Supported Private Trackers
|
||||
* 2 Fast 4 You
|
||||
* 3D Torrents
|
||||
* 7tor
|
||||
* Abnormal
|
||||
* Acid-Lounge
|
||||
* AlphaRatio
|
||||
* Andraste
|
||||
* AnimeBytes
|
||||
* AnimeTorrents
|
||||
* AOX
|
||||
* Apollo (XANAX)
|
||||
* ArabaFenice
|
||||
* AsianDVDClub
|
||||
* Audiobook Torrents
|
||||
* Avistaz
|
||||
* BakaBT [![(invite needed)][inviteneeded]](#)
|
||||
* bB
|
||||
* Best Friends
|
||||
* BeyondHD
|
||||
* BIGTorrent
|
||||
* Bit-City Reloaded
|
||||
* BIT-HDTV
|
||||
* BitHQ
|
||||
* BitHUmen
|
||||
* BitMeTV
|
||||
* BitSoup [![(invite needed)][inviteneeded]](#)
|
||||
* Bitspyder
|
||||
* Blu-bits
|
||||
* BlueBird
|
||||
* BroadcastTheNet [![(invite needed)][inviteneeded]](#)
|
||||
* BTN
|
||||
* BTNext
|
||||
* Carpathians
|
||||
* CHDBits
|
||||
* Cinematik
|
||||
* Cinemageddon
|
||||
* CinemaZ
|
||||
* Classix
|
||||
* CZTeam
|
||||
* DanishBits
|
||||
* DataScene
|
||||
* Demonoid
|
||||
* Diablo Torrent
|
||||
* DigitalHive
|
||||
* Dragon World (DTW)
|
||||
* Dragonworld Reloaded
|
||||
* Dream Team
|
||||
* EoT-Forum
|
||||
* eStone
|
||||
* Ethor.net (Thor's Land)
|
||||
* FANO.IN
|
||||
* FileList
|
||||
* Freedom-HD
|
||||
* Freshon
|
||||
* FullMixMusic
|
||||
* FunFile
|
||||
* FunkyTorrents
|
||||
* Fuzer
|
||||
* GFXPeers
|
||||
* Ghost City
|
||||
* GigaTorrents [![(invite needed)][inviteneeded]](#)
|
||||
* GimmePeers <!-- maintained by jamesb2147 -->
|
||||
* GODS [![(invite needed)][inviteneeded]](#)
|
||||
* Gormogon
|
||||
* Greek Team
|
||||
* Hardbay
|
||||
* HD4Free
|
||||
* HD-Space
|
||||
* HD-Torrents
|
||||
* HD-Bits.com
|
||||
* HDBits
|
||||
* HDChina
|
||||
* HDClub
|
||||
* HDHome
|
||||
* HDSky
|
||||
* HDTorrents.it
|
||||
* Hebits
|
||||
* Hon3y HD
|
||||
* Hounddawgs
|
||||
* House-of-Torrents
|
||||
* Hyperay
|
||||
* ICE Torrent
|
||||
* I Love Classics
|
||||
* Immortalseed
|
||||
* Infinity-T
|
||||
* inPeril
|
||||
* Insane Tracker
|
||||
* IPTorrents
|
||||
* JPopsuki
|
||||
* Kapaki
|
||||
* Karagarga
|
||||
* Le Paradis Du Net
|
||||
* LinkoManija
|
||||
* LosslessClub
|
||||
* M-Team - TP
|
||||
* Magico
|
||||
* Majomparádé
|
||||
* Mononoké-BT
|
||||
* MoreThanTV
|
||||
* MyAnonamouse
|
||||
* myAmity
|
||||
* MySpleen
|
||||
* Nachtwerk
|
||||
* NCore
|
||||
* NetHD
|
||||
* New Real World
|
||||
* NextGen
|
||||
* Norbits [![(invite needed)][inviteneeded]](#) <!-- added by DiseaseNO but no longer maintained? -->
|
||||
* notwhat.cd
|
||||
* Ourbits
|
||||
* Passione Torrent <!-- maintained by bonny1992 -->
|
||||
* PassThePopcorn [![(invite needed)][inviteneeded]](#)
|
||||
* PirateTheNet
|
||||
* PiXELHD
|
||||
* PolishSource
|
||||
* PolishTracker
|
||||
* Pretome
|
||||
* PrivateHD
|
||||
* Psytorrents
|
||||
* PTFiles
|
||||
* QcTorrent
|
||||
* Redacted (PassTheHeadphones)
|
||||
* RevolutionTT
|
||||
* Rockhard Lossless
|
||||
* RoDVD
|
||||
* RuTracker
|
||||
* SceneAccess
|
||||
* SceneFZ
|
||||
* SceneTime
|
||||
* SDBits
|
||||
* Secret Cinema
|
||||
* Shareisland
|
||||
* ShareSpaceDB
|
||||
* Shazbat
|
||||
* Shellife
|
||||
* SpeedCD
|
||||
* Superbits
|
||||
* The Empire
|
||||
* The Horror Charnel
|
||||
* The New Retro
|
||||
* The Shinning
|
||||
* The-Torrents
|
||||
* TehConnection
|
||||
* TenYardTracker
|
||||
* Torrent Network
|
||||
* Torrent Sector Crew
|
||||
* Torrent411
|
||||
* Torrent9
|
||||
* TorrentBD
|
||||
* TorrentBytes
|
||||
* TorrentCCF [![(invite needed)][inviteneeded]](#)
|
||||
* TorrentDay
|
||||
* TorrentHeaven
|
||||
* TorrentHR
|
||||
* Torrenting
|
||||
* TorrentLeech
|
||||
* Torrents.Md
|
||||
* Torrent-Syndikat
|
||||
* ToTheGlory
|
||||
* TranceTraffic
|
||||
* TransmitheNet
|
||||
* TV Chaos UK
|
||||
* TV-Vault
|
||||
* u-Torrent
|
||||
* UHDBits
|
||||
* Ultimate Gamer Club
|
||||
* ULTRAHDCLUB
|
||||
* Waffles
|
||||
* World-In-HD [![(invite needed)][inviteneeded]](#)
|
||||
* WorldOfP2P
|
||||
* x264
|
||||
* XSpeeds
|
||||
* Xthor
|
||||
* Xtreme Zone
|
||||
* Ztracker
|
||||
|
||||
Trackers marked with [![(invite needed)][inviteneeded]](#) have no active maintainer and are missing features or are broken. If you have an invite for them please send it to kaso1717 -at- gmail.com to get them fixed/improved.
|
||||
|
||||
## 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:
|
||||
|
||||
1. Download the latest version of the Windows installer, "Jackett.Installer.Windows.exe" from the [releases](https://github.com/Jackett/Jackett/releases/latest) page.
|
||||
2. When prompted if you would like this app to make changes to your computer, select "yes".
|
||||
3. If you would like to install Jackett as a Windows Service, make sure the "Install as Windows Service" checkbox is filled.
|
||||
4. Once the installation has finished, check the "Launch Jackett" box to get started.
|
||||
5. Navigate your web browser to: http://127.0.0.1:9117
|
||||
6. You're now ready to begin adding your trackers and using Jackett.
|
||||
|
||||
When installed as a service the tray icon acts as a way to open/start/stop Jackett. If you opted to not install it as a service then Jackett will run its web server from the tray tool.
|
||||
|
||||
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".
|
||||
|
||||
## Installation on Linux/OSX
|
||||
1. Install [Mono 4](http://www.mono-project.com/download/#download-lin) or better (version 4.8 is recommended)
|
||||
* Follow the instructions on the mono website and install the `mono-devel` and the `ca-certificates-mono` packages.
|
||||
* On Red Hat/CentOS/openSUSE/Fedora the `mono-locale-extras` package is also required.
|
||||
2. Install libcurl:
|
||||
* Debian/Ubunutu: `apt-get install libcurl4-openssl-dev`
|
||||
* Redhat/Fedora: `yum install libcurl-devel`
|
||||
* For other distros see the [Curl docs](http://curl.haxx.se/dlwiz/?type=devel).
|
||||
3. 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`.
|
||||
|
||||
Detailed instructions for [Ubuntu 14.x](http://www.htpcguides.com/install-jackett-on-ubuntu-14-x-for-custom-torrents-in-sonarr/) and [Ubuntu 15.x](http://www.htpcguides.com/install-jackett-ubuntu-15-x-for-custom-torrents-in-sonarr/)
|
||||
|
||||
## 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 [SynoCommuniy](https://synocommunity.com/)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
* __Command line switches__
|
||||
|
||||
You can pass various options when running via the command line, see --help for details.
|
||||
|
||||
* __Unable to connect to trackers with invalid SSL certificates__
|
||||
|
||||
You can disable certificate validation using the `--IgnoreSslErrors true` option but it's not recommended to use it as it enables Man-in-the-middle attacks on your connections.
|
||||
|
||||
* __Enable logging__
|
||||
|
||||
You can get additional logging with the command line switches `-t -l` or by enabeling `Enhanced logging` via the web interface.
|
||||
Please post logs if you are unable to resolve your issue with these switches ensuring to remove your username/password/cookies.
|
||||
The logfiles (log.txt/updater.txt) are stored in `%ProgramData%\Jackett` on Windows and `~/.config/Jackett/` on Linux/OSX.
|
||||
|
||||
## Creating an issue
|
||||
Please supply as much information about the problem you are experiencing as possible. Your issue has a much greater chance of being resolved if logs are supplied so that we can see what is going on. Creating an issue with '### isn't working' doesn't help anyone to fix the problem.
|
||||
|
||||
## Contributing
|
||||
All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/Jackett/Jackett/issues). It is recommended to use Visual studio 2015 when making code changes in this project.
|
||||
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||
|
||||
[inviteneeded]: https://raw.githubusercontent.com/Jackett/Jackett/master/.github/label-inviteneeded.png
|
||||
# Jackett
|
||||
|
||||
[](https://github.com/Jackett/Jackett/issues)
|
||||
[](https://github.com/Jackett/Jackett/pulls)
|
||||
[](https://www.bountysource.com/teams/jackett)
|
||||
[](https://ci.appveyor.com/project/camjac251/jackett)
|
||||
[](https://github.com/Jackett/Jackett/releases/latest)
|
||||
[](https://hub.docker.com/r/linuxserver/jackett/)
|
||||
[](https://discord.gg/J865QuA)
|
||||
|
||||
This project is a new fork and is recruiting development help. If you are able to help out please contact us.
|
||||
|
||||
Jackett works as a proxy server: it translates queries from apps ([Sonarr](https://github.com/Sonarr/Sonarr), [Radarr](https://github.com/Radarr/Radarr), [SickRage](https://sickrage.github.io/), [CouchPotato](https://couchpota.to/), [Mylar](https://github.com/evilhero/mylar), etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
|
||||
|
||||
Developer note: The software implements the [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/dev/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
|
||||
|
||||
|
||||
|
||||
#### Supported Systems
|
||||
* Windows using .NET 4.5
|
||||
* Linux and macOS using Mono 4 (mono 3 is no longer supported).
|
||||
|
||||
### Supported Public Trackers
|
||||
* Anidex
|
||||
* Anime Tosho
|
||||
* AniRena
|
||||
* cpasbien
|
||||
* EZTV
|
||||
* GkTorrent
|
||||
* Horrible Subs
|
||||
* Il Corsaro Nero <!-- maintained by bonny1992 -->
|
||||
* Isohunt
|
||||
* KickAssTorrent
|
||||
* KickAssTorrent (thekat.se clone)
|
||||
* LimeTorrents
|
||||
* NextTorrent
|
||||
* Nyaa.si
|
||||
* Nyaa-Pantsu
|
||||
* Nyoo
|
||||
* RARBG
|
||||
* ShowRSS
|
||||
* Sky torrents
|
||||
* T411 v2
|
||||
* The Pirate Bay
|
||||
* TNTVillage <!-- maintained by bonny1992 -->
|
||||
* Tokyo Toshokan
|
||||
* Torlock
|
||||
* Torrent Downloads
|
||||
* Torrent9
|
||||
* TorrentProject
|
||||
* Torrentz2
|
||||
* YTS.ag
|
||||
* Zooqle
|
||||
|
||||
### Supported Semi-Private Trackers
|
||||
* 7tor
|
||||
* CzTorrent
|
||||
* Deildu
|
||||
* Gay-Torrents.net
|
||||
* NetHD
|
||||
* RuTracker
|
||||
* SkTorrent
|
||||
* TorrentBytes
|
||||
* Xtreme Zone
|
||||
* YggTorrent
|
||||
* Ztracker
|
||||
|
||||
### Supported Private Trackers
|
||||
* 2 Fast 4 You
|
||||
* 3D Torrents
|
||||
* Abnormal
|
||||
* Acid-Lounge
|
||||
* AlphaRatio
|
||||
* Andraste
|
||||
* AnimeBytes
|
||||
* AnimeTorrents
|
||||
* AOX
|
||||
* Apollo (XANAX)
|
||||
* ArabaFenice
|
||||
* Arche Torrent
|
||||
* AsianDVDClub
|
||||
* AST4u
|
||||
* Audiobook Torrents
|
||||
* Awesome-HD
|
||||
* Avistaz
|
||||
* B2S-Share
|
||||
* Back-ups
|
||||
* BakaBT [![(invite needed)][inviteneeded]](#)
|
||||
* bB
|
||||
* BeyondHD
|
||||
* BIGTorrent
|
||||
* Bit-City Reloaded
|
||||
* BIT-HDTV
|
||||
* BitHQ
|
||||
* BitHUmen
|
||||
* BitMeTV
|
||||
* BitSoup [![(invite needed)][inviteneeded]](#)
|
||||
* Bitspyder
|
||||
* BJ-Share
|
||||
* Blu-bits
|
||||
* BlueBird
|
||||
* Blutopia
|
||||
* BroadcastTheNet
|
||||
* BrokenStones
|
||||
* BTNext
|
||||
* Carpathians
|
||||
* CGPeers
|
||||
* CHDBits
|
||||
* Cinematik
|
||||
* Cinemageddon
|
||||
* CinemaZ
|
||||
* Classix
|
||||
* CZTeam
|
||||
* DanishBits
|
||||
* DataScene
|
||||
* Demonoid
|
||||
* Diablo Torrent
|
||||
* DigitalHive
|
||||
* Dragonworld Reloaded
|
||||
* Dream Team
|
||||
* Elite-Tracker
|
||||
* EoT-Forum
|
||||
* eStone
|
||||
* Ethor.net (Thor's Land)
|
||||
* FANO.IN
|
||||
* FileList
|
||||
* Freedom-HD
|
||||
* FullMixMusic
|
||||
* FunFile
|
||||
* FunkyTorrents
|
||||
* Fuzer
|
||||
* GayTorrent.ru
|
||||
* GFTracker
|
||||
* GFXPeers
|
||||
* Ghost City
|
||||
* GigaTorrents [![(invite needed)][inviteneeded]](#)
|
||||
* GimmePeers <!-- maintained by jamesb2147 -->
|
||||
* GODS [![(invite needed)][inviteneeded]](#)
|
||||
* Gormogon
|
||||
* Greek Team
|
||||
* Hardbay
|
||||
* HD-Forever
|
||||
* HD-Only
|
||||
* HD-Space
|
||||
* HD-Torrents
|
||||
* HD-Bits.com
|
||||
* HD4Free
|
||||
* HDBits
|
||||
* HDChina
|
||||
* HDHome
|
||||
* HDME
|
||||
* HDSky
|
||||
* HDTorrents.it
|
||||
* Hebits
|
||||
* Hon3y HD
|
||||
* Hounddawgs
|
||||
* House-of-Torrents
|
||||
* Hyperay
|
||||
* ICE Torrent
|
||||
* I Love Classics
|
||||
* Immortalseed
|
||||
* Infinity-T
|
||||
* inPeril
|
||||
* Insane Tracker
|
||||
* IPTorrents
|
||||
* JPopsuki
|
||||
* Kapaki
|
||||
* Karagarga
|
||||
* LinkoManija
|
||||
* LosslessClub
|
||||
* M-Team - TP
|
||||
* Magico
|
||||
* Majomparádé
|
||||
* Manicomio Share
|
||||
* Mononoké-BT
|
||||
* MoreThanTV
|
||||
* MyAnonamouse
|
||||
* myAmity
|
||||
* MySpleen
|
||||
* NCore
|
||||
* Nebulance
|
||||
* New Real World
|
||||
* Norbits [![(invite needed)][inviteneeded]](#) <!-- added by DiseaseNO but no longer maintained? -->
|
||||
* notwhat.cd
|
||||
* Ourbits
|
||||
* Passione Torrent <!-- maintained by bonny1992 -->
|
||||
* PassThePopcorn [![(invite needed)][inviteneeded]](#)
|
||||
* PirateTheNet
|
||||
* PiXELHD
|
||||
* PolishSource
|
||||
* PolishTracker
|
||||
* Pretome
|
||||
* PrivateHD
|
||||
* Psytorrents
|
||||
* PTFiles
|
||||
* Redacted (PassTheHeadphones)
|
||||
* RevolutionTT
|
||||
* Rockhard Lossless
|
||||
* RoDVD
|
||||
* SceneFZ
|
||||
* SceneTime
|
||||
* SDBits
|
||||
* Secret Cinema
|
||||
* Shareisland
|
||||
* ShareSpaceDB
|
||||
* Shazbat
|
||||
* Shellife
|
||||
* SpeedCD
|
||||
* SpeedTorrent Reloaded
|
||||
* SportsCult
|
||||
* SportHD
|
||||
* Superbits
|
||||
* Synthesiz3r
|
||||
* Tasmanit
|
||||
* The Empire
|
||||
* The Geeks
|
||||
* The Horror Charnel
|
||||
* The Occult
|
||||
* The New Retro
|
||||
* The Place
|
||||
* The Shinning
|
||||
* The Show
|
||||
* The Vault
|
||||
* The-Torrents
|
||||
* TehConnection
|
||||
* TenYardTracker
|
||||
* Torrent Network
|
||||
* Torrent Sector Crew
|
||||
* TorrentBD
|
||||
* TorrentCCF [![(invite needed)][inviteneeded]](#)
|
||||
* TorrentDay
|
||||
* Torrentech
|
||||
* TorrentHeaven
|
||||
* TorrentHR
|
||||
* Torrenting
|
||||
* TorrentLeech
|
||||
* Torrents.Md
|
||||
* TorrentVault
|
||||
* Torrent-Syndikat
|
||||
* TorViet
|
||||
* ToTheGlory
|
||||
* TranceTraffic
|
||||
* Trezzor
|
||||
* TV Chaos UK
|
||||
* TV-Vault
|
||||
* u-Torrent
|
||||
* UHDBits
|
||||
* Ultimate Gamer Club
|
||||
* ULTRAHDCLUB
|
||||
* Waffles
|
||||
* World-In-HD
|
||||
* WorldOfP2P
|
||||
* x264
|
||||
* XSpeeds
|
||||
* Xthor
|
||||
* Zamunda.net
|
||||
* Zelka.org
|
||||
|
||||
Trackers marked with [![(invite needed)][inviteneeded]](#) have no active maintainer and are missing features or are broken. If you have an invite for them please send it to kaso1717 -at- gmail.com to get them fixed/improved.
|
||||
|
||||
## 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:
|
||||
|
||||
1. Download the latest version of the Windows installer, "Jackett.Installer.Windows.exe" from the [releases](https://github.com/Jackett/Jackett/releases/latest) page.
|
||||
2. When prompted if you would like this app to make changes to your computer, select "yes".
|
||||
3. If you would like to install Jackett as a Windows Service, make sure the "Install as Windows Service" checkbox is filled.
|
||||
4. Once the installation has finished, check the "Launch Jackett" box to get started.
|
||||
5. Navigate your web browser to: http://127.0.0.1:9117
|
||||
6. You're now ready to begin adding your trackers and using Jackett.
|
||||
|
||||
When installed as a service the tray icon acts as a way to open/start/stop Jackett. If you opted to not install it as a service then Jackett will run its web server from the tray tool.
|
||||
|
||||
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".
|
||||
|
||||
## Installation on Linux
|
||||
1. Install [Mono 4](http://www.mono-project.com/download/#download-lin) or better (version 4.8 is recommended)
|
||||
* Follow the instructions on the mono website and install the `mono-devel` and the `ca-certificates-mono` packages.
|
||||
* On Red Hat/CentOS/openSUSE/Fedora the `mono-locale-extras` package is also required.
|
||||
2. Install libcurl:
|
||||
* Debian/Ubunutu: `apt-get install libcurl4-openssl-dev`
|
||||
* Redhat/Fedora: `yum install libcurl-devel`
|
||||
* For other distros see the [Curl docs](http://curl.haxx.se/dlwiz/?type=devel).
|
||||
3. 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`.
|
||||
|
||||
Detailed instructions for [Ubuntu 14.x](http://www.htpcguides.com/install-jackett-on-ubuntu-14-x-for-custom-torrents-in-sonarr/) and [Ubuntu 15.x](http://www.htpcguides.com/install-jackett-ubuntu-15-x-for-custom-torrents-in-sonarr/)
|
||||
|
||||
## Installation on macOS
|
||||
|
||||
### Prerequisites
|
||||
Install [Mono 4](http://www.mono-project.com/download/#download-mac) or better (version 4.8 is recommended).
|
||||
* Setup ssl support by running `curl -sS https://curl.haxx.se/ca/cacert.pem | cert-sync --user /dev/stdin`
|
||||
|
||||
### 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`.
|
||||
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`.
|
||||
|
||||
## 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/)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
* __Command line switches__
|
||||
|
||||
You can pass various options when running via the command line, see --help for details.
|
||||
|
||||
* __Error "The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel."__
|
||||
|
||||
This is often caused by missing CA certificates.
|
||||
Try reimporting the certificates in this case:
|
||||
- On Linux (as user root): `wget -O - https://curl.haxx.se/ca/cacert.pem | cert-sync /dev/stdin`
|
||||
- On macOS: `curl -sS https://curl.haxx.se/ca/cacert.pem | cert-sync --user /dev/stdin`
|
||||
|
||||
* __Enable logging__
|
||||
|
||||
You can get additional logging with the command line switches `-t -l` or by enabling `Enhanced logging` via the web interface.
|
||||
Please post logs if you are unable to resolve your issue with these switches ensuring to remove your username/password/cookies.
|
||||
The logfiles (log.txt/updater.txt) are stored in `%ProgramData%\Jackett` on Windows and `~/.config/Jackett/` on Linux/macOS.
|
||||
|
||||
## Creating an issue
|
||||
Please supply as much information about the problem you are experiencing as possible. Your issue has a much greater chance of being resolved if logs are supplied so that we can see what is going on. Creating an issue with '### isn't working' doesn't help anyone to fix the problem.
|
||||
|
||||
## Contributing
|
||||
All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/Jackett/Jackett/issues). It is recommended to use Visual studio 2015 when making code changes in this project.
|
||||
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||
|
||||
[inviteneeded]: https://raw.githubusercontent.com/Jackett/Jackett/master/.github/label-inviteneeded.png
|
||||
|
||||
@@ -94,8 +94,14 @@
|
||||
<MonoDevelop>
|
||||
<Properties>
|
||||
<Policies>
|
||||
<TextStylePolicy inheritsSet="VisualStudio" inheritsScope="text/plain" scope="text/x-csharp" />
|
||||
<CSharpFormattingPolicy IndentSwitchBody="True" IndentBlocksInsideExpressions="True" AnonymousMethodBraceStyle="NextLine" PropertyBraceStyle="NextLine" PropertyGetBraceStyle="NextLine" PropertySetBraceStyle="NextLine" EventBraceStyle="NextLine" EventAddBraceStyle="NextLine" EventRemoveBraceStyle="NextLine" StatementBraceStyle="NextLine" ElseNewLinePlacement="NewLine" CatchNewLinePlacement="NewLine" FinallyNewLinePlacement="NewLine" WhileNewLinePlacement="DoNotCare" ArrayInitializerWrapping="DoNotChange" ArrayInitializerBraceStyle="NextLine" BeforeMethodDeclarationParentheses="False" BeforeMethodCallParentheses="False" BeforeConstructorDeclarationParentheses="False" NewLineBeforeConstructorInitializerColon="NewLine" NewLineAfterConstructorInitializerColon="SameLine" BeforeDelegateDeclarationParentheses="False" NewParentheses="False" SpacesBeforeBrackets="False" inheritsSet="Mono" inheritsScope="text/x-csharp" scope="text/x-csharp" />
|
||||
<TextStylePolicy TabWidth="4" IndentWidth="4" RemoveTrailingWhitespace="True" NoTabsAfterNonTabs="False" EolMarker="Native" FileWidth="80" TabsToSpaces="True" scope="text/x-csharp">
|
||||
<inheritsSet />
|
||||
<inheritsScope />
|
||||
</TextStylePolicy>
|
||||
<CSharpFormattingPolicy IndentBlock="True" IndentBraces="False" IndentSwitchSection="False" IndentSwitchCaseSection="True" LabelPositioning="OneLess" NewLinesForBracesInTypes="True" NewLinesForBracesInMethods="True" NewLinesForBracesInProperties="False" NewLinesForBracesInAccessors="False" NewLinesForBracesInAnonymousMethods="False" NewLinesForBracesInControlBlocks="False" NewLinesForBracesInAnonymousTypes="False" NewLinesForBracesInObjectCollectionArrayInitializers="False" NewLinesForBracesInLambdaExpressionBody="False" NewLineForElse="False" NewLineForCatch="False" NewLineForFinally="False" NewLineForMembersInObjectInit="False" NewLineForMembersInAnonymousTypes="False" NewLineForClausesInQuery="False" SpacingAfterMethodDeclarationName="True" SpaceWithinMethodDeclarationParenthesis="False" SpaceBetweenEmptyMethodDeclarationParentheses="False" SpaceAfterMethodCallName="True" SpaceWithinMethodCallParentheses="False" SpaceBetweenEmptyMethodCallParentheses="False" SpaceAfterControlFlowStatementKeyword="True" SpaceWithinExpressionParentheses="False" SpaceWithinCastParentheses="False" SpaceWithinOtherParentheses="False" SpaceAfterCast="False" SpacesIgnoreAroundVariableDeclaration="False" SpaceBeforeOpenSquareBracket="True" SpaceBetweenEmptySquareBrackets="False" SpaceWithinSquareBrackets="False" SpaceAfterColonInBaseTypeDeclaration="True" SpaceAfterComma="True" SpaceAfterDot="False" SpaceAfterSemicolonsInForStatement="True" SpaceBeforeColonInBaseTypeDeclaration="True" SpaceBeforeComma="False" SpaceBeforeDot="False" SpaceBeforeSemicolonsInForStatement="False" SpacingAroundBinaryOperator="Single" WrappingPreserveSingleLine="True" WrappingKeepStatementsOnSingleLine="True" PlaceSystemDirectiveFirst="True" scope="text/x-csharp">
|
||||
<inheritsSet />
|
||||
<inheritsScope />
|
||||
</CSharpFormattingPolicy>
|
||||
</Policies>
|
||||
</Properties>
|
||||
</MonoDevelop>
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace Jackett.Console
|
||||
[Option('n', "IgnoreSslErrors", HelpText = "[true/false] Ignores invalid SSL certificates")]
|
||||
public bool? IgnoreSslErrors { get; set; }
|
||||
|
||||
[Option('d', "DataFolder", HelpText = "Specify the location of the data folder (Must be admin on Windows) eg. --DataFolder=\"D:\\Your Data\\Jackett\\\"")]
|
||||
[Option('d', "DataFolder", HelpText = "Specify the location of the data folder (Must be admin on Windows) eg. --DataFolder=\"D:\\Your Data\\Jackett\\\". Don't use this on Unix (mono) systems. On Unix just adjust the HOME directory of the user to the datedir or set the XDG_CONFIG_HOME environment variable.")]
|
||||
public string DataFolder { get; set; }
|
||||
|
||||
[Option(HelpText = "Don't restart after update")]
|
||||
|
||||
@@ -153,6 +153,9 @@
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
<None Include="packages.config" />
|
||||
<Content Include="install_service_macos">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CurlSharp\CurlSharp.csproj">
|
||||
@@ -182,4 +185,4 @@
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
</Project>
|
||||
|
||||
@@ -1,236 +1,236 @@
|
||||
using CommandLine;
|
||||
using CommandLine.Text;
|
||||
using Jackett;
|
||||
using Jackett.Console;
|
||||
using Jackett.Indexers;
|
||||
using Jackett.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace JackettConsole
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
var options = new ConsoleOptions();
|
||||
if (!Parser.Default.ParseArguments(args, options) || options.ShowHelp == true)
|
||||
{
|
||||
if (options.LastParserState != null && options.LastParserState.Errors.Count > 0)
|
||||
{
|
||||
var help = new HelpText();
|
||||
var errors = help.RenderParsingErrorsText(options, 2); // indent with two spaces
|
||||
Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
|
||||
Console.WriteLine("Switch error: " + errors);
|
||||
Console.WriteLine("See --help for further details on switches.");
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
var text = HelpText.AutoBuild(options, (HelpText current) => HelpText.DefaultParsingErrorsHandler(options, current));
|
||||
text.Copyright = " ";
|
||||
text.Heading = "Jackett v" + Engine.ConfigService.GetVersion() + " options:";
|
||||
Console.WriteLine(text);
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (options.ListenPublic && options.ListenPrivate)
|
||||
{
|
||||
Console.WriteLine("You can only use listen private OR listen publicly.");
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
/* ====== Options ===== */
|
||||
|
||||
// SSL Fix
|
||||
Startup.DoSSLFix = options.SSLFix;
|
||||
|
||||
// Use curl
|
||||
if (options.Client != null)
|
||||
Startup.ClientOverride = options.Client.ToLowerInvariant();
|
||||
|
||||
// Use Proxy
|
||||
if (options.ProxyConnection != null)
|
||||
{
|
||||
Startup.ProxyConnection = options.ProxyConnection.ToLowerInvariant();
|
||||
Engine.Logger.Info("Proxy enabled. " + Startup.ProxyConnection);
|
||||
}
|
||||
// Logging
|
||||
if (options.Logging)
|
||||
Startup.LogRequests = true;
|
||||
|
||||
// Tracing
|
||||
if (options.Tracing)
|
||||
Startup.TracingEnabled = true;
|
||||
|
||||
// Log after the fact as using the logger will cause the options above to be used
|
||||
|
||||
if (options.Logging)
|
||||
Engine.Logger.Info("Logging enabled.");
|
||||
|
||||
if (options.Tracing)
|
||||
Engine.Logger.Info("Tracing enabled.");
|
||||
|
||||
if (options.SSLFix == true)
|
||||
Engine.Logger.Info("SSL ECC workaround enabled.");
|
||||
else if (options.SSLFix == false)
|
||||
Engine.Logger.Info("SSL ECC workaround has been disabled.");
|
||||
|
||||
// Ignore SSL errors on Curl
|
||||
Startup.IgnoreSslErrors = options.IgnoreSslErrors;
|
||||
if (options.IgnoreSslErrors == true)
|
||||
{
|
||||
Engine.Logger.Info("Jackett will ignore SSL certificate errors.");
|
||||
}
|
||||
|
||||
// Choose Data Folder
|
||||
if (!string.IsNullOrWhiteSpace(options.DataFolder))
|
||||
{
|
||||
Startup.CustomDataFolder = options.DataFolder.Replace("\"", string.Empty).Replace("'", string.Empty).Replace(@"\\", @"\");
|
||||
Engine.Logger.Info("Jackett Data will be stored in: " + Startup.CustomDataFolder);
|
||||
}
|
||||
|
||||
/* ====== Actions ===== */
|
||||
|
||||
// Install service
|
||||
if (options.Install)
|
||||
{
|
||||
Engine.ServiceConfig.Install();
|
||||
return;
|
||||
}
|
||||
|
||||
// Uninstall service
|
||||
if (options.Uninstall)
|
||||
{
|
||||
Engine.Server.ReserveUrls(doInstall: false);
|
||||
Engine.ServiceConfig.Uninstall();
|
||||
return;
|
||||
}
|
||||
|
||||
// Reserve urls
|
||||
if (options.ReserveUrls)
|
||||
{
|
||||
Engine.Server.ReserveUrls(doInstall: true);
|
||||
return;
|
||||
}
|
||||
|
||||
// Start Service
|
||||
if (options.StartService)
|
||||
{
|
||||
if (!Engine.ServiceConfig.ServiceRunning())
|
||||
{
|
||||
Engine.ServiceConfig.Start();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Stop Service
|
||||
if (options.StopService)
|
||||
{
|
||||
if (Engine.ServiceConfig.ServiceRunning())
|
||||
{
|
||||
Engine.ServiceConfig.Stop();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Migrate settings
|
||||
if (options.MigrateSettings)
|
||||
{
|
||||
Engine.ConfigService.PerformMigration();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Show Version
|
||||
if (options.ShowVersion)
|
||||
{
|
||||
Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
|
||||
return;
|
||||
}
|
||||
|
||||
/* ====== Overrides ===== */
|
||||
|
||||
// Override listen public
|
||||
if (options.ListenPublic || options.ListenPrivate)
|
||||
{
|
||||
if (Engine.Server.Config.AllowExternal != options.ListenPublic)
|
||||
{
|
||||
Engine.Logger.Info("Overriding external access to " + options.ListenPublic);
|
||||
Engine.Server.Config.AllowExternal = options.ListenPublic;
|
||||
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
|
||||
{
|
||||
if (ServerUtil.IsUserAdministrator())
|
||||
{
|
||||
Engine.Server.ReserveUrls(doInstall: true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Engine.Logger.Error("Unable to switch to public listening without admin rights.");
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Engine.Server.SaveConfig();
|
||||
}
|
||||
}
|
||||
|
||||
// Override port
|
||||
if (options.Port != 0)
|
||||
{
|
||||
if (Engine.Server.Config.Port != options.Port)
|
||||
{
|
||||
Engine.Logger.Info("Overriding port to " + options.Port);
|
||||
Engine.Server.Config.Port = options.Port;
|
||||
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
|
||||
{
|
||||
if (ServerUtil.IsUserAdministrator())
|
||||
{
|
||||
Engine.Server.ReserveUrls(doInstall: true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Engine.Logger.Error("Unable to switch ports when not running as administrator");
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Engine.Server.SaveConfig();
|
||||
}
|
||||
}
|
||||
|
||||
Startup.NoRestart = options.NoRestart;
|
||||
}
|
||||
|
||||
Engine.Server.Initalize();
|
||||
Engine.Server.Start();
|
||||
Engine.RunTime.Spin();
|
||||
Engine.Logger.Info("Server thread exit");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Engine.Logger.Error(e, "Top level exception");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
using CommandLine;
|
||||
using CommandLine.Text;
|
||||
using Jackett;
|
||||
using Jackett.Console;
|
||||
using Jackett.Indexers;
|
||||
using Jackett.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace JackettConsole
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
var options = new ConsoleOptions();
|
||||
if (!Parser.Default.ParseArguments(args, options) || options.ShowHelp == true)
|
||||
{
|
||||
if (options.LastParserState != null && options.LastParserState.Errors.Count > 0)
|
||||
{
|
||||
var help = new HelpText();
|
||||
var errors = help.RenderParsingErrorsText(options, 2); // indent with two spaces
|
||||
Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
|
||||
Console.WriteLine("Switch error: " + errors);
|
||||
Console.WriteLine("See --help for further details on switches.");
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
var text = HelpText.AutoBuild(options, (HelpText current) => HelpText.DefaultParsingErrorsHandler(options, current));
|
||||
text.Copyright = " ";
|
||||
text.Heading = "Jackett v" + Engine.ConfigService.GetVersion() + " options:";
|
||||
Console.WriteLine(text);
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (options.ListenPublic && options.ListenPrivate)
|
||||
{
|
||||
Console.WriteLine("You can only use listen private OR listen publicly.");
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
/* ====== Options ===== */
|
||||
|
||||
// SSL Fix
|
||||
Startup.DoSSLFix = options.SSLFix;
|
||||
|
||||
// Use curl
|
||||
if (options.Client != null)
|
||||
Startup.ClientOverride = options.Client.ToLowerInvariant();
|
||||
|
||||
// Use Proxy
|
||||
if (options.ProxyConnection != null)
|
||||
{
|
||||
Startup.ProxyConnection = options.ProxyConnection.ToLowerInvariant();
|
||||
Engine.Logger.Info("Proxy enabled. " + Startup.ProxyConnection);
|
||||
}
|
||||
// Logging
|
||||
if (options.Logging)
|
||||
Startup.LogRequests = true;
|
||||
|
||||
// Tracing
|
||||
if (options.Tracing)
|
||||
Startup.TracingEnabled = true;
|
||||
|
||||
// Log after the fact as using the logger will cause the options above to be used
|
||||
|
||||
if (options.Logging)
|
||||
Engine.Logger.Info("Logging enabled.");
|
||||
|
||||
if (options.Tracing)
|
||||
Engine.Logger.Info("Tracing enabled.");
|
||||
|
||||
if (options.SSLFix == true)
|
||||
Engine.Logger.Info("SSL ECC workaround enabled.");
|
||||
else if (options.SSLFix == false)
|
||||
Engine.Logger.Info("SSL ECC workaround has been disabled.");
|
||||
|
||||
// Ignore SSL errors on Curl
|
||||
Startup.IgnoreSslErrors = options.IgnoreSslErrors;
|
||||
if (options.IgnoreSslErrors == true)
|
||||
{
|
||||
Engine.Logger.Info("Jackett will ignore SSL certificate errors.");
|
||||
}
|
||||
|
||||
// Choose Data Folder
|
||||
if (!string.IsNullOrWhiteSpace(options.DataFolder))
|
||||
{
|
||||
Startup.CustomDataFolder = options.DataFolder.Replace("\"", string.Empty).Replace("'", string.Empty).Replace(@"\\", @"\");
|
||||
Engine.Logger.Info("Jackett Data will be stored in: " + Startup.CustomDataFolder);
|
||||
}
|
||||
|
||||
/* ====== Actions ===== */
|
||||
|
||||
// Install service
|
||||
if (options.Install)
|
||||
{
|
||||
Engine.ServiceConfig.Install();
|
||||
return;
|
||||
}
|
||||
|
||||
// Uninstall service
|
||||
if (options.Uninstall)
|
||||
{
|
||||
Engine.Server.ReserveUrls(doInstall: false);
|
||||
Engine.ServiceConfig.Uninstall();
|
||||
return;
|
||||
}
|
||||
|
||||
// Reserve urls
|
||||
if (options.ReserveUrls)
|
||||
{
|
||||
Engine.Server.ReserveUrls(doInstall: true);
|
||||
return;
|
||||
}
|
||||
|
||||
// Start Service
|
||||
if (options.StartService)
|
||||
{
|
||||
if (!Engine.ServiceConfig.ServiceRunning())
|
||||
{
|
||||
Engine.ServiceConfig.Start();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Stop Service
|
||||
if (options.StopService)
|
||||
{
|
||||
if (Engine.ServiceConfig.ServiceRunning())
|
||||
{
|
||||
Engine.ServiceConfig.Stop();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Migrate settings
|
||||
if (options.MigrateSettings)
|
||||
{
|
||||
Engine.ConfigService.PerformMigration();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Show Version
|
||||
if (options.ShowVersion)
|
||||
{
|
||||
Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
|
||||
return;
|
||||
}
|
||||
|
||||
/* ====== Overrides ===== */
|
||||
|
||||
// Override listen public
|
||||
if (options.ListenPublic || options.ListenPrivate)
|
||||
{
|
||||
if (Engine.Server.Config.AllowExternal != options.ListenPublic)
|
||||
{
|
||||
Engine.Logger.Info("Overriding external access to " + options.ListenPublic);
|
||||
Engine.Server.Config.AllowExternal = options.ListenPublic;
|
||||
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
|
||||
{
|
||||
if (ServerUtil.IsUserAdministrator())
|
||||
{
|
||||
Engine.Server.ReserveUrls(doInstall: true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Engine.Logger.Error("Unable to switch to public listening without admin rights.");
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Engine.Server.SaveConfig();
|
||||
}
|
||||
}
|
||||
|
||||
// Override port
|
||||
if (options.Port != 0)
|
||||
{
|
||||
if (Engine.Server.Config.Port != options.Port)
|
||||
{
|
||||
Engine.Logger.Info("Overriding port to " + options.Port);
|
||||
Engine.Server.Config.Port = options.Port;
|
||||
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
|
||||
{
|
||||
if (ServerUtil.IsUserAdministrator())
|
||||
{
|
||||
Engine.Server.ReserveUrls(doInstall: true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Engine.Logger.Error("Unable to switch ports when not running as administrator");
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Engine.Server.SaveConfig();
|
||||
}
|
||||
}
|
||||
|
||||
Startup.NoRestart = options.NoRestart;
|
||||
}
|
||||
|
||||
Engine.Server.Initalize();
|
||||
Engine.Server.Start();
|
||||
Engine.RunTime.Spin();
|
||||
Engine.Logger.Info("Server thread exit");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Engine.Logger.Error(e, "Top level exception");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
76
src/Jackett.Console/install_service_macos
Executable file
76
src/Jackett.Console/install_service_macos
Executable file
@@ -0,0 +1,76 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Setting up colors
|
||||
BOLDRED="$(printf '\033[1;31m')"
|
||||
BOLDGREEN="$(printf '\033[1;32m')"
|
||||
NC="$(printf '\033[0m')" # No Color
|
||||
|
||||
# Stop and unload the service if it's running
|
||||
launchctl remove org.user.Jackett
|
||||
|
||||
# Move working directory to Jackett's
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# Check if we're running from Jackett's directory
|
||||
if [ ! -f ./JackettConsole.exe ]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Couldn't locate JackettConsole.exe. Is the script in the right directory?"
|
||||
exit 1
|
||||
fi
|
||||
jackettdir="$(pwd)"
|
||||
|
||||
# Check if mono is installed
|
||||
command -v mono >/dev/null 2>&1 || { echo >&2 "${BOLDRED}ERROR${NC}: Jackett requires Mono but it's not installed. Aborting."; exit 1; }
|
||||
monodir="$(dirname $(command -v mono))"
|
||||
|
||||
# Check that no other service called Jackett is already running
|
||||
if [[ $(launchctl list | grep org.user.Jackett) ]]; then
|
||||
echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Write the plist to LaunchAgents
|
||||
cat >~/Library/LaunchAgents/org.user.Jackett.plist <<EOL
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>EnvironmentVariables</key>
|
||||
<dict>
|
||||
<key>PATH</key>
|
||||
<string>/usr/bin:/bin:/usr/sbin:/sbin:${monodir}</string>
|
||||
</dict>
|
||||
<key>KeepAlive</key>
|
||||
<true/>
|
||||
<key>Label</key>
|
||||
<string>org.user.Jackett</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>${monodir}/mono</string>
|
||||
<string>--debug</string>
|
||||
<string>JackettConsole.exe</string>
|
||||
<string>--NoRestart</string>
|
||||
</array>
|
||||
<key>RunAtLoad</key>
|
||||
<true/>
|
||||
<key>WorkingDirectory</key>
|
||||
<string>${jackettdir}</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
EOL
|
||||
|
||||
# Run the agent
|
||||
launchctl load ~/Library/LaunchAgents/org.user.Jackett.plist
|
||||
|
||||
# Check that it's running
|
||||
if [[ $(launchctl list | grep org.user.Jackett) ]]; then
|
||||
echo "${BOLDGREEN}Agent successfully installed and launched!${NC}"
|
||||
else
|
||||
cat << EOL
|
||||
${BOLDRED}ERROR${NC}: Could not launch agent. The installation might have failed.
|
||||
Please open an issue on https://github.com/Jackett/Jackett/issues and paste following information:
|
||||
Mono directory: \`${monodir}\`
|
||||
Jackett directory: \`${jackettdir}\`
|
||||
|
||||
EOL
|
||||
fi
|
||||
@@ -28,7 +28,12 @@ namespace JackettTest
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void InitIndexers()
|
||||
public IWebIndexer GetWebIndexer(string name)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void InitIndexers(IEnumerable<string> path)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
@@ -43,12 +48,7 @@ namespace JackettTest
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void InitCardigannIndexers(string path)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void SortIndexers()
|
||||
public void InitAggregateIndexer()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Jackett.Services;
|
||||
using Jackett.Services;
|
||||
using Jackett.Utils.Clients;
|
||||
using NLog;
|
||||
using NLog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -14,10 +14,10 @@ namespace JackettTest
|
||||
private Dictionary<WebRequest, Func<WebRequest, WebClientByteResult>> byteCallbacks = new Dictionary<WebRequest, Func<WebRequest, WebClientByteResult>>();
|
||||
private Dictionary<WebRequest, Func<WebRequest, WebClientStringResult>> stringCallbacks = new Dictionary<WebRequest, Func<WebRequest, WebClientStringResult>>();
|
||||
|
||||
public TestWebClient(IProcessService p, Logger l, IConfigurationService c)
|
||||
public TestWebClient(IProcessService p, Logger l, IConfigurationService c)
|
||||
: base(p: p,
|
||||
l: l,
|
||||
c: c)
|
||||
c: c)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -1,259 +1,268 @@
|
||||
using CommandLine;
|
||||
using Jackett.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
/*
|
||||
// no supported by appveyor, disabeling for now
|
||||
#if __MonoCS__
|
||||
using Mono.Unix.Native;
|
||||
#endif
|
||||
*/
|
||||
|
||||
namespace Jackett.Updater
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
new Program().Run(args);
|
||||
}
|
||||
|
||||
private void Run(string[] args)
|
||||
{
|
||||
Engine.SetupLogging(null, "updater.txt");
|
||||
Engine.Logger.Info("Jackett Updater v" + GetCurrentVersion());
|
||||
Engine.Logger.Info("Options \"" + string.Join("\" \"", args) + "\"");
|
||||
try {
|
||||
var options = new UpdaterConsoleOptions();
|
||||
if (Parser.Default.ParseArguments(args, options))
|
||||
{
|
||||
ProcessUpdate(options);
|
||||
}
|
||||
else
|
||||
{
|
||||
Engine.Logger.Error("Failed to process update arguments!");
|
||||
Console.ReadKey();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Engine.Logger.Error(e, "Exception applying update!");
|
||||
}
|
||||
}
|
||||
|
||||
private string GetCurrentVersion()
|
||||
{
|
||||
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
|
||||
var fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
|
||||
return fvi.FileVersion;
|
||||
}
|
||||
|
||||
private void KillPids(int[] pids)
|
||||
{
|
||||
foreach (var pid in pids)
|
||||
{
|
||||
try
|
||||
{
|
||||
var proc = Process.GetProcessById(pid);
|
||||
Engine.Logger.Info("Killing process " + proc.Id);
|
||||
proc.Kill();
|
||||
var exited = proc.WaitForExit(5000);
|
||||
if (!exited)
|
||||
Engine.Logger.Info("Process " + pid.ToString() + " didn't exit within 5 seconds");
|
||||
/*
|
||||
// no supported by appveyor, disabeling for now
|
||||
#if __MonoCS__
|
||||
Engine.Logger.Info("Sending SIGKILL to process " + pid.ToString());
|
||||
Syscall.kill(proc.Id, Signum.SIGKILL);
|
||||
#endif
|
||||
*/
|
||||
}
|
||||
catch (ArgumentException e)
|
||||
{
|
||||
Engine.Logger.Info("Process " + pid.ToString() + " is already dead");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Engine.Logger.Info("Error killing process " + pid.ToString());
|
||||
Engine.Logger.Info(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ProcessUpdate(UpdaterConsoleOptions options)
|
||||
{
|
||||
var updateLocation = GetUpdateLocation();
|
||||
if(!(updateLocation.EndsWith("\\") || updateLocation.EndsWith("/")))
|
||||
{
|
||||
updateLocation += Path.DirectorySeparatorChar;
|
||||
}
|
||||
|
||||
var pids = new int[] { };
|
||||
if (options.KillPids != null)
|
||||
{
|
||||
var pidsStr = options.KillPids.Split(',').Where(pid => !string.IsNullOrWhiteSpace(pid)).ToArray();
|
||||
pids = Array.ConvertAll(pidsStr, pid => int.Parse(pid));
|
||||
}
|
||||
|
||||
var isWindows = System.Environment.OSVersion.Platform != PlatformID.Unix;
|
||||
var trayRunning = false;
|
||||
var trayProcesses = Process.GetProcessesByName("JackettTray");
|
||||
if (isWindows)
|
||||
{
|
||||
if (trayProcesses.Count() > 0)
|
||||
{
|
||||
foreach (var proc in trayProcesses)
|
||||
{
|
||||
try
|
||||
{
|
||||
Engine.Logger.Info("Killing tray process " + proc.Id);
|
||||
proc.Kill();
|
||||
trayRunning = true;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
|
||||
// on unix we don't have to wait (we can overwrite files which are in use)
|
||||
// On unix we kill the PIDs after the update so e.g. systemd can automatically restart the process
|
||||
KillPids(pids);
|
||||
}
|
||||
Engine.Logger.Info("Finding files in: " + updateLocation);
|
||||
var files = Directory.GetFiles(updateLocation, "*.*", SearchOption.AllDirectories);
|
||||
foreach(var file in files)
|
||||
{
|
||||
var fileName = Path.GetFileName(file).ToLowerInvariant();
|
||||
|
||||
if (fileName.EndsWith(".zip") ||
|
||||
fileName.EndsWith(".tar") ||
|
||||
fileName.EndsWith(".gz"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
Engine.Logger.Info("Copying " + fileName);
|
||||
var dest = Path.Combine(options.Path, file.Substring(updateLocation.Length));
|
||||
var destDir = Path.GetDirectoryName(dest);
|
||||
if (!Directory.Exists(destDir))
|
||||
{
|
||||
Engine.Logger.Info("Creating directory " + destDir);
|
||||
Directory.CreateDirectory(destDir);
|
||||
}
|
||||
File.Copy(file, dest, true);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Engine.Logger.Error(e);
|
||||
}
|
||||
}
|
||||
|
||||
// delete old dirs
|
||||
string[] oldDirs = new string[] { "Content/logos" };
|
||||
|
||||
foreach (var oldDir in oldDirs)
|
||||
{
|
||||
try
|
||||
{
|
||||
var deleteDir = Path.Combine(options.Path, oldDir);
|
||||
if (Directory.Exists(deleteDir))
|
||||
{
|
||||
Engine.Logger.Info("Deleting directory " + deleteDir);
|
||||
Directory.Delete(deleteDir, true);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Engine.Logger.Error(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// delete old files
|
||||
string[] oldFiles = new string[] {
|
||||
"Content/css/jquery.dataTables.css",
|
||||
"Content/css/jquery.dataTables_themeroller.css",
|
||||
"Definitions/tspate.yml",
|
||||
"Definitions/freakstrackingsystem.yml",
|
||||
"Definitions/rarbg.yml",
|
||||
"Definitions/t411.yml",
|
||||
"Definitions/hdbc.yml", // renamed to hdbitscom
|
||||
};
|
||||
|
||||
foreach (var oldFIle in oldFiles)
|
||||
{
|
||||
try
|
||||
{
|
||||
var deleteFile = Path.Combine(options.Path, oldFIle);
|
||||
if (File.Exists(deleteFile))
|
||||
{
|
||||
Engine.Logger.Info("Deleting file " + deleteFile);
|
||||
File.Delete(deleteFile);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Engine.Logger.Error(e);
|
||||
}
|
||||
}
|
||||
|
||||
// kill pids after the update on UNIX
|
||||
if (!isWindows)
|
||||
KillPids(pids);
|
||||
|
||||
if (options.NoRestart == false)
|
||||
{
|
||||
if (trayRunning)
|
||||
{
|
||||
var startInfo = new ProcessStartInfo()
|
||||
{
|
||||
Arguments = options.Args,
|
||||
FileName = Path.Combine(options.Path, "JackettTray.exe"),
|
||||
UseShellExecute = true
|
||||
};
|
||||
|
||||
Process.Start(startInfo);
|
||||
}
|
||||
|
||||
if(string.Equals(options.Type, "JackettService.exe", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
var serviceHelper = new ServiceConfigService(null, null);
|
||||
if (serviceHelper.ServiceExists())
|
||||
{
|
||||
serviceHelper.Start();
|
||||
}
|
||||
} else
|
||||
{
|
||||
var startInfo = new ProcessStartInfo()
|
||||
{
|
||||
Arguments = options.Args,
|
||||
FileName = Path.Combine(options.Path, "JackettConsole.exe"),
|
||||
UseShellExecute = true
|
||||
};
|
||||
|
||||
if (!isWindows)
|
||||
{
|
||||
startInfo.Arguments = startInfo.FileName + " " + startInfo.Arguments;
|
||||
startInfo.FileName = "mono";
|
||||
}
|
||||
|
||||
Engine.Logger.Info("Starting Jackett: " + startInfo.FileName + " " + startInfo.Arguments);
|
||||
Process.Start(startInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private string GetUpdateLocation()
|
||||
{
|
||||
var location = new Uri(Assembly.GetEntryAssembly().GetName().CodeBase);
|
||||
return new FileInfo(HttpUtility.UrlDecode(location.AbsolutePath)).DirectoryName;
|
||||
}
|
||||
}
|
||||
}
|
||||
using CommandLine;
|
||||
using Jackett.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
/*
|
||||
// no supported by appveyor, disabeling for now
|
||||
#if __MonoCS__
|
||||
using Mono.Unix.Native;
|
||||
#endif
|
||||
*/
|
||||
|
||||
namespace Jackett.Updater
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
new Program().Run(args);
|
||||
}
|
||||
|
||||
private void Run(string[] args)
|
||||
{
|
||||
Engine.SetupLogging(null, "updater.txt");
|
||||
Engine.Logger.Info("Jackett Updater v" + GetCurrentVersion());
|
||||
Engine.Logger.Info("Options \"" + string.Join("\" \"", args) + "\"");
|
||||
try {
|
||||
var options = new UpdaterConsoleOptions();
|
||||
if (Parser.Default.ParseArguments(args, options))
|
||||
{
|
||||
ProcessUpdate(options);
|
||||
}
|
||||
else
|
||||
{
|
||||
Engine.Logger.Error("Failed to process update arguments!");
|
||||
Console.ReadKey();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Engine.Logger.Error(e, "Exception applying update!");
|
||||
}
|
||||
}
|
||||
|
||||
private string GetCurrentVersion()
|
||||
{
|
||||
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
|
||||
var fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
|
||||
return fvi.FileVersion;
|
||||
}
|
||||
|
||||
private void KillPids(int[] pids)
|
||||
{
|
||||
foreach (var pid in pids)
|
||||
{
|
||||
try
|
||||
{
|
||||
var proc = Process.GetProcessById(pid);
|
||||
Engine.Logger.Info("Killing process " + proc.Id);
|
||||
proc.Kill();
|
||||
var exited = proc.WaitForExit(5000);
|
||||
if (!exited)
|
||||
Engine.Logger.Info("Process " + pid.ToString() + " didn't exit within 5 seconds");
|
||||
/*
|
||||
// no supported by appveyor, disabeling for now
|
||||
#if __MonoCS__
|
||||
Engine.Logger.Info("Sending SIGKILL to process " + pid.ToString());
|
||||
Syscall.kill(proc.Id, Signum.SIGKILL);
|
||||
#endif
|
||||
*/
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
Engine.Logger.Info("Process " + pid.ToString() + " is already dead");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Engine.Logger.Info("Error killing process " + pid.ToString());
|
||||
Engine.Logger.Info(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ProcessUpdate(UpdaterConsoleOptions options)
|
||||
{
|
||||
var updateLocation = GetUpdateLocation();
|
||||
if(!(updateLocation.EndsWith("\\") || updateLocation.EndsWith("/")))
|
||||
{
|
||||
updateLocation += Path.DirectorySeparatorChar;
|
||||
}
|
||||
|
||||
var pids = new int[] { };
|
||||
if (options.KillPids != null)
|
||||
{
|
||||
var pidsStr = options.KillPids.Split(',').Where(pid => !string.IsNullOrWhiteSpace(pid)).ToArray();
|
||||
pids = Array.ConvertAll(pidsStr, pid => int.Parse(pid));
|
||||
}
|
||||
|
||||
var isWindows = System.Environment.OSVersion.Platform != PlatformID.Unix;
|
||||
var trayRunning = false;
|
||||
var trayProcesses = Process.GetProcessesByName("JackettTray");
|
||||
if (isWindows)
|
||||
{
|
||||
if (trayProcesses.Count() > 0)
|
||||
{
|
||||
foreach (var proc in trayProcesses)
|
||||
{
|
||||
try
|
||||
{
|
||||
Engine.Logger.Info("Killing tray process " + proc.Id);
|
||||
proc.Kill();
|
||||
trayRunning = true;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
|
||||
// on unix we don't have to wait (we can overwrite files which are in use)
|
||||
// On unix we kill the PIDs after the update so e.g. systemd can automatically restart the process
|
||||
KillPids(pids);
|
||||
}
|
||||
Engine.Logger.Info("Finding files in: " + updateLocation);
|
||||
var files = Directory.GetFiles(updateLocation, "*.*", SearchOption.AllDirectories);
|
||||
foreach(var file in files)
|
||||
{
|
||||
var fileName = Path.GetFileName(file).ToLowerInvariant();
|
||||
|
||||
if (fileName.EndsWith(".zip") ||
|
||||
fileName.EndsWith(".tar") ||
|
||||
fileName.EndsWith(".gz"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
Engine.Logger.Info("Copying " + fileName);
|
||||
var dest = Path.Combine(options.Path, file.Substring(updateLocation.Length));
|
||||
var destDir = Path.GetDirectoryName(dest);
|
||||
if (!Directory.Exists(destDir))
|
||||
{
|
||||
Engine.Logger.Info("Creating directory " + destDir);
|
||||
Directory.CreateDirectory(destDir);
|
||||
}
|
||||
File.Copy(file, dest, true);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Engine.Logger.Error(e);
|
||||
}
|
||||
}
|
||||
|
||||
// delete old dirs
|
||||
string[] oldDirs = new string[] { "Content/logos" };
|
||||
|
||||
foreach (var oldDir in oldDirs)
|
||||
{
|
||||
try
|
||||
{
|
||||
var deleteDir = Path.Combine(options.Path, oldDir);
|
||||
if (Directory.Exists(deleteDir))
|
||||
{
|
||||
Engine.Logger.Info("Deleting directory " + deleteDir);
|
||||
Directory.Delete(deleteDir, true);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Engine.Logger.Error(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// delete old files
|
||||
string[] oldFiles = new string[] {
|
||||
"Content/css/jquery.dataTables.css",
|
||||
"Content/css/jquery.dataTables_themeroller.css",
|
||||
"Definitions/tspate.yml",
|
||||
"Definitions/freakstrackingsystem.yml",
|
||||
"Definitions/rarbg.yml",
|
||||
"Definitions/t411.yml",
|
||||
"Definitions/hdbc.yml", // renamed to hdbitscom
|
||||
"Definitions/maniatorrent.yml",
|
||||
"Definitions/nyaa.yml",
|
||||
"Definitions/nachtwerk.yml",
|
||||
"Definitions/leparadisdunet.yml",
|
||||
"Definitions/qctorrent.yml",
|
||||
"Definitions/dragonworld.yml",
|
||||
"Definitions/hdclub.yml",
|
||||
"Definitions/polishtracker.yml",
|
||||
"Definitions/zetorrents.yml",
|
||||
};
|
||||
|
||||
foreach (var oldFIle in oldFiles)
|
||||
{
|
||||
try
|
||||
{
|
||||
var deleteFile = Path.Combine(options.Path, oldFIle);
|
||||
if (File.Exists(deleteFile))
|
||||
{
|
||||
Engine.Logger.Info("Deleting file " + deleteFile);
|
||||
File.Delete(deleteFile);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Engine.Logger.Error(e);
|
||||
}
|
||||
}
|
||||
|
||||
// kill pids after the update on UNIX
|
||||
if (!isWindows)
|
||||
KillPids(pids);
|
||||
|
||||
if (options.NoRestart == false)
|
||||
{
|
||||
if (trayRunning)
|
||||
{
|
||||
var startInfo = new ProcessStartInfo()
|
||||
{
|
||||
Arguments = options.Args,
|
||||
FileName = Path.Combine(options.Path, "JackettTray.exe"),
|
||||
UseShellExecute = true
|
||||
};
|
||||
|
||||
Process.Start(startInfo);
|
||||
}
|
||||
|
||||
if(string.Equals(options.Type, "JackettService.exe", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
var serviceHelper = new ServiceConfigService(null, null);
|
||||
if (serviceHelper.ServiceExists())
|
||||
{
|
||||
serviceHelper.Start();
|
||||
}
|
||||
} else
|
||||
{
|
||||
var startInfo = new ProcessStartInfo()
|
||||
{
|
||||
Arguments = options.Args,
|
||||
FileName = Path.Combine(options.Path, "JackettConsole.exe"),
|
||||
UseShellExecute = true
|
||||
};
|
||||
|
||||
if (!isWindows)
|
||||
{
|
||||
startInfo.Arguments = startInfo.FileName + " " + startInfo.Arguments;
|
||||
startInfo.FileName = "mono";
|
||||
}
|
||||
|
||||
Engine.Logger.Info("Starting Jackett: " + startInfo.FileName + " " + startInfo.Arguments);
|
||||
Process.Start(startInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private string GetUpdateLocation()
|
||||
{
|
||||
var location = new Uri(Assembly.GetEntryAssembly().GetName().CodeBase);
|
||||
return new FileInfo(HttpUtility.UrlDecode(location.AbsolutePath)).DirectoryName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ namespace Jackett.Updater
|
||||
public string Path { get; set; }
|
||||
|
||||
[Option('t', "Type", HelpText = "Install type")]
|
||||
public string Type { get; set; }
|
||||
|
||||
public string Type { get; set; }
|
||||
|
||||
[Option('a', "Args", HelpText = "Launch arguments")]
|
||||
public string Args { get; set; }
|
||||
|
||||
|
||||
@@ -66,9 +66,9 @@ Global
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
Policies = $0
|
||||
$0.TextStylePolicy = $1
|
||||
$1.inheritsSet = VisualStudio
|
||||
$1.inheritsScope = text/plain
|
||||
$1.scope = text/x-csharp
|
||||
$1.TabsToSpaces = True
|
||||
$1.EolMarker = Unix
|
||||
$0.CSharpFormattingPolicy = $2
|
||||
$2.IndentSwitchBody = True
|
||||
$2.IndentBlocksInsideExpressions = True
|
||||
@@ -94,8 +94,27 @@ Global
|
||||
$2.BeforeDelegateDeclarationParentheses = False
|
||||
$2.NewParentheses = False
|
||||
$2.SpacesBeforeBrackets = False
|
||||
$2.inheritsSet = Mono
|
||||
$2.inheritsScope = text/x-csharp
|
||||
$2.scope = text/x-csharp
|
||||
$2.IndentSwitchSection = True
|
||||
$2.NewLinesForBracesInProperties = True
|
||||
$2.NewLinesForBracesInAccessors = True
|
||||
$2.NewLinesForBracesInAnonymousMethods = True
|
||||
$2.NewLinesForBracesInControlBlocks = True
|
||||
$2.NewLinesForBracesInAnonymousTypes = True
|
||||
$2.NewLinesForBracesInObjectCollectionArrayInitializers = True
|
||||
$2.NewLinesForBracesInLambdaExpressionBody = True
|
||||
$2.NewLineForElse = True
|
||||
$2.NewLineForCatch = True
|
||||
$2.NewLineForFinally = True
|
||||
$2.NewLineForMembersInObjectInit = True
|
||||
$2.NewLineForMembersInAnonymousTypes = True
|
||||
$2.NewLineForClausesInQuery = True
|
||||
$2.SpacingAfterMethodDeclarationName = False
|
||||
$2.SpaceAfterMethodCallName = False
|
||||
$2.SpaceBeforeOpenSquareBracket = False
|
||||
$0.TextStylePolicy = $3
|
||||
$3.FileWidth = 80
|
||||
$3.TabsToSpaces = True
|
||||
$3.scope = text/plain
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
1
src/Jackett/Content/css/bootstrap-multiselect.css
vendored
Normal file
1
src/Jackett/Content/css/bootstrap-multiselect.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
span.multiselect-native-select{position:relative}span.multiselect-native-select select{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px -1px -1px -3px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;left:50%;top:30px}.multiselect-container{position:absolute;list-style-type:none;margin:0;padding:0}.multiselect-container .input-group{margin:5px}.multiselect-container>li{padding:0}.multiselect-container>li>a.multiselect-all label{font-weight:700}.multiselect-container>li.multiselect-group label{margin:0;padding:3px 20px 3px 20px;height:100%;font-weight:700}.multiselect-container>li.multiselect-group-clickable label{cursor:pointer}.multiselect-container>li>a{padding:0}.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:3px 20px 3px 40px}.multiselect-container>li>a>label.radio,.multiselect-container>li>a>label.checkbox{margin:0}.multiselect-container>li>a>label>input[type=checkbox]{margin-bottom:5px}.btn-group>.btn-group:nth-child(2)>.multiselect.btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.form-inline .multiselect-container label.checkbox,.form-inline .multiselect-container label.radio{padding:3px 20px 3px 40px}.form-inline .multiselect-container li a label.checkbox input[type=checkbox],.form-inline .multiselect-container li a label.radio input[type=radio]{margin-left:-20px;margin-right:0}
|
||||
@@ -62,6 +62,10 @@ body {
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.setup-item-inputselect {
|
||||
max-width: 255px;
|
||||
}
|
||||
|
||||
[data-type=hiddendata]{
|
||||
display: none;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -62,6 +62,10 @@ body {
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.setup-item-inputselect {
|
||||
max-width: 255px;
|
||||
}
|
||||
|
||||
[data-type=hiddendata]{
|
||||
display: none;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
89
src/Jackett/Content/libs/api.js
Normal file
89
src/Jackett/Content/libs/api.js
Normal file
@@ -0,0 +1,89 @@
|
||||
var api = {
|
||||
version: "2.0",
|
||||
root: "/api",
|
||||
key: "",
|
||||
|
||||
getApiPath: function(category, action) {
|
||||
var path = this.root + "/v" + this.version + "/" + category;
|
||||
if (action !== undefined)
|
||||
path = path + "/" + action
|
||||
return path;
|
||||
},
|
||||
|
||||
getAllIndexers: function(callback) {
|
||||
return $.get(this.getApiPath("indexers"), callback);
|
||||
},
|
||||
|
||||
getServerConfig: function(callback) {
|
||||
return $.get(this.getApiPath("server", "config"), callback);
|
||||
},
|
||||
|
||||
getIndexerConfig: function(indexerId, callback) {
|
||||
return $.get(this.getApiPath("indexers", indexerId + "/config"), callback);
|
||||
},
|
||||
|
||||
updateIndexerConfig: function(indexerId, config, callback) {
|
||||
return $.ajax({
|
||||
url: this.getApiPath("indexers", indexerId + "/config"),
|
||||
type: 'POST',
|
||||
data: JSON.stringify(config),
|
||||
dataType: 'json',
|
||||
contentType: 'application/json',
|
||||
cache: false,
|
||||
success: callback
|
||||
});
|
||||
},
|
||||
|
||||
deleteIndexer: function(indexerId, callback) {
|
||||
return $.ajax({
|
||||
url: this.getApiPath("indexers", indexerId),
|
||||
type: 'DELETE',
|
||||
cache: false,
|
||||
success: callback
|
||||
});
|
||||
},
|
||||
|
||||
testIndexer: function(indexerId, callback) {
|
||||
return $.post(this.getApiPath("indexers", indexerId + "/test"), callback);
|
||||
},
|
||||
|
||||
resultsForIndexer: function(indexerId, query, callback) {
|
||||
return $.get(this.getApiPath("indexers", indexerId + "/results?apikey=" + this.key), query, callback);
|
||||
},
|
||||
|
||||
getServerCache: function(callback) {
|
||||
return $.get(this.getApiPath("indexers", "cache"), callback);
|
||||
},
|
||||
|
||||
getServerLogs: function(callback) {
|
||||
return $.get(this.getApiPath("server", "logs"), callback);
|
||||
},
|
||||
|
||||
updateServerConfig: function(serverConfig, callback) {
|
||||
return $.ajax({
|
||||
url: this.getApiPath("server", "config"),
|
||||
type: 'POST',
|
||||
data: JSON.stringify(serverConfig),
|
||||
dataType: 'json',
|
||||
contentType: 'application/json',
|
||||
cache: false,
|
||||
success: callback
|
||||
});
|
||||
},
|
||||
|
||||
updateServer: function(callback) {
|
||||
return $.post(this.getApiPath("server", "update"), callback);
|
||||
},
|
||||
|
||||
updateAdminPassword: function(password, callback) {
|
||||
return $.ajax({
|
||||
url: this.getApiPath("server", "adminpassword"),
|
||||
type: 'POST',
|
||||
data: JSON.stringify(password),
|
||||
dataType: 'json',
|
||||
contentType: 'application/json',
|
||||
cache: false,
|
||||
success: callback
|
||||
});
|
||||
}
|
||||
}
|
||||
1716
src/Jackett/Content/libs/bootstrap-multiselect.js
vendored
Normal file
1716
src/Jackett/Content/libs/bootstrap-multiselect.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6
src/Jackett/Content/libs/handlebarsextend.js
Normal file
6
src/Jackett/Content/libs/handlebarsextend.js
Normal file
@@ -0,0 +1,6 @@
|
||||
Handlebars.registerHelper('ifCond', function (v1, v2, options) {
|
||||
if(v1 === v2) {
|
||||
return options.fn(this);
|
||||
}
|
||||
return options.inverse(this);
|
||||
});
|
||||
@@ -1,117 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<script src="jquery-2.1.3.min.js"></script>
|
||||
<script src="common.js"></script>
|
||||
<style>
|
||||
#formItemTemplateContainer {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
|
||||
$(function () {
|
||||
|
||||
var urlParams = getUrlParams();
|
||||
|
||||
var jqxhr = $.post("get_config_form", JSON.stringify({ indexer: urlParams.indexer }), function (data) {
|
||||
populateForm(data.config);
|
||||
})
|
||||
.fail(function () {
|
||||
alert("error");
|
||||
});
|
||||
|
||||
$("#loginButton").click(function () {
|
||||
var data = { indexer: urlParams.indexer, config: {} };
|
||||
$("#formItems").children().each(function (i, item) {
|
||||
var $item = $(item);
|
||||
var type = $item.data("type");
|
||||
var id = $item.data("id");
|
||||
var $valEl = $item.find(".formItemValue").children().first();
|
||||
switch (type) {
|
||||
case "inputstring":
|
||||
data.config[id] = $valEl.val();
|
||||
break;
|
||||
case "inputbool":
|
||||
data.config[id] = $valEl.val();
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
var jqxhr = $.post("configure_indexer", JSON.stringify(data), function (data) {
|
||||
if (data.result == "error") {
|
||||
if (data.config) {
|
||||
populateForm(data.config);
|
||||
}
|
||||
alert(data.error);
|
||||
|
||||
}
|
||||
})
|
||||
.fail(function () {
|
||||
alert("error");
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function populateForm(data) {
|
||||
$("#formItems").empty();
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
$("#formItems").append(createFormItem(data[i]));
|
||||
}
|
||||
}
|
||||
|
||||
function createFormItem(itemData) {
|
||||
var $template = $("#formItemTemplate").clone();
|
||||
$template.attr("id", "item" + itemData.id);
|
||||
$template.data("id", itemData.id);
|
||||
$template.data("type", itemData.type);
|
||||
$template.attr("data-type", itemData.type);
|
||||
$template.data("value", itemData.value);
|
||||
$template.find(".formItemName").text(itemData.name);
|
||||
|
||||
$valueElement = $template.find(".formItemValue");
|
||||
|
||||
switch (itemData.type) {
|
||||
case "inputstring":
|
||||
$valueElement.append($("<input type='text'></input>").val(itemData.value));
|
||||
break;
|
||||
case "inputbool":
|
||||
$valueElement.append($("<input type='checkbox'></input>").prop("checked", itemData.value));
|
||||
break;
|
||||
case "displayimage":
|
||||
$valueElement.append($("<img src='" + itemData.value + "'>"));
|
||||
break;
|
||||
case "displayinfo":
|
||||
$valueElement.append($("<span></span>").text(itemData.value));
|
||||
break;
|
||||
}
|
||||
|
||||
return $template;
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<div id="formItems">
|
||||
|
||||
</div>
|
||||
|
||||
<button id="loginButton">Login</button>
|
||||
|
||||
<div id="formItemTemplateContainer">
|
||||
<div id="formItemTemplate">
|
||||
<div class="formItemName"></div>
|
||||
<div class="formItemValue"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,595 +0,0 @@
|
||||
using Autofac;
|
||||
using AutoMapper;
|
||||
using Jackett.Indexers;
|
||||
using Jackett.Models;
|
||||
using Jackett.Services;
|
||||
using Jackett.Utils;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Security.Claims;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
using System.Web.Http.Results;
|
||||
using System.Web.Security;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Jackett.Controllers
|
||||
{
|
||||
[RoutePrefix("admin")]
|
||||
[JackettAuthorized]
|
||||
[JackettAPINoCache]
|
||||
public class AdminController : ApiController
|
||||
{
|
||||
private IConfigurationService config;
|
||||
private IIndexerManagerService indexerService;
|
||||
private IServerService serverService;
|
||||
private ISecuityService securityService;
|
||||
private IProcessService processService;
|
||||
private ICacheService cacheService;
|
||||
private Logger logger;
|
||||
private ILogCacheService logCache;
|
||||
private IUpdateService updater;
|
||||
|
||||
public AdminController(IConfigurationService config, IIndexerManagerService i, IServerService ss, ISecuityService s, IProcessService p, ICacheService c, Logger l, ILogCacheService lc, IUpdateService u)
|
||||
{
|
||||
this.config = config;
|
||||
indexerService = i;
|
||||
serverService = ss;
|
||||
securityService = s;
|
||||
processService = p;
|
||||
cacheService = c;
|
||||
logger = l;
|
||||
logCache = lc;
|
||||
updater = u;
|
||||
}
|
||||
|
||||
private async Task<JToken> ReadPostDataJson()
|
||||
{
|
||||
var content = await Request.Content.ReadAsStringAsync();
|
||||
return JObject.Parse(content);
|
||||
}
|
||||
|
||||
|
||||
private HttpResponseMessage GetFile(string path)
|
||||
{
|
||||
var result = new HttpResponseMessage(HttpStatusCode.OK);
|
||||
var mappedPath = Path.Combine(config.GetContentFolder(), path);
|
||||
var stream = new FileStream(mappedPath, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||
result.Content = new StreamContent(stream);
|
||||
result.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(mappedPath));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[AllowAnonymous]
|
||||
public RedirectResult Logout()
|
||||
{
|
||||
var ctx = Request.GetOwinContext();
|
||||
var authManager = ctx.Authentication;
|
||||
authManager.SignOut("ApplicationCookie");
|
||||
return Redirect("Admin/Dashboard");
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[HttpPost]
|
||||
[AllowAnonymous]
|
||||
public async Task<HttpResponseMessage> Dashboard()
|
||||
{
|
||||
if (Request.RequestUri.Query != null && Request.RequestUri.Query.Contains("logout"))
|
||||
{
|
||||
var file = GetFile("login.html");
|
||||
securityService.Logout(file);
|
||||
return file;
|
||||
}
|
||||
|
||||
|
||||
if (securityService.CheckAuthorised(Request))
|
||||
{
|
||||
return GetFile("index.html");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var formData = await Request.Content.ReadAsFormDataAsync();
|
||||
|
||||
if (formData != null && securityService.HashPassword(formData["password"]) == serverService.Config.AdminPassword)
|
||||
{
|
||||
var file = GetFile("index.html");
|
||||
securityService.Login(file);
|
||||
return file;
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetFile("login.html");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Route("set_admin_password")]
|
||||
[HttpPost]
|
||||
public async Task<IHttpActionResult> SetAdminPassword()
|
||||
{
|
||||
var jsonReply = new JObject();
|
||||
try
|
||||
{
|
||||
var postData = await ReadPostDataJson();
|
||||
var password = (string)postData["password"];
|
||||
if (string.IsNullOrEmpty(password))
|
||||
{
|
||||
serverService.Config.AdminPassword = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
serverService.Config.AdminPassword = securityService.HashPassword(password);
|
||||
}
|
||||
|
||||
serverService.SaveConfig();
|
||||
jsonReply["result"] = "success";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error(ex, "Exception in SetAdminPassword");
|
||||
jsonReply["result"] = "error";
|
||||
jsonReply["error"] = ex.Message;
|
||||
}
|
||||
return Json(jsonReply);
|
||||
}
|
||||
|
||||
[Route("get_config_form")]
|
||||
[HttpPost]
|
||||
public async Task<IHttpActionResult> GetConfigForm()
|
||||
{
|
||||
var jsonReply = new JObject();
|
||||
try
|
||||
{
|
||||
var postData = await ReadPostDataJson();
|
||||
var indexer = indexerService.GetIndexer((string)postData["indexer"]);
|
||||
var config = await indexer.GetConfigurationForSetup();
|
||||
jsonReply["config"] = config.ToJson(null);
|
||||
jsonReply["caps"] = indexer.TorznabCaps.CapsToJson();
|
||||
jsonReply["name"] = indexer.DisplayName;
|
||||
jsonReply["alternativesitelinks"] = JToken.FromObject(indexer.AlternativeSiteLinks);
|
||||
jsonReply["result"] = "success";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error(ex, "Exception in GetConfigForm");
|
||||
jsonReply["result"] = "error";
|
||||
jsonReply["error"] = ex.Message;
|
||||
}
|
||||
return Json(jsonReply);
|
||||
}
|
||||
|
||||
[Route("configure_indexer")]
|
||||
[HttpPost]
|
||||
public async Task<IHttpActionResult> Configure()
|
||||
{
|
||||
var jsonReply = new JObject();
|
||||
IIndexer indexer = null;
|
||||
try
|
||||
{
|
||||
var postData = await ReadPostDataJson();
|
||||
string indexerString = (string)postData["indexer"];
|
||||
indexer = indexerService.GetIndexer((string)postData["indexer"]);
|
||||
jsonReply["name"] = indexer.DisplayName;
|
||||
var configurationResult = await indexer.ApplyConfiguration(postData["config"]);
|
||||
if (configurationResult == IndexerConfigurationStatus.RequiresTesting)
|
||||
{
|
||||
await indexerService.TestIndexer((string)postData["indexer"]);
|
||||
}
|
||||
else if (configurationResult == IndexerConfigurationStatus.Failed)
|
||||
{
|
||||
throw new Exception("Configuration Failed");
|
||||
}
|
||||
jsonReply["result"] = "success";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
jsonReply["result"] = "error";
|
||||
jsonReply["error"] = ex.Message;
|
||||
var baseIndexer = indexer as BaseIndexer;
|
||||
if (null != baseIndexer)
|
||||
baseIndexer.ResetBaseConfig();
|
||||
if (ex is ExceptionWithConfigData)
|
||||
{
|
||||
jsonReply["config"] = ((ExceptionWithConfigData)ex).ConfigData.ToJson(null,false);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error(ex, "Exception in Configure");
|
||||
}
|
||||
}
|
||||
return Json(jsonReply);
|
||||
}
|
||||
|
||||
[Route("get_indexers")]
|
||||
[HttpGet]
|
||||
public IHttpActionResult Indexers()
|
||||
{
|
||||
var jsonReply = new JObject();
|
||||
try
|
||||
{
|
||||
jsonReply["result"] = "success";
|
||||
JArray items = new JArray();
|
||||
|
||||
foreach (var indexer in indexerService.GetAllIndexers())
|
||||
{
|
||||
var item = new JObject();
|
||||
item["id"] = indexer.ID;
|
||||
item["name"] = indexer.DisplayName;
|
||||
item["description"] = indexer.DisplayDescription;
|
||||
item["type"] = indexer.Type;
|
||||
item["configured"] = indexer.IsConfigured;
|
||||
item["site_link"] = indexer.SiteLink;
|
||||
item["language"] = indexer.Language;
|
||||
item["last_error"] = indexer.LastError;
|
||||
item["potatoenabled"] = indexer.TorznabCaps.Categories.Select(c => c.ID).Any(i => PotatoController.MOVIE_CATS.Contains(i));
|
||||
|
||||
var caps = new JObject();
|
||||
foreach (var cap in indexer.TorznabCaps.Categories)
|
||||
caps[cap.ID.ToString()] = cap.Name;
|
||||
item["caps"] = caps;
|
||||
items.Add(item);
|
||||
}
|
||||
jsonReply["items"] = items;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error(ex, "Exception in get_indexers");
|
||||
jsonReply["result"] = "error";
|
||||
jsonReply["error"] = ex.Message;
|
||||
}
|
||||
return Json(jsonReply);
|
||||
}
|
||||
|
||||
[Route("test_indexer")]
|
||||
[HttpPost]
|
||||
public async Task<IHttpActionResult> Test()
|
||||
{
|
||||
JToken jsonReply = new JObject();
|
||||
IIndexer indexer = null;
|
||||
try
|
||||
{
|
||||
var postData = await ReadPostDataJson();
|
||||
string indexerString = (string)postData["indexer"];
|
||||
indexer = indexerService.GetIndexer(indexerString);
|
||||
await indexerService.TestIndexer(indexerString);
|
||||
jsonReply["name"] = indexer.DisplayName;
|
||||
jsonReply["result"] = "success";
|
||||
indexer.LastError = null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var msg = ex.Message;
|
||||
if (ex.InnerException != null)
|
||||
msg += ": " + ex.InnerException.Message;
|
||||
logger.Error(ex, "Exception in test_indexer");
|
||||
jsonReply["result"] = "error";
|
||||
jsonReply["error"] = msg;
|
||||
if (indexer != null)
|
||||
indexer.LastError = msg;
|
||||
}
|
||||
return Json(jsonReply);
|
||||
}
|
||||
|
||||
[Route("delete_indexer")]
|
||||
[HttpPost]
|
||||
public async Task<IHttpActionResult> Delete()
|
||||
{
|
||||
var jsonReply = new JObject();
|
||||
try
|
||||
{
|
||||
var postData = await ReadPostDataJson();
|
||||
string indexerString = (string)postData["indexer"];
|
||||
indexerService.DeleteIndexer(indexerString);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error(ex, "Exception in delete_indexer");
|
||||
jsonReply["result"] = "error";
|
||||
jsonReply["error"] = ex.Message;
|
||||
}
|
||||
return Json(jsonReply);
|
||||
}
|
||||
|
||||
[Route("trigger_update")]
|
||||
[HttpGet]
|
||||
public IHttpActionResult TriggerUpdates()
|
||||
{
|
||||
var jsonReply = new JObject();
|
||||
updater.CheckForUpdatesNow();
|
||||
return Json(jsonReply);
|
||||
}
|
||||
|
||||
[Route("get_jackett_config")]
|
||||
[HttpGet]
|
||||
public IHttpActionResult GetConfig()
|
||||
{
|
||||
var jsonReply = new JObject();
|
||||
try
|
||||
{
|
||||
var cfg = new JObject();
|
||||
cfg["notices"] = JToken.FromObject(serverService.notices);
|
||||
cfg["port"] = serverService.Config.Port;
|
||||
cfg["external"] = serverService.Config.AllowExternal;
|
||||
cfg["api_key"] = serverService.Config.APIKey;
|
||||
cfg["blackholedir"] = serverService.Config.BlackholeDir;
|
||||
cfg["updatedisabled"] = serverService.Config.UpdateDisabled;
|
||||
cfg["prerelease"] = serverService.Config.UpdatePrerelease;
|
||||
cfg["password"] = string.IsNullOrEmpty(serverService.Config.AdminPassword) ? string.Empty : serverService.Config.AdminPassword.Substring(0, 10);
|
||||
cfg["logging"] = Startup.TracingEnabled;
|
||||
cfg["basepathoverride"] = serverService.Config.BasePathOverride;
|
||||
|
||||
|
||||
jsonReply["config"] = cfg;
|
||||
jsonReply["app_version"] = config.GetVersion();
|
||||
jsonReply["result"] = "success";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error(ex, "Exception in get_jackett_config");
|
||||
jsonReply["result"] = "error";
|
||||
jsonReply["error"] = ex.Message;
|
||||
}
|
||||
return Json(jsonReply);
|
||||
}
|
||||
|
||||
[Route("set_config")]
|
||||
[HttpPost]
|
||||
public async Task<IHttpActionResult> SetConfig()
|
||||
{
|
||||
var originalPort = Engine.Server.Config.Port;
|
||||
var originalAllowExternal = Engine.Server.Config.AllowExternal;
|
||||
var jsonReply = new JObject();
|
||||
try
|
||||
{
|
||||
var postData = await ReadPostDataJson();
|
||||
int port = (int)postData["port"];
|
||||
bool external = (bool)postData["external"];
|
||||
string saveDir = (string)postData["blackholedir"];
|
||||
bool updateDisabled = (bool)postData["updatedisabled"];
|
||||
bool preRelease = (bool)postData["prerelease"];
|
||||
bool logging = (bool)postData["logging"];
|
||||
string basePathOverride = (string)postData["basepathoverride"];
|
||||
|
||||
Engine.Server.Config.UpdateDisabled = updateDisabled;
|
||||
Engine.Server.Config.UpdatePrerelease = preRelease;
|
||||
Engine.Server.Config.BasePathOverride = basePathOverride;
|
||||
Startup.BasePath = Engine.Server.BasePath();
|
||||
Engine.Server.SaveConfig();
|
||||
|
||||
Engine.SetLogLevel(logging ? LogLevel.Debug : LogLevel.Info);
|
||||
Startup.TracingEnabled = logging;
|
||||
|
||||
if (port != Engine.Server.Config.Port || external != Engine.Server.Config.AllowExternal)
|
||||
{
|
||||
|
||||
if (ServerUtil.RestrictedPorts.Contains(port))
|
||||
{
|
||||
jsonReply["result"] = "error";
|
||||
jsonReply["error"] = "The port you have selected is restricted, try a different one.";
|
||||
return Json(jsonReply);
|
||||
}
|
||||
|
||||
// Save port to the config so it can be picked up by the if needed when running as admin below.
|
||||
Engine.Server.Config.AllowExternal = external;
|
||||
Engine.Server.Config.Port = port;
|
||||
Engine.Server.SaveConfig();
|
||||
|
||||
// On Windows change the url reservations
|
||||
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
|
||||
{
|
||||
if (!ServerUtil.IsUserAdministrator())
|
||||
{
|
||||
try
|
||||
{
|
||||
processService.StartProcessAndLog(Application.ExecutablePath, "--ReserveUrls", true);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Engine.Server.Config.Port = originalPort;
|
||||
Engine.Server.Config.AllowExternal = originalAllowExternal;
|
||||
Engine.Server.SaveConfig();
|
||||
jsonReply["result"] = "error";
|
||||
jsonReply["error"] = "Failed to acquire admin permissions to reserve the new port.";
|
||||
return Json(jsonReply);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
serverService.ReserveUrls(true);
|
||||
}
|
||||
}
|
||||
|
||||
(new Thread(() =>
|
||||
{
|
||||
Thread.Sleep(500);
|
||||
serverService.Stop();
|
||||
Engine.BuildContainer();
|
||||
Engine.Server.Initalize();
|
||||
Engine.Server.Start();
|
||||
})).Start();
|
||||
}
|
||||
|
||||
if (saveDir != Engine.Server.Config.BlackholeDir)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(saveDir))
|
||||
{
|
||||
if (!Directory.Exists(saveDir))
|
||||
{
|
||||
throw new Exception("Blackhole directory does not exist");
|
||||
}
|
||||
}
|
||||
|
||||
Engine.Server.Config.BlackholeDir = saveDir;
|
||||
Engine.Server.SaveConfig();
|
||||
}
|
||||
|
||||
jsonReply["result"] = "success";
|
||||
jsonReply["port"] = port;
|
||||
jsonReply["external"] = external;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error(ex, "Exception in set_port");
|
||||
jsonReply["result"] = "error";
|
||||
jsonReply["error"] = ex.Message;
|
||||
}
|
||||
return Json(jsonReply);
|
||||
}
|
||||
|
||||
[Route("GetCache")]
|
||||
[HttpGet]
|
||||
public List<TrackerCacheResult> GetCache()
|
||||
{
|
||||
var results = cacheService.GetCachedResults();
|
||||
ConfigureCacheResults(results);
|
||||
return results;
|
||||
}
|
||||
|
||||
|
||||
private void ConfigureCacheResults(List<TrackerCacheResult> results)
|
||||
{
|
||||
var serverUrl = string.Format("{0}://{1}:{2}{3}", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port, serverService.BasePath());
|
||||
foreach (var result in results)
|
||||
{
|
||||
var link = result.Link;
|
||||
result.Link = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "dl", result.Title + ".torrent");
|
||||
if (result.Link != null && result.Link.Scheme != "magnet" && !string.IsNullOrWhiteSpace(Engine.Server.Config.BlackholeDir))
|
||||
result.BlackholeLink = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "bh", string.Empty);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
[Route("GetLogs")]
|
||||
[HttpGet]
|
||||
public List<CachedLog> GetLogs()
|
||||
{
|
||||
return logCache.Logs;
|
||||
}
|
||||
|
||||
[Route("Search")]
|
||||
[HttpPost]
|
||||
public ManualSearchResult Search([FromBody]AdminSearch value)
|
||||
{
|
||||
var results = new List<TrackerCacheResult>();
|
||||
var stringQuery = new TorznabQuery();
|
||||
|
||||
var queryStr = value.Query;
|
||||
if (queryStr != null)
|
||||
{
|
||||
var seasonMatch = Regex.Match(queryStr, @"S(\d{2,4})");
|
||||
if (seasonMatch.Success)
|
||||
{
|
||||
stringQuery.Season = int.Parse(seasonMatch.Groups[1].Value);
|
||||
queryStr = queryStr.Remove(seasonMatch.Index, seasonMatch.Length);
|
||||
}
|
||||
|
||||
var episodeMatch = Regex.Match(queryStr, @"E(\d{2,4})");
|
||||
if (episodeMatch.Success)
|
||||
{
|
||||
stringQuery.Episode = episodeMatch.Groups[1].Value;
|
||||
queryStr = queryStr.Remove(episodeMatch.Index, episodeMatch.Length);
|
||||
}
|
||||
queryStr = queryStr.Trim();
|
||||
}
|
||||
|
||||
|
||||
stringQuery.SearchTerm = queryStr;
|
||||
stringQuery.Categories = value.Category == 0 ? new int[0] : new int[1] { value.Category };
|
||||
stringQuery.ExpandCatsToSubCats();
|
||||
|
||||
// try to build an IMDB Query
|
||||
var imdbID = ParseUtil.GetFullImdbID(stringQuery.SanitizedSearchTerm);
|
||||
TorznabQuery imdbQuery = null;
|
||||
if (imdbID != null)
|
||||
{
|
||||
imdbQuery = new TorznabQuery()
|
||||
{
|
||||
ImdbID = imdbID,
|
||||
Categories = stringQuery.Categories,
|
||||
Season = stringQuery.Season,
|
||||
Episode = stringQuery.Episode,
|
||||
};
|
||||
imdbQuery.ExpandCatsToSubCats();
|
||||
}
|
||||
|
||||
var trackers = indexerService.GetAllIndexers().Where(t => t.IsConfigured).ToList();
|
||||
if (!string.IsNullOrWhiteSpace(value.Tracker))
|
||||
{
|
||||
trackers = trackers.Where(t => t.ID == value.Tracker).ToList();
|
||||
}
|
||||
|
||||
if (value.Category != 0)
|
||||
{
|
||||
trackers = trackers.Where(t => t.TorznabCaps.Categories.Select(c => c.ID).Contains(value.Category)).ToList();
|
||||
}
|
||||
|
||||
Parallel.ForEach(trackers.ToList(), new ParallelOptions { MaxDegreeOfParallelism = 1000 }, indexer =>
|
||||
{
|
||||
try
|
||||
{
|
||||
var query = stringQuery;
|
||||
// use imdb Query for trackers which support it
|
||||
if (imdbQuery != null && indexer.TorznabCaps.SupportsImdbSearch)
|
||||
query = imdbQuery;
|
||||
|
||||
var searchResults = indexer.PerformQuery(query).Result;
|
||||
searchResults = indexer.CleanLinks(searchResults);
|
||||
cacheService.CacheRssResults(indexer, searchResults);
|
||||
searchResults = indexer.FilterResults(query, searchResults);
|
||||
|
||||
foreach (var result in searchResults)
|
||||
{
|
||||
var item = Mapper.Map<TrackerCacheResult>(result);
|
||||
item.Tracker = indexer.DisplayName;
|
||||
item.TrackerId = indexer.ID;
|
||||
item.Peers = item.Peers - item.Seeders; // Use peers as leechers
|
||||
lock (results)
|
||||
{
|
||||
results.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
logger.Error(e, "An error occured during manual search on " + indexer.DisplayName + ": " + e.Message);
|
||||
}
|
||||
});
|
||||
|
||||
ConfigureCacheResults(results);
|
||||
|
||||
if (trackers.Count > 1)
|
||||
{
|
||||
results = results.OrderByDescending(d => d.PublishDate).ToList();
|
||||
}
|
||||
|
||||
var manualResult = new ManualSearchResult()
|
||||
{
|
||||
Results = results,
|
||||
Indexers = trackers.Select(t => t.DisplayName).ToList()
|
||||
};
|
||||
|
||||
|
||||
if (manualResult.Indexers.Count == 0)
|
||||
manualResult.Indexers = new List<string>() { "None" };
|
||||
|
||||
logger.Info(string.Format("Manual search for \"{0}\" on {1} with {2} results.", stringQuery.GetQueryString(), string.Join(", ", manualResult.Indexers), manualResult.Results.Count));
|
||||
return manualResult;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Jackett.Services;
|
||||
using Jackett.Utils;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using System;
|
||||
@@ -22,34 +23,36 @@ namespace Jackett.Controllers
|
||||
private Logger logger;
|
||||
private IIndexerManagerService indexerService;
|
||||
IServerService serverService;
|
||||
IProtectionService protectionService;
|
||||
|
||||
public BlackholeController(IIndexerManagerService i, Logger l, IServerService s)
|
||||
public BlackholeController(IIndexerManagerService i, Logger l, IServerService s, IProtectionService ps)
|
||||
{
|
||||
logger = l;
|
||||
indexerService = i;
|
||||
serverService = s;
|
||||
protectionService = ps;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IHttpActionResult> Blackhole(string indexerID, string path, string apikey)
|
||||
public async Task<IHttpActionResult> Blackhole(string indexerID, string path, string jackett_apikey, string file)
|
||||
{
|
||||
|
||||
var jsonReply = new JObject();
|
||||
try
|
||||
{
|
||||
var indexer = indexerService.GetIndexer(indexerID);
|
||||
var indexer = indexerService.GetWebIndexer(indexerID);
|
||||
if (!indexer.IsConfigured)
|
||||
{
|
||||
logger.Warn(string.Format("Rejected a request to {0} which is unconfigured.", indexer.DisplayName));
|
||||
throw new Exception("This indexer is not configured.");
|
||||
}
|
||||
|
||||
if (serverService.Config.APIKey != apikey)
|
||||
if (serverService.Config.APIKey != jackett_apikey)
|
||||
throw new Exception("Incorrect API key");
|
||||
|
||||
var remoteFile = new Uri(Encoding.UTF8.GetString(HttpServerUtility.UrlTokenDecode(path)), UriKind.RelativeOrAbsolute);
|
||||
remoteFile = indexer.UncleanLink(remoteFile);
|
||||
|
||||
path = Encoding.UTF8.GetString(HttpServerUtility.UrlTokenDecode(path));
|
||||
path = protectionService.UnProtect(path);
|
||||
var remoteFile = new Uri(path, UriKind.RelativeOrAbsolute);
|
||||
var downloadBytes = await indexer.Download(remoteFile);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(Engine.Server.Config.BlackholeDir))
|
||||
@@ -62,7 +65,12 @@ namespace Jackett.Controllers
|
||||
throw new Exception("Blackhole directory does not exist: " + Engine.Server.Config.BlackholeDir);
|
||||
}
|
||||
|
||||
var fileName = DateTime.Now.Ticks + ".torrent";
|
||||
var fileName = DateTime.Now.Ticks.ToString() + "-" + StringUtil.MakeValidFileName(indexer.DisplayName, '_', false);
|
||||
if (string.IsNullOrWhiteSpace(file))
|
||||
fileName += ".torrent";
|
||||
else
|
||||
fileName += "-"+StringUtil.MakeValidFileName(file, '_', false); // call MakeValidFileName() again to avoid any possibility of path traversal attacks
|
||||
|
||||
File.WriteAllBytes(Path.Combine(Engine.Server.Config.BlackholeDir, fileName), downloadBytes);
|
||||
jsonReply["result"] = "success";
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
using MonoTorrent.BEncoding;
|
||||
using Jackett.Utils;
|
||||
|
||||
namespace Jackett.Controllers
|
||||
{
|
||||
@@ -21,20 +22,22 @@ namespace Jackett.Controllers
|
||||
Logger logger;
|
||||
IIndexerManagerService indexerService;
|
||||
IServerService serverService;
|
||||
IProtectionService protectionService;
|
||||
|
||||
public DownloadController(IIndexerManagerService i, Logger l, IServerService s)
|
||||
public DownloadController(IIndexerManagerService i, Logger l, IServerService s, IProtectionService ps)
|
||||
{
|
||||
logger = l;
|
||||
indexerService = i;
|
||||
serverService = s;
|
||||
protectionService = ps;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<HttpResponseMessage> Download(string indexerID, string path, string apikey, string file)
|
||||
public async Task<HttpResponseMessage> Download(string indexerID, string path, string jackett_apikey, string file)
|
||||
{
|
||||
try
|
||||
{
|
||||
var indexer = indexerService.GetIndexer(indexerID);
|
||||
var indexer = indexerService.GetWebIndexer(indexerID);
|
||||
|
||||
if (!indexer.IsConfigured)
|
||||
{
|
||||
@@ -43,31 +46,24 @@ namespace Jackett.Controllers
|
||||
}
|
||||
|
||||
path = Encoding.UTF8.GetString(HttpServerUtility.UrlTokenDecode(path));
|
||||
path = protectionService.UnProtect(path);
|
||||
|
||||
if (serverService.Config.APIKey != apikey)
|
||||
if (serverService.Config.APIKey != jackett_apikey)
|
||||
return new HttpResponseMessage(HttpStatusCode.Unauthorized);
|
||||
|
||||
var target = new Uri(path, UriKind.RelativeOrAbsolute);
|
||||
target = indexer.UncleanLink(target);
|
||||
|
||||
var downloadBytes = await indexer.Download(target);
|
||||
|
||||
// This will fix torrents where the keys are not sorted, and thereby not supported by Sonarr.
|
||||
var torrentDictionary = BEncodedDictionary.DecodeTorrent(downloadBytes);
|
||||
downloadBytes = torrentDictionary.Encode();
|
||||
|
||||
char[] invalidChars = System.IO.Path.GetInvalidFileNameChars();
|
||||
for(int i=0;i<file.Count();i++)
|
||||
if(invalidChars.Contains(file[i])) {
|
||||
file = file.Remove(i, 1).Insert(i, " ");
|
||||
}
|
||||
|
||||
var result = new HttpResponseMessage(HttpStatusCode.OK);
|
||||
result.Content = new ByteArrayContent(downloadBytes);
|
||||
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-bittorrent");
|
||||
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
|
||||
{
|
||||
FileName = file
|
||||
FileName = StringUtil.MakeValidFileName(file, '_', false) // call MakeValidFileName again to avoid any kind of injection attack
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
173
src/Jackett/Controllers/IndexerApiController.cs
Normal file
173
src/Jackett/Controllers/IndexerApiController.cs
Normal file
@@ -0,0 +1,173 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web.Http;
|
||||
using System.Web.Http.Controllers;
|
||||
using System.Web.Http.Filters;
|
||||
using AutoMapper;
|
||||
using Jackett.Indexers;
|
||||
using Jackett.Models;
|
||||
using Jackett.Services;
|
||||
using Jackett.Utils;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
|
||||
namespace Jackett.Controllers.V20
|
||||
{
|
||||
public interface IIndexerController
|
||||
{
|
||||
IIndexerManagerService IndexerService { get; }
|
||||
IIndexer CurrentIndexer { get; set; }
|
||||
}
|
||||
|
||||
public class RequiresIndexerAttribute : ActionFilterAttribute
|
||||
{
|
||||
public override void OnActionExecuting(HttpActionContext actionContext)
|
||||
{
|
||||
base.OnActionExecuting(actionContext);
|
||||
|
||||
var controller = actionContext.ControllerContext.Controller;
|
||||
if (!(controller is IIndexerController))
|
||||
return;
|
||||
|
||||
var indexerController = controller as IIndexerController;
|
||||
|
||||
var parameters = actionContext.RequestContext.RouteData.Values;
|
||||
|
||||
if (!parameters.ContainsKey("indexerId"))
|
||||
{
|
||||
indexerController.CurrentIndexer = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var indexerId = parameters["indexerId"] as string;
|
||||
if (indexerId.IsNullOrEmptyOrWhitespace())
|
||||
return;
|
||||
|
||||
var indexerService = indexerController.IndexerService;
|
||||
var indexer = indexerService.GetIndexer(indexerId);
|
||||
indexerController.CurrentIndexer = indexer;
|
||||
}
|
||||
}
|
||||
|
||||
[RoutePrefix("api/v2.0/indexers")]
|
||||
[JackettAuthorized]
|
||||
[JackettAPINoCache]
|
||||
public class IndexerApiController : ApiController, IIndexerController
|
||||
{
|
||||
public IIndexerManagerService IndexerService { get; private set; }
|
||||
public IIndexer CurrentIndexer { get; set; }
|
||||
|
||||
public IndexerApiController(IIndexerManagerService indexerManagerService, IServerService ss, ICacheService c, Logger logger)
|
||||
{
|
||||
IndexerService = indexerManagerService;
|
||||
serverService = ss;
|
||||
cacheService = c;
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[RequiresIndexer]
|
||||
public async Task<IHttpActionResult> Config()
|
||||
{
|
||||
var config = await CurrentIndexer.GetConfigurationForSetup();
|
||||
return Ok(config.ToJson(null));
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[ActionName("Config")]
|
||||
[RequiresIndexer]
|
||||
public async Task UpdateConfig([FromBody]Models.DTO.ConfigItem[] config)
|
||||
{
|
||||
try
|
||||
{
|
||||
// HACK
|
||||
var jsonString = JsonConvert.SerializeObject(config);
|
||||
var json = JToken.Parse(jsonString);
|
||||
|
||||
var configurationResult = await CurrentIndexer.ApplyConfiguration(json);
|
||||
|
||||
if (configurationResult == IndexerConfigurationStatus.RequiresTesting)
|
||||
await IndexerService.TestIndexer(CurrentIndexer.ID);
|
||||
}
|
||||
catch
|
||||
{
|
||||
var baseIndexer = CurrentIndexer as BaseIndexer;
|
||||
if (null != baseIndexer)
|
||||
baseIndexer.ResetBaseConfig();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("")]
|
||||
public IEnumerable<Models.DTO.Indexer> Indexers()
|
||||
{
|
||||
var dto = IndexerService.GetAllIndexers().Select(i => new Models.DTO.Indexer(i));
|
||||
return dto;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[RequiresIndexer]
|
||||
public async Task Test()
|
||||
{
|
||||
JToken jsonReply = new JObject();
|
||||
try
|
||||
{
|
||||
await IndexerService.TestIndexer(CurrentIndexer.ID);
|
||||
CurrentIndexer.LastError = null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var msg = ex.Message;
|
||||
if (ex.InnerException != null)
|
||||
msg += ": " + ex.InnerException.Message;
|
||||
|
||||
if (CurrentIndexer != null)
|
||||
CurrentIndexer.LastError = msg;
|
||||
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[HttpDelete]
|
||||
[RequiresIndexer]
|
||||
[Route("{indexerId}")]
|
||||
public void Delete()
|
||||
{
|
||||
IndexerService.DeleteIndexer(CurrentIndexer.ID);
|
||||
}
|
||||
|
||||
// TODO
|
||||
// This should go to ServerConfigurationController
|
||||
[Route("Cache")]
|
||||
[HttpGet]
|
||||
public List<TrackerCacheResult> Cache()
|
||||
{
|
||||
var results = cacheService.GetCachedResults();
|
||||
ConfigureCacheResults(results);
|
||||
return results;
|
||||
}
|
||||
|
||||
private void ConfigureCacheResults(IEnumerable<TrackerCacheResult> results)
|
||||
{
|
||||
var serverUrl = serverService.GetServerUrl(Request);
|
||||
foreach (var result in results)
|
||||
{
|
||||
var link = result.Link;
|
||||
var file = StringUtil.MakeValidFileName(result.Title, '_', false) + ".torrent";
|
||||
result.Link = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "dl", file);
|
||||
if (result.Link != null && result.Link.Scheme != "magnet" && !string.IsNullOrWhiteSpace(Engine.Server.Config.BlackholeDir))
|
||||
result.BlackholeLink = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "bh", file);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private Logger logger;
|
||||
private IServerService serverService;
|
||||
private ICacheService cacheService;
|
||||
}
|
||||
}
|
||||
@@ -1,173 +0,0 @@
|
||||
using AutoMapper;
|
||||
using Jackett.Models;
|
||||
using Jackett.Services;
|
||||
using Jackett.Utils;
|
||||
using Jackett.Utils.Clients;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Jackett.Controllers
|
||||
{
|
||||
[AllowAnonymous]
|
||||
[JackettAPINoCache]
|
||||
public class PotatoController : ApiController
|
||||
{
|
||||
private IIndexerManagerService indexerService;
|
||||
private Logger logger;
|
||||
private IServerService serverService;
|
||||
private ICacheService cacheService;
|
||||
private IWebClient webClient;
|
||||
|
||||
public static int[] MOVIE_CATS
|
||||
{
|
||||
get
|
||||
{
|
||||
var torznabQuery = new TorznabQuery()
|
||||
{
|
||||
Categories = new int[1] { TorznabCatType.Movies.ID },
|
||||
};
|
||||
|
||||
torznabQuery.ExpandCatsToSubCats();
|
||||
return torznabQuery.Categories;
|
||||
}
|
||||
}
|
||||
|
||||
public PotatoController(IIndexerManagerService i, Logger l, IServerService s, ICacheService c, IWebClient w)
|
||||
{
|
||||
indexerService = i;
|
||||
logger = l;
|
||||
serverService = s;
|
||||
cacheService = c;
|
||||
webClient = w;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<HttpResponseMessage> Call(string indexerID, [FromUri]TorrentPotatoRequest request)
|
||||
{
|
||||
var indexer = indexerService.GetIndexer(indexerID);
|
||||
|
||||
var allowBadApiDueToDebug = false;
|
||||
#if DEBUG
|
||||
allowBadApiDueToDebug = Debugger.IsAttached;
|
||||
#endif
|
||||
|
||||
if (!allowBadApiDueToDebug && !string.Equals(request.passkey, serverService.Config.APIKey, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
logger.Warn(string.Format("A request from {0} was made with an incorrect API key.", Request.GetOwinContext().Request.RemoteIpAddress));
|
||||
return Request.CreateResponse(HttpStatusCode.Forbidden, "Incorrect API key");
|
||||
}
|
||||
|
||||
if (!indexer.IsConfigured)
|
||||
{
|
||||
logger.Warn(string.Format("Rejected a request to {0} which is unconfigured.", indexer.DisplayName));
|
||||
return Request.CreateResponse(HttpStatusCode.Forbidden, "This indexer is not configured.");
|
||||
}
|
||||
|
||||
if (!indexer.TorznabCaps.Categories.Select(c => c.ID).Any(i => MOVIE_CATS.Contains(i))){
|
||||
logger.Warn(string.Format("Rejected a request to {0} which does not support searching for movies.", indexer.DisplayName));
|
||||
return Request.CreateResponse(HttpStatusCode.Forbidden, "This indexer does not support movies.");
|
||||
}
|
||||
|
||||
var year = 0;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(request.search))
|
||||
{
|
||||
// We are searching by IMDB id so look up the name
|
||||
var omdbapiRequest = new Utils.Clients.WebRequest("http://www.omdbapi.com/?type=movie&i=" + request.imdbid);
|
||||
omdbapiRequest.Encoding = Encoding.UTF8;
|
||||
var response = await webClient.GetString(omdbapiRequest);
|
||||
if (response.Status == HttpStatusCode.OK)
|
||||
{
|
||||
JObject result = JObject.Parse(response.Content);
|
||||
if (result["Title"] != null)
|
||||
{
|
||||
request.search = result["Title"].ToString();
|
||||
year = ParseUtil.CoerceInt(result["Year"].ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var torznabQuery = new TorznabQuery()
|
||||
{
|
||||
ApiKey = request.passkey,
|
||||
Categories = MOVIE_CATS,
|
||||
SearchTerm = request.search,
|
||||
ImdbID = request.imdbid,
|
||||
QueryType = "TorrentPotato"
|
||||
};
|
||||
|
||||
IEnumerable<ReleaseInfo> releases = new List<ReleaseInfo>();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(torznabQuery.SanitizedSearchTerm))
|
||||
{
|
||||
releases = await indexer.PerformQuery(torznabQuery);
|
||||
releases = indexer.CleanLinks(releases);
|
||||
}
|
||||
|
||||
// Cache non query results
|
||||
if (string.IsNullOrEmpty(torznabQuery.SanitizedSearchTerm))
|
||||
{
|
||||
cacheService.CacheRssResults(indexer, releases);
|
||||
}
|
||||
|
||||
releases = indexer.FilterResults(torznabQuery, releases);
|
||||
var serverUrl = string.Format("{0}://{1}:{2}{3}", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port, serverService.BasePath());
|
||||
var potatoResponse = new TorrentPotatoResponse();
|
||||
|
||||
releases = TorznabUtil.FilterResultsToTitle(releases, torznabQuery.SanitizedSearchTerm, year);
|
||||
releases = TorznabUtil.FilterResultsToImdb(releases, request.imdbid);
|
||||
|
||||
foreach (var r in releases)
|
||||
{
|
||||
var release = Mapper.Map<ReleaseInfo>(r);
|
||||
release.Link = serverService.ConvertToProxyLink(release.Link, serverUrl, indexerID, "dl", release.Title + ".torrent");
|
||||
|
||||
// Only accept torrent links, magnet is not supported
|
||||
// This seems to be no longer the case, allowing magnet URIs for now
|
||||
if (release.Link != null || release.MagnetUri != null)
|
||||
{
|
||||
potatoResponse.results.Add(new TorrentPotatoResponseItem()
|
||||
{
|
||||
release_name = release.Title + "[" + indexer.DisplayName + "]", // Suffix the indexer so we can see which tracker we are using in CPS as it just says torrentpotato >.>
|
||||
torrent_id = release.Guid.ToString(),
|
||||
details_url = release.Comments.ToString(),
|
||||
download_url = (release.Link != null ? release.Link.ToString() : release.MagnetUri.ToString()),
|
||||
imdb_id = release.Imdb.HasValue ? "tt" + release.Imdb : null,
|
||||
freeleech = (release.DownloadVolumeFactor == 0 ? true : false),
|
||||
type = "movie",
|
||||
size = (long)release.Size / (1024 * 1024), // This is in MB
|
||||
leechers = (int)release.Peers - (int)release.Seeders,
|
||||
seeders = (int)release.Seeders,
|
||||
publish_date = r.PublishDate == DateTime.MinValue ? null : release.PublishDate.ToUniversalTime().ToString("s")
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Log info
|
||||
if (string.IsNullOrWhiteSpace(torznabQuery.SanitizedSearchTerm))
|
||||
{
|
||||
logger.Info(string.Format("Found {0} torrentpotato releases from {1}", releases.Count(), indexer.DisplayName));
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Info(string.Format("Found {0} torrentpotato releases from {1} for: {2}", releases.Count(), indexer.DisplayName, torznabQuery.GetQueryString()));
|
||||
}
|
||||
|
||||
// Force the return as Json
|
||||
return new HttpResponseMessage()
|
||||
{
|
||||
Content = new JsonContent(potatoResponse)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
422
src/Jackett/Controllers/ResultsController.cs
Normal file
422
src/Jackett/Controllers/ResultsController.cs
Normal file
@@ -0,0 +1,422 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
using System.Web.Http.Controllers;
|
||||
using System.Web.Http.Filters;
|
||||
using System.Xml.Linq;
|
||||
using Jackett.Indexers;
|
||||
using Jackett.Models;
|
||||
using Jackett.Services;
|
||||
using Jackett.Utils;
|
||||
using Jackett.Utils.Clients;
|
||||
using Newtonsoft.Json;
|
||||
using NLog;
|
||||
using Jackett.Models.DTO;
|
||||
|
||||
namespace Jackett.Controllers.V20
|
||||
{
|
||||
public class RequiresApiKeyAttribute : AuthorizationFilterAttribute
|
||||
{
|
||||
public override void OnAuthorization(HttpActionContext actionContext)
|
||||
{
|
||||
var validApiKey = Engine.Server.Config.APIKey;
|
||||
var queryParams = actionContext.Request.GetQueryNameValuePairs();
|
||||
var queryApiKey = queryParams.Where(x => x.Key == "apikey" || x.Key == "passkey").Select(x => x.Value).FirstOrDefault();
|
||||
|
||||
#if DEBUG
|
||||
if (Debugger.IsAttached)
|
||||
return;
|
||||
#endif
|
||||
if (queryApiKey != validApiKey)
|
||||
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
|
||||
}
|
||||
}
|
||||
|
||||
public class RequiresConfiguredIndexerAttribute : ActionFilterAttribute
|
||||
{
|
||||
public override void OnActionExecuting(HttpActionContext actionContext)
|
||||
{
|
||||
var controller = actionContext.ControllerContext.Controller;
|
||||
if (!(controller is IIndexerController))
|
||||
return;
|
||||
|
||||
var indexerController = controller as IIndexerController;
|
||||
|
||||
var parameters = actionContext.RequestContext.RouteData.Values;
|
||||
|
||||
if (!parameters.ContainsKey("indexerId"))
|
||||
{
|
||||
indexerController.CurrentIndexer = null;
|
||||
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Invalid parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
var indexerId = parameters["indexerId"] as string;
|
||||
if (indexerId.IsNullOrEmptyOrWhitespace())
|
||||
{
|
||||
indexerController.CurrentIndexer = null;
|
||||
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Invalid parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
var indexerService = indexerController.IndexerService;
|
||||
var indexer = indexerService.GetIndexer(indexerId);
|
||||
|
||||
if (indexer == null)
|
||||
{
|
||||
indexerController.CurrentIndexer = null;
|
||||
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Invalid parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!indexer.IsConfigured)
|
||||
{
|
||||
indexerController.CurrentIndexer = null;
|
||||
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Indexer is not configured");
|
||||
return;
|
||||
}
|
||||
|
||||
indexerController.CurrentIndexer = indexer;
|
||||
}
|
||||
}
|
||||
|
||||
public class RequiresValidQueryAttribute : RequiresConfiguredIndexerAttribute
|
||||
{
|
||||
public override void OnActionExecuting(HttpActionContext actionContext)
|
||||
{
|
||||
base.OnActionExecuting(actionContext);
|
||||
if (actionContext.Response != null)
|
||||
return;
|
||||
|
||||
var controller = actionContext.ControllerContext.Controller;
|
||||
if (!(controller is IResultController))
|
||||
return;
|
||||
|
||||
var resultController = controller as IResultController;
|
||||
|
||||
var query = actionContext.ActionArguments.First().Value;
|
||||
var queryType = query.GetType();
|
||||
var converter = queryType.GetMethod("ToTorznabQuery", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
|
||||
if (converter == null)
|
||||
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "");
|
||||
var converted = converter.Invoke(null, new object[] { query });
|
||||
var torznabQuery = converted as TorznabQuery;
|
||||
resultController.CurrentQuery = torznabQuery;
|
||||
|
||||
if (queryType == typeof(ApiSearch)) // Skip CanHandleQuery() check for manual search (CurrentIndexer isn't used during manul search)
|
||||
return;
|
||||
|
||||
if (!resultController.CurrentIndexer.CanHandleQuery(resultController.CurrentQuery))
|
||||
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, $"{resultController.CurrentIndexer.ID} does not support the requested query.");
|
||||
}
|
||||
}
|
||||
|
||||
public class JsonResponseAttribute : ActionFilterAttribute
|
||||
{
|
||||
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
|
||||
{
|
||||
base.OnActionExecuted(actionExecutedContext);
|
||||
|
||||
if (actionExecutedContext.Exception != null)
|
||||
throw new Exception("Error while executing request", actionExecutedContext.Exception);
|
||||
|
||||
var content = actionExecutedContext.Response.Content as ObjectContent;
|
||||
actionExecutedContext.Response.Content = new JsonContent(content.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public interface IResultController : IIndexerController
|
||||
{
|
||||
TorznabQuery CurrentQuery { get; set; }
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
[JackettAPINoCache]
|
||||
[RoutePrefix("api/v2.0/indexers")]
|
||||
[RequiresApiKey]
|
||||
[RequiresValidQuery]
|
||||
public class ResultsController : ApiController, IResultController
|
||||
{
|
||||
public IIndexerManagerService IndexerService { get; private set; }
|
||||
public IIndexer CurrentIndexer { get; set; }
|
||||
public TorznabQuery CurrentQuery { get; set; }
|
||||
|
||||
public ResultsController(IIndexerManagerService indexerManagerService, IServerService ss, ICacheService c, Logger logger)
|
||||
{
|
||||
IndexerService = indexerManagerService;
|
||||
serverService = ss;
|
||||
cacheService = c;
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<Models.DTO.ManualSearchResult> Results([FromUri]Models.DTO.ApiSearch request)
|
||||
{
|
||||
var manualResult = new ManualSearchResult();
|
||||
var trackers = IndexerService.GetAllIndexers().Where(t => t.IsConfigured);
|
||||
if (request.Tracker != null)
|
||||
trackers = trackers.Where(t => request.Tracker.Contains(t.ID));
|
||||
trackers = trackers.Where(t => t.CanHandleQuery(CurrentQuery));
|
||||
|
||||
var tasks = trackers.ToList().Select(t => t.ResultsForQuery(CurrentQuery)).ToList();
|
||||
try
|
||||
{
|
||||
var aggregateTask = Task.WhenAll(tasks);
|
||||
await aggregateTask;
|
||||
}
|
||||
catch (AggregateException aex)
|
||||
{
|
||||
foreach (var ex in aex.InnerExceptions)
|
||||
{
|
||||
logger.Error(ex);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error(ex);
|
||||
}
|
||||
|
||||
manualResult.Indexers = tasks.Select(t =>
|
||||
{
|
||||
var resultIndexer = new ManualSearchResultIndexer();
|
||||
IIndexer indexer = null;
|
||||
if (t.Status == TaskStatus.RanToCompletion)
|
||||
{
|
||||
resultIndexer.Status = ManualSearchResultIndexerStatus.OK;
|
||||
resultIndexer.Results = t.Result.Releases.Count();
|
||||
resultIndexer.Error = null;
|
||||
indexer = t.Result.Indexer;
|
||||
}
|
||||
else if (t.Exception.InnerException is IndexerException)
|
||||
{
|
||||
resultIndexer.Status = ManualSearchResultIndexerStatus.Error;
|
||||
resultIndexer.Results = 0;
|
||||
resultIndexer.Error = ((IndexerException)t.Exception.InnerException).ToString();
|
||||
indexer = ((IndexerException)t.Exception.InnerException).Indexer;
|
||||
}
|
||||
else
|
||||
{
|
||||
resultIndexer.Status = ManualSearchResultIndexerStatus.Unknown;
|
||||
resultIndexer.Results = 0;
|
||||
resultIndexer.Error = null;
|
||||
}
|
||||
|
||||
if (indexer != null)
|
||||
{
|
||||
resultIndexer.ID = indexer.ID;
|
||||
resultIndexer.Name = indexer.DisplayName;
|
||||
}
|
||||
return resultIndexer;
|
||||
}).ToList();
|
||||
|
||||
manualResult.Results = tasks.Where(t => t.Status == TaskStatus.RanToCompletion).Where(t => t.Result.Releases.Count() > 0).SelectMany(t =>
|
||||
{
|
||||
var searchResults = t.Result.Releases;
|
||||
var indexer = t.Result.Indexer;
|
||||
cacheService.CacheRssResults(indexer, searchResults);
|
||||
|
||||
return searchResults.Select(result =>
|
||||
{
|
||||
var item = AutoMapper.Mapper.Map<TrackerCacheResult>(result);
|
||||
item.Tracker = indexer.DisplayName;
|
||||
item.TrackerId = indexer.ID;
|
||||
item.Peers = item.Peers - item.Seeders; // Use peers as leechers
|
||||
|
||||
return item;
|
||||
});
|
||||
}).OrderByDescending(d => d.PublishDate).ToList();
|
||||
|
||||
ConfigureCacheResults(manualResult.Results);
|
||||
|
||||
logger.Info(string.Format("Manual search for \"{0}\" on {1} with {2} results.", CurrentQuery.SanitizedSearchTerm, string.Join(", ", manualResult.Indexers.Select(i => i.ID)), manualResult.Results.Count()));
|
||||
return manualResult;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IHttpActionResult> Torznab([FromUri]Models.DTO.TorznabRequest request)
|
||||
{
|
||||
if (string.Equals(CurrentQuery.QueryType, "caps", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return ResponseMessage(new HttpResponseMessage()
|
||||
{
|
||||
Content = new StringContent(CurrentIndexer.TorznabCaps.ToXml(), Encoding.UTF8, "application/xml")
|
||||
});
|
||||
}
|
||||
|
||||
if (CurrentQuery.ImdbID != null)
|
||||
{
|
||||
if (CurrentQuery.QueryType != "movie")
|
||||
{
|
||||
logger.Warn($"A non movie request with an imdbid was made from {Request.GetOwinContext().Request.RemoteIpAddress}.");
|
||||
return GetErrorXML(201, "Incorrect parameter: only movie-search supports the imdbid parameter");
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(CurrentQuery.SearchTerm))
|
||||
{
|
||||
logger.Warn($"A movie-search request from {Request.GetOwinContext().Request.RemoteIpAddress} was made contining q and imdbid.");
|
||||
return GetErrorXML(201, "Incorrect parameter: please specify either imdbid or q");
|
||||
}
|
||||
|
||||
CurrentQuery.ImdbID = ParseUtil.GetFullImdbID(CurrentQuery.ImdbID); // normalize ImdbID
|
||||
if (CurrentQuery.ImdbID == null)
|
||||
{
|
||||
logger.Warn($"A movie-search request from {Request.GetOwinContext().Request.RemoteIpAddress} was made with an invalid imdbid.");
|
||||
return GetErrorXML(201, "Incorrect parameter: invalid imdbid format");
|
||||
}
|
||||
|
||||
if (!CurrentIndexer.TorznabCaps.SupportsImdbSearch)
|
||||
{
|
||||
logger.Warn($"A movie-search request with imdbid from {Request.GetOwinContext().Request.RemoteIpAddress} was made but the indexer {CurrentIndexer.DisplayName} doesn't support it.");
|
||||
return GetErrorXML(203, "Function Not Available: imdbid is not supported by this indexer");
|
||||
}
|
||||
}
|
||||
|
||||
var result = await CurrentIndexer.ResultsForQuery(CurrentQuery);
|
||||
|
||||
// Some trackers do not support multiple category filtering so filter the releases that match manually.
|
||||
int? newItemCount = null;
|
||||
|
||||
// Cache non query results
|
||||
if (string.IsNullOrEmpty(CurrentQuery.SanitizedSearchTerm))
|
||||
{
|
||||
newItemCount = cacheService.GetNewItemCount(CurrentIndexer, result.Releases);
|
||||
cacheService.CacheRssResults(CurrentIndexer, result.Releases);
|
||||
}
|
||||
|
||||
// Log info
|
||||
var logBuilder = new StringBuilder();
|
||||
if (newItemCount != null)
|
||||
{
|
||||
logBuilder.AppendFormat("Found {0} ({1} new) releases from {2}", result.Releases.Count(), newItemCount, CurrentIndexer.DisplayName);
|
||||
}
|
||||
else
|
||||
{
|
||||
logBuilder.AppendFormat("Found {0} releases from {1}", result.Releases.Count(), CurrentIndexer.DisplayName);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(CurrentQuery.SanitizedSearchTerm))
|
||||
{
|
||||
logBuilder.AppendFormat(" for: {0}", CurrentQuery.GetQueryString());
|
||||
}
|
||||
|
||||
logger.Info(logBuilder.ToString());
|
||||
|
||||
var serverUrl = serverService.GetServerUrl(Request);
|
||||
var resultPage = new ResultPage(new ChannelInfo
|
||||
{
|
||||
Title = CurrentIndexer.DisplayName,
|
||||
Description = CurrentIndexer.DisplayDescription,
|
||||
Link = new Uri(CurrentIndexer.SiteLink),
|
||||
ImageUrl = new Uri(serverUrl + "logos/" + CurrentIndexer.ID + ".png"),
|
||||
ImageTitle = CurrentIndexer.DisplayName,
|
||||
ImageLink = new Uri(CurrentIndexer.SiteLink),
|
||||
ImageDescription = CurrentIndexer.DisplayName
|
||||
});
|
||||
|
||||
var proxiedReleases = result.Releases.Select(r => AutoMapper.Mapper.Map<ReleaseInfo>(r)).Select(r =>
|
||||
{
|
||||
r.Link = serverService.ConvertToProxyLink(r.Link, serverUrl, r.Origin.ID, "dl", r.Title + ".torrent");
|
||||
return r;
|
||||
});
|
||||
|
||||
resultPage.Releases = proxiedReleases.ToList();
|
||||
|
||||
var xml = resultPage.ToXml(new Uri(serverUrl));
|
||||
// Force the return as XML
|
||||
return ResponseMessage(new HttpResponseMessage()
|
||||
{
|
||||
Content = new StringContent(xml, Encoding.UTF8, "application/rss+xml")
|
||||
});
|
||||
}
|
||||
|
||||
public IHttpActionResult GetErrorXML(int code, string description)
|
||||
{
|
||||
var xdoc = new XDocument(
|
||||
new XDeclaration("1.0", "UTF-8", null),
|
||||
new XElement("error",
|
||||
new XAttribute("code", code.ToString()),
|
||||
new XAttribute("description", description)
|
||||
)
|
||||
);
|
||||
|
||||
var xml = xdoc.Declaration.ToString() + Environment.NewLine + xdoc.ToString();
|
||||
|
||||
return ResponseMessage(new HttpResponseMessage()
|
||||
{
|
||||
Content = new StringContent(xml, Encoding.UTF8, "application/xml")
|
||||
});
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[JsonResponse]
|
||||
public async Task<Models.DTO.TorrentPotatoResponse> Potato([FromUri]Models.DTO.TorrentPotatoRequest request)
|
||||
{
|
||||
var result = await CurrentIndexer.ResultsForQuery(CurrentQuery);
|
||||
|
||||
// Cache non query results
|
||||
if (string.IsNullOrEmpty(CurrentQuery.SanitizedSearchTerm))
|
||||
cacheService.CacheRssResults(CurrentIndexer, result.Releases);
|
||||
|
||||
// Log info
|
||||
if (string.IsNullOrWhiteSpace(CurrentQuery.SanitizedSearchTerm))
|
||||
logger.Info($"Found {result.Releases.Count()} torrentpotato releases from {CurrentIndexer.DisplayName}");
|
||||
else
|
||||
logger.Info($"Found {result.Releases.Count()} torrentpotato releases from {CurrentIndexer.DisplayName} for: {CurrentQuery.GetQueryString()}");
|
||||
|
||||
var serverUrl = serverService.GetServerUrl(Request);
|
||||
var potatoReleases = result.Releases.Where(r => r.Link != null || r.MagnetUri != null).Select(r =>
|
||||
{
|
||||
var release = AutoMapper.Mapper.Map<ReleaseInfo>(r);
|
||||
release.Link = serverService.ConvertToProxyLink(release.Link, serverUrl, CurrentIndexer.ID, "dl", release.Title + ".torrent");
|
||||
var item = new Models.DTO.TorrentPotatoResponseItem()
|
||||
{
|
||||
release_name = release.Title + "[" + CurrentIndexer.DisplayName + "]", // Suffix the indexer so we can see which tracker we are using in CPS as it just says torrentpotato >.>
|
||||
torrent_id = release.Guid.ToString(),
|
||||
details_url = release.Comments.ToString(),
|
||||
download_url = (release.Link != null ? release.Link.ToString() : release.MagnetUri.ToString()),
|
||||
imdb_id = release.Imdb.HasValue ? "tt" + release.Imdb : null,
|
||||
freeleech = (release.DownloadVolumeFactor == 0 ? true : false),
|
||||
type = "movie",
|
||||
size = (long)release.Size / (1024 * 1024), // This is in MB
|
||||
leechers = (int)release.Peers - (int)release.Seeders,
|
||||
seeders = (int)release.Seeders,
|
||||
publish_date = r.PublishDate == DateTime.MinValue ? null : release.PublishDate.ToUniversalTime().ToString("s")
|
||||
};
|
||||
return item;
|
||||
});
|
||||
|
||||
var potatoResponse = new Models.DTO.TorrentPotatoResponse()
|
||||
{
|
||||
results = potatoReleases.ToList()
|
||||
};
|
||||
|
||||
return potatoResponse;
|
||||
}
|
||||
|
||||
private void ConfigureCacheResults(IEnumerable<TrackerCacheResult> results)
|
||||
{
|
||||
var serverUrl = serverService.GetServerUrl(Request);
|
||||
foreach (var result in results)
|
||||
{
|
||||
var link = result.Link;
|
||||
var file = StringUtil.MakeValidFileName(result.Title, '_', false) + ".torrent";
|
||||
result.Link = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "dl", file);
|
||||
if (result.Link != null && result.Link.Scheme != "magnet" && !string.IsNullOrWhiteSpace(Engine.Server.Config.BlackholeDir))
|
||||
result.BlackholeLink = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "bh", file);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private Logger logger;
|
||||
private IServerService serverService;
|
||||
private ICacheService cacheService;
|
||||
}
|
||||
}
|
||||
176
src/Jackett/Controllers/ServerConfigurationController.cs
Normal file
176
src/Jackett/Controllers/ServerConfigurationController.cs
Normal file
@@ -0,0 +1,176 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Web.Http;
|
||||
using Jackett.Models;
|
||||
using Jackett.Services;
|
||||
using Jackett.Utils;
|
||||
using NLog;
|
||||
|
||||
namespace Jackett.Controllers.V20
|
||||
{
|
||||
[RoutePrefix("api/v2.0/server")]
|
||||
[JackettAuthorized]
|
||||
[JackettAPINoCache]
|
||||
public class ServerConfigurationController : ApiController
|
||||
{
|
||||
public ServerConfigurationController(IConfigurationService c, IServerService s, IProcessService p, IIndexerManagerService i, ISecuityService ss, IUpdateService u, ILogCacheService lc, Logger l)
|
||||
{
|
||||
config = c;
|
||||
serverService = s;
|
||||
processService = p;
|
||||
indexerService = i;
|
||||
securityService = ss;
|
||||
updater = u;
|
||||
logCache = lc;
|
||||
logger = l;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void AdminPassword([FromBody]string password)
|
||||
{
|
||||
var oldPassword = serverService.Config.AdminPassword;
|
||||
if (string.IsNullOrEmpty(password))
|
||||
password = string.Empty;
|
||||
|
||||
if (oldPassword != password)
|
||||
{
|
||||
serverService.Config.AdminPassword = securityService.HashPassword(password);
|
||||
serverService.SaveConfig();
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void Update()
|
||||
{
|
||||
updater.CheckForUpdatesNow();
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public Models.DTO.ServerConfig Config()
|
||||
{
|
||||
|
||||
var dto = new Models.DTO.ServerConfig(serverService.notices, serverService.Config, config.GetVersion());
|
||||
return dto;
|
||||
}
|
||||
|
||||
[ActionName("Config")]
|
||||
[HttpPost]
|
||||
public void UpdateConfig([FromBody]Models.DTO.ServerConfig config)
|
||||
{
|
||||
var originalPort = Engine.Server.Config.Port;
|
||||
var originalAllowExternal = Engine.Server.Config.AllowExternal;
|
||||
int port = config.port;
|
||||
bool external = config.external;
|
||||
string saveDir = config.blackholedir;
|
||||
bool updateDisabled = config.updatedisabled;
|
||||
bool preRelease = config.prerelease;
|
||||
bool logging = config.logging;
|
||||
string basePathOverride = config.basepathoverride;
|
||||
if (basePathOverride != null)
|
||||
{
|
||||
basePathOverride = basePathOverride.TrimEnd('/');
|
||||
if (!string.IsNullOrWhiteSpace(basePathOverride) && !basePathOverride.StartsWith("/"))
|
||||
throw new Exception("The Base Path Override must start with a /");
|
||||
}
|
||||
|
||||
string omdbApiKey = config.omdbkey;
|
||||
|
||||
Engine.Server.Config.UpdateDisabled = updateDisabled;
|
||||
Engine.Server.Config.UpdatePrerelease = preRelease;
|
||||
Engine.Server.Config.BasePathOverride = basePathOverride;
|
||||
Startup.BasePath = Engine.Server.BasePath();
|
||||
Engine.Server.SaveConfig();
|
||||
|
||||
Engine.SetLogLevel(logging ? LogLevel.Debug : LogLevel.Info);
|
||||
Startup.TracingEnabled = logging;
|
||||
|
||||
if (omdbApiKey != Engine.Server.Config.OmdbApiKey)
|
||||
{
|
||||
Engine.Server.Config.OmdbApiKey = omdbApiKey;
|
||||
Engine.Server.SaveConfig();
|
||||
// HACK
|
||||
indexerService.InitAggregateIndexer();
|
||||
}
|
||||
|
||||
if (port != Engine.Server.Config.Port || external != Engine.Server.Config.AllowExternal)
|
||||
{
|
||||
|
||||
if (ServerUtil.RestrictedPorts.Contains(port))
|
||||
throw new Exception("The port you have selected is restricted, try a different one.");
|
||||
|
||||
if (port < 1 || port > 65535)
|
||||
throw new Exception("The port you have selected is invalid, it must be below 65535.");
|
||||
|
||||
// Save port to the config so it can be picked up by the if needed when running as admin below.
|
||||
Engine.Server.Config.AllowExternal = external;
|
||||
Engine.Server.Config.Port = port;
|
||||
Engine.Server.SaveConfig();
|
||||
|
||||
// On Windows change the url reservations
|
||||
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
|
||||
{
|
||||
if (!ServerUtil.IsUserAdministrator())
|
||||
{
|
||||
try
|
||||
{
|
||||
processService.StartProcessAndLog(System.Windows.Forms.Application.ExecutablePath, "--ReserveUrls", true);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Engine.Server.Config.Port = originalPort;
|
||||
Engine.Server.Config.AllowExternal = originalAllowExternal;
|
||||
Engine.Server.SaveConfig();
|
||||
|
||||
throw new Exception("Failed to acquire admin permissions to reserve the new port.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
serverService.ReserveUrls(true);
|
||||
}
|
||||
}
|
||||
|
||||
(new Thread(() =>
|
||||
{
|
||||
Thread.Sleep(500);
|
||||
serverService.Stop();
|
||||
Engine.BuildContainer();
|
||||
Engine.Server.Initalize();
|
||||
Engine.Server.Start();
|
||||
})).Start();
|
||||
}
|
||||
|
||||
if (saveDir != Engine.Server.Config.BlackholeDir)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(saveDir))
|
||||
{
|
||||
if (!Directory.Exists(saveDir))
|
||||
{
|
||||
throw new Exception("Blackhole directory does not exist");
|
||||
}
|
||||
}
|
||||
|
||||
Engine.Server.Config.BlackholeDir = saveDir;
|
||||
Engine.Server.SaveConfig();
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public List<CachedLog> Logs()
|
||||
{
|
||||
return logCache.Logs;
|
||||
}
|
||||
|
||||
private IConfigurationService config;
|
||||
private IServerService serverService;
|
||||
private IProcessService processService;
|
||||
private IIndexerManagerService indexerService;
|
||||
private ISecuityService securityService;
|
||||
private IUpdateService updater;
|
||||
private ILogCacheService logCache;
|
||||
private Logger logger;
|
||||
}
|
||||
}
|
||||
@@ -1,181 +0,0 @@
|
||||
using AutoMapper;
|
||||
using Jackett.Models;
|
||||
using Jackett.Services;
|
||||
using Jackett.Utils;
|
||||
using NLog;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace Jackett.Controllers
|
||||
{
|
||||
[AllowAnonymous]
|
||||
[JackettAPINoCache]
|
||||
public class TorznabController : ApiController
|
||||
{
|
||||
private IIndexerManagerService indexerService;
|
||||
private Logger logger;
|
||||
private IServerService serverService;
|
||||
private ICacheService cacheService;
|
||||
|
||||
public TorznabController(IIndexerManagerService i, Logger l, IServerService s, ICacheService c)
|
||||
{
|
||||
indexerService = i;
|
||||
logger = l;
|
||||
serverService = s;
|
||||
cacheService = c;
|
||||
}
|
||||
|
||||
public HttpResponseMessage GetErrorXML(int code, string description)
|
||||
{
|
||||
var xdoc = new XDocument(
|
||||
new XDeclaration("1.0", "UTF-8", null),
|
||||
new XElement("error",
|
||||
new XAttribute("code", code.ToString()),
|
||||
new XAttribute("description", description)
|
||||
)
|
||||
);
|
||||
|
||||
var xml = xdoc.Declaration.ToString() + Environment.NewLine + xdoc.ToString();
|
||||
|
||||
return new HttpResponseMessage()
|
||||
{
|
||||
Content = new StringContent(xml, Encoding.UTF8, "application/xml")
|
||||
};
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<HttpResponseMessage> Call(string indexerID)
|
||||
{
|
||||
var indexer = indexerService.GetIndexer(indexerID);
|
||||
var torznabQuery = TorznabQuery.FromHttpQuery(HttpUtility.ParseQueryString(Request.RequestUri.Query));
|
||||
|
||||
if (string.Equals(torznabQuery.QueryType, "caps", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return new HttpResponseMessage()
|
||||
{
|
||||
Content = new StringContent(indexer.TorznabCaps.ToXml(), Encoding.UTF8, "application/xml")
|
||||
};
|
||||
}
|
||||
|
||||
torznabQuery.ExpandCatsToSubCats();
|
||||
var allowBadApiDueToDebug = false;
|
||||
#if DEBUG
|
||||
allowBadApiDueToDebug = Debugger.IsAttached;
|
||||
#endif
|
||||
|
||||
if (!allowBadApiDueToDebug && !string.Equals(torznabQuery.ApiKey, serverService.Config.APIKey, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
logger.Warn(string.Format("A request from {0} was made with an incorrect API key.", Request.GetOwinContext().Request.RemoteIpAddress));
|
||||
return Request.CreateResponse(HttpStatusCode.Forbidden, "Incorrect API key");
|
||||
}
|
||||
|
||||
if (!indexer.IsConfigured)
|
||||
{
|
||||
logger.Warn(string.Format("Rejected a request to {0} which is unconfigured.", indexer.DisplayName));
|
||||
return Request.CreateResponse(HttpStatusCode.Forbidden, "This indexer is not configured.");
|
||||
}
|
||||
|
||||
if (torznabQuery.ImdbID != null)
|
||||
{
|
||||
if (torznabQuery.QueryType != "movie")
|
||||
{
|
||||
logger.Warn(string.Format("A non movie request with an imdbid was made from {0}.", Request.GetOwinContext().Request.RemoteIpAddress));
|
||||
return GetErrorXML(201, "Incorrect parameter: only movie-search supports the imdbid parameter");
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(torznabQuery.SearchTerm))
|
||||
{
|
||||
logger.Warn(string.Format("A movie-search request from {0} was made contining q and imdbid.", Request.GetOwinContext().Request.RemoteIpAddress));
|
||||
return GetErrorXML(201, "Incorrect parameter: please specify either imdbid or q");
|
||||
}
|
||||
|
||||
torznabQuery.ImdbID = ParseUtil.GetFullImdbID(torznabQuery.ImdbID); // normalize ImdbID
|
||||
if (torznabQuery.ImdbID == null)
|
||||
{
|
||||
logger.Warn(string.Format("A movie-search request from {0} was made with an invalid imdbid.", Request.GetOwinContext().Request.RemoteIpAddress));
|
||||
return GetErrorXML(201, "Incorrect parameter: invalid imdbid format");
|
||||
}
|
||||
|
||||
if (!indexer.TorznabCaps.SupportsImdbSearch)
|
||||
{
|
||||
logger.Warn(string.Format("A movie-search request with imdbid from {0} was made but the indexer {1} doesn't support it.", Request.GetOwinContext().Request.RemoteIpAddress, indexer.DisplayName));
|
||||
return GetErrorXML(203, "Function Not Available: imdbid is not supported by this indexer");
|
||||
}
|
||||
}
|
||||
|
||||
var releases = await indexer.PerformQuery(torznabQuery);
|
||||
releases = indexer.CleanLinks(releases);
|
||||
|
||||
// Some trackers do not keep their clocks up to date and can be ~20 minutes out!
|
||||
foreach (var release in releases)
|
||||
{
|
||||
if (release.PublishDate > DateTime.Now)
|
||||
release.PublishDate = DateTime.Now;
|
||||
}
|
||||
|
||||
// Some trackers do not support multiple category filtering so filter the releases that match manually.
|
||||
var filteredReleases = releases = indexer.FilterResults(torznabQuery, releases);
|
||||
int? newItemCount = null;
|
||||
|
||||
// Cache non query results
|
||||
if (string.IsNullOrEmpty(torznabQuery.SanitizedSearchTerm))
|
||||
{
|
||||
newItemCount = cacheService.GetNewItemCount(indexer, filteredReleases);
|
||||
cacheService.CacheRssResults(indexer, releases);
|
||||
}
|
||||
|
||||
// Log info
|
||||
var logBuilder = new StringBuilder();
|
||||
if (newItemCount != null) {
|
||||
logBuilder.AppendFormat(string.Format("Found {0} ({1} new) releases from {2}", releases.Count(), newItemCount, indexer.DisplayName));
|
||||
}
|
||||
else {
|
||||
logBuilder.AppendFormat(string.Format("Found {0} releases from {1}", releases.Count(), indexer.DisplayName));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(torznabQuery.SanitizedSearchTerm)) {
|
||||
logBuilder.AppendFormat(" for: {0}", torznabQuery.GetQueryString());
|
||||
}
|
||||
|
||||
logger.Info(logBuilder.ToString());
|
||||
|
||||
var serverUrl = string.Format("{0}://{1}:{2}{3}", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port, serverService.BasePath());
|
||||
var resultPage = new ResultPage(new ChannelInfo
|
||||
{
|
||||
Title = indexer.DisplayName,
|
||||
Description = indexer.DisplayDescription,
|
||||
Link = new Uri(indexer.SiteLink),
|
||||
ImageUrl = new Uri(serverUrl + "logos/" + indexer.ID + ".png"),
|
||||
ImageTitle = indexer.DisplayName,
|
||||
ImageLink = new Uri(indexer.SiteLink),
|
||||
ImageDescription = indexer.DisplayName
|
||||
});
|
||||
|
||||
|
||||
foreach(var result in releases)
|
||||
{
|
||||
var clone = Mapper.Map<ReleaseInfo>(result);
|
||||
clone.Link = serverService.ConvertToProxyLink(clone.Link, serverUrl, indexerID, "dl", result.Title + ".torrent");
|
||||
resultPage.Releases.Add(clone);
|
||||
}
|
||||
|
||||
var xml = resultPage.ToXml(new Uri(serverUrl));
|
||||
// Force the return as XML
|
||||
return new HttpResponseMessage()
|
||||
{
|
||||
Content = new StringContent(xml, Encoding.UTF8, "application/rss+xml")
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
89
src/Jackett/Controllers/UIController.cs
Normal file
89
src/Jackett/Controllers/UIController.cs
Normal file
@@ -0,0 +1,89 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
using Jackett.Services;
|
||||
using Jackett.Utils;
|
||||
using NLog;
|
||||
|
||||
namespace Jackett.Controllers
|
||||
{
|
||||
[RoutePrefix("UI")]
|
||||
[JackettAuthorized]
|
||||
[JackettAPINoCache]
|
||||
public class WebUIController : ApiController
|
||||
{
|
||||
public WebUIController(IConfigurationService config, IServerService ss, ISecuityService s, Logger l)
|
||||
{
|
||||
this.config = config;
|
||||
serverService = ss;
|
||||
securityService = s;
|
||||
logger = l;
|
||||
}
|
||||
|
||||
private HttpResponseMessage GetFile(string path)
|
||||
{
|
||||
var result = new HttpResponseMessage(HttpStatusCode.OK);
|
||||
var mappedPath = Path.Combine(config.GetContentFolder(), path);
|
||||
var stream = new FileStream(mappedPath, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||
result.Content = new StreamContent(stream);
|
||||
result.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(mappedPath));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[AllowAnonymous]
|
||||
public IHttpActionResult Logout()
|
||||
{
|
||||
var ctx = Request.GetOwinContext();
|
||||
var authManager = ctx.Authentication;
|
||||
authManager.SignOut("ApplicationCookie");
|
||||
return Redirect("UI/Dashboard");
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[HttpPost]
|
||||
[AllowAnonymous]
|
||||
public async Task<HttpResponseMessage> Dashboard()
|
||||
{
|
||||
if (Request.RequestUri.Query != null && Request.RequestUri.Query.Contains("logout"))
|
||||
{
|
||||
var file = GetFile("login.html");
|
||||
securityService.Logout(file);
|
||||
return file;
|
||||
}
|
||||
|
||||
|
||||
if (securityService.CheckAuthorised(Request))
|
||||
{
|
||||
return GetFile("index.html");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var formData = await Request.Content.ReadAsFormDataAsync();
|
||||
|
||||
if (formData != null && securityService.HashPassword(formData["password"]) == serverService.Config.AdminPassword)
|
||||
{
|
||||
var file = GetFile("index.html");
|
||||
securityService.Login(file);
|
||||
return file;
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetFile("login.html");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private IConfigurationService config;
|
||||
private IServerService serverService;
|
||||
private ISecuityService securityService;
|
||||
private Logger logger;
|
||||
}
|
||||
}
|
||||
@@ -92,16 +92,16 @@ namespace Jackett
|
||||
easy.BufferSize = 64 * 1024;
|
||||
easy.UserAgent = BrowserUtil.ChromeUserAgent;
|
||||
easy.FollowLocation = false;
|
||||
easy.ConnectTimeout = 20;
|
||||
if(curlRequest.Headers != null)
|
||||
{
|
||||
CurlSlist curlHeaders = new CurlSlist();
|
||||
foreach (var header in curlRequest.Headers)
|
||||
{
|
||||
curlHeaders.Append(header.Key + ": " + header.Value);
|
||||
}
|
||||
easy.SetOpt(CurlOption.HttpHeader, curlHeaders);
|
||||
}
|
||||
easy.ConnectTimeout = 20;
|
||||
if(curlRequest.Headers != null)
|
||||
{
|
||||
CurlSlist curlHeaders = new CurlSlist();
|
||||
foreach (var header in curlRequest.Headers)
|
||||
{
|
||||
curlHeaders.Append(header.Key + ": " + header.Value);
|
||||
}
|
||||
easy.SetOpt(CurlOption.HttpHeader, curlHeaders);
|
||||
}
|
||||
|
||||
easy.WriteFunction = (byte[] buf, int size, int nmemb, object data) =>
|
||||
{
|
||||
@@ -151,8 +151,8 @@ namespace Jackett
|
||||
{
|
||||
easy.SetOpt(CurlOption.SslVerifyhost, false);
|
||||
easy.SetOpt(CurlOption.SslVerifyPeer, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (Startup.ProxyConnection != null)
|
||||
{
|
||||
easy.SetOpt(CurlOption.HttpProxyTunnel, 1);
|
||||
@@ -173,14 +173,14 @@ namespace Jackett
|
||||
|
||||
var headerBytes = Combine(headerBuffers.ToArray());
|
||||
var headerString = Encoding.UTF8.GetString(headerBytes);
|
||||
if (Startup.ProxyConnection != null)
|
||||
{
|
||||
var firstcrlf = headerString.IndexOf("\r\n\r\n");
|
||||
var secondcrlf = headerString.IndexOf("\r\n\r\n", firstcrlf + 1);
|
||||
if (secondcrlf > 0)
|
||||
{
|
||||
headerString = headerString.Substring(firstcrlf + 4, secondcrlf - (firstcrlf));
|
||||
}
|
||||
if (Startup.ProxyConnection != null)
|
||||
{
|
||||
var firstcrlf = headerString.IndexOf("\r\n\r\n");
|
||||
var secondcrlf = headerString.IndexOf("\r\n\r\n", firstcrlf + 1);
|
||||
if (secondcrlf > 0)
|
||||
{
|
||||
headerString = headerString.Substring(firstcrlf + 4, secondcrlf - (firstcrlf));
|
||||
}
|
||||
}
|
||||
var headerParts = headerString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var headers = new List<string[]>();
|
||||
@@ -231,28 +231,28 @@ namespace Jackett
|
||||
}
|
||||
|
||||
// add some debug output to track down the problem causing people getting InternalServerError results
|
||||
if (status == HttpStatusCode.NotImplemented || status == HttpStatusCode.InternalServerError)
|
||||
{
|
||||
try
|
||||
{
|
||||
OnErrorMessage("got NotImplemented/InternalServerError");
|
||||
OnErrorMessage("request.Method: " + curlRequest.Method);
|
||||
OnErrorMessage("request.Url: " + curlRequest.Url);
|
||||
OnErrorMessage("request.Cookies: " + curlRequest.Cookies);
|
||||
OnErrorMessage("request.Referer: " + curlRequest.Referer);
|
||||
OnErrorMessage("request.RawPOSTDdata: " + curlRequest.RawPOSTDdata);
|
||||
OnErrorMessage("cookies: "+ cookieBuilder.ToString().Trim());
|
||||
OnErrorMessage("headerString:\n" + headerString);
|
||||
|
||||
foreach (var headerPart in headerParts)
|
||||
{
|
||||
OnErrorMessage("headerParts: "+headerPart);
|
||||
}
|
||||
if (status == HttpStatusCode.NotImplemented || status == HttpStatusCode.InternalServerError)
|
||||
{
|
||||
try
|
||||
{
|
||||
OnErrorMessage("got NotImplemented/InternalServerError");
|
||||
OnErrorMessage("request.Method: " + curlRequest.Method);
|
||||
OnErrorMessage("request.Url: " + curlRequest.Url);
|
||||
OnErrorMessage("request.Cookies: " + curlRequest.Cookies);
|
||||
OnErrorMessage("request.Referer: " + curlRequest.Referer);
|
||||
OnErrorMessage("request.RawPOSTDdata: " + curlRequest.RawPOSTDdata);
|
||||
OnErrorMessage("cookies: "+ cookieBuilder.ToString().Trim());
|
||||
OnErrorMessage("headerString:\n" + headerString);
|
||||
|
||||
foreach (var headerPart in headerParts)
|
||||
{
|
||||
OnErrorMessage("headerParts: "+headerPart);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnErrorMessage(string.Format("CurlHelper: error while handling NotImplemented/InternalServerError:\n{0}", ex));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnErrorMessage(string.Format("CurlHelper: error while handling NotImplemented/InternalServerError:\n{0}", ex));
|
||||
}
|
||||
}
|
||||
|
||||
var contentBytes = Combine(contentBuffers.ToArray());
|
||||
|
||||
@@ -1,139 +1,142 @@
|
||||
---
|
||||
site: 2fast4you
|
||||
name: 2 Fast 4 You
|
||||
language: fr-fr
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.2f4y.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 10, cat: TV/Anime, desc: "Animation: HD720P"}
|
||||
- {id: 11, cat: TV/Anime, desc: "Animation: HD1080P"}
|
||||
- {id: 56, cat: TV/Anime, desc: "Animation: DVDRip"}
|
||||
- {id: 13, cat: TV/Anime, desc: "Animation: DVD"}
|
||||
- {id: 18, cat: PC/0day, desc: "Applications: PC"}
|
||||
- {id: 16, cat: PC/Games, desc: "Applications: Jeux"}
|
||||
- {id: 19, cat: PC/Phone-Android, desc: "Applications: Android"}
|
||||
- {id: 38, cat: PC/Phone-IOS, desc: "Applications: Mobile Phone"}
|
||||
- {id: 17, cat: PC/0day, desc: "Applications: Autres"}
|
||||
- {id: 67, cat: TV, desc: "Autres: Emission TV"}
|
||||
- {id: 68, cat: TV/Sport, desc: "Autres: Sport"}
|
||||
- {id: 40, cat: Other, desc: "Autres: Autres"}
|
||||
- {id: 14, cat: TV/Documentary, desc: "Documentaires: DivX"}
|
||||
- {id: 15, cat: TV/Documentary, desc: "Documentaires: HD"}
|
||||
- {id: 76, cat: TV/Documentary, desc: "Documentaires: TVRip"}
|
||||
- {id: 62, cat: Audio/Audiobook, desc: "E-Books: E-Books Audio"}
|
||||
- {id: 50, cat: Books, desc: "E-Books: Manuel Français"}
|
||||
- {id: 49, cat: Books, desc: "E-Books: Manuel Anglais"}
|
||||
- {id: 36, cat: Books, desc: "E-Books: Livres Français"}
|
||||
- {id: 53, cat: Books, desc: "E-Books: Livre Anglais"}
|
||||
- {id: 52, cat: Books, desc: "E-Books: Revue - Journaux"}
|
||||
- {id: 51, cat: Books, desc: "E-Books: BD"}
|
||||
- {id: 66, cat: Movies, desc: "Films: VOSTFR"}
|
||||
- {id: 71, cat: Movies/WEBDL, desc: "Films: WEB-DL"}
|
||||
- {id: 65, cat: Movies, desc: "Films: VO"}
|
||||
- {id: 72, cat: Movies/SD, desc: "Films: TVRip/HDTV"}
|
||||
- {id: 70, cat: Movies/HD, desc: "Films: MHD X265"}
|
||||
- {id: 57, cat: Movies/SD, desc: "Films: TS/CAM"}
|
||||
- {id: 59, cat: Movies, desc: "Films: Spectacle"}
|
||||
- {id: 55, cat: Movies/HD, desc: "Films: MHD 720P"}
|
||||
- {id: 54, cat: Movies/HD, desc: "Films: MHD 1080P"}
|
||||
- {id: 1, cat: Movies/HD, desc: "Films: HD720P"}
|
||||
- {id: 2, cat: Movies/HD, desc: "Films: HD1080P"}
|
||||
- {id: 90, cat: Movies/HD, desc: "Films: HD X265"}
|
||||
- {id: 92, cat: Movies/HD, desc: "Films: 4K"}
|
||||
- {id: 69, cat: Movies/3D, desc: "Films: Film 3D"}
|
||||
- {id: 3, cat: Movies/DVD, desc: "Films: DVDRIP"}
|
||||
- {id: 4, cat: Movies/DVD, desc: "Films: DVD5"}
|
||||
- {id: 5, cat: Movies/DVD, desc: "Films: DVD9"}
|
||||
- {id: 91, cat: Movies/HD, desc: "Films: RemuX"}
|
||||
- {id: 89, cat: Movies/HD, desc: "Films: BD/BR Rip"}
|
||||
- {id: 88, cat: Movies/BluRay, desc: "Films: Full BD/BR"}
|
||||
- {id: 77, cat: Other, desc: "GPS: Cartes"}
|
||||
- {id: 78, cat: Other, desc: "GPS: Radars"}
|
||||
- {id: 79, cat: TV/Anime, desc: "Mangas: HD"}
|
||||
- {id: 80, cat: TV/Anime, desc: "Mangas: HD VO"}
|
||||
- {id: 81, cat: TV/Anime, desc: "Mangas: HD VOSTFR"}
|
||||
- {id: 82, cat: TV/Anime, desc: "Mangas: DVDRIP"}
|
||||
- {id: 83, cat: TV/Anime, desc: "Mangas: DVDRIP VO"}
|
||||
- {id: 84, cat: TV/Anime, desc: "Mangas: DVDRIP VOSTFR"}
|
||||
- {id: 85, cat: TV/Anime, desc: "Mangas: Web-DL"}
|
||||
- {id: 86, cat: TV/Anime, desc: "Mangas: TV-RIP"}
|
||||
- {id: 75, cat: Audio, desc: "Musique: Concert TVRip"}
|
||||
- {id: 25, cat: Audio/MP3, desc: "Musique: Single MP3"}
|
||||
- {id: 24, cat: Audio/Lossless, desc: "Musique: Single Flac"}
|
||||
- {id: 22, cat: Audio/MP3, desc: "Musique: Album MP3"}
|
||||
- {id: 23, cat: Audio/Lossless, desc: "Musique: Album Flac"}
|
||||
- {id: 64, cat: Audio, desc: "Musique: Mégamix Maison"}
|
||||
- {id: 58, cat: Audio, desc: "Musique: Concert"}
|
||||
- {id: 61, cat: TV, desc: "Serie TV: Episode VOSTFR"}
|
||||
- {id: 63, cat: TV, desc: "Serie TV: Episode VO"}
|
||||
- {id: 12, cat: TV/Anime, desc: "Serie TV: Animation"}
|
||||
- {id: 74, cat: TV, desc: "Serie TV: TVRip"}
|
||||
- {id: 73, cat: TV/WEB-DL, desc: "Serie TV: WEB-DL"}
|
||||
- {id: 7, cat: TV, desc: "Serie TV: Episode FR"}
|
||||
- {id: 6, cat: TV, desc: "Serie TV: Saison FR"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: form:contains("Erreur")
|
||||
message:
|
||||
selector: form
|
||||
remove: table
|
||||
test:
|
||||
path: torrents-search.php
|
||||
|
||||
search:
|
||||
path: torrents-search.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
|
||||
rows:
|
||||
selector: table.ttable_headinner > tbody > tr[class^="t-row"]
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrents-details.php", "download.php"]
|
||||
title:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
category:
|
||||
selector: a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: img.rounded-img
|
||||
attribute: src
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[title="freeleech"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: 2fast4you
|
||||
name: 2 Fast 4 You
|
||||
language: fr-fr
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.2f4y.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 10, cat: TV/Anime, desc: "Animation: HD720P"}
|
||||
- {id: 11, cat: TV/Anime, desc: "Animation: HD1080P"}
|
||||
- {id: 56, cat: TV/Anime, desc: "Animation: DVDRip"}
|
||||
- {id: 13, cat: TV/Anime, desc: "Animation: DVD"}
|
||||
- {id: 18, cat: PC/0day, desc: "Applications: PC"}
|
||||
- {id: 16, cat: PC/Games, desc: "Applications: Jeux"}
|
||||
- {id: 19, cat: PC/Phone-Android, desc: "Applications: Android"}
|
||||
- {id: 38, cat: PC/Phone-IOS, desc: "Applications: Mobile Phone"}
|
||||
- {id: 17, cat: PC/0day, desc: "Applications: Autres"}
|
||||
- {id: 67, cat: TV, desc: "Autres: Emission TV"}
|
||||
- {id: 68, cat: TV/Sport, desc: "Autres: Sport"}
|
||||
- {id: 40, cat: Other, desc: "Autres: Autres"}
|
||||
- {id: 14, cat: TV/Documentary, desc: "Documentaires: DivX"}
|
||||
- {id: 15, cat: TV/Documentary, desc: "Documentaires: HD"}
|
||||
- {id: 76, cat: TV/Documentary, desc: "Documentaires: TVRip"}
|
||||
- {id: 62, cat: Audio/Audiobook, desc: "E-Books: E-Books Audio"}
|
||||
- {id: 50, cat: Books, desc: "E-Books: Manuel Français"}
|
||||
- {id: 49, cat: Books, desc: "E-Books: Manuel Anglais"}
|
||||
- {id: 36, cat: Books, desc: "E-Books: Livres Français"}
|
||||
- {id: 53, cat: Books, desc: "E-Books: Livre Anglais"}
|
||||
- {id: 52, cat: Books, desc: "E-Books: Revue - Journaux"}
|
||||
- {id: 51, cat: Books, desc: "E-Books: BD"}
|
||||
- {id: 66, cat: Movies, desc: "Films: VOSTFR"}
|
||||
- {id: 71, cat: Movies/WEBDL, desc: "Films: WEB-DL"}
|
||||
- {id: 65, cat: Movies, desc: "Films: VO"}
|
||||
- {id: 72, cat: Movies/SD, desc: "Films: TVRip/HDTV"}
|
||||
- {id: 70, cat: Movies/HD, desc: "Films: MHD X265"}
|
||||
- {id: 57, cat: Movies/SD, desc: "Films: TS/CAM"}
|
||||
- {id: 59, cat: Movies, desc: "Films: Spectacle"}
|
||||
- {id: 55, cat: Movies/HD, desc: "Films: MHD 720P"}
|
||||
- {id: 54, cat: Movies/HD, desc: "Films: MHD 1080P"}
|
||||
- {id: 1, cat: Movies/HD, desc: "Films: HD720P"}
|
||||
- {id: 2, cat: Movies/HD, desc: "Films: HD1080P"}
|
||||
- {id: 90, cat: Movies/HD, desc: "Films: HD X265"}
|
||||
- {id: 92, cat: Movies/HD, desc: "Films: 4K"}
|
||||
- {id: 69, cat: Movies/3D, desc: "Films: Film 3D"}
|
||||
- {id: 3, cat: Movies/DVD, desc: "Films: DVDRIP"}
|
||||
- {id: 4, cat: Movies/DVD, desc: "Films: DVD5"}
|
||||
- {id: 5, cat: Movies/DVD, desc: "Films: DVD9"}
|
||||
- {id: 91, cat: Movies/HD, desc: "Films: RemuX"}
|
||||
- {id: 89, cat: Movies/HD, desc: "Films: BD/BR Rip"}
|
||||
- {id: 88, cat: Movies/BluRay, desc: "Films: Full BD/BR"}
|
||||
- {id: 77, cat: Other, desc: "GPS: Cartes"}
|
||||
- {id: 78, cat: Other, desc: "GPS: Radars"}
|
||||
- {id: 79, cat: TV/Anime, desc: "Mangas: HD"}
|
||||
- {id: 80, cat: TV/Anime, desc: "Mangas: HD VO"}
|
||||
- {id: 81, cat: TV/Anime, desc: "Mangas: HD VOSTFR"}
|
||||
- {id: 82, cat: TV/Anime, desc: "Mangas: DVDRIP"}
|
||||
- {id: 83, cat: TV/Anime, desc: "Mangas: DVDRIP VO"}
|
||||
- {id: 84, cat: TV/Anime, desc: "Mangas: DVDRIP VOSTFR"}
|
||||
- {id: 85, cat: TV/Anime, desc: "Mangas: Web-DL"}
|
||||
- {id: 86, cat: TV/Anime, desc: "Mangas: TV-RIP"}
|
||||
- {id: 75, cat: Audio, desc: "Musique: Concert TVRip"}
|
||||
- {id: 25, cat: Audio/MP3, desc: "Musique: Single MP3"}
|
||||
- {id: 24, cat: Audio/Lossless, desc: "Musique: Single Flac"}
|
||||
- {id: 22, cat: Audio/MP3, desc: "Musique: Album MP3"}
|
||||
- {id: 23, cat: Audio/Lossless, desc: "Musique: Album Flac"}
|
||||
- {id: 64, cat: Audio, desc: "Musique: Mégamix Maison"}
|
||||
- {id: 58, cat: Audio, desc: "Musique: Concert"}
|
||||
- {id: 61, cat: TV, desc: "Serie TV: Episode VOSTFR"}
|
||||
- {id: 63, cat: TV, desc: "Serie TV: Episode VO"}
|
||||
- {id: 12, cat: TV/Anime, desc: "Serie TV: Animation"}
|
||||
- {id: 74, cat: TV, desc: "Serie TV: TVRip"}
|
||||
- {id: 73, cat: TV/WEB-DL, desc: "Serie TV: WEB-DL"}
|
||||
- {id: 7, cat: TV, desc: "Serie TV: Episode FR"}
|
||||
- {id: 6, cat: TV, desc: "Serie TV: Saison FR"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: form:contains("Erreur")
|
||||
message:
|
||||
selector: form
|
||||
remove: table
|
||||
test:
|
||||
path: torrents-search.php
|
||||
|
||||
search:
|
||||
path: torrents-search.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
|
||||
rows:
|
||||
selector: table.ttable_headinner > tbody > tr[class^="t-row"]
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrents-details.php", "download.php"]
|
||||
title:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" - (Nouveau!)", ""]
|
||||
category:
|
||||
selector: a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: img.rounded-img
|
||||
attribute: src
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[title="freeleech"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,102 +1,102 @@
|
||||
---
|
||||
site: 3dtorrents
|
||||
name: 3D Torrents
|
||||
description: "3D Movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.3dtorrents.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 14, cat: Movies, desc: "Movies XviD"}
|
||||
- {id: 34, cat: Movies, desc: "Movies UltraHD"}
|
||||
- {id: 15, cat: Movies, desc: "Movies DVD-R"}
|
||||
- {id: 11, cat: Movies, desc: "Movies 720p"}
|
||||
- {id: 13, cat: Movies, desc: "Movies 1080p"}
|
||||
- {id: 16, cat: Movies, desc: "Movies 3DTV"}
|
||||
- {id: 17, cat: Movies, desc: "Movies Blu-ray"}
|
||||
- {id: 27, cat: Movies, desc: "Movies BD25 Encode"}
|
||||
- {id: 33, cat: Movies, desc: "Movies BD9 AVCHD"}
|
||||
- {id: 22, cat: Movies, desc: "Movies 2D to 3D Conv"}
|
||||
- {id: 32, cat: Movies, desc: "Bluray MKV Remux"}
|
||||
- {id: 23, cat: Movies, desc: "Movies Evo 3D"}
|
||||
- {id: 21, cat: PC, desc: "3D Software"}
|
||||
- {id: 2, cat: Audio, desc: "Music"}
|
||||
- {id: 28, cat: XXX, desc: "Adult 720p"}
|
||||
- {id: 29, cat: XXX, desc: "Adult 1080p"}
|
||||
- {id: 30, cat: XXX, desc: "Adult Blu-ray"}
|
||||
- {id: 31, cat: Other, desc: "Misc"}
|
||||
- {id: 19, cat: Audio, desc: "Audio Packs"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: index.php?page=login&returnto=index.php
|
||||
method: form
|
||||
form: form
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
captcha:
|
||||
type: image
|
||||
image: img.captcha
|
||||
input: private_key
|
||||
error:
|
||||
- selector: span.errormsg
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
page: torrents
|
||||
category: 0
|
||||
3dformat: 0
|
||||
active: 1
|
||||
rows:
|
||||
selector: table[cellspacing!="1"].lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
title:
|
||||
remove: span
|
||||
selector: td:nth-child(2)
|
||||
download:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["index.php?page=torrent-details&id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-last-child(4)
|
||||
seeders:
|
||||
selector: td:nth-last-child(3)
|
||||
# leechers:
|
||||
# selector: td:nth-last-child(2)
|
||||
date:
|
||||
selector: td:nth-last-child(5)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "02/01/2006"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[title^="You get 50% off download count on this torrent"]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: 3dtorrents
|
||||
name: 3D Torrents
|
||||
description: "3D Movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.3dtorrents.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 14, cat: Movies, desc: "Movies XviD"}
|
||||
- {id: 34, cat: Movies, desc: "Movies UltraHD"}
|
||||
- {id: 15, cat: Movies, desc: "Movies DVD-R"}
|
||||
- {id: 11, cat: Movies, desc: "Movies 720p"}
|
||||
- {id: 13, cat: Movies, desc: "Movies 1080p"}
|
||||
- {id: 16, cat: Movies, desc: "Movies 3DTV"}
|
||||
- {id: 17, cat: Movies, desc: "Movies Blu-ray"}
|
||||
- {id: 27, cat: Movies, desc: "Movies BD25 Encode"}
|
||||
- {id: 33, cat: Movies, desc: "Movies BD9 AVCHD"}
|
||||
- {id: 22, cat: Movies, desc: "Movies 2D to 3D Conv"}
|
||||
- {id: 32, cat: Movies, desc: "Bluray MKV Remux"}
|
||||
- {id: 23, cat: Movies, desc: "Movies Evo 3D"}
|
||||
- {id: 21, cat: PC, desc: "3D Software"}
|
||||
- {id: 2, cat: Audio, desc: "Music"}
|
||||
- {id: 28, cat: XXX, desc: "Adult 720p"}
|
||||
- {id: 29, cat: XXX, desc: "Adult 1080p"}
|
||||
- {id: 30, cat: XXX, desc: "Adult Blu-ray"}
|
||||
- {id: 31, cat: Other, desc: "Misc"}
|
||||
- {id: 19, cat: Audio, desc: "Audio Packs"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: index.php?page=login&returnto=index.php
|
||||
method: form
|
||||
form: form
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
captcha:
|
||||
type: image
|
||||
image: img.captcha
|
||||
input: private_key
|
||||
error:
|
||||
- selector: span.errormsg
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
page: torrents
|
||||
category: 0
|
||||
3dformat: 0
|
||||
active: 1
|
||||
rows:
|
||||
selector: table[cellspacing!="1"].lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
title:
|
||||
remove: span
|
||||
selector: td:nth-child(2)
|
||||
download:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["index.php?page=torrent-details&id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-last-child(4)
|
||||
seeders:
|
||||
selector: td:nth-last-child(3)
|
||||
# leechers:
|
||||
# selector: td:nth-last-child(2)
|
||||
date:
|
||||
selector: td:nth-last-child(5)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "02/01/2006"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[title^="You get 50% off download count on this torrent"]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
86
src/Jackett/Definitions/anidex.yml
Normal file
86
src/Jackett/Definitions/anidex.yml
Normal file
@@ -0,0 +1,86 @@
|
||||
---
|
||||
site: anidex
|
||||
name: Anidex
|
||||
description: "Anidex is a torrent tracker and indexer, primarily for English fansub groups of anime"
|
||||
language: en-us
|
||||
encoding: UTF-8
|
||||
type: public
|
||||
links:
|
||||
- https://anidex.info/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: TV/Anime, desc: "Anime - Sub"}
|
||||
- {id: 2, cat: TV/Anime, desc: "Anime - Raw"}
|
||||
- {id: 3, cat: TV/Anime, desc: "Anime - Dub"}
|
||||
- {id: 4, cat: TV/Anime, desc: "LA - Sub"}
|
||||
- {id: 5, cat: TV/Anime, desc: "LA - Raw"}
|
||||
- {id: 6, cat: TV/Anime, desc: "Light Novel"}
|
||||
- {id: 7, cat: TV/Anime, desc: "Manga - TLed"}
|
||||
- {id: 8, cat: TV/Anime, desc: "Manga - Raw"}
|
||||
- {id: 9, cat: TV/Anime, desc: "♫ - Lossy"}
|
||||
- {id: 10, cat: TV/Anime, desc: "♫ - Lossless"}
|
||||
- {id: 11, cat: TV/Anime, desc: "♫ - Video"}
|
||||
- {id: 12, cat: TV/Anime, desc: "Games"}
|
||||
- {id: 13, cat: TV/Anime, desc: "Applications"}
|
||||
- {id: 14, cat: TV/Anime, desc: "Pictures"}
|
||||
- {id: 15, cat: TV/Anime, desc: "Adult Video"}
|
||||
- {id: 16, cat: TV/Anime, desc: "Other"}
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
settings:
|
||||
- name: cat-id
|
||||
type: text
|
||||
label: Category Id
|
||||
# no longer supported?
|
||||
# - name: lang-id
|
||||
# type: text
|
||||
# label: Language Id
|
||||
|
||||
search:
|
||||
path: "/"
|
||||
inputs:
|
||||
q: "{{ .Query.Keywords }}"
|
||||
id: "{{ .Config.cat-id }}"
|
||||
rows:
|
||||
selector: div.table-responsive > table > tbody > tr
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="/?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: id
|
||||
title:
|
||||
selector: td:nth-child(3) > a.torrent > span.span-1440
|
||||
details:
|
||||
selector: td:nth-child(3) > a.torrent
|
||||
attribute: href
|
||||
download:
|
||||
selector: td:nth-child(5) > a
|
||||
attribute: href
|
||||
magnet:
|
||||
selector: a[href^="magnet:?"]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
date:
|
||||
selector: td:nth-child(8)
|
||||
attribute: title
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["UTC", "+00:00"]
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
grabs:
|
||||
selector: td:nth-child(11)
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
53
src/Jackett/Definitions/anirena.yml
Normal file
53
src/Jackett/Definitions/anirena.yml
Normal file
@@ -0,0 +1,53 @@
|
||||
---
|
||||
site: aniRena
|
||||
name: AniRena
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.anirena.com/
|
||||
|
||||
settings: []
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Anime
|
||||
- {id: 2, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 9, cat: TV/Anime, desc: "Anime Music Videos"}
|
||||
- {id: 10, cat: TV/Anime, desc: "Non-English"}
|
||||
- {id: 1, cat: TV/Anime, desc: "Raw Animes"}
|
||||
# Audio
|
||||
- {id: 8, cat: Audio, desc: "Audio"}
|
||||
# Literature
|
||||
- {id: 7, cat: Books, desc: "Manga"}
|
||||
# Software
|
||||
- {id: 5, cat: PC/ISO, desc: "DVD/ISO"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
|
||||
search:
|
||||
path: "/"
|
||||
inputs:
|
||||
s: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table tbody tr
|
||||
fields:
|
||||
title:
|
||||
selector: .torrents_small_info_data1 div
|
||||
download:
|
||||
selector: .torrents_small_info_data2 a[title="Download Torrent"]
|
||||
attribute: href
|
||||
magnet:
|
||||
selector: .torrents_small_info_data2 a[title="Magnet Link"]
|
||||
attribute: href
|
||||
size:
|
||||
selector: .torrents_small_size_data1
|
||||
seeders:
|
||||
selector: .torrents_small_seeders_data1 b big
|
||||
leechers:
|
||||
selector: .torrents_small_leechers_data1 b big
|
||||
grabs:
|
||||
selector: .torrents_small_downloads_data1
|
||||
@@ -1,124 +1,124 @@
|
||||
---
|
||||
site: aox
|
||||
name: AOX
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://aox.to/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Japanese
|
||||
- {id: 1, cat: Movies, desc: "jMovies"}
|
||||
- {id: 2, cat: TV, desc: "TV Shows"}
|
||||
- {id: 3, cat: TV/Other, desc: "Variety Shows"}
|
||||
|
||||
# Korean
|
||||
- {id: 6, cat: Movies, desc: "kMovies"}
|
||||
- {id: 4, cat: TV, desc: "TV Shows"}
|
||||
- {id: 14, cat: TV/Other, desc: "Variety Shows"}
|
||||
|
||||
# Chinese
|
||||
- {id: 8, cat: Movies, desc: "cMovies"}
|
||||
- {id: 9, cat: TV, desc: "TV Shows"}
|
||||
- {id: 13, cat: TV/Other, desc: "Variety Shows"}
|
||||
|
||||
# Adult
|
||||
- {id: 13, cat: XXX, desc: "Adult"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: body[onLoad^="makeAlert('"]
|
||||
message:
|
||||
selector: body[onLoad^="makeAlert('"]
|
||||
attribute: onLoad
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["makeAlert('Error' , '", ""]
|
||||
- name: replace
|
||||
args: ["');", ""]
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
search: "{{ .Query.Keywords }}"
|
||||
page: "torrents"
|
||||
category: "{{range .Categories}}{{.}};{{end}}"
|
||||
options: "0"
|
||||
active: "0"
|
||||
rows:
|
||||
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="index.php?page=downloadcheck&id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
banner:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.*?) "
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
details:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(12)
|
||||
date:
|
||||
selector: td:nth-child(7)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +01:00"
|
||||
- name: dateparse
|
||||
args: "02/01/2006 -07:00"
|
||||
grabs:
|
||||
selector: td:nth-child(10)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="Full Star 100% Free"]: "0"
|
||||
img[alt="Half Star 50% Free"]: "0.5"
|
||||
img[alt="Empty Star 25% Free"]: "0.75"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a
|
||||
description|append:
|
||||
selector: td:nth-child(3) > img
|
||||
attribute: title
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "<br>Language: "
|
||||
|
||||
---
|
||||
site: aox
|
||||
name: AOX
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://aox.to/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Japanese
|
||||
- {id: 1, cat: Movies, desc: "jMovies"}
|
||||
- {id: 2, cat: TV, desc: "TV Shows"}
|
||||
- {id: 3, cat: TV/Other, desc: "Variety Shows"}
|
||||
|
||||
# Korean
|
||||
- {id: 6, cat: Movies, desc: "kMovies"}
|
||||
- {id: 4, cat: TV, desc: "TV Shows"}
|
||||
- {id: 14, cat: TV/Other, desc: "Variety Shows"}
|
||||
|
||||
# Chinese
|
||||
- {id: 8, cat: Movies, desc: "cMovies"}
|
||||
- {id: 9, cat: TV, desc: "TV Shows"}
|
||||
- {id: 13, cat: TV/Other, desc: "Variety Shows"}
|
||||
|
||||
# Adult
|
||||
- {id: 13, cat: XXX, desc: "Adult"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: body[onLoad^="makeAlert('"]
|
||||
message:
|
||||
selector: body[onLoad^="makeAlert('"]
|
||||
attribute: onLoad
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["makeAlert('Error' , '", ""]
|
||||
- name: replace
|
||||
args: ["');", ""]
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
search: "{{ .Query.Keywords }}"
|
||||
page: "torrents"
|
||||
category: "{{range .Categories}}{{.}};{{end}}"
|
||||
options: "0"
|
||||
active: "0"
|
||||
rows:
|
||||
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="index.php?page=downloadcheck&id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
banner:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.*?) "
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
details:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(12)
|
||||
date:
|
||||
selector: td:nth-child(7)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +01:00"
|
||||
- name: dateparse
|
||||
args: "02/01/2006 -07:00"
|
||||
grabs:
|
||||
selector: td:nth-child(10)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="Full Star 100% Free"]: "0"
|
||||
img[alt="Half Star 50% Free"]: "0.5"
|
||||
img[alt="Empty Star 25% Free"]: "0.75"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a
|
||||
description|append:
|
||||
selector: td:nth-child(3) > img
|
||||
attribute: title
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "<br>Language: "
|
||||
|
||||
|
||||
@@ -1,95 +1,95 @@
|
||||
---
|
||||
site: apollo
|
||||
name: Apollo
|
||||
description: "A music tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://apollo.rip
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Audio, desc: "Music"}
|
||||
- {id: 2, cat: PC, desc: "Applications"}
|
||||
- {id: 3, cat: Books, desc: "E-Books"}
|
||||
- {id: 4, cat: Audio/Audiobook, desc: "Audiobooks"}
|
||||
- {id: 5, cat: Movies, desc: "E-Learning Videos"}
|
||||
- {id: 6, cat: TV, desc: "Comedy"}
|
||||
- {id: 7, cat: Books/Comics, desc: "Comics"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
login: "Log in"
|
||||
error:
|
||||
- selector: form#loginform > span.warning
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
ratio:
|
||||
path: torrents.php
|
||||
selector: li#stats_ratio > span
|
||||
|
||||
search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: time
|
||||
order_way: desc
|
||||
action: basic
|
||||
searchsubmit: 1
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
description:
|
||||
selector: div.group_info
|
||||
remove: span
|
||||
title:
|
||||
selector: div.group_info
|
||||
remove: span, div.tags
|
||||
category:
|
||||
selector: td.cats_col
|
||||
case:
|
||||
div.cats_music: 1
|
||||
div.cats_applications: 2
|
||||
div.cats_ebooks: 3
|
||||
div.cats_audiobooks: 4
|
||||
div.cats_elearningvideos: 5
|
||||
div.cats_comedy: 6
|
||||
div.cats_comics: 7
|
||||
comments:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
":root div.alertbar:contains(\"freeleech\")": "0"
|
||||
":root div.alertbar:contains(\"FREELEECH\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: apollo
|
||||
name: Apollo
|
||||
description: "A music tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://apollo.rip
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Audio, desc: "Music"}
|
||||
- {id: 2, cat: PC, desc: "Applications"}
|
||||
- {id: 3, cat: Books, desc: "E-Books"}
|
||||
- {id: 4, cat: Audio/Audiobook, desc: "Audiobooks"}
|
||||
- {id: 5, cat: Movies, desc: "E-Learning Videos"}
|
||||
- {id: 6, cat: TV, desc: "Comedy"}
|
||||
- {id: 7, cat: Books/Comics, desc: "Comics"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
login: "Log in"
|
||||
error:
|
||||
- selector: form#loginform > span.warning
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
ratio:
|
||||
path: torrents.php
|
||||
selector: li#stats_ratio > span
|
||||
|
||||
search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: time
|
||||
order_way: desc
|
||||
action: basic
|
||||
searchsubmit: 1
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
description:
|
||||
selector: div.group_info
|
||||
remove: span
|
||||
title:
|
||||
selector: div.group_info
|
||||
remove: span, div.tags
|
||||
category:
|
||||
selector: td.cats_col
|
||||
case:
|
||||
div.cats_music: 1
|
||||
div.cats_applications: 2
|
||||
div.cats_ebooks: 3
|
||||
div.cats_audiobooks: 4
|
||||
div.cats_elearningvideos: 5
|
||||
div.cats_comedy: 6
|
||||
div.cats_comics: 7
|
||||
comments:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
":root div.alertbar:contains(\"freeleech\")": "0"
|
||||
":root div.alertbar:contains(\"FREELEECH\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,164 +1,164 @@
|
||||
---
|
||||
site: arabafenice
|
||||
name: ArabaFenice
|
||||
language: it-it
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.arabafenice.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# HRS
|
||||
- {id: 34, cat: Movies/HD, desc: "1080p HRS x264"}
|
||||
- {id: 47, cat: Movies/HD, desc: "2160p 4k UltraHD HRS"}
|
||||
- {id: 35, cat: TV, desc: "Serie TV HRS"}
|
||||
- {id: 36, cat: Movies/SD, desc: "DVDRip HRS"}
|
||||
- {id: 41, cat: Movies/SD, desc: "BDRip 576p HRS"}
|
||||
- {id: 39, cat: Movies/HD, desc: "1080p HRS x265 HEVC"}
|
||||
|
||||
# VIDEO
|
||||
- {id: 1, cat: Movies, desc: "News Cinema"}
|
||||
- {id: 2, cat: Movies/SD, desc: "BD-DVDRip"}
|
||||
- {id: 3, cat: Movies/DVD, desc: "DVD 5"}
|
||||
- {id: 5, cat: Movies/DVD, desc: "DVD 9"}
|
||||
- {id: 6, cat: Movies/BluRay, desc: "BluRay Full"}
|
||||
- {id: 4, cat: Movies/HD, desc: "1080p 3D x264"}
|
||||
- {id: 7, cat: Movies/HD, desc: "1080p x264"}
|
||||
- {id: 46, cat: Movies/HD, desc: "1080p Video Untouch"}
|
||||
- {id: 44, cat: Movies/HD, desc: "1080p x265"}
|
||||
- {id: 9, cat: TV/Anime, desc: "Cartoons"}
|
||||
- {id: 8, cat: TV/Anime, desc: "720p x264"}
|
||||
- {id: 12, cat: TV, desc: "He concluded seasons"}
|
||||
- {id: 13, cat: TV, desc: "Seasons in Onda"}
|
||||
- {id: 14, cat: TV, desc: "TV Show"}
|
||||
- {id: 42, cat: TV, desc: "Serie Tv Sub Ita"}
|
||||
- {id: 15, cat: TV/Documentary, desc: "documentaries"}
|
||||
- {id: 33, cat: TV, desc: "mp4"}
|
||||
- {id: 40, cat: TV/HD, desc: "2160p 4K UltraHD"}
|
||||
- {id: 38, cat: XXX, desc: "xXx"}
|
||||
- {id: 43, cat: Other, desc: "Arabic for social"}
|
||||
|
||||
# MUSICA
|
||||
- {id: 17, cat: Audio, desc: "Italian music"}
|
||||
- {id: 45, cat: Audio, desc: "Discography"}
|
||||
- {id: 18, cat: Audio, desc: "MusicaInternazionale"}
|
||||
- {id: 19, cat: Audio, desc: "Compilation"}
|
||||
|
||||
# PDF
|
||||
- {id: 21, cat: Books, desc: "Ebook"}
|
||||
- {id: 22, cat: Books/Comics, desc: "Comics"}
|
||||
- {id: 23, cat: Books, desc: "Newsstand"}
|
||||
|
||||
# GAMES
|
||||
- {id: 25, cat: Console/PS4, desc: "Sony Games"}
|
||||
- {id: 26, cat: Console/Xbox, desc: "XboX Games"}
|
||||
- {id: 27, cat: Console/Other, desc: "Nintendo Games"}
|
||||
- {id: 28, cat: PC/Games, desc: "PC Games"}
|
||||
|
||||
# SOFTWARE
|
||||
- {id: 30, cat: PC/ISO, desc: "Windows APP"}
|
||||
- {id: 31, cat: PC/Phone-IOS, desc: "Apple APP"}
|
||||
- {id: 32, cat: PC/Phone-Android, desc: "Android APP"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: body[onLoad^="makeAlert('"]
|
||||
message:
|
||||
selector: body[onLoad^="makeAlert('"]
|
||||
attribute: onLoad
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["makeAlert('Error' , '", ""]
|
||||
- name: replace
|
||||
args: ["');", ""]
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
before:
|
||||
path: "thanks.php"
|
||||
method: "post"
|
||||
inputs:
|
||||
infohash: "{{ .DownloadUri.Query.id }}"
|
||||
thanks: "1"
|
||||
rndval: "1487013827343"
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBIDShort }}{{else}}{{ .Keywords }}{{end}}"
|
||||
page: "torrents"
|
||||
category: "{{range .Categories}}{{.}};{{end}}"
|
||||
options: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
active: "0"
|
||||
rows:
|
||||
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="index.php?page=downloadcheck&id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
banner:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.*?) "
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
details:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-last-child(4)
|
||||
date:
|
||||
selector: td:nth-last-child(9)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +01:00"
|
||||
- name: dateparse
|
||||
args: "02/01/2006 -07:00"
|
||||
grabs:
|
||||
selector: td:nth-last-child(6)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
seeders:
|
||||
selector: td:nth-last-child(8)
|
||||
leechers:
|
||||
selector: td:nth-last-child(7)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="Gold 100% Free"]: "0"
|
||||
img[alt="Silver 50% Free"]: "0.5"
|
||||
img[alt="Bronze 25% Free"]: "0.75"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[alt="2x Upload Multiplier"]: "2"
|
||||
img[alt="3x Upload Multiplier"]: "3"
|
||||
img[alt="4x Upload Multiplier"]: "4"
|
||||
img[alt="5x Upload Multiplier"]: "5"
|
||||
img[alt="6x Upload Multiplier"]: "6"
|
||||
img[alt="7x Upload Multiplier"]: "7"
|
||||
img[alt="8x Upload Multiplier"]: "8"
|
||||
img[alt="9x Upload Multiplier"]: "9"
|
||||
img[alt="10x Upload Multiplier"]: "10"
|
||||
"*": "1"
|
||||
---
|
||||
site: arabafenice
|
||||
name: ArabaFenice
|
||||
language: it-it
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.arabafenice.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# HRS
|
||||
- {id: 34, cat: Movies/HD, desc: "1080p HRS x264"}
|
||||
- {id: 47, cat: Movies/HD, desc: "2160p 4k UltraHD HRS"}
|
||||
- {id: 35, cat: TV, desc: "Serie TV HRS"}
|
||||
- {id: 36, cat: Movies/SD, desc: "DVDRip HRS"}
|
||||
- {id: 41, cat: Movies/SD, desc: "BDRip 576p HRS"}
|
||||
- {id: 39, cat: Movies/HD, desc: "1080p HRS x265 HEVC"}
|
||||
|
||||
# VIDEO
|
||||
- {id: 1, cat: Movies, desc: "News Cinema"}
|
||||
- {id: 2, cat: Movies/SD, desc: "BD-DVDRip"}
|
||||
- {id: 3, cat: Movies/DVD, desc: "DVD 5"}
|
||||
- {id: 5, cat: Movies/DVD, desc: "DVD 9"}
|
||||
- {id: 6, cat: Movies/BluRay, desc: "BluRay Full"}
|
||||
- {id: 4, cat: Movies/HD, desc: "1080p 3D x264"}
|
||||
- {id: 7, cat: Movies/HD, desc: "1080p x264"}
|
||||
- {id: 46, cat: Movies/HD, desc: "1080p Video Untouch"}
|
||||
- {id: 44, cat: Movies/HD, desc: "1080p x265"}
|
||||
- {id: 9, cat: TV/Anime, desc: "Cartoons"}
|
||||
- {id: 8, cat: TV/Anime, desc: "720p x264"}
|
||||
- {id: 12, cat: TV, desc: "He concluded seasons"}
|
||||
- {id: 13, cat: TV, desc: "Seasons in Onda"}
|
||||
- {id: 14, cat: TV, desc: "TV Show"}
|
||||
- {id: 42, cat: TV, desc: "Serie Tv Sub Ita"}
|
||||
- {id: 15, cat: TV/Documentary, desc: "documentaries"}
|
||||
- {id: 33, cat: TV, desc: "mp4"}
|
||||
- {id: 40, cat: TV/HD, desc: "2160p 4K UltraHD"}
|
||||
- {id: 38, cat: XXX, desc: "xXx"}
|
||||
- {id: 43, cat: Other, desc: "Arabic for social"}
|
||||
|
||||
# MUSICA
|
||||
- {id: 17, cat: Audio, desc: "Italian music"}
|
||||
- {id: 45, cat: Audio, desc: "Discography"}
|
||||
- {id: 18, cat: Audio, desc: "MusicaInternazionale"}
|
||||
- {id: 19, cat: Audio, desc: "Compilation"}
|
||||
|
||||
# PDF
|
||||
- {id: 21, cat: Books, desc: "Ebook"}
|
||||
- {id: 22, cat: Books/Comics, desc: "Comics"}
|
||||
- {id: 23, cat: Books, desc: "Newsstand"}
|
||||
|
||||
# GAMES
|
||||
- {id: 25, cat: Console/PS4, desc: "Sony Games"}
|
||||
- {id: 26, cat: Console/Xbox, desc: "XboX Games"}
|
||||
- {id: 27, cat: Console/Other, desc: "Nintendo Games"}
|
||||
- {id: 28, cat: PC/Games, desc: "PC Games"}
|
||||
|
||||
# SOFTWARE
|
||||
- {id: 30, cat: PC/ISO, desc: "Windows APP"}
|
||||
- {id: 31, cat: PC/Phone-IOS, desc: "Apple APP"}
|
||||
- {id: 32, cat: PC/Phone-Android, desc: "Android APP"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: body[onLoad^="makeAlert('"]
|
||||
message:
|
||||
selector: body[onLoad^="makeAlert('"]
|
||||
attribute: onLoad
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["makeAlert('Error' , '", ""]
|
||||
- name: replace
|
||||
args: ["');", ""]
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
before:
|
||||
path: "thanks.php"
|
||||
method: "post"
|
||||
inputs:
|
||||
infohash: "{{ .DownloadUri.Query.id }}"
|
||||
thanks: "1"
|
||||
rndval: "1487013827343"
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBIDShort }}{{else}}{{ .Keywords }}{{end}}"
|
||||
page: "torrents"
|
||||
category: "{{range .Categories}}{{.}};{{end}}"
|
||||
options: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
active: "0"
|
||||
rows:
|
||||
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="index.php?page=downloadcheck&id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
banner:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.*?) "
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
details:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-last-child(4)
|
||||
date:
|
||||
selector: td:nth-last-child(9)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +01:00"
|
||||
- name: dateparse
|
||||
args: "02/01/2006 -07:00"
|
||||
grabs:
|
||||
selector: td:nth-last-child(6)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
seeders:
|
||||
selector: td:nth-last-child(8)
|
||||
leechers:
|
||||
selector: td:nth-last-child(7)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="Gold 100% Free"]: "0"
|
||||
img[alt="Silver 50% Free"]: "0.5"
|
||||
img[alt="Bronze 25% Free"]: "0.75"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[alt="2x Upload Multiplier"]: "2"
|
||||
img[alt="3x Upload Multiplier"]: "3"
|
||||
img[alt="4x Upload Multiplier"]: "4"
|
||||
img[alt="5x Upload Multiplier"]: "5"
|
||||
img[alt="6x Upload Multiplier"]: "6"
|
||||
img[alt="7x Upload Multiplier"]: "7"
|
||||
img[alt="8x Upload Multiplier"]: "8"
|
||||
img[alt="9x Upload Multiplier"]: "9"
|
||||
img[alt="10x Upload Multiplier"]: "10"
|
||||
"*": "1"
|
||||
|
||||
109
src/Jackett/Definitions/ast4u.yml
Normal file
109
src/Jackett/Definitions/ast4u.yml
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
site: ast4u
|
||||
name: AST4u
|
||||
language: de-de
|
||||
type: private
|
||||
encoding: iso-8859-1
|
||||
links:
|
||||
- https://www.ast4u.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 35, cat: TV/Anime, desc: "Anime Movie"}
|
||||
- {id: 36, cat: TV/Anime, desc: "Anime Serie"}
|
||||
- {id: 37, cat: Audio/Foreign, desc: "Anime Musik"}
|
||||
- {id: 41, cat: Books, desc: "Anime Pic & Manga"}
|
||||
- {id: 42, cat: XXX, desc: "Hentai Movie & OVA"}
|
||||
- {id: 43, cat: XXX, desc: "Hentai Serie"}
|
||||
- {id: 44, cat: PC, desc: "Hentai Game"}
|
||||
- {id: 45, cat: Movies, desc: "Cartoon Movie"}
|
||||
- {id: 46, cat: TV, desc: "Cartoon Serie"}
|
||||
- {id: 47, cat: TV, desc: "TV-Serie"}
|
||||
- {id: 49, cat: TV/Documentary, desc: "Sonstiges Doku"}
|
||||
- {id: 50, cat: Audio, desc: "Sonstiges Soundtrack"}
|
||||
- {id: 52, cat: Movies/HD, desc: "Movie HD"}
|
||||
- {id: 53, cat: Other, desc: "Sonstiges"}
|
||||
- {id: 55, cat: Movies/Foreign, desc: "Movie Asia & MartialArts"}
|
||||
- {id: 56, cat: TV/Anime, desc: "Anime OVA"}
|
||||
- {id: 58, cat: Movies, desc: "Movie"}
|
||||
- {id: 59, cat: Audio/Audiobook, desc: "Sonstiges Hoerspiele"}
|
||||
- {id: 62, cat: Console, desc: "Sonstiges Game"}
|
||||
- {id: 65, cat: Movies/BluRay, desc: "Movie BluRay"}
|
||||
- {id: 66, cat: TV, desc: "TV-Serie BluRay"}
|
||||
- {id: 67, cat: TV/HD, desc: "TV-Serie HD"}
|
||||
- {id: 68, cat: TV/Anime, desc: "Anime Movie HD & BD"}
|
||||
- {id: 69, cat: TV/Anime, desc: "Anime OVA HD & BD"}
|
||||
- {id: 70, cat: TV/Anime, desc: "Anime Serie HD & BD"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
returnto: "/index.php"
|
||||
test:
|
||||
path: browse.php
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "0"
|
||||
orderby: "added"
|
||||
sort: "desc"
|
||||
|
||||
rows:
|
||||
selector: table.tableinborder > tbody > tr:has(a[href^="details.php"])
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php"]
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^=" /gettorrent/ssl/"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(2)
|
||||
grabs:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
|
||||
size:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(1)
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
seeders:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > b:nth-child(1)
|
||||
leechers:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > b:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +2:00"
|
||||
- name: replace
|
||||
args: ["\xA0", " "]
|
||||
- name: dateparse
|
||||
args: "02.01.2006 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="/pic/free.gif"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,136 +1,136 @@
|
||||
---
|
||||
site: audiobooktorrents
|
||||
name: Audiobook Torrents
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://abtorrents.me
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 10, cat: Audio/Audiobook, desc: "Adventure"}
|
||||
- {id: 20, cat: Audio/Audiobook, desc: "Biographies & Memoirs"}
|
||||
- {id: 30, cat: Audio/Audiobook, desc: "Business "}
|
||||
- {id: 40, cat: Audio/Audiobook, desc: "Childrens"}
|
||||
- {id: 50, cat: Audio/Audiobook, desc: "Comedy"}
|
||||
- {id: 60, cat: Audio/Audiobook, desc: "Comics"}
|
||||
- {id: 70, cat: Audio/Audiobook, desc: "Computers "}
|
||||
- {id: 80, cat: Audio/Audiobook, desc: "Erotica"}
|
||||
- {id: 90, cat: Audio/Audiobook, desc: "Fantasy-General"}
|
||||
- {id: 100, cat: Audio/Audiobook, desc: "Fantasy-Youth"}
|
||||
- {id: 110, cat: Audio/Audiobook, desc: "Files"}
|
||||
- {id: 120, cat: Audio/Audiobook, desc: "Foreign Language"}
|
||||
- {id: 130, cat: Audio/Audiobook, desc: "General Fiction"}
|
||||
- {id: 140, cat: Audio/Audiobook, desc: "Historical Fiction"}
|
||||
- {id: 150, cat: Audio/Audiobook, desc: "History"}
|
||||
- {id: 160, cat: Audio/Audiobook, desc: "Horror"}
|
||||
- {id: 170, cat: Audio/Audiobook, desc: "Literature "}
|
||||
- {id: 180, cat: Audio/Audiobook, desc: "Mystery "}
|
||||
- {id: 190, cat: Audio/Audiobook, desc: "Non-Fiction"}
|
||||
- {id: 200, cat: Audio/Audiobook, desc: "Radio Drama"}
|
||||
- {id: 210, cat: Audio/Audiobook, desc: "Romance"}
|
||||
- {id: 235, cat: Audio/Audiobook, desc: "Sci-Fi Apocalypse"}
|
||||
- {id: 220, cat: Audio/Audiobook, desc: "Science"}
|
||||
- {id: 230, cat: Audio/Audiobook, desc: "Science Fiction "}
|
||||
- {id: 240, cat: Audio/Audiobook, desc: "Self Improvement"}
|
||||
- {id: 250, cat: Audio/Audiobook, desc: "Suspense"}
|
||||
- {id: 260, cat: Audio/Audiobook, desc: "Talk Radio"}
|
||||
- {id: 245, cat: Audio/Audiobook, desc: "Thriller"}
|
||||
- {id: 270, cat: Audio/Audiobook, desc: "Urban Fantasy"}
|
||||
- {id: 280, cat: Audio/Audiobook, desc: "Western"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
use_ssl: "1"
|
||||
perm_ssl: "1"
|
||||
submitme: "X"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("Oops"))
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
searchin: "title"
|
||||
incldead: "1"
|
||||
rows:
|
||||
selector: tr.browse_color, tr.freeleech_color, tr[id^="kdescr"]
|
||||
after: 1
|
||||
fields:
|
||||
banner:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=\'(.*?)\'
|
||||
title:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: Tip\('<b>(.*?)</b>
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(4)
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
date:
|
||||
selector: td:nth-child(6)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"a.info > b:contains(\"[FREE]\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: <br /><b>(.*?)</b><br />
|
||||
description:
|
||||
selector: td:nth-child(2) > i
|
||||
optional: true
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "{{ .Result.description }}<br>\n"
|
||||
description:
|
||||
selector: td[colspan=13]
|
||||
filters:
|
||||
- name: prepend
|
||||
---
|
||||
site: audiobooktorrents
|
||||
name: Audiobook Torrents
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://abtorrents.me
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 10, cat: Audio/Audiobook, desc: "Adventure"}
|
||||
- {id: 20, cat: Audio/Audiobook, desc: "Biographies & Memoirs"}
|
||||
- {id: 30, cat: Audio/Audiobook, desc: "Business "}
|
||||
- {id: 40, cat: Audio/Audiobook, desc: "Childrens"}
|
||||
- {id: 50, cat: Audio/Audiobook, desc: "Comedy"}
|
||||
- {id: 60, cat: Audio/Audiobook, desc: "Comics"}
|
||||
- {id: 70, cat: Audio/Audiobook, desc: "Computers "}
|
||||
- {id: 80, cat: Audio/Audiobook, desc: "Erotica"}
|
||||
- {id: 90, cat: Audio/Audiobook, desc: "Fantasy-General"}
|
||||
- {id: 100, cat: Audio/Audiobook, desc: "Fantasy-Youth"}
|
||||
- {id: 110, cat: Audio/Audiobook, desc: "Files"}
|
||||
- {id: 120, cat: Audio/Audiobook, desc: "Foreign Language"}
|
||||
- {id: 130, cat: Audio/Audiobook, desc: "General Fiction"}
|
||||
- {id: 140, cat: Audio/Audiobook, desc: "Historical Fiction"}
|
||||
- {id: 150, cat: Audio/Audiobook, desc: "History"}
|
||||
- {id: 160, cat: Audio/Audiobook, desc: "Horror"}
|
||||
- {id: 170, cat: Audio/Audiobook, desc: "Literature "}
|
||||
- {id: 180, cat: Audio/Audiobook, desc: "Mystery "}
|
||||
- {id: 190, cat: Audio/Audiobook, desc: "Non-Fiction"}
|
||||
- {id: 200, cat: Audio/Audiobook, desc: "Radio Drama"}
|
||||
- {id: 210, cat: Audio/Audiobook, desc: "Romance"}
|
||||
- {id: 235, cat: Audio/Audiobook, desc: "Sci-Fi Apocalypse"}
|
||||
- {id: 220, cat: Audio/Audiobook, desc: "Science"}
|
||||
- {id: 230, cat: Audio/Audiobook, desc: "Science Fiction "}
|
||||
- {id: 240, cat: Audio/Audiobook, desc: "Self Improvement"}
|
||||
- {id: 250, cat: Audio/Audiobook, desc: "Suspense"}
|
||||
- {id: 260, cat: Audio/Audiobook, desc: "Talk Radio"}
|
||||
- {id: 245, cat: Audio/Audiobook, desc: "Thriller"}
|
||||
- {id: 270, cat: Audio/Audiobook, desc: "Urban Fantasy"}
|
||||
- {id: 280, cat: Audio/Audiobook, desc: "Western"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
use_ssl: "1"
|
||||
perm_ssl: "1"
|
||||
submitme: "X"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("Oops"))
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
searchin: "title"
|
||||
incldead: "1"
|
||||
rows:
|
||||
selector: tr.browse_color, tr.freeleech_color, tr[id^="kdescr"]
|
||||
after: 1
|
||||
fields:
|
||||
banner:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=\'(.*?)\'
|
||||
title:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: Tip\('<b>(.*?)</b>
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(4)
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
date:
|
||||
selector: td:nth-child(6)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"a.info > b:contains(\"[FREE]\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description:
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: <br /><b>(.*?)</b><br />
|
||||
description:
|
||||
selector: td:nth-child(2) > i
|
||||
optional: true
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "{{ .Result.description }}<br>\n"
|
||||
description:
|
||||
selector: td[colspan=13]
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "{{ .Result.description }}<br>\n"
|
||||
68
src/Jackett/Definitions/awesomehd.yml
Executable file
68
src/Jackett/Definitions/awesomehd.yml
Executable file
@@ -0,0 +1,68 @@
|
||||
---
|
||||
site: awesomehd
|
||||
name: Awesome-HD
|
||||
description: "An HD tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://awesome-hd.me
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies/HD, desc: "Movies"}
|
||||
- {id: 2, cat: TV/HD, desc: "TV-Shows"}
|
||||
|
||||
modes:
|
||||
searchstr: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
page: torrents
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.group, tr.torrent, tr.group_torrent:not(.edition_info)
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
optional: true
|
||||
details:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: td:nth-child(3) > a
|
||||
category:
|
||||
selector: td:nth-child(2)
|
||||
# files:
|
||||
# selector: td:nth-child(4)
|
||||
date:
|
||||
selector: td:nth-last-child(5)
|
||||
size:
|
||||
selector: td:nth-last-child(4)
|
||||
grabs:
|
||||
selector: td:nth-last-child(3)
|
||||
seeders:
|
||||
selector: td:nth-last-child(2)
|
||||
leechers:
|
||||
selector: td:nth-last-child(1)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
264
src/Jackett/Definitions/b2s-share.yml
Normal file
264
src/Jackett/Definitions/b2s-share.yml
Normal file
@@ -0,0 +1,264 @@
|
||||
---
|
||||
site: b2s-share
|
||||
name: B2S-Share
|
||||
language: pt-br
|
||||
type: private
|
||||
encoding: iso-8859-1
|
||||
links:
|
||||
- http://www.b2s-share.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
#3D
|
||||
- {id: 141, cat: Movies/3D, desc: "3D Ação"}
|
||||
- {id: 142, cat: Movies/3D, desc: "3D Animação"}
|
||||
- {id: 143, cat: Movies/3D, desc: "3D Aventura"}
|
||||
- {id: 144, cat: Movies/3D, desc: "3D Clássico"}
|
||||
- {id: 145, cat: Movies/3D, desc: "3D Comédia"}
|
||||
- {id: 146, cat: Movies/3D, desc: "3D Documentário"}
|
||||
- {id: 147, cat: Movies/3D, desc: "3D Drama"}
|
||||
- {id: 149, cat: Movies/3D, desc: "3D Ficção"}
|
||||
- {id: 150, cat: Movies/3D, desc: "3D Guerra"}
|
||||
- {id: 151, cat: Movies/3D, desc: "3D Infantil"}
|
||||
- {id: 152, cat: Movies/3D, desc: "3D Musical"}
|
||||
- {id: 154, cat: Movies/3D, desc: "3D Outros"}
|
||||
- {id: 155, cat: Movies/3D, desc: "3D Policial"}
|
||||
- {id: 156, cat: Movies/3D, desc: "3D Religioso"}
|
||||
- {id: 157, cat: Movies/3D, desc: "3D Romance"}
|
||||
- {id: 158, cat: Movies/3D, desc: "3D Shows"}
|
||||
- {id: 159, cat: Movies/3D, desc: "3D Suspense"}
|
||||
- {id: 160, cat: Movies/3D, desc: "3D Terror"}
|
||||
- {id: 161, cat: Movies/3D, desc: "3D Thriller"}
|
||||
- {id: 162, cat: Movies/3D, desc: "3D Western"}
|
||||
|
||||
#4K
|
||||
- {id: 173, cat: Movies, desc: "4K Ação"}
|
||||
- {id: 191, cat: Movies, desc: "4K Animação"}
|
||||
- {id: 190, cat: Movies, desc: "4K Aventura"}
|
||||
- {id: 188, cat: Movies, desc: "4K Clássico"}
|
||||
- {id: 175, cat: Movies, desc: "4K Comédia"}
|
||||
- {id: 186, cat: Movies, desc: "4K Documentário"}
|
||||
- {id: 185, cat: Movies, desc: "4K Drama"}
|
||||
- {id: 177, cat: Movies, desc: "4K Ficção"}
|
||||
- {id: 178, cat: Movies, desc: "4K Guerra"}
|
||||
- {id: 179, cat: Movies, desc: "4K Infantil"}
|
||||
- {id: 180, cat: Movies, desc: "4K Musical"}
|
||||
- {id: 184, cat: Movies, desc: "4K Outros"}
|
||||
- {id: 176, cat: Movies, desc: "4K Policial"}
|
||||
- {id: 187, cat: Movies, desc: "4K Religioso"}
|
||||
- {id: 174, cat: Movies, desc: "4K Romance"}
|
||||
- {id: 181, cat: Movies, desc: "4K Shows"}
|
||||
- {id: 182, cat: Movies, desc: "4K Suspense"}
|
||||
- {id: 189, cat: Movies, desc: "4K Terror"}
|
||||
- {id: 183, cat: Movies, desc: "4K Thriller"}
|
||||
|
||||
#ANIME
|
||||
- {id: 11, cat: TV/Anime, desc: "Anime"}
|
||||
|
||||
#PC-APPS
|
||||
- {id: 2, cat: PC, desc: "PC APPS - Linux"}
|
||||
- {id: 3, cat: PC, desc: "PC APPS - Mac"}
|
||||
- {id: 33, cat: PC, desc: "PC APPS - Portateis"}
|
||||
- {id: 1, cat: PC, desc: "PC APPS - Windows"}
|
||||
|
||||
#BD-R
|
||||
- {id: 140, cat: Movies, desc: "BD-R Autorado"}
|
||||
- {id: 119, cat: Movies, desc: "BD-R"}
|
||||
|
||||
#MOBILE
|
||||
- {id: 163, cat: Other, desc: "Mobile App/Jogos-Android"}
|
||||
- {id: 164, cat: Other, desc: "Mobile App/Jogos-iPhone"}
|
||||
- {id: 93, cat: Other, desc: "Mobile App/Jogos-Java"}
|
||||
- {id: 169, cat: Other, desc: "Mobile App/Jogos-Outros"}
|
||||
- {id: 168, cat: Other, desc: "Mobile App/Jogos-Win"}
|
||||
- {id: 92, cat: Other, desc: "Mobile Filmes"}
|
||||
- {id: 118, cat: Other, desc: "Mobile Séries"}
|
||||
- {id: 94, cat: Other, desc: "Mobile Wallpapers"}
|
||||
|
||||
#CARTOON
|
||||
- {id: 172, cat: TV/Other, desc: "Desenho Animado"}
|
||||
|
||||
#OTHER
|
||||
- {id: 4, cat: Other, desc: "Apostilas/Cursos"}
|
||||
- {id: 12, cat: Books, desc: "Diversos"}
|
||||
- {id: 167, cat: Books, desc: "E-book/Livros"}
|
||||
- {id: 7, cat: PC/Games, desc: "Emuladores / Roms"}
|
||||
- {id: 166, cat: Books/Comics, desc: "HQ"}
|
||||
- {id: 165, cat: Books, desc: "Revistas"}
|
||||
|
||||
#DVD-R
|
||||
- {id: 41, cat: Movies/SD, desc: "DVD-R Autorado"}
|
||||
- {id: 32, cat: Movies/SD, desc: "DVD-R"}
|
||||
|
||||
#MOVIES
|
||||
- {id: 14, cat: Movies, desc: "Filmes Ação"}
|
||||
- {id: 99, cat: Movies, desc: "Filmes Animação"}
|
||||
- {id: 15, cat: Movies, desc: "Filmes Aventura"}
|
||||
- {id: 16, cat: Movies, desc: "Filmes Clássico"}
|
||||
- {id: 17, cat: Movies, desc: "Filmes Comédia"}
|
||||
- {id: 31, cat: Movies, desc: "Filmes Documentário"}
|
||||
- {id: 18, cat: Movies, desc: "Filmes Drama"}
|
||||
- {id: 19, cat: Movies, desc: "Filmes Ficção"}
|
||||
- {id: 20, cat: Movies, desc: "Filmes Guerra"}
|
||||
- {id: 126, cat: Movies, desc: "Filmes Infantil"}
|
||||
- {id: 96, cat: Movies, desc: "Filmes Musical"}
|
||||
- {id: 24, cat: Movies, desc: "Filmes Outros"}
|
||||
- {id: 40, cat: Movies, desc: "Filmes Policial"}
|
||||
- {id: 39, cat: Movies, desc: "Filmes Religioso"}
|
||||
- {id: 30, cat: Movies, desc: "Filmes Romance"}
|
||||
- {id: 22, cat: Movies, desc: "Filmes Suspense"}
|
||||
- {id: 23, cat: Movies, desc: "Filmes Terror"}
|
||||
- {id: 130, cat: Movies, desc: "Filmes Thriller"}
|
||||
- {id: 131, cat: Movies, desc: "Filmes Western"}
|
||||
- {id: 34, cat: Movies, desc: "Filmes x264"}
|
||||
|
||||
#HD-1080p
|
||||
- {id: 73, cat: Movies/HD, desc: "Filmes 1080p Ação"}
|
||||
- {id: 87, cat: Movies/HD, desc: "Filmes 1080p Animação"}
|
||||
- {id: 74, cat: Movies/HD, desc: "Filmes 1080p Aventura"}
|
||||
- {id: 75, cat: Movies/HD, desc: "Filmes 1080p Clássico"}
|
||||
- {id: 76, cat: Movies/HD, desc: "Filmes 1080p Comédia"}
|
||||
- {id: 77, cat: Movies/HD, desc: "Filmes 1080p Documentário"}
|
||||
- {id: 78, cat: Movies/HD, desc: "Filmes 1080p Drama"}
|
||||
- {id: 79, cat: Movies/HD, desc: "Filmes 1080p Ficção"}
|
||||
- {id: 80, cat: Movies/HD, desc: "Filmes 1080p Guerra"}
|
||||
- {id: 127, cat: Movies/HD, desc: "Filmes 1080p Infantil"}
|
||||
- {id: 97, cat: Movies/HD, desc: "Filmes 1080p Musical"}
|
||||
- {id: 63, cat: Movies/HD, desc: "Filmes 1080p Outros"}
|
||||
- {id: 82, cat: Movies/HD, desc: "Filmes 1080p Policial"}
|
||||
- {id: 83, cat: Movies/HD, desc: "Filmes 1080p Religioso"}
|
||||
- {id: 84, cat: Movies/HD, desc: "Filmes 1080p Romance"}
|
||||
- {id: 88, cat: Movies/HD, desc: "Filmes 1080p Shows"}
|
||||
- {id: 85, cat: Movies/HD, desc: "Filmes 1080p Suspense"}
|
||||
- {id: 86, cat: Movies/HD, desc: "Filmes 1080p Terror"}
|
||||
- {id: 132, cat: Movies/HD, desc: "Filmes 1080p Thriller"}
|
||||
- {id: 135, cat: Movies/HD, desc: "Filmes 1080p Western"}
|
||||
|
||||
#HD-720p
|
||||
- {id: 58, cat: Movies/HD, desc: "Filmes 720p Ação"}
|
||||
- {id: 89, cat: Movies/HD, desc: "Filmes 720p Animação"}
|
||||
- {id: 60, cat: Movies/HD, desc: "Filmes 720p Aventura"}
|
||||
- {id: 61, cat: Movies/HD, desc: "Filmes 720p Clássico"}
|
||||
- {id: 62, cat: Movies/HD, desc: "Filmes 720p Comédia"}
|
||||
- {id: 72, cat: Movies/HD, desc: "Filmes 720p Documentário"}
|
||||
- {id: 64, cat: Movies/HD, desc: "Filmes 720p Drama"}
|
||||
- {id: 65, cat: Movies/HD, desc: "Filmes 720p Ficção"}
|
||||
- {id: 66, cat: Movies/HD, desc: "Filmes 720p Guerra"}
|
||||
- {id: 129, cat: Movies/HD, desc: "Filmes 720p Infantil"}
|
||||
- {id: 98, cat: Movies/HD, desc: "Filmes 720p Musical"}
|
||||
- {id: 59, cat: Movies/HD, desc: "Filmes 720p Outros"}
|
||||
- {id: 70, cat: Movies/HD, desc: "Filmes 720p Policial"}
|
||||
- {id: 57, cat: Movies/HD, desc: "Filmes 720p Religioso"}
|
||||
- {id: 71, cat: Movies/HD, desc: "Filmes 720p Romance"}
|
||||
- {id: 90, cat: Movies/HD, desc: "Filmes 720p Shows"}
|
||||
- {id: 68, cat: Movies/HD, desc: "Filmes 720p Suspense"}
|
||||
- {id: 69, cat: Movies/HD, desc: "Filmes 720p Terror"}
|
||||
- {id: 134, cat: Movies/HD, desc: "Filmes 720p Thriller"}
|
||||
- {id: 137, cat: Movies/HD, desc: "Filmes 720p Western"}
|
||||
|
||||
#GAMES
|
||||
- {id: 6, cat: Console, desc: "Jogos Console"}
|
||||
- {id: 51, cat: PC/Games, desc: "Jogos Emuladores"}
|
||||
- {id: 44, cat: Console, desc: "Jogos Gamecube"}
|
||||
- {id: 43, cat: Console/NDS, desc: "Jogos Nintendo DS"}
|
||||
- {id: 52, cat: Console, desc: "Jogos Outros"}
|
||||
- {id: 5, cat: PC/Games, desc: "Jogos PC"}
|
||||
- {id: 47, cat: Console, desc: "Jogos PS2"}
|
||||
- {id: 48, cat: Console, desc: "Jogos PS3"}
|
||||
- {id: 170, cat: Console, desc: "Jogos PS4"}
|
||||
- {id: 46, cat: Console, desc: "Jogos PSP"}
|
||||
- {id: 45, cat: Console/Wii, desc: "Jogos Wii"}
|
||||
- {id: 49, cat: Console/Xbox, desc: "Jogos XBOX"}
|
||||
- {id: 50, cat: Console/Xbox 360, desc: "Jogos XBOX360"}
|
||||
- {id: 171, cat: Console, desc: "Jogos XBOXONE"}
|
||||
|
||||
#MUSIC
|
||||
- {id: 29, cat: Audio, desc: "Musica Discografia"}
|
||||
- {id: 28, cat: Audio, desc: "Musica Gospel"}
|
||||
- {id: 139, cat: Audio, desc: "Musica Infantil"}
|
||||
- {id: 27, cat: Audio, desc: "Musica Internacionais"}
|
||||
- {id: 26, cat: Audio, desc: "Musica Nacionais"}
|
||||
- {id: 91, cat: Audio, desc: "Musica Outros"}
|
||||
|
||||
#TV-SERIES
|
||||
- {id: 35, cat: TV/HD, desc: "Séries HD"}
|
||||
- {id: 8, cat: TV, desc: "Séries"}
|
||||
|
||||
#SHOWS
|
||||
- {id: 13, cat: Audio/Video, desc: "Show"}
|
||||
- {id: 56, cat: Audio/Video, desc: "Video Clipes"}
|
||||
|
||||
#TV
|
||||
- {id: 53, cat: TV, desc: "Entretenimento"}
|
||||
- {id: 54, cat: TV/Sport, desc: "Esportes"}
|
||||
- {id: 138, cat: TV, desc: "Infantil"}
|
||||
- {id: 55, cat: TV, desc: "Jornalismo"}
|
||||
|
||||
#XXX
|
||||
- {id: 36, cat: XXX/Other, desc: "Anime Hentai"}
|
||||
- {id: 10, cat: XXX, desc: "Filmes Adultos"}
|
||||
- {id: 37, cat: XXX/Other, desc: "XXX Fotos"}
|
||||
- {id: 95, cat: XXX/Other, desc: "XXX Revistas"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
search:
|
||||
path: torrents-search.php
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["[^a-zA-Z0-9]+", "%"]
|
||||
inputs:
|
||||
search: "{{ .Keywords }}"
|
||||
rows:
|
||||
selector: table[class^="ttable_headinner"] > tbody > tr:has(a[href^="torrents-details.php?id="])
|
||||
fields:
|
||||
details:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
download:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrents-details.php", "download.php"]
|
||||
category:
|
||||
selector: a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
date:
|
||||
selector: td:nth-child(2) > span
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["(", ""]
|
||||
- name: replace
|
||||
args: [")", ""]
|
||||
size:
|
||||
selector: td:nth-child(3)
|
||||
grabs:
|
||||
selector: td:nth-child(4) > font > b
|
||||
seeders:
|
||||
selector: td:nth-child(5) > b > font
|
||||
leechers:
|
||||
selector: td:nth-child(6) > font > b
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[alt=\"[free]\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"img[alt=\"[+UP x2]\"]": "2"
|
||||
"*": "1"
|
||||
121
src/Jackett/Definitions/backups.yml
Normal file
121
src/Jackett/Definitions/backups.yml
Normal file
@@ -0,0 +1,121 @@
|
||||
site: backups
|
||||
name: Back-ups
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://back-ups.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 12, cat: Console, desc: "XBOX360"}
|
||||
- {id: 9, cat: TV, desc: "TV-Boxsets"}
|
||||
- {id: 3, cat: PC, desc: "Apps"}
|
||||
- {id: 24, cat: PC, desc: "Apple"}
|
||||
- {id: 11, cat: TV, desc: "TV/x264"}
|
||||
- {id: 23, cat: Console, desc: "Visionary"}
|
||||
- {id: 14, cat: TV/Sport, desc: "WWE"}
|
||||
- {id: 26, cat: Console, desc: "Xbox"}
|
||||
- {id: 13, cat: Console, desc: "XBOX-JTAG"}
|
||||
- {id: 35, cat: Movies/Other, desc: "Anime"}
|
||||
- {id: 4, cat: Movies/BluRay, desc: "Blu-Ray"}
|
||||
- {id: 6, cat: Movies, desc: "Movies/XVID"}
|
||||
- {id: 10, cat: TV, desc: "TV/Xvid"}
|
||||
- {id: 29, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 40, cat: TV, desc: "Soaps"}
|
||||
- {id: 27, cat: Console, desc: "Roms and Emulators"}
|
||||
- {id: 30, cat: Console, desc: "Playstation"}
|
||||
- {id: 7, cat: Audio, desc: "Music"}
|
||||
- {id: 16, cat: TV/Documentary, desc: "Docu"}
|
||||
- {id: 5, cat: Books, desc: "EBooks"}
|
||||
- {id: 38, cat: Console, desc: "Hyperspin Bolt-on Edition"}
|
||||
- {id: 34, cat: TV, desc: "Kids"}
|
||||
- {id: 8, cat: PC/Games, desc: "PC Games"}
|
||||
- {id: 22, cat: PC/Games, desc: "CoinOPS"}
|
||||
- {id: 33, cat: TV/Sport, desc: "MMA/Boxing"}
|
||||
- {id: 32, cat: Movies, desc: "Movie Pack"}
|
||||
- {id: 31, cat: Console, desc: "Nintendo"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: /takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td:contains("remaining tries")
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href*="/logout.php"]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
keywordsfilters:
|
||||
# remove words <= 3 characters and surrounding special characters
|
||||
- name: re_replace
|
||||
args: ["(?:^|\\s)[_\\+\\/\\.\\-\\(\\)]*[\\S]{0,3}[_\\+\\/\\.\\-\\(\\)]*(?:\\s|$)", " "]
|
||||
inputs:
|
||||
do: "search"
|
||||
keywords: "{{ .Keywords }}"
|
||||
search_type: "t_name"
|
||||
category: "0" # multi cat search not supported
|
||||
include_dead_torrents: "yes"
|
||||
rows:
|
||||
selector: table#sortabletable > tbody > tr:has(a[href*="/details.php?id="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
args: 66
|
||||
fields:
|
||||
title:
|
||||
selector: a[href*="/details.php?id="]
|
||||
title:
|
||||
optional: true
|
||||
selector: div.tooltip-content > div
|
||||
details:
|
||||
selector: a[href*="/details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="/download.php?id="]
|
||||
attribute: href
|
||||
magnet:
|
||||
selector: a[href^="magnet:?xt="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href*="/browse.php?category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
date:
|
||||
selector: "td:nth-child(2) > div:has(span[style=\"float: right;\"])"
|
||||
remove: span
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00"
|
||||
- name: dateparse
|
||||
args: "02-01-2006 15:04 -07:00"
|
||||
banner:
|
||||
optional: true
|
||||
selector: div.tooltip-content > img
|
||||
attribute: src
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt^="Free Torrent "]: "0"
|
||||
img[alt^="Silver Torrent "]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,101 +1,97 @@
|
||||
---
|
||||
site: bigtorrent
|
||||
name: BIGTorrent
|
||||
description: "ratio-free Hungarian tracker"
|
||||
language: hu
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.bigtorrent.eu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 24533, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 47, cat: Other, desc: "Other"}
|
||||
- {id: 24541, cat: Movies/DVD, desc: "Film DVD English"}
|
||||
- {id: 24540, cat: Movies/DVD, desc: "Film DVD Hungarian"}
|
||||
- {id: 24539, cat: Movies/HD, desc: "Film HD English"}
|
||||
- {id: 24538, cat: Movies/HD, desc: "Film HD Hungarian"}
|
||||
- {id: 24537, cat: Movies/SD, desc: "Film SD English"}
|
||||
- {id: 24536, cat: Movies/SD, desc: "Film SD Hungarian"}
|
||||
- {id: 69, cat: PC/Games, desc: "Games ISO"}
|
||||
- {id: 67, cat: PC/Games, desc: "Games Rip"}
|
||||
- {id: 24534, cat: Audio/Audiobook, desc: "Audiobooks"}
|
||||
- {id: 65, cat: Other, desc: "Picture"}
|
||||
- {id: 64, cat: Other, desc: "Video"}
|
||||
- {id: 68, cat: Console/Xbox360, desc: "Video Game Console"}
|
||||
- {id: 63, cat: Books, desc: "English Books"}
|
||||
- {id: 62, cat: Books, desc: "Hungarian Books"}
|
||||
- {id: 74, cat: Audio/Lossless, desc: "Lossless"}
|
||||
- {id: 56, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
- {id: 57, cat: PC, desc: "Programs"}
|
||||
- {id: 24545, cat: TV/HD, desc: "English HD Series"}
|
||||
- {id: 24544, cat: TV/HD, desc: "Hungarian HD Series"}
|
||||
- {id: 24543, cat: TV/SD, desc: "English SD Series"}
|
||||
- {id: 24542, cat: TV/SD, desc: "Hungarian SD Series"}
|
||||
- {id: 24535, cat: XXX, desc: "XXX"}
|
||||
- {id: 59, cat: Audio, desc: "Music"}
|
||||
- {id: 58, cat: Audio, desc: "Hungarian Music"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: /login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
sent: "yes"
|
||||
returnto: "/"
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr:has(a[href^="browse.php?cat="])
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: td:nth-child(2) a
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
files:
|
||||
selector: td:nth-child(5)
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: bigtorrent
|
||||
name: BIGTorrent
|
||||
description: "ratio-free Hungarian tracker"
|
||||
language: hu
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.bigtorrent.eu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 24533, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 47, cat: Other, desc: "Other"}
|
||||
- {id: 24541, cat: Movies/DVD, desc: "Film DVD English"}
|
||||
- {id: 24540, cat: Movies/DVD, desc: "Film DVD Hungarian"}
|
||||
- {id: 24539, cat: Movies/HD, desc: "Film HD English"}
|
||||
- {id: 24538, cat: Movies/HD, desc: "Film HD Hungarian"}
|
||||
- {id: 24537, cat: Movies/SD, desc: "Film SD English"}
|
||||
- {id: 24536, cat: Movies/SD, desc: "Film SD Hungarian"}
|
||||
- {id: 69, cat: PC/Games, desc: "Games ISO"}
|
||||
- {id: 67, cat: PC/Games, desc: "Games Rip"}
|
||||
- {id: 24534, cat: Audio/Audiobook, desc: "Audiobooks"}
|
||||
- {id: 65, cat: Other, desc: "Picture"}
|
||||
- {id: 64, cat: Other, desc: "Video"}
|
||||
- {id: 68, cat: Console/Xbox360, desc: "Video Game Console"}
|
||||
- {id: 63, cat: Books, desc: "English Books"}
|
||||
- {id: 62, cat: Books, desc: "Hungarian Books"}
|
||||
- {id: 74, cat: Audio/Lossless, desc: "Lossless"}
|
||||
- {id: 56, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
- {id: 57, cat: PC, desc: "Programs"}
|
||||
- {id: 24545, cat: TV/HD, desc: "English HD Series"}
|
||||
- {id: 24544, cat: TV/HD, desc: "Hungarian HD Series"}
|
||||
- {id: 24543, cat: TV/SD, desc: "English SD Series"}
|
||||
- {id: 24542, cat: TV/SD, desc: "Hungarian SD Series"}
|
||||
- {id: 24535, cat: XXX, desc: "XXX"}
|
||||
- {id: 59, cat: Audio, desc: "Music"}
|
||||
- {id: 58, cat: Audio, desc: "Hungarian Music"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: /login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
sent: "yes"
|
||||
returnto: "/"
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr:has(a[href^="browse.php?cat="])
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: td:nth-child(2) a
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: bithumen
|
||||
name: BitHUmen
|
||||
language: hu-hu
|
||||
@@ -72,7 +72,8 @@
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
title|optional:
|
||||
title:
|
||||
optional: true
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: title
|
||||
details:
|
||||
@@ -108,14 +109,16 @@
|
||||
selector: td:nth-child(6) > u
|
||||
downloadvolumefactor:
|
||||
text: "1"
|
||||
downloadvolumefactor|optional:
|
||||
downloadvolumefactor:
|
||||
optional: true
|
||||
selector: td:nth-child(6) > nobr > font:contains(" × ")
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["×", ""]
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
uploadvolumefactor|optional:
|
||||
uploadvolumefactor:
|
||||
optional: true
|
||||
selector: td:nth-child(5) > nobr > font:contains(" × ")
|
||||
filters:
|
||||
- name: replace
|
||||
@@ -131,4 +134,3 @@
|
||||
|
||||
description:
|
||||
selector: td:nth-child(2) > div
|
||||
|
||||
@@ -1,133 +1,136 @@
|
||||
---
|
||||
site: bitspyder
|
||||
name: Bitspyder
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
links:
|
||||
- http://bitspyder.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 61, cat: Books, desc: "3D"}
|
||||
- {id: 69, cat: Books, desc: "Anim|GFX"}
|
||||
- {id: 56, cat: Books, desc: "Art"}
|
||||
- {id: 40, cat: Audio/Audiobook, desc: "Audio Books"}
|
||||
- {id: 55, cat: Books, desc: "Business"}
|
||||
- {id: 46, cat: Books, desc: "Career"}
|
||||
- {id: 2, cat: Books, desc: "CBTs"}
|
||||
- {id: 39, cat: Books, desc: "Cert QA"}
|
||||
- {id: 63, cat: Books, desc: "College"}
|
||||
- {id: 53, cat: Books, desc: "Cooking"}
|
||||
- {id: 42, cat: Books, desc: "Documentary"}
|
||||
- {id: 37, cat: Books, desc: "e-Books"}
|
||||
- {id: 65, cat: Books, desc: "Engineering"}
|
||||
- {id: 54, cat: Books, desc: "Health-Fitness"}
|
||||
- {id: 64, cat: Books, desc: "Kids"}
|
||||
- {id: 47, cat: Books, desc: "Languages"}
|
||||
- {id: 49, cat: Books, desc: "Linux CBTs"}
|
||||
- {id: 43, cat: Books, desc: "Lynda.com"}
|
||||
- {id: 57, cat: Books/Magazines, desc: "Magazines"}
|
||||
- {id: 71, cat: Books, desc: "Magic"}
|
||||
- {id: 60, cat: Books, desc: "Medical"}
|
||||
- {id: 44, cat: Books, desc: "Misc Learning"}
|
||||
- {id: 51, cat: Books, desc: "Music Learning"}
|
||||
- {id: 41, cat: Books, desc: "Others"}
|
||||
- {id: 52, cat: Books, desc: "Photography"}
|
||||
- {id: 35, cat: Books, desc: "PPT 'n Docs"}
|
||||
- {id: 38, cat: Books, desc: "Religion"}
|
||||
- {id: 68, cat: Books, desc: "Self Growth"}
|
||||
- {id: 72, cat: Books, desc: "Templates"}
|
||||
- {id: 58, cat: Books, desc: "Total Training"}
|
||||
- {id: 45, cat: Books, desc: "Trainsignal"}
|
||||
- {id: 59, cat: Books, desc: "VTC"}
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: processid.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.msg_info > font > b
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
method: post
|
||||
inputs:
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
rows:
|
||||
selector: table > tbody > tr[class]
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
# there are two styles, we support both
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php/"]
|
||||
- name: replace
|
||||
args: ["&hit=1", "/dummy.torrent"]
|
||||
size:
|
||||
selector: td.rowcol:nth-child(6):has(br), font:contains("Size:") + font
|
||||
files:
|
||||
selector: a[href*="&filelist=1"]
|
||||
grabs:
|
||||
selector: td.rowcol:nth-child(7):has(br)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
seeders:
|
||||
selector: td.rowcol:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td.rowcol:nth-last-child(2)
|
||||
date|optional|1:
|
||||
selector: font[color="5F5F5F"]
|
||||
filters:
|
||||
- name: split
|
||||
args: [" (", 0]
|
||||
- name: replace
|
||||
args: ["\xA0", " "]
|
||||
- name: append
|
||||
args: " +00:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
date|optional|2:
|
||||
selector: a[title^="Upploaded at"]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Upploaded at - ", ""]
|
||||
- name: append
|
||||
args: " +00:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description|optional:
|
||||
selector: font[color="#990000"]
|
||||
---
|
||||
site: bitspyder
|
||||
name: Bitspyder
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
links:
|
||||
- http://bitspyder.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 61, cat: Books, desc: "3D"}
|
||||
- {id: 69, cat: Books, desc: "Anim|GFX"}
|
||||
- {id: 56, cat: Books, desc: "Art"}
|
||||
- {id: 40, cat: Audio/Audiobook, desc: "Audio Books"}
|
||||
- {id: 55, cat: Books, desc: "Business"}
|
||||
- {id: 46, cat: Books, desc: "Career"}
|
||||
- {id: 2, cat: Books, desc: "CBTs"}
|
||||
- {id: 39, cat: Books, desc: "Cert QA"}
|
||||
- {id: 63, cat: Books, desc: "College"}
|
||||
- {id: 53, cat: Books, desc: "Cooking"}
|
||||
- {id: 42, cat: Books, desc: "Documentary"}
|
||||
- {id: 37, cat: Books, desc: "e-Books"}
|
||||
- {id: 65, cat: Books, desc: "Engineering"}
|
||||
- {id: 54, cat: Books, desc: "Health-Fitness"}
|
||||
- {id: 64, cat: Books, desc: "Kids"}
|
||||
- {id: 47, cat: Books, desc: "Languages"}
|
||||
- {id: 49, cat: Books, desc: "Linux CBTs"}
|
||||
- {id: 43, cat: Books, desc: "Lynda.com"}
|
||||
- {id: 57, cat: Books/Magazines, desc: "Magazines"}
|
||||
- {id: 71, cat: Books, desc: "Magic"}
|
||||
- {id: 60, cat: Books, desc: "Medical"}
|
||||
- {id: 44, cat: Books, desc: "Misc Learning"}
|
||||
- {id: 51, cat: Books, desc: "Music Learning"}
|
||||
- {id: 41, cat: Books, desc: "Others"}
|
||||
- {id: 52, cat: Books, desc: "Photography"}
|
||||
- {id: 35, cat: Books, desc: "PPT 'n Docs"}
|
||||
- {id: 38, cat: Books, desc: "Religion"}
|
||||
- {id: 68, cat: Books, desc: "Self Growth"}
|
||||
- {id: 72, cat: Books, desc: "Templates"}
|
||||
- {id: 58, cat: Books, desc: "Total Training"}
|
||||
- {id: 45, cat: Books, desc: "Trainsignal"}
|
||||
- {id: 59, cat: Books, desc: "VTC"}
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: processid.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.msg_info > font > b
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
method: post
|
||||
inputs:
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
rows:
|
||||
selector: table > tbody > tr[class]
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
# there are two styles, we support both
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php/"]
|
||||
- name: replace
|
||||
args: ["&hit=1", "/dummy.torrent"]
|
||||
size:
|
||||
selector: td.rowcol:nth-child(6):has(br), font:contains("Size:") + font
|
||||
files:
|
||||
selector: a[href*="&filelist=1"]
|
||||
grabs:
|
||||
selector: td.rowcol:nth-child(7):has(br)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
seeders:
|
||||
selector: td.rowcol:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td.rowcol:nth-last-child(2)
|
||||
date:
|
||||
optional: true
|
||||
selector: font[color="5F5F5F"]
|
||||
filters:
|
||||
- name: split
|
||||
args: [" (", 0]
|
||||
- name: replace
|
||||
args: ["\xA0", " "]
|
||||
- name: append
|
||||
args: " +00:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
date:
|
||||
optional: true
|
||||
selector: a[title^="Upploaded at"]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Upploaded at - ", ""]
|
||||
- name: append
|
||||
args: " +00:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description:
|
||||
optional: true
|
||||
selector: font[color="#990000"]
|
||||
|
||||
@@ -1,148 +1,148 @@
|
||||
---
|
||||
site: blubits
|
||||
name: Blu-bits
|
||||
description: "A HD tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://blu-bits.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Movies
|
||||
- {id: 14, cat: Movies/BluRay, desc: "Full Blu-ray"}
|
||||
- {id: 54, cat: Movies/HD, desc: "HD-DVD"}
|
||||
- {id: 16, cat: Movies/HD, desc: "Remux"}
|
||||
- {id: 55, cat: Movies/HD, desc: "2160p"}
|
||||
- {id: 15, cat: Movies/HD, desc: "1080p"}
|
||||
- {id: 19, cat: Movies/HD, desc: "1080i"}
|
||||
- {id: 18, cat: Movies/HD, desc: "720p"}
|
||||
|
||||
# Documentaries
|
||||
- {id: 21, cat: Movies/BluRay, desc: "Full Blu-ray"}
|
||||
- {id: 39, cat: Movies/HD, desc: "Remux"}
|
||||
- {id: 56, cat: Movies/HD, desc: "2160p"}
|
||||
- {id: 23, cat: Movies/HD, desc: "1080p"}
|
||||
- {id: 24, cat: Movies/HD, desc: "1080i"}
|
||||
- {id: 25, cat: Movies/HD, desc: "720p"}
|
||||
|
||||
# TV Series
|
||||
- {id: 27, cat: TV/HD, desc: "Full Blu-ray"}
|
||||
- {id: 40, cat: TV/HD, desc: "Remux"}
|
||||
- {id: 28, cat: TV/HD, desc: "1080p"}
|
||||
- {id: 29, cat: TV/HD, desc: "1080i"}
|
||||
- {id: 30, cat: TV/HD, desc: "720p"}
|
||||
|
||||
# HDTV
|
||||
- {id: 35, cat: TV/HD, desc: "1080i"}
|
||||
- {id: 36, cat: TV/HD, desc: "720p"}
|
||||
|
||||
# XXX
|
||||
- {id: 59, cat: XXX, desc: "Full Blu-ray"}
|
||||
- {id: 46, cat: XXX, desc: "1080p"}
|
||||
- {id: 51, cat: XXX, desc: "720p"}
|
||||
|
||||
# Music
|
||||
- {id: 53, cat: Audio/Video, desc: "Full Blu-ray"}
|
||||
- {id: 57, cat: Audio/Video, desc: "Remux"}
|
||||
- {id: 45, cat: Audio/Video, desc: "1080p"}
|
||||
- {id: 58, cat: Audio/Video, desc: "720p"}
|
||||
- {id: 38, cat: Audio/Lossless, desc: "Flac"}
|
||||
|
||||
- {id: 41, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 42, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 44, cat: PC, desc: "Windows Apps"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table.lista > tbody > tr > td.lista > span[style="color:#FF0000;"]
|
||||
test:
|
||||
path: index.php
|
||||
selector: ul#navlist
|
||||
|
||||
ratio:
|
||||
path: index.php
|
||||
selector: "ul#navlist > li:contains(\"Ratio: \")"
|
||||
filters:
|
||||
- name: split
|
||||
args: ["\u00a0", 1]
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
search: "{{ .Query.Keywords }}"
|
||||
page: torrents
|
||||
options: 0
|
||||
active: 0
|
||||
rows:
|
||||
selector: div.b-content > table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["View details: ", ""]
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
comments:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: p
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\u00a0", ""]
|
||||
- name: regexp
|
||||
args: "\\|\\s+Size:\\s+([\\w\\d\\.,]+ \\w\\w)\\s+\\|"
|
||||
date:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "<center>Added:(.*?)</center>"
|
||||
grabs:
|
||||
selector: a[href^="index.php?page=torrent_history&id="]
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
seeders:
|
||||
selector: a[title="Click here to view peers details"]:nth-child(1)
|
||||
leechers:
|
||||
selector: a[title="Click here to view peers details"]:nth-child(2)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="gold"]: "0"
|
||||
img[alt="silver"]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[alt="2x Upload Multiplier"]: "2"
|
||||
img[alt="3x Upload Multiplier"]: "3"
|
||||
img[alt="4x Upload Multiplier"]: "4"
|
||||
img[alt="5x Upload Multiplier"]: "5"
|
||||
img[alt="6x Upload Multiplier"]: "6"
|
||||
img[alt="7x Upload Multiplier"]: "7"
|
||||
img[alt="8x Upload Multiplier"]: "8"
|
||||
img[alt="9x Upload Multiplier"]: "9"
|
||||
img[alt="10x Upload Multiplier"]: "10"
|
||||
---
|
||||
site: blubits
|
||||
name: Blu-bits
|
||||
description: "A HD tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://blu-bits.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Movies
|
||||
- {id: 14, cat: Movies/BluRay, desc: "Full Blu-ray"}
|
||||
- {id: 54, cat: Movies/HD, desc: "HD-DVD"}
|
||||
- {id: 16, cat: Movies/HD, desc: "Remux"}
|
||||
- {id: 55, cat: Movies/HD, desc: "2160p"}
|
||||
- {id: 15, cat: Movies/HD, desc: "1080p"}
|
||||
- {id: 19, cat: Movies/HD, desc: "1080i"}
|
||||
- {id: 18, cat: Movies/HD, desc: "720p"}
|
||||
|
||||
# Documentaries
|
||||
- {id: 21, cat: Movies/BluRay, desc: "Full Blu-ray"}
|
||||
- {id: 39, cat: Movies/HD, desc: "Remux"}
|
||||
- {id: 56, cat: Movies/HD, desc: "2160p"}
|
||||
- {id: 23, cat: Movies/HD, desc: "1080p"}
|
||||
- {id: 24, cat: Movies/HD, desc: "1080i"}
|
||||
- {id: 25, cat: Movies/HD, desc: "720p"}
|
||||
|
||||
# TV Series
|
||||
- {id: 27, cat: TV/HD, desc: "Full Blu-ray"}
|
||||
- {id: 40, cat: TV/HD, desc: "Remux"}
|
||||
- {id: 28, cat: TV/HD, desc: "1080p"}
|
||||
- {id: 29, cat: TV/HD, desc: "1080i"}
|
||||
- {id: 30, cat: TV/HD, desc: "720p"}
|
||||
|
||||
# HDTV
|
||||
- {id: 35, cat: TV/HD, desc: "1080i"}
|
||||
- {id: 36, cat: TV/HD, desc: "720p"}
|
||||
|
||||
# XXX
|
||||
- {id: 59, cat: XXX, desc: "Full Blu-ray"}
|
||||
- {id: 46, cat: XXX, desc: "1080p"}
|
||||
- {id: 51, cat: XXX, desc: "720p"}
|
||||
|
||||
# Music
|
||||
- {id: 53, cat: Audio/Video, desc: "Full Blu-ray"}
|
||||
- {id: 57, cat: Audio/Video, desc: "Remux"}
|
||||
- {id: 45, cat: Audio/Video, desc: "1080p"}
|
||||
- {id: 58, cat: Audio/Video, desc: "720p"}
|
||||
- {id: 38, cat: Audio/Lossless, desc: "Flac"}
|
||||
|
||||
- {id: 41, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 42, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 44, cat: PC, desc: "Windows Apps"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table.lista > tbody > tr > td.lista > span[style="color:#FF0000;"]
|
||||
test:
|
||||
path: index.php
|
||||
selector: ul#navlist
|
||||
|
||||
ratio:
|
||||
path: index.php
|
||||
selector: "ul#navlist > li:contains(\"Ratio: \")"
|
||||
filters:
|
||||
- name: split
|
||||
args: ["\u00a0", 1]
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
search: "{{ .Query.Keywords }}"
|
||||
page: torrents
|
||||
options: 0
|
||||
active: 0
|
||||
rows:
|
||||
selector: div.b-content > table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["View details: ", ""]
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
comments:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: p
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\u00a0", ""]
|
||||
- name: regexp
|
||||
args: "\\|\\s+Size:\\s+([\\w\\d\\.,]+ \\w\\w)\\s+\\|"
|
||||
date:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "<center>Added:(.*?)</center>"
|
||||
grabs:
|
||||
selector: a[href^="index.php?page=torrent_history&id="]
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
seeders:
|
||||
selector: a[title="Click here to view peers details"]:nth-child(1)
|
||||
leechers:
|
||||
selector: a[title="Click here to view peers details"]:nth-child(2)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="gold"]: "0"
|
||||
img[alt="silver"]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[alt="2x Upload Multiplier"]: "2"
|
||||
img[alt="3x Upload Multiplier"]: "3"
|
||||
img[alt="4x Upload Multiplier"]: "4"
|
||||
img[alt="5x Upload Multiplier"]: "5"
|
||||
img[alt="6x Upload Multiplier"]: "6"
|
||||
img[alt="7x Upload Multiplier"]: "7"
|
||||
img[alt="8x Upload Multiplier"]: "8"
|
||||
img[alt="9x Upload Multiplier"]: "9"
|
||||
img[alt="10x Upload Multiplier"]: "10"
|
||||
"*": "1"
|
||||
@@ -1,89 +1,89 @@
|
||||
---
|
||||
site: bluebirdhd
|
||||
name: BlueBird
|
||||
language: ru-ru
|
||||
type: private
|
||||
encoding: windows-1251
|
||||
links:
|
||||
- https://bluebird-hd.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Films"}
|
||||
- {id: 2, cat: TV/Anime, desc: "Cartoons"}
|
||||
- {id: 3, cat: TV/Documentary, desc: "documentary"}
|
||||
- {id: 4, cat: Audio, desc: "Show / Music"}
|
||||
- {id: 5, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 6, cat: TV, desc: "TV series"}
|
||||
- {id: 7, cat: XXX, desc: "erotica"}
|
||||
- {id: 8, cat: Other, desc: "Demo / Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: /takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: div.error
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
rows:
|
||||
selector: table > 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?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: a[href*="&snatched=1#snatched"]
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
remove: a
|
||||
date:
|
||||
selector: div#cleft > font
|
||||
seeders:
|
||||
selector: td:nth-child(5)
|
||||
leechers:
|
||||
selector: td:nth-child(6)
|
||||
banner:
|
||||
selector: a.tname
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=([^\s]+)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/diamond.png"]: "0"
|
||||
img[src="pic/freedownload.gif"]: "0"
|
||||
img[src="pic/silver.gif"]: "0.5"
|
||||
img[src="pic/bronze.gif"]: "0.75"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[src="pic/diamond.png"]: "2"
|
||||
"*": "1"
|
||||
---
|
||||
site: bluebirdhd
|
||||
name: BlueBird
|
||||
language: ru-ru
|
||||
type: private
|
||||
encoding: windows-1251
|
||||
links:
|
||||
- https://bluebird-hd.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Films"}
|
||||
- {id: 2, cat: TV/Anime, desc: "Cartoons"}
|
||||
- {id: 3, cat: TV/Documentary, desc: "documentary"}
|
||||
- {id: 4, cat: Audio, desc: "Show / Music"}
|
||||
- {id: 5, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 6, cat: TV, desc: "TV series"}
|
||||
- {id: 7, cat: XXX, desc: "erotica"}
|
||||
- {id: 8, cat: Other, desc: "Demo / Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: /takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: div.error
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
rows:
|
||||
selector: table > 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?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: a[href*="&snatched=1#snatched"]
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
remove: a
|
||||
date:
|
||||
selector: div#cleft > font
|
||||
seeders:
|
||||
selector: td:nth-child(5)
|
||||
leechers:
|
||||
selector: td:nth-child(6)
|
||||
banner:
|
||||
selector: a.tname
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=([^\s]+)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/diamond.png"]: "0"
|
||||
img[src="pic/freedownload.gif"]: "0"
|
||||
img[src="pic/silver.gif"]: "0.5"
|
||||
img[src="pic/bronze.gif"]: "0.75"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[src="pic/diamond.png"]: "2"
|
||||
"*": "1"
|
||||
|
||||
83
src/Jackett/Definitions/blutopia.yml
Normal file
83
src/Jackett/Definitions/blutopia.yml
Normal file
@@ -0,0 +1,83 @@
|
||||
---
|
||||
site: blutopia
|
||||
name: Blutopia
|
||||
description: "HD Movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://blutopia.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Movies, desc: "FANRES"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: /login
|
||||
method: form
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table.main:contains("Login Failed!")
|
||||
test:
|
||||
path: /torrents
|
||||
|
||||
download:
|
||||
selector: a[href^="/download.php/"]
|
||||
|
||||
search:
|
||||
path: /torrents/search
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
name: "{{ .Query.Keywords }}"
|
||||
category_id: 1
|
||||
type: BD50
|
||||
order: created_at:desc
|
||||
rows:
|
||||
selector: table.table > tbody > tr
|
||||
fields:
|
||||
# category:
|
||||
# selector: a[href^="categories"]
|
||||
# attribute: href
|
||||
title:
|
||||
remove: ul
|
||||
selector: td:nth-child(2)
|
||||
download:
|
||||
selector: a.view-torrent
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["/torrents/", "/download/"]
|
||||
details:
|
||||
selector: a.view-torrent
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(4)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
date:
|
||||
selector: td:nth-child(3)
|
||||
filters:
|
||||
- name: append
|
||||
args: " ago"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
#"i[data-original-title=\"100% Free\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
#"i[data-original-title=\"Double upload\"]": "2"
|
||||
"*": "1"
|
||||
@@ -120,7 +120,7 @@
|
||||
search_type: "name"
|
||||
searchin: "title"
|
||||
error:
|
||||
- selector: div.error
|
||||
- selector: div.error:not(:contains("Não existem resultados encontrados."))
|
||||
rows:
|
||||
selector: table#torrents_table_classic > tbody > tr:has(td.torrent_name)
|
||||
fields:
|
||||
|
||||
@@ -1,104 +1,105 @@
|
||||
---
|
||||
site: chdbits
|
||||
name: CHDBits
|
||||
description: "A general tracker"
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://chdbits.co
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations"}
|
||||
- {id: 402, cat: TV, desc: "TV Series"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 409, cat: Other, desc: "Misc"}
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: /takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
ratio:
|
||||
path: /torrents.php
|
||||
selector: table#info_block
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Ratio:\\s(.*?)\\s\\s"
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(table.torrentname)
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
title|optional:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
date:
|
||||
selector: td:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: "0"
|
||||
img.pro_free2up: "0"
|
||||
img.pro_50pctdown: "0.5"
|
||||
img.pro_50pctdown2up: "0.5"
|
||||
img.pro_30pctdown: "0.3"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: "2"
|
||||
img.pro_free2up: "2"
|
||||
img.pro_2up: "2"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, img
|
||||
---
|
||||
site: chdbits
|
||||
name: CHDBits
|
||||
description: "A general tracker"
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://chdbits.co
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations"}
|
||||
- {id: 402, cat: TV, desc: "TV Series"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 409, cat: Other, desc: "Misc"}
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: /takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
ratio:
|
||||
path: /torrents.php
|
||||
selector: table#info_block
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Ratio:\\s(.*?)\\s\\s"
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(table.torrentname)
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
title:
|
||||
optional: true
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
date:
|
||||
selector: td:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: "0"
|
||||
img.pro_free2up: "0"
|
||||
img.pro_50pctdown: "0.5"
|
||||
img.pro_50pctdown2up: "0.5"
|
||||
img.pro_30pctdown: "0.3"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: "2"
|
||||
img.pro_free2up: "2"
|
||||
img.pro_2up: "2"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, img
|
||||
|
||||
@@ -1,99 +1,99 @@
|
||||
---
|
||||
site: cinemageddon
|
||||
name: Cinemageddon
|
||||
description: "B-movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://cinemageddon.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Action"}
|
||||
- {id: 2, cat: Movies, desc: "Horror"}
|
||||
- {id: 3, cat: Movies, desc: "Martial Arts"}
|
||||
- {id: 4, cat: Movies, desc: "Comedy"}
|
||||
- {id: 5, cat: Movies, desc: "Other"}
|
||||
- {id: 6, cat: Movies, desc: "Hidden Gems"}
|
||||
- {id: 7, cat: Movies, desc: "Sci-Fi"}
|
||||
- {id: 8, cat: Movies, desc: "Gore"}
|
||||
- {id: 9, cat: Movies, desc: "Exploitation"}
|
||||
- {id: 11, cat: Movies, desc: "OST"}
|
||||
- {id: 12, cat: Movies, desc: "XXX"}
|
||||
- {id: 13, cat: Movies, desc: "Thriller"}
|
||||
- {id: 14, cat: Movies, desc: "Adventure"}
|
||||
- {id: 15, cat: Movies, desc: "Documentary"}
|
||||
- {id: 16, cat: Movies, desc: "Western"}
|
||||
- {id: 17, cat: Movies, desc: "Family"}
|
||||
- {id: 18, cat: Movies, desc: "Drama"}
|
||||
- {id: 19, cat: Movies, desc: "Ebooks"}
|
||||
- {id: 20, cat: Movies, desc: "Softcore"}
|
||||
- {id: 21, cat: Movies, desc: "Tinfoil Hat"}
|
||||
- {id: 22, cat: Movies, desc: "Trailers"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table.torrenttable > tbody > tr:has(a[href^="browse.php?cat="])
|
||||
fields:
|
||||
category:
|
||||
text: 1
|
||||
title:
|
||||
selector: td:nth-child(2)
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
files:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)\s+file
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+.*(MB|GB)+)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d{4}-\d{2}-\d{2})
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: cinemageddon
|
||||
name: Cinemageddon
|
||||
description: "B-movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://cinemageddon.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Action"}
|
||||
- {id: 2, cat: Movies, desc: "Horror"}
|
||||
- {id: 3, cat: Movies, desc: "Martial Arts"}
|
||||
- {id: 4, cat: Movies, desc: "Comedy"}
|
||||
- {id: 5, cat: Movies, desc: "Other"}
|
||||
- {id: 6, cat: Movies, desc: "Hidden Gems"}
|
||||
- {id: 7, cat: Movies, desc: "Sci-Fi"}
|
||||
- {id: 8, cat: Movies, desc: "Gore"}
|
||||
- {id: 9, cat: Movies, desc: "Exploitation"}
|
||||
- {id: 11, cat: Movies, desc: "OST"}
|
||||
- {id: 12, cat: Movies, desc: "XXX"}
|
||||
- {id: 13, cat: Movies, desc: "Thriller"}
|
||||
- {id: 14, cat: Movies, desc: "Adventure"}
|
||||
- {id: 15, cat: Movies, desc: "Documentary"}
|
||||
- {id: 16, cat: Movies, desc: "Western"}
|
||||
- {id: 17, cat: Movies, desc: "Family"}
|
||||
- {id: 18, cat: Movies, desc: "Drama"}
|
||||
- {id: 19, cat: Movies, desc: "Ebooks"}
|
||||
- {id: 20, cat: Movies, desc: "Softcore"}
|
||||
- {id: 21, cat: Movies, desc: "Tinfoil Hat"}
|
||||
- {id: 22, cat: Movies, desc: "Trailers"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table.torrenttable > tbody > tr:has(a[href^="browse.php?cat="])
|
||||
fields:
|
||||
category:
|
||||
text: 1
|
||||
title:
|
||||
selector: td:nth-child(2)
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
files:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)\s+file
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+.*(MB|GB)+)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d{4}-\d{2}-\d{2})
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,97 +1,94 @@
|
||||
---
|
||||
site: cinematik
|
||||
name: Cinematik
|
||||
description: "Non-Hollywood movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.cinematik.net
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Comedy"}
|
||||
- {id: 4, cat: Movies, desc: "Action"}
|
||||
- {id: 6, cat: Movies, desc: "Drama"}
|
||||
- {id: 7, cat: Movies, desc: "Documentary"}
|
||||
- {id: 9, cat: Movies, desc: "Crime"}
|
||||
- {id: 12, cat: Movies, desc: "Sci-Fi"}
|
||||
- {id: 17, cat: Movies, desc: "War"}
|
||||
- {id: 21, cat: Movies, desc: "Silent Films"}
|
||||
- {id: 23, cat: Movies, desc: "TV-Series"}
|
||||
- {id: 24, cat: Movies, desc: "Animation"}
|
||||
- {id: 25, cat: Movies, desc: "Exploitation"}
|
||||
- {id: 26, cat: Movies, desc: "Experimental"}
|
||||
- {id: 27, cat: Movies, desc: "Fantasy"}
|
||||
- {id: 29, cat: Movies, desc: "Short"}
|
||||
- {id: 30, cat: Movies, desc: "Western"}
|
||||
- {id: 32, cat: Movies, desc: "Foreign Languages"}
|
||||
- {id: 33, cat: Movies, desc: "Thriller"}
|
||||
- {id: 34, cat: Movies, desc: "Opera and Musical"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: my.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table[border="1"] tr:not(:first-child)
|
||||
fields:
|
||||
category:
|
||||
text: 1
|
||||
title:
|
||||
selector: td:nth-child(2) a
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
files:
|
||||
selector: td:nth-child(5)
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
date:
|
||||
selector: td:nth-child(11)
|
||||
filters:
|
||||
- name: append
|
||||
args: " ago"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[title=\"Golden Torrent: No Download Stats are Recorded\"]": "0"
|
||||
"img[title=\"Silver Torrent: Download Stats are 25% Recorded\"]": "0.25"
|
||||
"img[title=\"Platinum Torrent: No Download Stats are Recorded, Upload Stats are Doubled!\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"img[title=\"Platinum Torrent: No Download Stats are Recorded, Upload Stats are Doubled!\"]": "2"
|
||||
---
|
||||
site: cinematik
|
||||
name: Cinematik
|
||||
description: "Non-Hollywood movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.cinematik.net
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Comedy"}
|
||||
- {id: 4, cat: Movies, desc: "Action"}
|
||||
- {id: 6, cat: Movies, desc: "Drama"}
|
||||
- {id: 7, cat: Movies, desc: "Documentary"}
|
||||
- {id: 9, cat: Movies, desc: "Crime"}
|
||||
- {id: 12, cat: Movies, desc: "Sci-Fi"}
|
||||
- {id: 17, cat: Movies, desc: "War"}
|
||||
- {id: 21, cat: Movies, desc: "Silent Films"}
|
||||
- {id: 23, cat: Movies, desc: "TV-Series"}
|
||||
- {id: 24, cat: Movies, desc: "Animation"}
|
||||
- {id: 25, cat: Movies, desc: "Exploitation"}
|
||||
- {id: 26, cat: Movies, desc: "Experimental"}
|
||||
- {id: 27, cat: Movies, desc: "Fantasy"}
|
||||
- {id: 29, cat: Movies, desc: "Short"}
|
||||
- {id: 30, cat: Movies, desc: "Western"}
|
||||
- {id: 32, cat: Movies, desc: "Foreign Languages"}
|
||||
- {id: 33, cat: Movies, desc: "Thriller"}
|
||||
- {id: 34, cat: Movies, desc: "Opera and Musical"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: my.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table[border="1"] tr:not(:first-child)
|
||||
fields:
|
||||
category:
|
||||
text: 1
|
||||
title:
|
||||
selector: td:nth-child(2) a
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
files:
|
||||
selector: td:nth-child(5)
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
date:
|
||||
selector: td:nth-child(11) div.addedtor
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[title=\"Golden Torrent: No Download Stats are Recorded\"]": "0"
|
||||
"img[title=\"Silver Torrent: Download Stats are 25% Recorded\"]": "0.25"
|
||||
"img[title=\"Platinum Torrent: No Download Stats are Recorded, Upload Stats are Doubled!\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"img[title=\"Platinum Torrent: No Download Stats are Recorded, Upload Stats are Doubled!\"]": "2"
|
||||
"*": "1"
|
||||
@@ -1,64 +1,64 @@
|
||||
---
|
||||
site: classix
|
||||
name: Classix
|
||||
description: "Classic movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://classix-unlimited.co.uk/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: div.myContent:contains("Access Denied")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: torrents-search.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table > tbody > tr:has(a[href^="torrents.php?cat="])
|
||||
fields:
|
||||
category:
|
||||
text: 1
|
||||
title:
|
||||
selector: td:nth-child(3)
|
||||
download:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrents-details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: classix
|
||||
name: Classix
|
||||
description: "Classic movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://classix-unlimited.co.uk/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: div.myContent:contains("Access Denied")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: torrents-search.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table > tbody > tr:has(a[href^="torrents.php?cat="])
|
||||
fields:
|
||||
category:
|
||||
text: 1
|
||||
title:
|
||||
selector: td:nth-child(3)
|
||||
download:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrents-details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
88
src/Jackett/Definitions/cpabien.yml
Normal file
88
src/Jackett/Definitions/cpabien.yml
Normal file
@@ -0,0 +1,88 @@
|
||||
---
|
||||
site: cpasbien
|
||||
name: cpasbien
|
||||
language: fr-fr
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://cpabien.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: films, cat: Movies, desc: "Movies"}
|
||||
- {id: series, cat: TV, desc: "TV"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
settings: []
|
||||
|
||||
download:
|
||||
selector: "#telecharger"
|
||||
|
||||
search:
|
||||
path: "/search.php?t={{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: div[class^='ligne']
|
||||
fields:
|
||||
site_date:
|
||||
selector: a
|
||||
filters:
|
||||
# date is at the end of the title, so we get it and name it site_date
|
||||
- name: regexp
|
||||
args: "(\\w+)$"
|
||||
title:
|
||||
selector: a
|
||||
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"]
|
||||
- name: replace
|
||||
args: ["TRUEFRENCH", "{{ .Result.site_date }} TRUEFRENCH"]
|
||||
- name: replace
|
||||
args: ["VOSTFR", "{{ .Result.site_date }} VOSTFR"]
|
||||
# and we delete it at the end
|
||||
- name: re_replace
|
||||
args: ["(\\w+)$", ""]
|
||||
details:
|
||||
selector: a
|
||||
attribute: href
|
||||
download:
|
||||
selector: a
|
||||
attribute: href
|
||||
size:
|
||||
selector: div.poid
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) Ko", "$1X00"]
|
||||
- name: re_replace
|
||||
args: [ " Ko", "000"]
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) Mo", "$1X00000"]
|
||||
- name: re_replace
|
||||
args: [ " Mo", "000000"]
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) Go", "$1X00000000"]
|
||||
- name: re_replace
|
||||
args: [ " Go", "000000000"]
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) To", "$1X00000000000"]
|
||||
- name: re_replace
|
||||
args: [ " To", "000000000000"]
|
||||
- name: replace
|
||||
args: [ "X", "" ]
|
||||
seeders:
|
||||
text: 0
|
||||
seeders:
|
||||
selector: div.up
|
||||
optional: true
|
||||
leechers:
|
||||
text: 0
|
||||
leechers:
|
||||
selector: div.down
|
||||
optional: true
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
@@ -1,94 +1,94 @@
|
||||
---
|
||||
site: czteam
|
||||
name: CZTeam
|
||||
language: cs-cz
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://czteam.club/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV-Eps"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: PC/Games, desc: "Games"}
|
||||
- {id: 5, cat: PC/ISO, desc: "Software"}
|
||||
- {id: 6, cat: XXX, desc: "XxX"}
|
||||
- {id: 7, cat: Other, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
login: "Log in"
|
||||
error:
|
||||
- selector: form#loginform > span.warning
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: time
|
||||
order_way: desc
|
||||
action: basic
|
||||
searchsubmit: 1
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a.torrent_name
|
||||
category:
|
||||
selector: td.cats_col
|
||||
case:
|
||||
div.cats_movies: 1
|
||||
div.cats_tveps: 2
|
||||
div.cats_music: 3
|
||||
div.cats_games: 4
|
||||
div.cats_software: 5
|
||||
div.cats_xxx: 6
|
||||
div.cats_other: 7
|
||||
details:
|
||||
selector: a.torrent_name
|
||||
attribute: href
|
||||
banner:
|
||||
selector: a.torrent_name
|
||||
optional: true
|
||||
attribute: cover
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"strong.tl_free": "0"
|
||||
"strong.tl_neutral": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"strong.tl_neutral": "0"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: div.torrent_info
|
||||
---
|
||||
site: czteam
|
||||
name: CZTeam
|
||||
language: cs-cz
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://czteam.club/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV-Eps"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: PC/Games, desc: "Games"}
|
||||
- {id: 5, cat: PC/ISO, desc: "Software"}
|
||||
- {id: 6, cat: XXX, desc: "XxX"}
|
||||
- {id: 7, cat: Other, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
login: "Log in"
|
||||
error:
|
||||
- selector: form#loginform > span.warning
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: time
|
||||
order_way: desc
|
||||
action: basic
|
||||
searchsubmit: 1
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a.torrent_name
|
||||
category:
|
||||
selector: td.cats_col
|
||||
case:
|
||||
div.cats_movies: 1
|
||||
div.cats_tveps: 2
|
||||
div.cats_music: 3
|
||||
div.cats_games: 4
|
||||
div.cats_software: 5
|
||||
div.cats_xxx: 6
|
||||
div.cats_other: 7
|
||||
details:
|
||||
selector: a.torrent_name
|
||||
attribute: href
|
||||
banner:
|
||||
selector: a.torrent_name
|
||||
optional: true
|
||||
attribute: cover
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"strong.tl_free": "0"
|
||||
"strong.tl_neutral": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"strong.tl_neutral": "0"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: div.torrent_info
|
||||
remove: strong
|
||||
136
src/Jackett/Definitions/cztorrent.yml
Normal file
136
src/Jackett/Definitions/cztorrent.yml
Normal file
@@ -0,0 +1,136 @@
|
||||
site: cztorrent
|
||||
name: CzTorrent
|
||||
language: cs-cz
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://tracker.cztorrent.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Filmy"}
|
||||
- {id: 25, cat: TV, desc: "Seriály"}
|
||||
- {id: 23, cat: TV/Documentary, desc: "Filmy - dokument"}
|
||||
- {id: 22, cat: PC, desc: "Aplikace"}
|
||||
- {id: 36, cat: Movies/3D, desc: "Filmy - 3D"}
|
||||
- {id: 35, cat: Movies/Other, desc: "Filmy - anime"}
|
||||
- {id: 37, cat: Movies/BluRay, desc: "Filmy - Blu-ray"}
|
||||
- {id: 11, cat: Movies/DVD, desc: "Filmy - DVD"}
|
||||
- {id: 30, cat: Movies/DVD, desc: "Filmy - DVD full"}
|
||||
- {id: 5, cat: Movies, desc: "Filmy - kreslené"}
|
||||
- {id: 31, cat: Movies/HD, desc: "HD"}
|
||||
- {id: 38, cat: Movies/HD, desc: "HD-LQ"}
|
||||
- {id: 3, cat: PC/Games, desc: "Hry"}
|
||||
- {id: 2, cat: Audio, desc: "Hudba"}
|
||||
- {id: 34, cat: Audio/Video, desc: "Hudba DVD/HD"}
|
||||
- {id: 6, cat: Books, desc: "Knihy"}
|
||||
- {id: 13, cat: Console, desc: "Konzole"}
|
||||
- {id: 32, cat: Audio, desc: "Mluvené slovo"}
|
||||
- {id: 16, cat: PC/Phone-Other, desc: "Mobil, PDA"}
|
||||
- {id: 4, cat: Other, desc: "Ostatní"}
|
||||
- {id: 29, cat: Audio, desc: "Soundtrack"}
|
||||
- {id: 19, cat: Audio/Video, desc: "Videoklipy"}
|
||||
- {id: 24, cat: XXX, desc: "xXx"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: /login-page
|
||||
method: form
|
||||
form: form[action^="/login"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
persistent_login: "1"
|
||||
error:
|
||||
- selector: div.error
|
||||
test:
|
||||
path: /torrents
|
||||
|
||||
search:
|
||||
path: /torrents
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
s: "{{ .Keywords }}"
|
||||
t: "1"
|
||||
rows:
|
||||
selector: tr.torr_hover
|
||||
fields:
|
||||
title:
|
||||
selector: td.detaily a
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: [".*? / ", ""]
|
||||
- name: diacritics
|
||||
args: replace
|
||||
- name: replace
|
||||
args: ["serie", ""]
|
||||
- name: replace
|
||||
args: ["Serie", ""]
|
||||
- name: re_replace
|
||||
args: ["(\\d{2})\\.", "S$1"]
|
||||
- name: re_replace
|
||||
args: ["(\\d{1})\\.", "S0$1"]
|
||||
category:
|
||||
selector: td:nth-child(2)
|
||||
case:
|
||||
":contains(\"Filmy\")": 1
|
||||
":contains(\"Seriály\")": 25
|
||||
":contains(\"Filmy - dokument\")": 23
|
||||
":contains(\"Aplikace\")": 22
|
||||
":contains(\"Filmy - 3D\")": 36
|
||||
":contains(\"Filmy - anime\")": 35
|
||||
":contains(\"Filmy - Blu-ray\")": 37
|
||||
":contains(\"Filmy - DVD\")": 11
|
||||
":contains(\"Filmy - DVD full\")": 30
|
||||
":contains(\"Filmy - kreslené\")": 5
|
||||
":contains(\"HD\")": 31
|
||||
":contains(\"HD-LQ\")": 38
|
||||
":contains(\"Hry\")": 3
|
||||
":contains(\"Hudba\")": 2
|
||||
":contains(\"Hudba DVD/HD\")": 34
|
||||
":contains(\"Knihy\")": 6
|
||||
":contains(\"Konzole\")": 13
|
||||
":contains(\"Mluvené slovo\")": 32
|
||||
":contains(\"Mobil, PDA\")": 16
|
||||
":contains(\"Ostatní\")": 4
|
||||
":contains(\"Soundtrack\")": 29
|
||||
":contains(\"Videoklipy\")": 19
|
||||
":contains(\"xXx\")": 24
|
||||
details:
|
||||
selector: td.detaily a
|
||||
attribute: href
|
||||
download:
|
||||
selector: td.download a
|
||||
attribute: href
|
||||
size:
|
||||
selector: td.detaily
|
||||
filters:
|
||||
- name: split
|
||||
args: [ "|", 0 ]
|
||||
- name: regexp
|
||||
args: "Velikost: (.+?) ?$"
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: split
|
||||
args: [ "|", 1 ]
|
||||
- name: regexp
|
||||
args: "Přidán: (.+?) ?$"
|
||||
- name: append
|
||||
args: " +02:00"
|
||||
- name: dateparse
|
||||
args: "2.1.2006 15:04 -07:00"
|
||||
seeders:
|
||||
selector: td:nth-child(7) span
|
||||
leechers:
|
||||
selector: td:nth-child(8) span
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,119 +1,126 @@
|
||||
---
|
||||
site: datascene
|
||||
name: DataScene
|
||||
language: ro-ro
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
links:
|
||||
- http://datascene.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 3, cat: TV/Anime, desc: "Anime | Cartoon"}
|
||||
- {id: 15, cat: PC/0day, desc: "Appz | Win"}
|
||||
- {id: 4, cat: PC/0day, desc: "Appz | Linux"}
|
||||
- {id: 6, cat: Books, desc: "E-Book"}
|
||||
- {id: 10, cat: PC/Games, desc: "Games | PC Iso"}
|
||||
- {id: 9, cat: PC/Games, desc: "Games | PC Rips"}
|
||||
- {id: 11, cat: Console, desc: "Games | Pack"}
|
||||
- {id: 43, cat: Console, desc: "Games | Console"}
|
||||
- {id: 29, cat: Other, desc: "Images"}
|
||||
- {id: 2, cat: Other, desc: "MiSC"}
|
||||
- {id: 5, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
- {id: 27, cat: Movies, desc: "Movies | Pack"}
|
||||
- {id: 46, cat: Movies/3D, desc: "Movies | 3D"}
|
||||
- {id: 26, cat: Movies/SD, desc: "Movies | Cam"}
|
||||
- {id: 25, cat: Movies, desc: "Movies | Documentary"}
|
||||
- {id: 24, cat: Movies/DVD, desc: "Movies | DVD-R"}
|
||||
- {id: 32, cat: Movies/DVD, desc: "Movies | DVD-RO"}
|
||||
- {id: 23, cat: Movies/HD, desc: "Movies | HD"}
|
||||
- {id: 31, cat: Movies/HD, desc: "Movies | HD-Ro"}
|
||||
- {id: 34, cat: Movies/Foreign, desc: "Movies | Hindi"}
|
||||
- {id: 30, cat: Movies/SD, desc: "Movies | Xvid"}
|
||||
- {id: 36, cat: Movies/SD, desc: "Movies | Xvid-Ro"}
|
||||
- {id: 21, cat: Audio/Video, desc: "Music | Video"}
|
||||
- {id: 19, cat: Audio , desc: "Music | Mp3/Flac"}
|
||||
- {id: 18, cat: Other, desc: "Other"}
|
||||
- {id: 42, cat: Other, desc: "Premiera | DsT"}
|
||||
- {id: 14, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 47, cat: TV/SD, desc: "Tv | Episodes"}
|
||||
- {id: 28, cat: TV/HD, desc: "Tv-HD | Episodes"}
|
||||
- {id: 13, cat: Other, desc: "Tutoriale"}
|
||||
- {id: 12, cat: XXX, desc: "XxX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: /takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
ratio:
|
||||
path: /browse.php
|
||||
selector: font:contains("Ratio:") > span
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: 1
|
||||
rows:
|
||||
selector: tr:has(a.tname)
|
||||
fields:
|
||||
title:
|
||||
selector: a.tname
|
||||
attribute: title
|
||||
details:
|
||||
selector: a.tname
|
||||
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: td:nth-child(7)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
date:
|
||||
selector: td:nth-child(2) > right > div:has(font:contains("Uploaded"))
|
||||
remove: div > font
|
||||
filters:
|
||||
- name: trim
|
||||
args: ":"
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
banner:
|
||||
selector: a.tname
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=([^\s]+)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[src=\"pic/free.gif\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2) > right
|
||||
---
|
||||
site: datascene
|
||||
name: DataScene
|
||||
language: ro-ro
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
links:
|
||||
- http://datascene.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 3, cat: TV/Anime, desc: "Anime | Cartoon"}
|
||||
- {id: 15, cat: PC/0day, desc: "Appz | Win"}
|
||||
- {id: 4, cat: PC/0day, desc: "Appz | Linux"}
|
||||
- {id: 6, cat: Books, desc: "E-Book"}
|
||||
- {id: 10, cat: PC/Games, desc: "Games | PC Iso"}
|
||||
- {id: 9, cat: PC/Games, desc: "Games | PC Rips"}
|
||||
- {id: 11, cat: Console, desc: "Games | Pack"}
|
||||
- {id: 43, cat: Console, desc: "Games | Console"}
|
||||
- {id: 29, cat: Other, desc: "Images"}
|
||||
- {id: 2, cat: Other, desc: "MiSC"}
|
||||
- {id: 5, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
- {id: 27, cat: Movies, desc: "Movies | Pack"}
|
||||
- {id: 46, cat: Movies/3D, desc: "Movies | 3D"}
|
||||
- {id: 26, cat: Movies/SD, desc: "Movies | Cam"}
|
||||
- {id: 25, cat: Movies, desc: "Movies | Documentary"}
|
||||
- {id: 24, cat: Movies/DVD, desc: "Movies | DVD-R"}
|
||||
- {id: 32, cat: Movies/DVD, desc: "Movies | DVD-RO"}
|
||||
- {id: 23, cat: Movies/HD, desc: "Movies | HD"}
|
||||
- {id: 31, cat: Movies/HD, desc: "Movies | HD-Ro"}
|
||||
- {id: 34, cat: Movies/Foreign, desc: "Movies | Hindi"}
|
||||
- {id: 30, cat: Movies/SD, desc: "Movies | Xvid"}
|
||||
- {id: 36, cat: Movies/SD, desc: "Movies | Xvid-Ro"}
|
||||
- {id: 21, cat: Audio/Video, desc: "Music | Video"}
|
||||
- {id: 19, cat: Audio , desc: "Music | Mp3/Flac"}
|
||||
- {id: 18, cat: Other, desc: "Other"}
|
||||
- {id: 42, cat: Other, desc: "Premiera | DsT"}
|
||||
- {id: 14, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 47, cat: TV/SD, desc: "Tv | Episodes"}
|
||||
- {id: 28, cat: TV/HD, desc: "Tv-HD | Episodes"}
|
||||
- {id: 13, cat: Other, desc: "Tutoriale"}
|
||||
- {id: 12, cat: XXX, desc: "XxX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: /takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
ratio:
|
||||
path: /browse.php
|
||||
selector: font:contains("Ratio:") > span
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: 1
|
||||
rows:
|
||||
selector: div.ncls > table > tbody > tr:has(a.tname)
|
||||
fields:
|
||||
title-attribute:
|
||||
selector: a.tname
|
||||
attribute: title
|
||||
title-text:
|
||||
selector: a.tname
|
||||
title:
|
||||
text: "{{if .Result.title-attribute }}{{ .Result.title-attribute }}{{else}}{{ .Result.title-text }}{{end}}"
|
||||
details:
|
||||
selector: a.tname
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
download:
|
||||
selector: a[href^="/download.php/"], a[href^="/downloadd.php/"] # some releases use a download link with two d's
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
date:
|
||||
selector: td:nth-child(2) > right > div:has(font:contains("Uploaded"))
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Uploaded: ", ""]
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
banner:
|
||||
selector: a.tname
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=([^\s]+)
|
||||
imdb:
|
||||
selector: a[href^="http://www.imdb.com/title/"]
|
||||
optional: true
|
||||
attribute: href
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[src=\"pic/free.png\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2) > right
|
||||
remove: div
|
||||
92
src/Jackett/Definitions/deildu.yml
Normal file
92
src/Jackett/Definitions/deildu.yml
Normal file
@@ -0,0 +1,92 @@
|
||||
---
|
||||
site: deildu
|
||||
name: Deildu
|
||||
language: is-is
|
||||
type: semi-private
|
||||
encoding: iso-8859-1
|
||||
links:
|
||||
- https://deildu.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 11, cat: Audio, desc: "Music"}
|
||||
- {id: 6, cat: Movies, desc: "Movies"}
|
||||
- {id: 5, cat: Movies/DVD, desc: "Movies DVDR"}
|
||||
- {id: 8, cat: TV, desc: "TV shows"}
|
||||
- {id: 12, cat: Movies/HD, desc: "HD Movies"}
|
||||
- {id: 12, cat: TV/HD, desc: "HD TV"}
|
||||
- {id: 9, cat: TV/Documentary, desc: "TV - Documentaries"}
|
||||
- {id: 9, cat: Movies/Other, desc: "Movie - Documentaries"}
|
||||
- {id: 2, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 7, cat: Movies/Other, desc: "Cartoons"}
|
||||
- {id: 14, cat: PC, desc: "Windows"}
|
||||
- {id: 3, cat: PC/Mac, desc: "Mac"}
|
||||
- {id: 10, cat: PC/Games, desc: "Games"}
|
||||
- {id: 4, cat: XXX, desc: "XXX"}
|
||||
- {id: 1, cat: Other, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
|
||||
test:
|
||||
path: my.php
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
rows:
|
||||
selector: table[class="torrentlist"] > tbody > tr:has(a[href*="details.php?id="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
args: 55
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
title:
|
||||
selector: td:nth-child(2)
|
||||
# category:
|
||||
# selector: a[href^="browse.php?cat="]
|
||||
# attribute: href
|
||||
# filters:
|
||||
# - name: querystring
|
||||
# args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
files:
|
||||
selector: td:nth-child(4)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
date:
|
||||
selector: td:nth-child(6)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2006-01-0215:04:05"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: diablotorrent
|
||||
name: Diablo Torrent
|
||||
language: hu-hu
|
||||
@@ -58,32 +58,25 @@
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
submitpath: login.php
|
||||
path: login
|
||||
submitpath: login/run
|
||||
method: form
|
||||
inputs:
|
||||
referer: ""
|
||||
nev: "{{ .Config.username }}"
|
||||
jelszo: "{{ .Config.password }}"
|
||||
fsv: "-1"
|
||||
ssl: "1"
|
||||
fsv: "0"
|
||||
login: "1"
|
||||
belepes: "1"
|
||||
getselectorinputs:
|
||||
c:
|
||||
selector: "script:contains(\"login.php\")"
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "login.php\\?c=(.*?)&rhash="
|
||||
rhash:
|
||||
text: "123"
|
||||
rhash: "123"
|
||||
test:
|
||||
path: browse.php
|
||||
path: browse
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
path: browse
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}category[]={{.}}&{{end}}"
|
||||
cim: "{{ .Keywords }}"
|
||||
search: "{{ .Keywords }}"
|
||||
s_alapjan: "7"
|
||||
s_sorrend: "desc"
|
||||
rows:
|
||||
@@ -93,10 +86,8 @@
|
||||
download:
|
||||
selector: div.box_download > a
|
||||
attribute: href
|
||||
#title: # shortened
|
||||
# selector: a.box_name_a
|
||||
title:
|
||||
selector: div.torrent_details_po + h2
|
||||
selector: a.box_name_a > span
|
||||
details:
|
||||
selector: a.box_name_a
|
||||
attribute: href
|
||||
@@ -123,13 +114,15 @@
|
||||
args: "2006-01-0215:04:05 -07:00"
|
||||
size:
|
||||
selector: div.box_size
|
||||
banner|optional:
|
||||
banner:
|
||||
optional: true
|
||||
selector: a.cover_a
|
||||
attribute: title
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src='(.*?)'
|
||||
imdb|optional:
|
||||
imdb:
|
||||
optional: true
|
||||
selector: a[href^="http://www.imdb.com/title/"]
|
||||
attribute: href
|
||||
description:
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
---
|
||||
site: dragonworld
|
||||
name: Dragon World (DTW)
|
||||
language: de-de
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://dtw.sytes.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Dokumentation
|
||||
- {id: 46, cat: TV/Documentary, desc: "Dokumentation"}
|
||||
- {id: 55, cat: TV/Documentary, desc: "Dokumentation/HD"}
|
||||
- {id: 56, cat: TV/Documentary, desc: "Dokumentation/SD"}
|
||||
# Ebooks
|
||||
- {id: 36, cat: Books, desc: "Ebooks"}
|
||||
- {id: 37, cat: Books, desc: "Ebooks"}
|
||||
- {id: 38, cat: Books, desc: "Ebooks/Hoerspiele/Hoerbuecher"}
|
||||
# Games
|
||||
- {id: 21, cat: Console, desc: "Games"}
|
||||
- {id: 24, cat: Console/Other, desc: "Games/Nintendo"}
|
||||
- {id: 22, cat: PC/Games, desc: "Games/PC"}
|
||||
- {id: 23, cat: Console/PS4, desc: "Games/Playstation"}
|
||||
- {id: 25, cat: Console/Xbox, desc: "Games/Xbox"}
|
||||
# Kinder
|
||||
- {id: 10, cat: Other, desc: "Kinder"}
|
||||
- {id: 14, cat: Other, desc: "Kinder/Diverses"}
|
||||
- {id: 12, cat: Movies, desc: "Kinder/Filme"}
|
||||
- {id: 11, cat: PC/Games, desc: "Kinder/Games"}
|
||||
- {id: 13, cat: Audio, desc: "Kinder/Musik"}
|
||||
# Movies
|
||||
- {id: 15, cat: Movies, desc: "Movies"}
|
||||
- {id: 50, cat: Movies/3D, desc: "Movies/3D"}
|
||||
- {id: 48, cat: Movies/HD, desc: "Movies/HD"}
|
||||
- {id: 53, cat: Movies/HD, desc: "Movies/HD Pack"}
|
||||
- {id: 45, cat: Movies/HD, desc: "Movies/Remuxe"}
|
||||
- {id: 17, cat: Movies/SD, desc: "Movies/SD"}
|
||||
- {id: 54, cat: Movies/SD, desc: "Movies/SD Pack"}
|
||||
# Musik
|
||||
- {id: 4, cat: Audio, desc: "Musik"}
|
||||
- {id: 57, cat: Audio, desc: "Musik/Album"}
|
||||
- {id: 8, cat: Audio/Lossless, desc: "Musik/Flac"}
|
||||
- {id: 7, cat: Audio/MP3, desc: "Musik/Mp3"}
|
||||
- {id: 9, cat: Audio/Video, desc: "Musik/Video"}
|
||||
# Serien
|
||||
- {id: 26, cat: TV, desc: "Serien"}
|
||||
- {id: 27, cat: TV/HD, desc: "Serien/HD"}
|
||||
- {id: 28, cat: TV/SD, desc: "Serien/SD"}
|
||||
# Software
|
||||
- {id: 29, cat: PC/0day, desc: "Software"}
|
||||
- {id: 32, cat: PC/0day, desc: "Software/Diverses"}
|
||||
- {id: 31, cat: PC/Mac, desc: "Software/Mac"}
|
||||
- {id: 30, cat: PC/0day, desc: "Software/Windows"}
|
||||
# Sport
|
||||
- {id: 39, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 40, cat: TV/Sport, desc: "Sport HD"}
|
||||
- {id: 58, cat: TV/Sport, desc: "Sport SD"}
|
||||
# XXX
|
||||
- {id: 33, cat: XXX, desc: "XXX"}
|
||||
- {id: 34, cat: XXX, desc: "XXX/HD"}
|
||||
- {id: 35, cat: XXX, desc: "XXX/SD"}
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table:has(td:contains("Ein Fehler ist aufgetreten"))
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href*="/logout.php"]
|
||||
|
||||
download:
|
||||
before:
|
||||
path: "takethanks.php"
|
||||
method: "post"
|
||||
inputs:
|
||||
torrentid: "{{ .DownloadUri.Query.id }}"
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["[^a-zA-Z0-9]+", "%"]
|
||||
inputs:
|
||||
do: "search"
|
||||
keywords: "{{ .Keywords }}"
|
||||
search_type: "t_name"
|
||||
category: "0" # multi cat search not supported
|
||||
include_dead_torrents: "yes"
|
||||
rows:
|
||||
selector: table#sortabletable > tbody > tr:has(a[href*="/details.php?id="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
args: 66
|
||||
fields:
|
||||
download:
|
||||
selector: a[href*="/download.php?id="]
|
||||
attribute: href
|
||||
magnet:
|
||||
selector: a[href^="magnet:"]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href*="/details.php?id="]
|
||||
title:
|
||||
selector: div.tooltip-content > div
|
||||
optional: true
|
||||
details:
|
||||
selector: a[href*="/details.php?id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href*="/browse.php?category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
banner:
|
||||
selector: div.tooltip-content > img
|
||||
attribute: src
|
||||
optional: true
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt^="OnlyUp Torrent"]: "0"
|
||||
img[alt^="50% "]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[alt^="multi2 Torrent"]: "2"
|
||||
"*": "1"
|
||||
date:
|
||||
selector: "td:nth-child(2) > div:has(span[style=\"float: right;\"])"
|
||||
remove: span
|
||||
filters:
|
||||
- name: append
|
||||
args: " +01:00"
|
||||
- name: dateparse
|
||||
args: "02-01-2006 15:04 -07:00"
|
||||
@@ -1,238 +1,238 @@
|
||||
---
|
||||
site: dragonworldreloaded
|
||||
name: Dragonworld Reloaded
|
||||
language: de-de
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://dragonworld-reloaded.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Kino
|
||||
- {id: 118, cat: Movies/HD, desc: "Kino - HD"}
|
||||
- {id: 4, cat: Movies/SD, desc: "Kino - SD"}
|
||||
# Movies
|
||||
- {id: 18, cat: Movies/SD, desc: "Movies - x264/XviD"}
|
||||
- {id: 2, cat: Movies, desc: "Movies - Pack SD/HD"}
|
||||
- {id: 22, cat: Movies/DVD, desc: "Movies - DVD/HD2"}
|
||||
- {id: 52, cat: Movies, desc: "Movies - Kids"}
|
||||
- {id: 19, cat: Movies/HD, desc: "Movies - HD"}
|
||||
- {id: 25, cat: Movies/3D, desc: "Movies - 3D"}
|
||||
- {id: 26, cat: Movies/BluRay, desc: "Movies - Blu-Ray"}
|
||||
# Serien
|
||||
- {id: 40, cat: TV/SD, desc: "Serien - SD"}
|
||||
- {id: 41, cat: TV/HD, desc: "Serien - HD"}
|
||||
- {id: 42, cat: TV/SD, desc: "Serien - Pack SD"}
|
||||
- {id: 80, cat: TV/HD, desc: "Serien - Pack HD"}
|
||||
# Musik
|
||||
- {id: 119, cat: Audio, desc: "Musik - ALBEN"}
|
||||
- {id: 5, cat: Audio/MP3, desc: "Musik - Mp3"}
|
||||
- {id: 6, cat: Audio, desc: "Musik - Mixe"}
|
||||
- {id: 92, cat: Audio, desc: "Musik - Discography"}
|
||||
- {id: 114, cat: Audio, desc: "Musik - Musik Pack"}
|
||||
- {id: 48, cat: Audio/Video, desc: "Musik - Video"}
|
||||
# Doku
|
||||
- {id: 37, cat: TV/Documentary, desc: "Doku - SD"}
|
||||
- {id: 38, cat: TV/Documentary, desc: "Doku - HD"}
|
||||
- {id: 81, cat: TV/Documentary, desc: "Doku - Pack "}
|
||||
# Anime
|
||||
- {id: 73, cat: TV/Anime, desc: "Anime - Movies"}
|
||||
- {id: 74, cat: TV/Anime, desc: "Anime - Serien"}
|
||||
# Games
|
||||
- {id: 16, cat: PC/Games, desc: "Games - PC"}
|
||||
- {id: 14, cat: Console/Other, desc: "Games - Wimmelbild"}
|
||||
- {id: 7, cat: Console/PSP, desc: "Games - PSP"}
|
||||
- {id: 17, cat: Console/PS3, desc: "Games - PS2/PS3"}
|
||||
- {id: 29, cat: Console/NDS, desc: "Games - NDS/3DS"}
|
||||
- {id: 15, cat: Console/Wii, desc: "Games - Wii"}
|
||||
- {id: 8, cat: Console/Xbox, desc: "Games - XboX "}
|
||||
# Appz
|
||||
- {id: 30, cat: PC/0day, desc: "Appz - Windows"}
|
||||
- {id: 31, cat: PC/0day, desc: "Appz - Linux"}
|
||||
- {id: 32, cat: PC/Mac, desc: "Appz - Mac"}
|
||||
- {id: 106, cat: PC/Phone-Android, desc: "Appz - Android"}
|
||||
# Sport
|
||||
- {id: 43, cat: TV/Sport, desc: "Sport - SD"}
|
||||
- {id: 50, cat: TV/Sport, desc: "Sport - HD"}
|
||||
# Sonstiges
|
||||
- {id: 34, cat: Books, desc: "Sonstiges - E-Books"}
|
||||
- {id: 35, cat: Audio/Audiobook, desc: "Sonstiges - Audiobook"}
|
||||
- {id: 36, cat: Other, desc: "Sonstiges - Diverses"}
|
||||
# XXX
|
||||
- {id: 46, cat: XXX, desc: "XXX - SD"}
|
||||
- {id: 47, cat: XXX, desc: "XXX - HD"}
|
||||
- {id: 45, cat: XXX, desc: "XXX - Pack"}
|
||||
- {id: 49, cat: XXX, desc: "XXX - Sonstiges"}
|
||||
- {id: 110, cat: XXX, desc: "XXX - Hentai Serie"}
|
||||
- {id: 111, cat: XXX, desc: "XXX - Hentai Movie"}
|
||||
- {id: 116, cat: XXX, desc: "XXX - SexBooks"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: /login.php
|
||||
method: form
|
||||
form: form[action="/login.php"]
|
||||
cookies: ["JAVA=OK"] # avoid jscheck redirect
|
||||
captcha:
|
||||
type: image
|
||||
image: img[src^="cap/captcha_math.php"]
|
||||
input: stringCaptcha
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
loggiin: "einloggen"
|
||||
error:
|
||||
- selector: div#login_error
|
||||
test:
|
||||
path: selection.php
|
||||
|
||||
download:
|
||||
before:
|
||||
path: "ajax_det_poll.php"
|
||||
method: "post"
|
||||
inputs:
|
||||
set_thanks: "thanks"
|
||||
det_id: "{{ .DownloadUri.Query.torrent }}"
|
||||
ajax: "yes"
|
||||
|
||||
search:
|
||||
path: selection.php
|
||||
inputs:
|
||||
search: "{{ .Keywords }}"
|
||||
blah: "0"
|
||||
orderby: "added"
|
||||
sort: "desc"
|
||||
rows:
|
||||
selector: div.selection_wrap
|
||||
fields:
|
||||
download:
|
||||
selector: a.selection_a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?torrent="]
|
||||
title:
|
||||
selector: a.selection_a
|
||||
details:
|
||||
selector: a.selection_a
|
||||
attribute: href
|
||||
category:
|
||||
selector: div.kat_cat_pic
|
||||
case:
|
||||
# Kino
|
||||
":has(div.kat_cat_pic_name:contains(\"Kino\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "118"
|
||||
":has(div.kat_cat_pic_name:contains(\"Kino\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "4"
|
||||
# Movies
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"x264/XviD\"))": "18"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Pack SD/HD\"))": "2"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"DVD/HD2\"))": "22"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Kids\"))": "52"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "19"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"3D\"))": "25"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Blu-Ray\"))": "26"
|
||||
# Serien
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "40"
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "41"
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Pack SD\"))": "42"
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Pack HD\"))": "80"
|
||||
# Musik
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"ALBEN\"))": "119"
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Mp3\"))": "5"
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Mixe\"))": "6"
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Discography\"))": "92"
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Musik Pack\"))": "114"
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Video\"))": "48"
|
||||
# Doku
|
||||
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "37"
|
||||
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "38"
|
||||
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"Pack \"))": "81"
|
||||
# Anime
|
||||
":has(div.kat_cat_pic_name:contains(\"Anime\")):has(div.kat_cat_pic_name_b:contains(\"Movies\"))": "73"
|
||||
":has(div.kat_cat_pic_name:contains(\"Anime\")):has(div.kat_cat_pic_name_b:contains(\"Serien\"))": "74"
|
||||
# Games
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PC\"))": "16"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"Wimmelbild\"))": "14"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PSP\"))": "7"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PS2/PS3\"))": "17"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"NDS/3DS\"))": "29"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"Wii\"))": "15"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"XboX \"))": "8"
|
||||
# Appz
|
||||
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Windows\"))": "30"
|
||||
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Linux\"))": "31"
|
||||
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Mac\"))": "32"
|
||||
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Android\"))": "106"
|
||||
# Sport
|
||||
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "43"
|
||||
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "50"
|
||||
# Sonstiges
|
||||
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"E-Books\"))": "34"
|
||||
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Audiobook\"))": "35"
|
||||
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Diverses\"))": "36"
|
||||
# XXX
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "46"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "47"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Pack\"))": "45"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Sonstiges\"))": "49"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Hentai Serie\"))": "110"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Hentai Movie\"))": "111"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"SexBooks\"))": "116"
|
||||
banner:
|
||||
selector: div[id^="details"] img
|
||||
attribute: src
|
||||
size:
|
||||
selector: div.selection_unter_ad
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
grabs:
|
||||
selector: div.selection_unter_ae
|
||||
filters:
|
||||
- name: trim
|
||||
args: "x"
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
seeders:
|
||||
selector: div.selection_unter_aa
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
leechers:
|
||||
selector: div.selection_unter_aaa
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
":root:has(div.onlyup)": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
date:
|
||||
selector: div.selection_unter_ab
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Heute", "Today"]
|
||||
- name: replace
|
||||
args: ["Gestern", "Yesterday"]
|
||||
- name: replace
|
||||
args: [" um", ""]
|
||||
- name: dateparse
|
||||
args: "02.01.2006 15:04:05"
|
||||
description:
|
||||
selector: selection_unter_af
|
||||
optional: true
|
||||
---
|
||||
site: dragonworldreloaded
|
||||
name: Dragonworld Reloaded
|
||||
language: de-de
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://dragonworld-reloaded.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Kino
|
||||
- {id: 118, cat: Movies/HD, desc: "Kino - HD"}
|
||||
- {id: 4, cat: Movies/SD, desc: "Kino - SD"}
|
||||
# Movies
|
||||
- {id: 18, cat: Movies/SD, desc: "Movies - x264/XviD"}
|
||||
- {id: 2, cat: Movies, desc: "Movies - Pack SD/HD"}
|
||||
- {id: 22, cat: Movies/DVD, desc: "Movies - DVD/HD2"}
|
||||
- {id: 52, cat: Movies, desc: "Movies - Kids"}
|
||||
- {id: 19, cat: Movies/HD, desc: "Movies - HD"}
|
||||
- {id: 25, cat: Movies/3D, desc: "Movies - 3D"}
|
||||
- {id: 26, cat: Movies/BluRay, desc: "Movies - Blu-Ray"}
|
||||
# Serien
|
||||
- {id: 40, cat: TV/SD, desc: "Serien - SD"}
|
||||
- {id: 41, cat: TV/HD, desc: "Serien - HD"}
|
||||
- {id: 42, cat: TV/SD, desc: "Serien - Pack SD"}
|
||||
- {id: 80, cat: TV/HD, desc: "Serien - Pack HD"}
|
||||
# Musik
|
||||
- {id: 119, cat: Audio, desc: "Musik - ALBEN"}
|
||||
- {id: 5, cat: Audio/MP3, desc: "Musik - Mp3"}
|
||||
- {id: 6, cat: Audio, desc: "Musik - Mixe"}
|
||||
- {id: 92, cat: Audio, desc: "Musik - Discography"}
|
||||
- {id: 114, cat: Audio, desc: "Musik - Musik Pack"}
|
||||
- {id: 48, cat: Audio/Video, desc: "Musik - Video"}
|
||||
# Doku
|
||||
- {id: 37, cat: TV/Documentary, desc: "Doku - SD"}
|
||||
- {id: 38, cat: TV/Documentary, desc: "Doku - HD"}
|
||||
- {id: 81, cat: TV/Documentary, desc: "Doku - Pack "}
|
||||
# Anime
|
||||
- {id: 73, cat: TV/Anime, desc: "Anime - Movies"}
|
||||
- {id: 74, cat: TV/Anime, desc: "Anime - Serien"}
|
||||
# Games
|
||||
- {id: 16, cat: PC/Games, desc: "Games - PC"}
|
||||
- {id: 14, cat: Console/Other, desc: "Games - Wimmelbild"}
|
||||
- {id: 7, cat: Console/PSP, desc: "Games - PSP"}
|
||||
- {id: 17, cat: Console/PS3, desc: "Games - PS2/PS3"}
|
||||
- {id: 29, cat: Console/NDS, desc: "Games - NDS/3DS"}
|
||||
- {id: 15, cat: Console/Wii, desc: "Games - Wii"}
|
||||
- {id: 8, cat: Console/Xbox, desc: "Games - XboX "}
|
||||
# Appz
|
||||
- {id: 30, cat: PC/0day, desc: "Appz - Windows"}
|
||||
- {id: 31, cat: PC/0day, desc: "Appz - Linux"}
|
||||
- {id: 32, cat: PC/Mac, desc: "Appz - Mac"}
|
||||
- {id: 106, cat: PC/Phone-Android, desc: "Appz - Android"}
|
||||
# Sport
|
||||
- {id: 43, cat: TV/Sport, desc: "Sport - SD"}
|
||||
- {id: 50, cat: TV/Sport, desc: "Sport - HD"}
|
||||
# Sonstiges
|
||||
- {id: 34, cat: Books, desc: "Sonstiges - E-Books"}
|
||||
- {id: 35, cat: Audio/Audiobook, desc: "Sonstiges - Audiobook"}
|
||||
- {id: 36, cat: Other, desc: "Sonstiges - Diverses"}
|
||||
# XXX
|
||||
- {id: 46, cat: XXX, desc: "XXX - SD"}
|
||||
- {id: 47, cat: XXX, desc: "XXX - HD"}
|
||||
- {id: 45, cat: XXX, desc: "XXX - Pack"}
|
||||
- {id: 49, cat: XXX, desc: "XXX - Sonstiges"}
|
||||
- {id: 110, cat: XXX, desc: "XXX - Hentai Serie"}
|
||||
- {id: 111, cat: XXX, desc: "XXX - Hentai Movie"}
|
||||
- {id: 116, cat: XXX, desc: "XXX - SexBooks"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: /login.php
|
||||
method: form
|
||||
form: form[action="/login.php"]
|
||||
cookies: ["JAVA=OK"] # avoid jscheck redirect
|
||||
captcha:
|
||||
type: image
|
||||
image: img[src^="cap/captcha_math.php"]
|
||||
input: stringCaptcha
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
loggiin: "einloggen"
|
||||
error:
|
||||
- selector: div#login_error
|
||||
test:
|
||||
path: selection.php
|
||||
|
||||
download:
|
||||
before:
|
||||
path: "ajax_det_poll.php"
|
||||
method: "post"
|
||||
inputs:
|
||||
set_thanks: "thanks"
|
||||
det_id: "{{ .DownloadUri.Query.torrent }}"
|
||||
ajax: "yes"
|
||||
|
||||
search:
|
||||
path: selection.php
|
||||
inputs:
|
||||
search: "{{ .Keywords }}"
|
||||
blah: "0"
|
||||
orderby: "added"
|
||||
sort: "desc"
|
||||
rows:
|
||||
selector: div.selection_wrap
|
||||
fields:
|
||||
download:
|
||||
selector: a.selection_a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?torrent="]
|
||||
title:
|
||||
selector: a.selection_a
|
||||
details:
|
||||
selector: a.selection_a
|
||||
attribute: href
|
||||
category:
|
||||
selector: div.kat_cat_pic
|
||||
case:
|
||||
# Kino
|
||||
":has(div.kat_cat_pic_name:contains(\"Kino\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "118"
|
||||
":has(div.kat_cat_pic_name:contains(\"Kino\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "4"
|
||||
# Movies
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"x264/XviD\"))": "18"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Pack SD/HD\"))": "2"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"DVD/HD2\"))": "22"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Kids\"))": "52"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "19"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"3D\"))": "25"
|
||||
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Blu-Ray\"))": "26"
|
||||
# Serien
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "40"
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "41"
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Pack SD\"))": "42"
|
||||
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Pack HD\"))": "80"
|
||||
# Musik
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"ALBEN\"))": "119"
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Mp3\"))": "5"
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Mixe\"))": "6"
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Discography\"))": "92"
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Musik Pack\"))": "114"
|
||||
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Video\"))": "48"
|
||||
# Doku
|
||||
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "37"
|
||||
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "38"
|
||||
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"Pack \"))": "81"
|
||||
# Anime
|
||||
":has(div.kat_cat_pic_name:contains(\"Anime\")):has(div.kat_cat_pic_name_b:contains(\"Movies\"))": "73"
|
||||
":has(div.kat_cat_pic_name:contains(\"Anime\")):has(div.kat_cat_pic_name_b:contains(\"Serien\"))": "74"
|
||||
# Games
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PC\"))": "16"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"Wimmelbild\"))": "14"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PSP\"))": "7"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PS2/PS3\"))": "17"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"NDS/3DS\"))": "29"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"Wii\"))": "15"
|
||||
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"XboX \"))": "8"
|
||||
# Appz
|
||||
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Windows\"))": "30"
|
||||
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Linux\"))": "31"
|
||||
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Mac\"))": "32"
|
||||
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Android\"))": "106"
|
||||
# Sport
|
||||
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "43"
|
||||
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "50"
|
||||
# Sonstiges
|
||||
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"E-Books\"))": "34"
|
||||
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Audiobook\"))": "35"
|
||||
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Diverses\"))": "36"
|
||||
# XXX
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "46"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "47"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Pack\"))": "45"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Sonstiges\"))": "49"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Hentai Serie\"))": "110"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Hentai Movie\"))": "111"
|
||||
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"SexBooks\"))": "116"
|
||||
banner:
|
||||
selector: div[id^="details"] img
|
||||
attribute: src
|
||||
size:
|
||||
selector: div.selection_unter_ad
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
grabs:
|
||||
selector: div.selection_unter_ae
|
||||
filters:
|
||||
- name: trim
|
||||
args: "x"
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
seeders:
|
||||
selector: div.selection_unter_aa
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
leechers:
|
||||
selector: div.selection_unter_aaa
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
":root:has(div.onlyup)": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
date:
|
||||
selector: div.selection_unter_ab
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Heute", "Today"]
|
||||
- name: replace
|
||||
args: ["Gestern", "Yesterday"]
|
||||
- name: replace
|
||||
args: [" um", ""]
|
||||
- name: dateparse
|
||||
args: "02.01.2006 15:04:05"
|
||||
description:
|
||||
selector: selection_unter_af
|
||||
optional: true
|
||||
|
||||
@@ -1,320 +1,325 @@
|
||||
---
|
||||
site: dreamteam
|
||||
name: Dream Team
|
||||
language: el-gr
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://dream-team.ml/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# - {id: 115, cat: , desc: ""}
|
||||
- {id: 115, cat: Movies, desc: "One foreign films external subtitles"}
|
||||
- {id: 130, cat: Movies, desc: "CAM / TS / TC"}
|
||||
- {id: 131, cat: Movies, desc: "DVDSCR / PPVRiP / WebRip / R5"}
|
||||
- {id: 132, cat: Movies, desc: "DVDRrip"}
|
||||
- {id: 133, cat: Movies, desc: "BDRip / BRRip / HDRip"}
|
||||
- {id: 134, cat: Movies, desc: "MicroHD"}
|
||||
- {id: 135, cat: Movies, desc: "HD - WEB-DL"}
|
||||
- {id: 136, cat: Movies, desc: "HD - 480p"}
|
||||
- {id: 137, cat: Movies, desc: "HD - 720p"}
|
||||
- {id: 138, cat: Movies, desc: "HD - 1080p"}
|
||||
- {id: 139, cat: Movies, desc: "9.01 3D HD 720p Half SBS & OU"}
|
||||
- {id: 140, cat: Movies, desc: "9.2 3D HD 1080p Half SBS & OU"}
|
||||
- {id: 141, cat: Movies, desc: "9.3 3D Bluray Disc HD 720p / 1080p"}
|
||||
- {id: 142, cat: Movies, desc: "9.4 3D MicroHD 720p / 1080p"}
|
||||
- {id: 144, cat: Movies, desc: "9.5 packages"}
|
||||
- {id: 145, cat: Movies, desc: "9.6 filmography"}
|
||||
- {id: 143, cat: Movies, desc: "9.7 Tv Movies"}
|
||||
# - {id: 130, cat: , desc: ""}
|
||||
# - {id: 131, cat: , desc: ""}
|
||||
# - {id: 132, cat: , desc: ""}
|
||||
# - {id: 133, cat: , desc: ""}
|
||||
# - {id: 134, cat: , desc: ""}
|
||||
# - {id: 135, cat: , desc: ""}
|
||||
# - {id: 136, cat: , desc: ""}
|
||||
# - {id: 137, cat: , desc: ""}
|
||||
# - {id: 138, cat: , desc: ""}
|
||||
# - {id: 139, cat: , desc: ""}
|
||||
# - {id: 140, cat: , desc: ""}
|
||||
# - {id: 141, cat: , desc: ""}
|
||||
# - {id: 142, cat: , desc: ""}
|
||||
# - {id: 144, cat: , desc: ""}
|
||||
# - {id: 145, cat: , desc: ""}
|
||||
# - {id: 143, cat: , desc: ""}
|
||||
# - {id: 116, cat: , desc: ""}
|
||||
- {id: 116, cat: Movies, desc: "Two foreign films integrated subtitles"}
|
||||
- {id: 146, cat: Movies, desc: "CAM / TS / TC"}
|
||||
- {id: 147, cat: Movies, desc: "DVDSCR / PPVRiP / WebRip / R5"}
|
||||
- {id: 148, cat: Movies, desc: "DVDRrip"}
|
||||
- {id: 149, cat: Movies, desc: "BDRip / BRRip / HDRip"}
|
||||
- {id: 150, cat: Movies, desc: "MicroHD"}
|
||||
- {id: 151, cat: Movies, desc: "HD - WEB-DL"}
|
||||
- {id: 152, cat: Movies, desc: "Tv Movies"}
|
||||
# - {id: 242, cat: , desc: ""}
|
||||
- {id: 153, cat: Movies, desc: "Packages"}
|
||||
- {id: 154, cat: Movies, desc: "filmography"}
|
||||
- {id: 243, cat: Movies, desc: "HD 1080p"}
|
||||
- {id: 244, cat: Movies, desc: "HD 480p"}
|
||||
# - {id: 146, cat: , desc: ""}
|
||||
# - {id: 147, cat: , desc: ""}
|
||||
# - {id: 148, cat: , desc: ""}
|
||||
# - {id: 149, cat: , desc: ""}
|
||||
# - {id: 150, cat: , desc: ""}
|
||||
# - {id: 151, cat: , desc: ""}
|
||||
# - {id: 152, cat: , desc: ""}
|
||||
# - {id: 242, cat: , desc: ""}
|
||||
# - {id: 153, cat: , desc: ""}
|
||||
# - {id: 154, cat: , desc: ""}
|
||||
# - {id: 243, cat: , desc: ""}
|
||||
# - {id: 244, cat: , desc: ""}
|
||||
# - {id: 117, cat: , desc: ""}
|
||||
- {id: 117, cat: Movies, desc: "???????e? ?a???e?"}
|
||||
- {id: 155, cat: Movies, desc: "CAM / TS / TC"}
|
||||
- {id: 156, cat: Movies, desc: "SCR / PPVRiP / Webrip / R5"}
|
||||
- {id: 157, cat: Movies, desc: "DVDRrip 3"}
|
||||
- {id: 158, cat: Movies, desc: "BDRip / BRRip / HDRip"}
|
||||
- {id: 159, cat: Movies, desc: "MicroHD 5"}
|
||||
- {id: 160, cat: Movies, desc: "HD - 480p"}
|
||||
- {id: 161, cat: Movies, desc: "6.1 HD - 720p"}
|
||||
- {id: 162, cat: Movies, desc: "HD 6.2 - 1080"}
|
||||
- {id: 163, cat: Movies, desc: "TV Movies"}
|
||||
- {id: 164, cat: Movies, desc: "?a?eta 8"}
|
||||
- {id: 165, cat: Movies, desc: "F??µ???af?e?"}
|
||||
# - {id: 155, cat: , desc: ""}
|
||||
# - {id: 156, cat: , desc: ""}
|
||||
# - {id: 157, cat: , desc: ""}
|
||||
# - {id: 158, cat: , desc: ""}
|
||||
# - {id: 159, cat: , desc: ""}
|
||||
# - {id: 160, cat: , desc: ""}
|
||||
# - {id: 161, cat: , desc: ""}
|
||||
# - {id: 162, cat: , desc: ""}
|
||||
# - {id: 163, cat: , desc: ""}
|
||||
# - {id: 164, cat: , desc: ""}
|
||||
# - {id: 165, cat: , desc: ""}
|
||||
# - {id: 118, cat: , desc: ""}
|
||||
- {id: 118, cat: TV, desc: "Foreign Television external subtitles"}
|
||||
- {id: 166, cat: TV, desc: "SD"}
|
||||
- {id: 167, cat: TV, desc: "720p"}
|
||||
- {id: 168, cat: TV, desc: "1080p"}
|
||||
- {id: 169, cat: TV, desc: "Sport"}
|
||||
- {id: 170, cat: TV, desc: "documentaries"}
|
||||
- {id: 171, cat: TV, desc: "Packages"}
|
||||
# - {id: 166, cat: , desc: ""}
|
||||
# - {id: 167, cat: , desc: ""}
|
||||
# - {id: 168, cat: , desc: ""}
|
||||
# - {id: 169, cat: , desc: ""}
|
||||
# - {id: 170, cat: , desc: ""}
|
||||
# - {id: 171, cat: , desc: ""}
|
||||
# - {id: 119, cat: , desc: ""}
|
||||
- {id: 119, cat: TV, desc: "foreign Television integrated subtitles"}
|
||||
- {id: 172, cat: TV, desc: "SD"}
|
||||
- {id: 173, cat: TV, desc: "720p"}
|
||||
- {id: 174, cat: TV, desc: "1080p"}
|
||||
- {id: 175, cat: TV, desc: "Sport"}
|
||||
- {id: 176, cat: TV, desc: "documentaries"}
|
||||
- {id: 177, cat: TV, desc: "Tv Rips"}
|
||||
- {id: 178, cat: TV, desc: "Packages"}
|
||||
# - {id: 172, cat: , desc: ""}
|
||||
# - {id: 173, cat: , desc: ""}
|
||||
# - {id: 174, cat: , desc: ""}
|
||||
# - {id: 175, cat: , desc: ""}
|
||||
# - {id: 176, cat: , desc: ""}
|
||||
# - {id: 177, cat: , desc: ""}
|
||||
# - {id: 178, cat: , desc: ""}
|
||||
# - {id: 120, cat: , desc: ""}
|
||||
- {id: 120, cat: TV, desc: "Greek Television"}
|
||||
- {id: 179, cat: TV, desc: "SD"}
|
||||
- {id: 180, cat: TV, desc: "720p"}
|
||||
- {id: 181, cat: TV, desc: "1080p"}
|
||||
- {id: 182, cat: TV, desc: "Sport"}
|
||||
- {id: 183, cat: TV, desc: "five documentaries"}
|
||||
- {id: 184, cat: TV, desc: "six Tv Rips"}
|
||||
- {id: 185, cat: TV, desc: "Packages"}
|
||||
# - {id: 179, cat: , desc: ""}
|
||||
# - {id: 180, cat: , desc: ""}
|
||||
# - {id: 181, cat: , desc: ""}
|
||||
# - {id: 182, cat: , desc: ""}
|
||||
# - {id: 183, cat: , desc: ""}
|
||||
# - {id: 184, cat: , desc: ""}
|
||||
# - {id: 185, cat: , desc: ""}
|
||||
# - {id: 122, cat: , desc: ""}
|
||||
- {id: 122, cat: Audio, desc: "?e?? ???s???"}
|
||||
- {id: 216, cat: Audio, desc: "1. DJs Stuff & Promos"}
|
||||
- {id: 217, cat: Audio, desc: "2. DJs Stuff & Promos (Flac)"}
|
||||
- {id: 218, cat: Audio, desc: "3. Singles"}
|
||||
- {id: 219, cat: Audio, desc: "4. Singles (Flac)"}
|
||||
- {id: 220, cat: Audio, desc: "5. ??s????af?e?"}
|
||||
- {id: 221, cat: Audio, desc: "6. ??s????af?e? (Flac)"}
|
||||
- {id: 222, cat: Audio, desc: "7. ??af??e? S?????e?"}
|
||||
- {id: 223, cat: Audio, desc: "8. ??af??e? S?????e? (Flac)"}
|
||||
- {id: 224, cat: Audio, desc: "9. SoundTracks"}
|
||||
- {id: 225, cat: Audio, desc: "9.1 Varius Artist"}
|
||||
- {id: 226, cat: Audio, desc: "9.2 Compact Disc Club"}
|
||||
- {id: 227, cat: Audio, desc: "9.3 ???s??a Video Clips"}
|
||||
# - {id: 123, cat: , desc: ""}
|
||||
- {id: 123, cat: Audio, desc: "???????? ???s???"}
|
||||
- {id: 228, cat: Audio, desc: "1. DJs Stuff & Promos"}
|
||||
- {id: 229, cat: Audio, desc: "2. DJs Stuff & Promos (Flac)"}
|
||||
- {id: 230, cat: Audio, desc: "3. Singles"}
|
||||
- {id: 231, cat: Audio, desc: "4. Singles (Flac)"}
|
||||
- {id: 232, cat: Audio, desc: "5. ??s????af?e?"}
|
||||
- {id: 233, cat: Audio, desc: "6. ??s????af?e? (Flac)"}
|
||||
- {id: 234, cat: Audio, desc: "7. ??af??e? S?????e?"}
|
||||
- {id: 235, cat: Audio, desc: "8. ??af??e? S?????e? (Flac)"}
|
||||
- {id: 236, cat: Audio, desc: "9. ?a?d??a"}
|
||||
- {id: 237, cat: Audio, desc: "9.1 SoundTracks"}
|
||||
- {id: 238, cat: Audio, desc: "9.2 Varius Artist"}
|
||||
- {id: 239, cat: Audio, desc: "9.3 Compact Disc Club"}
|
||||
- {id: 240, cat: Audio, desc: "9.4 ???s??a Video Clips"}
|
||||
# - {id: 121, cat: , desc: ""}
|
||||
- {id: 121, cat: Movies, desc: "children"}
|
||||
- {id: 186, cat: Movies, desc: "children's films external subtitles"}
|
||||
- {id: 187, cat: Movies, desc: "two children's films integrated subtitles"}
|
||||
- {id: 188, cat: Movies, desc: "three children's films Metaglotismenes"}
|
||||
- {id: 189, cat: Movies, desc: "four cartoon series external subtitles"}
|
||||
- {id: 190, cat: Movies, desc: "five children's series integrated subtitles"}
|
||||
- {id: 191, cat: Movies, desc: "six children's series Metaglotismenes"}
|
||||
- {id: 192, cat: Movies, desc: "Anime external subtitles"}
|
||||
- {id: 193, cat: Movies, desc: "Anime integrated subtitles"}
|
||||
- {id: 194, cat: Movies, desc: "Anime Metaglotismenes"}
|
||||
# - {id: 186, cat: , desc: ""}
|
||||
# - {id: 187, cat: , desc: ""}
|
||||
# - {id: 188, cat: , desc: ""}
|
||||
# - {id: 189, cat: , desc: ""}
|
||||
# - {id: 190, cat: , desc: ""}
|
||||
# - {id: 191, cat: , desc: ""}
|
||||
# - {id: 192, cat: , desc: ""}
|
||||
# - {id: 193, cat: , desc: ""}
|
||||
# - {id: 194, cat: , desc: ""}
|
||||
# - {id: 128, cat: , desc: ""}
|
||||
- {id: 128, cat: Console, desc: "9.1 ?a????d?a"}
|
||||
- {id: 195, cat: Console, desc: "Windows Games"}
|
||||
- {id: 196, cat: Console, desc: "Nintendo DS"}
|
||||
- {id: 197, cat: Console, desc: "Sony PS1"}
|
||||
- {id: 198, cat: Console, desc: "Sony PS2"}
|
||||
- {id: 199, cat: Console, desc: "Sony PS3"}
|
||||
- {id: 200, cat: Console, desc: "Sony PSP"}
|
||||
- {id: 201, cat: Console, desc: "Wii"}
|
||||
- {id: 202, cat: Console, desc: "XboX 360"}
|
||||
# - {id: 124, cat: , desc: ""}
|
||||
- {id: 124, cat: PC, desc: "9.2 Applications"}
|
||||
- {id: 203, cat: PC, desc: "Applications Windows"}
|
||||
- {id: 204, cat: PC, desc: "Applications Mac"}
|
||||
- {id: 205, cat: PC, desc: "Linux Applications"}
|
||||
# - {id: 203, cat: , desc: ""}
|
||||
# - {id: 204, cat: , desc: ""}
|
||||
# - {id: 205, cat: , desc: ""}
|
||||
# - {id: 126, cat: , desc: ""}
|
||||
- {id: 126, cat: Books, desc: "9.3 Electronic Books"}
|
||||
- {id: 206, cat: Books, desc: "Electronic books"}
|
||||
- {id: 207, cat: Books, desc: "Magazines"}
|
||||
- {id: 208, cat: Books, desc: "Comic Books"}
|
||||
# - {id: 206, cat: , desc: ""}
|
||||
# - {id: 207, cat: , desc: ""}
|
||||
# - {id: 208, cat: , desc: ""}
|
||||
# - {id: 125, cat: , desc: ""}
|
||||
- {id: 125, cat: Other, desc: "9.4 Gallery"}
|
||||
- {id: 209, cat: Other, desc: "Gallery"}
|
||||
- {id: 210, cat: Other, desc: "Gallery HD"}
|
||||
- {id: 211, cat: Other, desc: "Photos 3D"}
|
||||
- {id: 212, cat: Other, desc: "Wallpapers"}
|
||||
- {id: 213, cat: Other, desc: "Screensavers"}
|
||||
# - {id: 209, cat: , desc: ""}
|
||||
# - {id: 210, cat: , desc: ""}
|
||||
# - {id: 211, cat: , desc: ""}
|
||||
# - {id: 212, cat: , desc: ""}
|
||||
# - {id: 213, cat: , desc: ""}
|
||||
# - {id: 127, cat: , desc: ""}
|
||||
- {id: 127, cat: PC/Phone-Other, desc: "9.5 Mobile / Miscellaneous"}
|
||||
- {id: 214, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
- {id: 215, cat: PC/Phone-Other, desc: "Miscellaneous"}
|
||||
# - {id: 214, cat: , desc: ""}
|
||||
# - {id: 215, cat: , desc: ""}
|
||||
# - {id: 129, cat: , desc: ""}
|
||||
- {id: 129, cat: Other, desc: "9.6 Blocked DREAM TEAM"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td:contains("remaining tries")
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href^="http://dream-team.ml/logout.php"]
|
||||
|
||||
download:
|
||||
before:
|
||||
path: "takethanks.php"
|
||||
method: "post"
|
||||
inputs:
|
||||
torrentid: "{{ .DownloadUri.Query.id }}"
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
keywordsfilters:
|
||||
# remove words <= 3 characters and surrounding special characters
|
||||
- name: re_replace
|
||||
args: ["(?:^|\\s)[_\\+\\/\\.\\-\\(\\)]*[\\S]{0,3}[_\\+\\/\\.\\-\\(\\)]*(?:\\s|$)", " "]
|
||||
inputs:
|
||||
do: "search"
|
||||
keywords: "{{ .Keywords }}"
|
||||
search_type: "t_name"
|
||||
category: "0" # multi cat search not supported
|
||||
include_dead_torrents: "yes"
|
||||
rows:
|
||||
selector: table#sortabletable > tbody > tr:has(a[href^="http://dream-team.ml/details.php?id="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
args: 66
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="http://dream-team.ml/download.php?id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href^="http://dream-team.ml/details.php?id="]
|
||||
title|optional:
|
||||
selector: div.tooltip-content > div
|
||||
details:
|
||||
selector: a[href^="http://dream-team.ml/details.php?id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href^="http://dream-team.ml/browse.php?category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
banner|optional:
|
||||
selector: div.tooltip-content > img
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt^="Free Torrent "]: "0"
|
||||
img[alt^="Silver Torrent "]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
date:
|
||||
selector: "td:nth-child(2) > div:has(span[style=\"float: right;\"])"
|
||||
remove: span
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00"
|
||||
- name: dateparse
|
||||
args: "02-01-2006 15:04 -07:00"
|
||||
---
|
||||
site: dreamteam
|
||||
name: Dream Team
|
||||
language: el-gr
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://dream-team.ga/
|
||||
legacylinks:
|
||||
- http://dream-team.ml/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# - {id: 115, cat: , desc: ""}
|
||||
- {id: 115, cat: Movies, desc: "One foreign films external subtitles"}
|
||||
- {id: 130, cat: Movies, desc: "CAM / TS / TC"}
|
||||
- {id: 131, cat: Movies, desc: "DVDSCR / PPVRiP / WebRip / R5"}
|
||||
- {id: 132, cat: Movies, desc: "DVDRrip"}
|
||||
- {id: 133, cat: Movies, desc: "BDRip / BRRip / HDRip"}
|
||||
- {id: 134, cat: Movies, desc: "MicroHD"}
|
||||
- {id: 135, cat: Movies, desc: "HD - WEB-DL"}
|
||||
- {id: 136, cat: Movies, desc: "HD - 480p"}
|
||||
- {id: 137, cat: Movies, desc: "HD - 720p"}
|
||||
- {id: 138, cat: Movies, desc: "HD - 1080p"}
|
||||
- {id: 139, cat: Movies, desc: "9.01 3D HD 720p Half SBS & OU"}
|
||||
- {id: 140, cat: Movies, desc: "9.2 3D HD 1080p Half SBS & OU"}
|
||||
- {id: 141, cat: Movies, desc: "9.3 3D Bluray Disc HD 720p / 1080p"}
|
||||
- {id: 142, cat: Movies, desc: "9.4 3D MicroHD 720p / 1080p"}
|
||||
- {id: 144, cat: Movies, desc: "9.5 packages"}
|
||||
- {id: 145, cat: Movies, desc: "9.6 filmography"}
|
||||
- {id: 143, cat: Movies, desc: "9.7 Tv Movies"}
|
||||
# - {id: 130, cat: , desc: ""}
|
||||
# - {id: 131, cat: , desc: ""}
|
||||
# - {id: 132, cat: , desc: ""}
|
||||
# - {id: 133, cat: , desc: ""}
|
||||
# - {id: 134, cat: , desc: ""}
|
||||
# - {id: 135, cat: , desc: ""}
|
||||
# - {id: 136, cat: , desc: ""}
|
||||
# - {id: 137, cat: , desc: ""}
|
||||
# - {id: 138, cat: , desc: ""}
|
||||
# - {id: 139, cat: , desc: ""}
|
||||
# - {id: 140, cat: , desc: ""}
|
||||
# - {id: 141, cat: , desc: ""}
|
||||
# - {id: 142, cat: , desc: ""}
|
||||
# - {id: 144, cat: , desc: ""}
|
||||
# - {id: 145, cat: , desc: ""}
|
||||
# - {id: 143, cat: , desc: ""}
|
||||
# - {id: 116, cat: , desc: ""}
|
||||
- {id: 116, cat: Movies, desc: "Two foreign films integrated subtitles"}
|
||||
- {id: 146, cat: Movies, desc: "CAM / TS / TC"}
|
||||
- {id: 147, cat: Movies, desc: "DVDSCR / PPVRiP / WebRip / R5"}
|
||||
- {id: 148, cat: Movies, desc: "DVDRrip"}
|
||||
- {id: 149, cat: Movies, desc: "BDRip / BRRip / HDRip"}
|
||||
- {id: 150, cat: Movies, desc: "MicroHD"}
|
||||
- {id: 151, cat: Movies, desc: "HD - WEB-DL"}
|
||||
- {id: 152, cat: Movies, desc: "Tv Movies"}
|
||||
# - {id: 242, cat: , desc: ""}
|
||||
- {id: 153, cat: Movies, desc: "Packages"}
|
||||
- {id: 154, cat: Movies, desc: "filmography"}
|
||||
- {id: 243, cat: Movies, desc: "HD 1080p"}
|
||||
- {id: 244, cat: Movies, desc: "HD 480p"}
|
||||
# - {id: 146, cat: , desc: ""}
|
||||
# - {id: 147, cat: , desc: ""}
|
||||
# - {id: 148, cat: , desc: ""}
|
||||
# - {id: 149, cat: , desc: ""}
|
||||
# - {id: 150, cat: , desc: ""}
|
||||
# - {id: 151, cat: , desc: ""}
|
||||
# - {id: 152, cat: , desc: ""}
|
||||
# - {id: 242, cat: , desc: ""}
|
||||
# - {id: 153, cat: , desc: ""}
|
||||
# - {id: 154, cat: , desc: ""}
|
||||
# - {id: 243, cat: , desc: ""}
|
||||
# - {id: 244, cat: , desc: ""}
|
||||
# - {id: 117, cat: , desc: ""}
|
||||
- {id: 117, cat: Movies, desc: "???????e? ?a???e?"}
|
||||
- {id: 155, cat: Movies, desc: "CAM / TS / TC"}
|
||||
- {id: 156, cat: Movies, desc: "SCR / PPVRiP / Webrip / R5"}
|
||||
- {id: 157, cat: Movies, desc: "DVDRrip 3"}
|
||||
- {id: 158, cat: Movies, desc: "BDRip / BRRip / HDRip"}
|
||||
- {id: 159, cat: Movies, desc: "MicroHD 5"}
|
||||
- {id: 160, cat: Movies, desc: "HD - 480p"}
|
||||
- {id: 161, cat: Movies, desc: "6.1 HD - 720p"}
|
||||
- {id: 162, cat: Movies, desc: "HD 6.2 - 1080"}
|
||||
- {id: 163, cat: Movies, desc: "TV Movies"}
|
||||
- {id: 164, cat: Movies, desc: "?a?eta 8"}
|
||||
- {id: 165, cat: Movies, desc: "F??µ???af?e?"}
|
||||
# - {id: 155, cat: , desc: ""}
|
||||
# - {id: 156, cat: , desc: ""}
|
||||
# - {id: 157, cat: , desc: ""}
|
||||
# - {id: 158, cat: , desc: ""}
|
||||
# - {id: 159, cat: , desc: ""}
|
||||
# - {id: 160, cat: , desc: ""}
|
||||
# - {id: 161, cat: , desc: ""}
|
||||
# - {id: 162, cat: , desc: ""}
|
||||
# - {id: 163, cat: , desc: ""}
|
||||
# - {id: 164, cat: , desc: ""}
|
||||
# - {id: 165, cat: , desc: ""}
|
||||
# - {id: 118, cat: , desc: ""}
|
||||
- {id: 118, cat: TV, desc: "Foreign Television external subtitles"}
|
||||
- {id: 166, cat: TV, desc: "SD"}
|
||||
- {id: 167, cat: TV, desc: "720p"}
|
||||
- {id: 168, cat: TV, desc: "1080p"}
|
||||
- {id: 169, cat: TV, desc: "Sport"}
|
||||
- {id: 170, cat: TV, desc: "documentaries"}
|
||||
- {id: 171, cat: TV, desc: "Packages"}
|
||||
# - {id: 166, cat: , desc: ""}
|
||||
# - {id: 167, cat: , desc: ""}
|
||||
# - {id: 168, cat: , desc: ""}
|
||||
# - {id: 169, cat: , desc: ""}
|
||||
# - {id: 170, cat: , desc: ""}
|
||||
# - {id: 171, cat: , desc: ""}
|
||||
# - {id: 119, cat: , desc: ""}
|
||||
- {id: 119, cat: TV, desc: "foreign Television integrated subtitles"}
|
||||
- {id: 172, cat: TV, desc: "SD"}
|
||||
- {id: 173, cat: TV, desc: "720p"}
|
||||
- {id: 174, cat: TV, desc: "1080p"}
|
||||
- {id: 175, cat: TV, desc: "Sport"}
|
||||
- {id: 176, cat: TV, desc: "documentaries"}
|
||||
- {id: 177, cat: TV, desc: "Tv Rips"}
|
||||
- {id: 178, cat: TV, desc: "Packages"}
|
||||
# - {id: 172, cat: , desc: ""}
|
||||
# - {id: 173, cat: , desc: ""}
|
||||
# - {id: 174, cat: , desc: ""}
|
||||
# - {id: 175, cat: , desc: ""}
|
||||
# - {id: 176, cat: , desc: ""}
|
||||
# - {id: 177, cat: , desc: ""}
|
||||
# - {id: 178, cat: , desc: ""}
|
||||
# - {id: 120, cat: , desc: ""}
|
||||
- {id: 120, cat: TV, desc: "Greek Television"}
|
||||
- {id: 179, cat: TV, desc: "SD"}
|
||||
- {id: 180, cat: TV, desc: "720p"}
|
||||
- {id: 181, cat: TV, desc: "1080p"}
|
||||
- {id: 182, cat: TV, desc: "Sport"}
|
||||
- {id: 183, cat: TV, desc: "five documentaries"}
|
||||
- {id: 184, cat: TV, desc: "six Tv Rips"}
|
||||
- {id: 185, cat: TV, desc: "Packages"}
|
||||
# - {id: 179, cat: , desc: ""}
|
||||
# - {id: 180, cat: , desc: ""}
|
||||
# - {id: 181, cat: , desc: ""}
|
||||
# - {id: 182, cat: , desc: ""}
|
||||
# - {id: 183, cat: , desc: ""}
|
||||
# - {id: 184, cat: , desc: ""}
|
||||
# - {id: 185, cat: , desc: ""}
|
||||
# - {id: 122, cat: , desc: ""}
|
||||
- {id: 122, cat: Audio, desc: "?e?? ???s???"}
|
||||
- {id: 216, cat: Audio, desc: "1. DJs Stuff & Promos"}
|
||||
- {id: 217, cat: Audio, desc: "2. DJs Stuff & Promos (Flac)"}
|
||||
- {id: 218, cat: Audio, desc: "3. Singles"}
|
||||
- {id: 219, cat: Audio, desc: "4. Singles (Flac)"}
|
||||
- {id: 220, cat: Audio, desc: "5. ??s????af?e?"}
|
||||
- {id: 221, cat: Audio, desc: "6. ??s????af?e? (Flac)"}
|
||||
- {id: 222, cat: Audio, desc: "7. ??af??e? S?????e?"}
|
||||
- {id: 223, cat: Audio, desc: "8. ??af??e? S?????e? (Flac)"}
|
||||
- {id: 224, cat: Audio, desc: "9. SoundTracks"}
|
||||
- {id: 225, cat: Audio, desc: "9.1 Varius Artist"}
|
||||
- {id: 226, cat: Audio, desc: "9.2 Compact Disc Club"}
|
||||
- {id: 227, cat: Audio, desc: "9.3 ???s??a Video Clips"}
|
||||
# - {id: 123, cat: , desc: ""}
|
||||
- {id: 123, cat: Audio, desc: "???????? ???s???"}
|
||||
- {id: 228, cat: Audio, desc: "1. DJs Stuff & Promos"}
|
||||
- {id: 229, cat: Audio, desc: "2. DJs Stuff & Promos (Flac)"}
|
||||
- {id: 230, cat: Audio, desc: "3. Singles"}
|
||||
- {id: 231, cat: Audio, desc: "4. Singles (Flac)"}
|
||||
- {id: 232, cat: Audio, desc: "5. ??s????af?e?"}
|
||||
- {id: 233, cat: Audio, desc: "6. ??s????af?e? (Flac)"}
|
||||
- {id: 234, cat: Audio, desc: "7. ??af??e? S?????e?"}
|
||||
- {id: 235, cat: Audio, desc: "8. ??af??e? S?????e? (Flac)"}
|
||||
- {id: 236, cat: Audio, desc: "9. ?a?d??a"}
|
||||
- {id: 237, cat: Audio, desc: "9.1 SoundTracks"}
|
||||
- {id: 238, cat: Audio, desc: "9.2 Varius Artist"}
|
||||
- {id: 239, cat: Audio, desc: "9.3 Compact Disc Club"}
|
||||
- {id: 240, cat: Audio, desc: "9.4 ???s??a Video Clips"}
|
||||
# - {id: 121, cat: , desc: ""}
|
||||
- {id: 121, cat: Movies, desc: "children"}
|
||||
- {id: 186, cat: Movies, desc: "children's films external subtitles"}
|
||||
- {id: 187, cat: Movies, desc: "two children's films integrated subtitles"}
|
||||
- {id: 188, cat: Movies, desc: "three children's films Metaglotismenes"}
|
||||
- {id: 189, cat: Movies, desc: "four cartoon series external subtitles"}
|
||||
- {id: 190, cat: Movies, desc: "five children's series integrated subtitles"}
|
||||
- {id: 191, cat: Movies, desc: "six children's series Metaglotismenes"}
|
||||
- {id: 192, cat: Movies, desc: "Anime external subtitles"}
|
||||
- {id: 193, cat: Movies, desc: "Anime integrated subtitles"}
|
||||
- {id: 194, cat: Movies, desc: "Anime Metaglotismenes"}
|
||||
# - {id: 186, cat: , desc: ""}
|
||||
# - {id: 187, cat: , desc: ""}
|
||||
# - {id: 188, cat: , desc: ""}
|
||||
# - {id: 189, cat: , desc: ""}
|
||||
# - {id: 190, cat: , desc: ""}
|
||||
# - {id: 191, cat: , desc: ""}
|
||||
# - {id: 192, cat: , desc: ""}
|
||||
# - {id: 193, cat: , desc: ""}
|
||||
# - {id: 194, cat: , desc: ""}
|
||||
# - {id: 128, cat: , desc: ""}
|
||||
- {id: 128, cat: Console, desc: "9.1 ?a????d?a"}
|
||||
- {id: 195, cat: Console, desc: "Windows Games"}
|
||||
- {id: 196, cat: Console, desc: "Nintendo DS"}
|
||||
- {id: 197, cat: Console, desc: "Sony PS1"}
|
||||
- {id: 198, cat: Console, desc: "Sony PS2"}
|
||||
- {id: 199, cat: Console, desc: "Sony PS3"}
|
||||
- {id: 200, cat: Console, desc: "Sony PSP"}
|
||||
- {id: 201, cat: Console, desc: "Wii"}
|
||||
- {id: 202, cat: Console, desc: "XboX 360"}
|
||||
# - {id: 124, cat: , desc: ""}
|
||||
- {id: 124, cat: PC, desc: "9.2 Applications"}
|
||||
- {id: 203, cat: PC, desc: "Applications Windows"}
|
||||
- {id: 204, cat: PC, desc: "Applications Mac"}
|
||||
- {id: 205, cat: PC, desc: "Linux Applications"}
|
||||
# - {id: 203, cat: , desc: ""}
|
||||
# - {id: 204, cat: , desc: ""}
|
||||
# - {id: 205, cat: , desc: ""}
|
||||
# - {id: 126, cat: , desc: ""}
|
||||
- {id: 126, cat: Books, desc: "9.3 Electronic Books"}
|
||||
- {id: 206, cat: Books, desc: "Electronic books"}
|
||||
- {id: 207, cat: Books, desc: "Magazines"}
|
||||
- {id: 208, cat: Books, desc: "Comic Books"}
|
||||
# - {id: 206, cat: , desc: ""}
|
||||
# - {id: 207, cat: , desc: ""}
|
||||
# - {id: 208, cat: , desc: ""}
|
||||
# - {id: 125, cat: , desc: ""}
|
||||
- {id: 125, cat: Other, desc: "9.4 Gallery"}
|
||||
- {id: 209, cat: Other, desc: "Gallery"}
|
||||
- {id: 210, cat: Other, desc: "Gallery HD"}
|
||||
- {id: 211, cat: Other, desc: "Photos 3D"}
|
||||
- {id: 212, cat: Other, desc: "Wallpapers"}
|
||||
- {id: 213, cat: Other, desc: "Screensavers"}
|
||||
# - {id: 209, cat: , desc: ""}
|
||||
# - {id: 210, cat: , desc: ""}
|
||||
# - {id: 211, cat: , desc: ""}
|
||||
# - {id: 212, cat: , desc: ""}
|
||||
# - {id: 213, cat: , desc: ""}
|
||||
# - {id: 127, cat: , desc: ""}
|
||||
- {id: 127, cat: PC/Phone-Other, desc: "9.5 Mobile / Miscellaneous"}
|
||||
- {id: 214, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
- {id: 215, cat: PC/Phone-Other, desc: "Miscellaneous"}
|
||||
# - {id: 214, cat: , desc: ""}
|
||||
# - {id: 215, cat: , desc: ""}
|
||||
# - {id: 129, cat: , desc: ""}
|
||||
- {id: 129, cat: Other, desc: "9.6 Blocked DREAM TEAM"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td:contains("remaining tries")
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href*="/logout.php"]
|
||||
|
||||
download:
|
||||
before:
|
||||
path: "takethanks.php"
|
||||
method: "post"
|
||||
inputs:
|
||||
torrentid: "{{ .DownloadUri.Query.id }}"
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
keywordsfilters:
|
||||
# remove words <= 3 characters and surrounding special characters
|
||||
- name: re_replace
|
||||
args: ["(?:^|\\s)[_\\+\\/\\.\\-\\(\\)]*[\\S]{0,3}[_\\+\\/\\.\\-\\(\\)]*(?:\\s|$)", " "]
|
||||
inputs:
|
||||
do: "search"
|
||||
keywords: "{{ .Keywords }}"
|
||||
search_type: "t_name"
|
||||
category: "0" # multi cat search not supported
|
||||
include_dead_torrents: "yes"
|
||||
rows:
|
||||
selector: table#sortabletable > tbody > tr:has(a[href*="/details.php?id="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
args: 66
|
||||
fields:
|
||||
download:
|
||||
selector: a[href*="/download.php?id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href*="/details.php?id="]
|
||||
title:
|
||||
optional: true
|
||||
selector: div.tooltip-content > div
|
||||
details:
|
||||
selector: a[href*="/details.php?id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href*="/browse.php?category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
banner:
|
||||
optional: true
|
||||
selector: div.tooltip-content > img
|
||||
attribute: src
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt^="Free Torrent "]: "0"
|
||||
img[alt^="Silver Torrent "]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
date:
|
||||
selector: "td:nth-child(2) > div:has(span[style=\"float: right;\"])"
|
||||
remove: span
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00"
|
||||
- name: dateparse
|
||||
args: "02-01-2006 15:04 -07:00"
|
||||
|
||||
@@ -1,180 +1,180 @@
|
||||
---
|
||||
site: eotforum
|
||||
name: EoT-Forum
|
||||
description: "A German gerneral tracker"
|
||||
language: de-de
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
links:
|
||||
- http://eot-forum.net
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Filme
|
||||
- {id: 14, cat: Movies/SD, desc: "SD XviD"}
|
||||
- {id: 15, cat: Movies/SD, desc: "SD x264"}
|
||||
- {id: 16, cat: Movies/HD, desc: "HD"}
|
||||
- {id: 68, cat: Movies/HD, desc: "UHD"}
|
||||
- {id: 17, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 18, cat: Movies/DVD, desc: "DVD-R"}
|
||||
- {id: 19, cat: Movies, desc: "Pack"}
|
||||
- {id: 20, cat: Movies, desc: "International"}
|
||||
- {id: 21, cat: XXX, desc: "XXX"}
|
||||
|
||||
# Serien/TV
|
||||
- {id: 23, cat: TV/SD, desc: "SD XviD"}
|
||||
- {id: 24, cat: TV/SD, desc: "SD x264"}
|
||||
- {id: 25, cat: TV/HD, desc: "HD"}
|
||||
- {id: 26, cat: TV/SD, desc: "DVD-R"}
|
||||
- {id: 27, cat: TV, desc: "Pack"}
|
||||
- {id: 28, cat: TV, desc: "International"}
|
||||
- {id: 29, cat: TV/Sport, desc: "Sport"}
|
||||
|
||||
# Dokus
|
||||
- {id: 31, cat: TV/Documentary, desc: "SD XviD"}
|
||||
- {id: 32, cat: TV/Documentary, desc: "SD x264"}
|
||||
- {id: 33, cat: TV/Documentary, desc: "HD"}
|
||||
- {id: 34, cat: TV/Documentary, desc: "3D"}
|
||||
- {id: 35, cat: TV/Documentary, desc: "Pack"}
|
||||
- {id: 67, cat: TV/Documentary, desc: "DVD-R"}
|
||||
- {id: 36, cat: TV/Documentary, desc: "International"}
|
||||
|
||||
# Audio
|
||||
- {id: 38, cat: Audio, desc: "Charts"}
|
||||
- {id: 39, cat: Audio/MP3, desc: "MP3"}
|
||||
- {id: 40, cat: Audio/Lossless, desc: "Flac"}
|
||||
- {id: 41, cat: Audio, desc: "Pack"}
|
||||
- {id: 42, cat: Audio/Video, desc: "MusikVideo"}
|
||||
- {id: 43, cat: Audio/Audiobook, desc: "Hörbücher"}
|
||||
|
||||
# Spiele
|
||||
- {id: 45, cat: PC/Games, desc: "Windows"}
|
||||
- {id: 46, cat: PC/Mac, desc: "MacOS"}
|
||||
- {id: 47, cat: Console/PS4, desc: "Sony PS"}
|
||||
- {id: 48, cat: Console/Xbox , desc: "Microsoft XBox"}
|
||||
- {id: 49, cat: Console/NDS, desc: "Nintendo"}
|
||||
- {id: 50, cat: PC/Games, desc: "Linux"}
|
||||
- {id: 51, cat: Console, desc: "Andere"}
|
||||
|
||||
# Software
|
||||
- {id: 53, cat: PC, desc: "Windows"}
|
||||
- {id: 54, cat: PC/Mac, desc: "MacOS"}
|
||||
- {id: 55, cat: PC, desc: "Linux"}
|
||||
- {id: 56, cat: PC/Phone-Android, desc: "Android"}
|
||||
- {id: 57, cat: PC/Phone-IOS, desc: "Apple IOS"}
|
||||
- {id: 58, cat: PC/Phone-Other, desc: "Andere"}
|
||||
|
||||
# Sonstiges
|
||||
- {id: 60, cat: Books, desc: "EBooks"}
|
||||
- {id: 61, cat: Other, desc: "Bilder"}
|
||||
- {id: 62, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 63, cat: Other, desc: "MISC"}
|
||||
- {id: 64, cat: XXX, desc: "XXX-Bilder/EBooks/Audio"}
|
||||
|
||||
# EOT-Specials
|
||||
- {id: 66, cat: Other, desc: "Special"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
rememberme: "forever"
|
||||
submit: "Login"
|
||||
error:
|
||||
- selector: td.lista[align="center"][colspan="2"] > span
|
||||
test:
|
||||
path: index.php
|
||||
selector: img[alt="Ratio"]
|
||||
|
||||
ratio:
|
||||
path: index.php
|
||||
selector: img[alt="Ratio"] + font
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
page: "torrents"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
options: "0"
|
||||
active: "0"
|
||||
gold: "0"
|
||||
rows:
|
||||
selector: table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
|
||||
dateheaders:
|
||||
selector: ":has(td.header > b)"
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Torrents vom ", ""]
|
||||
- name: replace
|
||||
args: ["Januar", "January"]
|
||||
- name: replace
|
||||
args: ["Februar", "February"]
|
||||
- name: replace
|
||||
args: ["März", "March"]
|
||||
- name: replace
|
||||
args: ["Mai", "May"]
|
||||
- name: replace
|
||||
args: ["Juni", "June"]
|
||||
- name: replace
|
||||
args: ["Juli", "July"]
|
||||
- name: replace
|
||||
args: ["Oktober", "October"]
|
||||
- name: replace
|
||||
args: ["Dezember", "December"]
|
||||
- name: dateparse
|
||||
args: "02.January.2006"
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Details anzeigen: ", ""]
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
comments:
|
||||
selector: a[href*="#comments"]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(3)
|
||||
grabs:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: split
|
||||
args: ["♦", 2]
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
seeders:
|
||||
selector: td:nth-child(5) > a:nth-child(1)
|
||||
leechers:
|
||||
selector: td:nth-child(5) > a:nth-child(2)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="gold"]: "0"
|
||||
img[alt="silver"]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[alt="2x Upload Multiplier"]: "2"
|
||||
img[alt="3x Upload Multiplier"]: "3"
|
||||
img[alt="4x Upload Multiplier"]: "4"
|
||||
img[alt="5x Upload Multiplier"]: "5"
|
||||
img[alt="6x Upload Multiplier"]: "6"
|
||||
img[alt="7x Upload Multiplier"]: "7"
|
||||
img[alt="8x Upload Multiplier"]: "8"
|
||||
img[alt="9x Upload Multiplier"]: "9"
|
||||
img[alt="10x Upload Multiplier"]: "10"
|
||||
"*": "1"
|
||||
---
|
||||
site: eotforum
|
||||
name: EoT-Forum
|
||||
description: "A German gerneral tracker"
|
||||
language: de-de
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
links:
|
||||
- https://eot-forum.net
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Filme
|
||||
- {id: 14, cat: Movies/SD, desc: "SD XviD"}
|
||||
- {id: 15, cat: Movies/SD, desc: "SD x264"}
|
||||
- {id: 16, cat: Movies/HD, desc: "HD"}
|
||||
- {id: 68, cat: Movies/HD, desc: "UHD"}
|
||||
- {id: 17, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 18, cat: Movies/DVD, desc: "DVD-R"}
|
||||
- {id: 19, cat: Movies, desc: "Pack"}
|
||||
- {id: 20, cat: Movies, desc: "International"}
|
||||
- {id: 21, cat: XXX, desc: "XXX"}
|
||||
|
||||
# Serien/TV
|
||||
- {id: 23, cat: TV/SD, desc: "SD XviD"}
|
||||
- {id: 24, cat: TV/SD, desc: "SD x264"}
|
||||
- {id: 25, cat: TV/HD, desc: "HD"}
|
||||
- {id: 26, cat: TV/SD, desc: "DVD-R"}
|
||||
- {id: 27, cat: TV, desc: "Pack"}
|
||||
- {id: 28, cat: TV, desc: "International"}
|
||||
- {id: 29, cat: TV/Sport, desc: "Sport"}
|
||||
|
||||
# Dokus
|
||||
- {id: 31, cat: TV/Documentary, desc: "SD XviD"}
|
||||
- {id: 32, cat: TV/Documentary, desc: "SD x264"}
|
||||
- {id: 33, cat: TV/Documentary, desc: "HD"}
|
||||
- {id: 34, cat: TV/Documentary, desc: "3D"}
|
||||
- {id: 35, cat: TV/Documentary, desc: "Pack"}
|
||||
- {id: 67, cat: TV/Documentary, desc: "DVD-R"}
|
||||
- {id: 36, cat: TV/Documentary, desc: "International"}
|
||||
|
||||
# Audio
|
||||
- {id: 38, cat: Audio, desc: "Charts"}
|
||||
- {id: 39, cat: Audio/MP3, desc: "MP3"}
|
||||
- {id: 40, cat: Audio/Lossless, desc: "Flac"}
|
||||
- {id: 41, cat: Audio, desc: "Pack"}
|
||||
- {id: 42, cat: Audio/Video, desc: "MusikVideo"}
|
||||
- {id: 43, cat: Audio/Audiobook, desc: "Hörbücher"}
|
||||
|
||||
# Spiele
|
||||
- {id: 45, cat: PC/Games, desc: "Windows"}
|
||||
- {id: 46, cat: PC/Mac, desc: "MacOS"}
|
||||
- {id: 47, cat: Console/PS4, desc: "Sony PS"}
|
||||
- {id: 48, cat: Console/Xbox , desc: "Microsoft XBox"}
|
||||
- {id: 49, cat: Console/NDS, desc: "Nintendo"}
|
||||
- {id: 50, cat: PC/Games, desc: "Linux"}
|
||||
- {id: 51, cat: Console, desc: "Andere"}
|
||||
|
||||
# Software
|
||||
- {id: 53, cat: PC, desc: "Windows"}
|
||||
- {id: 54, cat: PC/Mac, desc: "MacOS"}
|
||||
- {id: 55, cat: PC, desc: "Linux"}
|
||||
- {id: 56, cat: PC/Phone-Android, desc: "Android"}
|
||||
- {id: 57, cat: PC/Phone-IOS, desc: "Apple IOS"}
|
||||
- {id: 58, cat: PC/Phone-Other, desc: "Andere"}
|
||||
|
||||
# Sonstiges
|
||||
- {id: 60, cat: Books, desc: "EBooks"}
|
||||
- {id: 61, cat: Other, desc: "Bilder"}
|
||||
- {id: 62, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 63, cat: Other, desc: "MISC"}
|
||||
- {id: 64, cat: XXX, desc: "XXX-Bilder/EBooks/Audio"}
|
||||
|
||||
# EOT-Specials
|
||||
- {id: 66, cat: Other, desc: "Special"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
rememberme: "forever"
|
||||
submit: "Login"
|
||||
error:
|
||||
- selector: td.lista[align="center"][colspan="2"] > span
|
||||
test:
|
||||
path: index.php
|
||||
selector: img[alt="Ratio"]
|
||||
|
||||
ratio:
|
||||
path: index.php
|
||||
selector: img[alt="Ratio"] + font
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
page: "torrents"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
options: "0"
|
||||
active: "0"
|
||||
gold: "0"
|
||||
rows:
|
||||
selector: table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
|
||||
dateheaders:
|
||||
selector: ":has(td.header > b)"
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Torrents vom ", ""]
|
||||
- name: replace
|
||||
args: ["Januar", "January"]
|
||||
- name: replace
|
||||
args: ["Februar", "February"]
|
||||
- name: replace
|
||||
args: ["März", "March"]
|
||||
- name: replace
|
||||
args: ["Mai", "May"]
|
||||
- name: replace
|
||||
args: ["Juni", "June"]
|
||||
- name: replace
|
||||
args: ["Juli", "July"]
|
||||
- name: replace
|
||||
args: ["Oktober", "October"]
|
||||
- name: replace
|
||||
args: ["Dezember", "December"]
|
||||
- name: dateparse
|
||||
args: "02.January.2006"
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Details anzeigen: ", ""]
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
comments:
|
||||
selector: a[href*="#comments"]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(3)
|
||||
grabs:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: split
|
||||
args: ["♦", 2]
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
seeders:
|
||||
selector: td:nth-child(5) > a:nth-child(1)
|
||||
leechers:
|
||||
selector: td:nth-child(5) > a:nth-child(2)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="gold"]: "0"
|
||||
img[alt="silver"]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[alt="2x Upload Multiplier"]: "2"
|
||||
img[alt="3x Upload Multiplier"]: "3"
|
||||
img[alt="4x Upload Multiplier"]: "4"
|
||||
img[alt="5x Upload Multiplier"]: "5"
|
||||
img[alt="6x Upload Multiplier"]: "6"
|
||||
img[alt="7x Upload Multiplier"]: "7"
|
||||
img[alt="8x Upload Multiplier"]: "8"
|
||||
img[alt="9x Upload Multiplier"]: "9"
|
||||
img[alt="10x Upload Multiplier"]: "10"
|
||||
"*": "1"
|
||||
|
||||
@@ -1,119 +1,119 @@
|
||||
---
|
||||
site: estone
|
||||
name: eStone
|
||||
language: hu-hu
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://estone.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 24, cat: Movies/SD, desc: "Film/XviD/Hun"}
|
||||
- {id: 38, cat: Movies/SD, desc: "Film/XviD/Eng"}
|
||||
- {id: 51, cat: Movies/SD, desc: "Film/SD/Hun"}
|
||||
- {id: 52, cat: Movies/SD, desc: "Film/SD/Eng"}
|
||||
- {id: 25, cat: Movies/DVD, desc: "Film/DVD/Hun"}
|
||||
- {id: 26, cat: Movies/DVD, desc: "Film/DVD/Eng"}
|
||||
- {id: 42, cat: Movies/HD, desc: "Film/HD/Hun"}
|
||||
- {id: 50, cat: Movies/HD, desc: "Film/HD/Eng"}
|
||||
- {id: 36, cat: TV, desc: "Sorozat/Hun"}
|
||||
- {id: 47, cat: TV, desc: "Sorozat/Eng"}
|
||||
- {id: 41, cat: Audio/MP3, desc: "Mp3/Hun"}
|
||||
- {id: 40, cat: Audio/MP3, desc: "Mp3/Eng"}
|
||||
- {id: 35, cat: PC/0day, desc: "Program"}
|
||||
- {id: 28, cat: PC/Games, desc: "Játék/ISO"}
|
||||
- {id: 30, cat: PC/Games, desc: "Játék/Rip"}
|
||||
- {id: 32, cat: Console, desc: "Konzol"}
|
||||
- {id: 34, cat: PC/Phone-Other, desc: "Mobil"}
|
||||
- {id: 44, cat: Books, desc: "Könyv/Hun"}
|
||||
- {id: 33, cat: Books, desc: "Könyv/Eng"}
|
||||
- {id: 31, cat: Other, desc: "Képek"}
|
||||
- {id: 39, cat: XXX, desc: "XXX/Film"}
|
||||
- {id: 49, cat: XXX/Imageset, desc: "XXX/Kép"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
login_username: "{{ .Config.username }}"
|
||||
login_password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: script:contains("hiba(\"")
|
||||
message:
|
||||
selector: script:contains("hiba(\"")
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["hiba(\"", ""]
|
||||
- name: replace
|
||||
args: ["\");", ""]
|
||||
test:
|
||||
path: /letoltes.php
|
||||
|
||||
search:
|
||||
path: /letoltes.php
|
||||
method: get
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}kat[]={{.}}&{{end}}"
|
||||
kereses_nev: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: body > div[id^="torrent_"]
|
||||
fields:
|
||||
title:
|
||||
selector: a[title]
|
||||
attribute: title
|
||||
category:
|
||||
selector: div#kategoria_torrent > a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
attribute: id
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrent_", "adatlap.php?id="]
|
||||
download:
|
||||
attribute: id
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrent_", "download.php?id="]
|
||||
banner:
|
||||
selector: img[onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: borito\("(.*?) +?",
|
||||
size:
|
||||
selector: input[id^="meret_"]
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: div:nth-child(8) > div
|
||||
seeders:
|
||||
selector: div:nth-child(6) > div > a
|
||||
leechers:
|
||||
selector: div:nth-child(7) > div > a
|
||||
date:
|
||||
selector: div:nth-child(4)
|
||||
filters:
|
||||
- name: split
|
||||
args: ["(", 0]
|
||||
- name: append
|
||||
args: "+01:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/free.png"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[src="pic/dupla_up.png"]: "2"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: div:nth-child(2)
|
||||
remove: a
|
||||
---
|
||||
site: estone
|
||||
name: eStone
|
||||
language: hu-hu
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://estone.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 24, cat: Movies/SD, desc: "Film/XviD/Hun"}
|
||||
- {id: 38, cat: Movies/SD, desc: "Film/XviD/Eng"}
|
||||
- {id: 51, cat: Movies/SD, desc: "Film/SD/Hun"}
|
||||
- {id: 52, cat: Movies/SD, desc: "Film/SD/Eng"}
|
||||
- {id: 25, cat: Movies/DVD, desc: "Film/DVD/Hun"}
|
||||
- {id: 26, cat: Movies/DVD, desc: "Film/DVD/Eng"}
|
||||
- {id: 42, cat: Movies/HD, desc: "Film/HD/Hun"}
|
||||
- {id: 50, cat: Movies/HD, desc: "Film/HD/Eng"}
|
||||
- {id: 36, cat: TV, desc: "Sorozat/Hun"}
|
||||
- {id: 47, cat: TV, desc: "Sorozat/Eng"}
|
||||
- {id: 41, cat: Audio/MP3, desc: "Mp3/Hun"}
|
||||
- {id: 40, cat: Audio/MP3, desc: "Mp3/Eng"}
|
||||
- {id: 35, cat: PC/0day, desc: "Program"}
|
||||
- {id: 28, cat: PC/Games, desc: "Játék/ISO"}
|
||||
- {id: 30, cat: PC/Games, desc: "Játék/Rip"}
|
||||
- {id: 32, cat: Console, desc: "Konzol"}
|
||||
- {id: 34, cat: PC/Phone-Other, desc: "Mobil"}
|
||||
- {id: 44, cat: Books, desc: "Könyv/Hun"}
|
||||
- {id: 33, cat: Books, desc: "Könyv/Eng"}
|
||||
- {id: 31, cat: Other, desc: "Képek"}
|
||||
- {id: 39, cat: XXX, desc: "XXX/Film"}
|
||||
- {id: 49, cat: XXX/Imageset, desc: "XXX/Kép"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
login_username: "{{ .Config.username }}"
|
||||
login_password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: script:contains("hiba(\"")
|
||||
message:
|
||||
selector: script:contains("hiba(\"")
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["hiba(\"", ""]
|
||||
- name: replace
|
||||
args: ["\");", ""]
|
||||
test:
|
||||
path: /letoltes.php
|
||||
|
||||
search:
|
||||
path: /letoltes.php
|
||||
method: get
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}kat[]={{.}}&{{end}}"
|
||||
kereses_nev: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: body > div[id^="torrent_"]
|
||||
fields:
|
||||
title:
|
||||
selector: a[title]
|
||||
attribute: title
|
||||
category:
|
||||
selector: div#kategoria_torrent > a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
attribute: id
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrent_", "adatlap.php?id="]
|
||||
download:
|
||||
attribute: id
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrent_", "download.php?id="]
|
||||
banner:
|
||||
selector: img[onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: borito\("(.*?) +?",
|
||||
size:
|
||||
selector: input[id^="meret_"]
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: div:nth-child(8) > div
|
||||
seeders:
|
||||
selector: div:nth-child(6) > div > a
|
||||
leechers:
|
||||
selector: div:nth-child(7) > div > a
|
||||
date:
|
||||
selector: div:nth-child(4)
|
||||
filters:
|
||||
- name: split
|
||||
args: ["(", 0]
|
||||
- name: append
|
||||
args: "+01:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/free.png"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[src="pic/dupla_up.png"]: "2"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: div:nth-child(2)
|
||||
remove: a
|
||||
|
||||
@@ -1,119 +1,119 @@
|
||||
---
|
||||
site: ethor
|
||||
name: Ethor.net (Thor's Land)
|
||||
description: "A French gerneral tracker"
|
||||
language: fr-fr
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://ethor.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 22, cat: PC, desc: "Applications/Divers"}
|
||||
- {id: 1, cat: PC, desc: "Applications/PC ISO"}
|
||||
- {id: 44, cat: PC, desc: "Applications/Portable"}
|
||||
- {id: 47, cat: Movies/BluRay, desc: "Films/Bluray"}
|
||||
- {id: 20, cat: Movies/DVD, desc: "Films/DVDr"}
|
||||
- {id: 42, cat: Movies/HD, desc: "Films/HD Rip"}
|
||||
- {id: 19, cat: Movies/SD, desc: "Films/SD Rip"}
|
||||
- {id: 5, cat: Movies/SD, desc: "Films/VCD"}
|
||||
- {id: 4, cat: PC/Games, desc: "Jeux/PC"}
|
||||
- {id: 41, cat: Console, desc: "Jeux/Portable"}
|
||||
- {id: 34, cat: Console/PS4, desc: "Jeux/PS2-PS3"}
|
||||
- {id: 38, cat: Console/Wii, desc: "Jeux/Wii-GC"}
|
||||
- {id: 40, cat: Console/Xbox, desc: "Jeux/Xbox360"}
|
||||
- {id: 6, cat: Audio, desc: "Musique"}
|
||||
- {id: 37, cat: Audio/Video, desc: "Musique/Video"}
|
||||
- {id: 48, cat: TV/HD, desc: "Série-Télé/Bluray"}
|
||||
- {id: 45, cat: TV/SD, desc: "Série-Télé/DVDr"}
|
||||
- {id: 43, cat: TV/HD, desc: "Série-Télé/HD Rip"}
|
||||
- {id: 7, cat: TV/SD, desc: "Série-Télé/SD Rip"}
|
||||
- {id: 23, cat: Books, desc: "E-Books"}
|
||||
- {id: 46, cat: Other, desc: "Évé. sportif"}
|
||||
- {id: 36, cat: Other, desc: "Kidz"}
|
||||
- {id: 25, cat: Other, desc: "Misc"}
|
||||
- {id: 9, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: login3.php
|
||||
method: form
|
||||
form: form[action="login3.php?takelogin=1"]
|
||||
captcha:
|
||||
type: image
|
||||
image: img#validationimage
|
||||
input: validationcode
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
secure_cookie: "0"
|
||||
test:
|
||||
path: browse.php
|
||||
|
||||
ratio:
|
||||
path: browse.php
|
||||
selector: span#ratioRatio
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
|
||||
advcat: "0"
|
||||
incldead: "1"
|
||||
stype: "b"
|
||||
dp: "0"
|
||||
isUserClick: "0"
|
||||
rows:
|
||||
selector: p + table > tbody > tr:has(a[href^="/details.php"])
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="/details.php"]:has(b)
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["/details.php", "/download.php"]
|
||||
title:
|
||||
selector: a[href^="/details.php"]:has(b)
|
||||
category:
|
||||
selector: a[href^="/browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
comments:
|
||||
selector: a[href^="/details.php"]:has(b)
|
||||
attribute: href
|
||||
files:
|
||||
selector: a[href*="#filelist"]
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d+)"
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " -05:00" # timezone offset
|
||||
- name: dateparse
|
||||
args: "2006-01-0215:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[title^=\"Freeleech: \"]": "0"
|
||||
"img[title^=\"Half Freeleech: \"]": "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
---
|
||||
site: ethor
|
||||
name: Ethor.net (Thor's Land)
|
||||
description: "A French gerneral tracker"
|
||||
language: fr-fr
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://ethor.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 22, cat: PC, desc: "Applications/Divers"}
|
||||
- {id: 1, cat: PC, desc: "Applications/PC ISO"}
|
||||
- {id: 44, cat: PC, desc: "Applications/Portable"}
|
||||
- {id: 47, cat: Movies/BluRay, desc: "Films/Bluray"}
|
||||
- {id: 20, cat: Movies/DVD, desc: "Films/DVDr"}
|
||||
- {id: 42, cat: Movies/HD, desc: "Films/HD Rip"}
|
||||
- {id: 19, cat: Movies/SD, desc: "Films/SD Rip"}
|
||||
- {id: 5, cat: Movies/SD, desc: "Films/VCD"}
|
||||
- {id: 4, cat: PC/Games, desc: "Jeux/PC"}
|
||||
- {id: 41, cat: Console, desc: "Jeux/Portable"}
|
||||
- {id: 34, cat: Console/PS4, desc: "Jeux/PS2-PS3"}
|
||||
- {id: 38, cat: Console/Wii, desc: "Jeux/Wii-GC"}
|
||||
- {id: 40, cat: Console/Xbox, desc: "Jeux/Xbox360"}
|
||||
- {id: 6, cat: Audio, desc: "Musique"}
|
||||
- {id: 37, cat: Audio/Video, desc: "Musique/Video"}
|
||||
- {id: 48, cat: TV/HD, desc: "Série-Télé/Bluray"}
|
||||
- {id: 45, cat: TV/SD, desc: "Série-Télé/DVDr"}
|
||||
- {id: 43, cat: TV/HD, desc: "Série-Télé/HD Rip"}
|
||||
- {id: 7, cat: TV/SD, desc: "Série-Télé/SD Rip"}
|
||||
- {id: 23, cat: Books, desc: "E-Books"}
|
||||
- {id: 46, cat: Other, desc: "Évé. sportif"}
|
||||
- {id: 36, cat: Other, desc: "Kidz"}
|
||||
- {id: 25, cat: Other, desc: "Misc"}
|
||||
- {id: 9, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: login3.php
|
||||
method: form
|
||||
form: form[action="login3.php?takelogin=1"]
|
||||
captcha:
|
||||
type: image
|
||||
image: img#validationimage
|
||||
input: validationcode
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
secure_cookie: "0"
|
||||
test:
|
||||
path: browse.php
|
||||
|
||||
ratio:
|
||||
path: browse.php
|
||||
selector: span#ratioRatio
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
|
||||
advcat: "0"
|
||||
incldead: "1"
|
||||
stype: "b"
|
||||
dp: "0"
|
||||
isUserClick: "0"
|
||||
rows:
|
||||
selector: p + table > tbody > tr:has(a[href^="/details.php"])
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="/details.php"]:has(b)
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["/details.php", "/download.php"]
|
||||
title:
|
||||
selector: a[href^="/details.php"]:has(b)
|
||||
category:
|
||||
selector: a[href^="/browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
comments:
|
||||
selector: a[href^="/details.php"]:has(b)
|
||||
attribute: href
|
||||
files:
|
||||
selector: a[href*="#filelist"]
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d+)"
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " -05:00" # timezone offset
|
||||
- name: dateparse
|
||||
args: "2006-01-0215:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[title^=\"Freeleech: \"]": "0"
|
||||
"img[title^=\"Half Freeleech: \"]": "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
|
||||
@@ -43,7 +43,8 @@
|
||||
download:
|
||||
selector: td:nth-child(3) a.magnet, td:nth-child(3) a
|
||||
attribute: href
|
||||
size|optional:
|
||||
size:
|
||||
optional: true
|
||||
selector: td:nth-child(4)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
|
||||
@@ -1,130 +1,140 @@
|
||||
---
|
||||
site: freedomhd
|
||||
name: Freedom-HD
|
||||
language: fr-fr
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://freedom-paradise.eu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# ANIMES
|
||||
- {id: 105, cat: TV/Anime, desc: "1080p"}
|
||||
- {id: 104, cat: TV/Anime, desc: "720p"}
|
||||
- {id: 90, cat: TV/Anime, desc: "HDRIP-720p"}
|
||||
- {id: 93, cat: TV/Anime, desc: "HDRIP1080p"}
|
||||
- {id: 131, cat: TV/Anime, desc: "SD"}
|
||||
- {id: 120, cat: TV/Anime, desc: "X265-1080p"}
|
||||
- {id: 119, cat: TV/Anime, desc: "X265-720p"}
|
||||
- {id: 107, cat: TV/Anime, desc: "1080p"}
|
||||
- {id: 106, cat: TV/Anime, desc: "720p"}
|
||||
- {id: 94, cat: TV/Anime, desc: "HDRIP1080p"}
|
||||
- {id: 91, cat: TV/Anime, desc: "HDRIP720p"}
|
||||
|
||||
# EBOOK
|
||||
- {id: 124, cat: Books, desc: "Livres et Magazines"}
|
||||
|
||||
# FILMS
|
||||
- {id: 97, cat: Movies/HD, desc: "1080p"}
|
||||
- {id: 103, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 111, cat: Movies/HD, desc: "4K"}
|
||||
- {id: 96, cat: Movies/HD, desc: "720p"}
|
||||
- {id: 127, cat: Movies/HD, desc: "BDrip"}
|
||||
- {id: 128, cat: Movies/HD, desc: "BRrip"}
|
||||
- {id: 126, cat: Movies/SD, desc: "DVDrip"}
|
||||
- {id: 89, cat: Movies/HD, desc: "HDRIP-720p"}
|
||||
- {id: 92, cat: Movies/HD, desc: "HDRIP1080p"}
|
||||
- {id: 112, cat: Movies/SD, desc: "Team-Hush"}
|
||||
- {id: 129, cat: Movies/HD, desc: "Team-Romkent"}
|
||||
- {id: 125, cat: Movies/Other, desc: "WEBrip"}
|
||||
- {id: 110, cat: Movies/HD, desc: "X265-1080p"}
|
||||
- {id: 109, cat: Movies/HD, desc: "X265-720p"}
|
||||
|
||||
# MUSIQUES
|
||||
- {id: 114, cat: Audio/Lossless, desc: "Flac"}
|
||||
- {id: 113, cat: Audio/MP3, desc: "MP3"}
|
||||
- {id: 132, cat: Audio, desc: "Musiques-HQ"}
|
||||
- {id: 130, cat: Audio/Video, desc: "video clip"}
|
||||
|
||||
# SERIE-sd
|
||||
- {id: 121, cat: TV/SD, desc: "SD"}
|
||||
|
||||
# SERIES-HD
|
||||
- {id: 102, cat: TV/HD, desc: "1080p"}
|
||||
- {id: 101, cat: TV/HD, desc: "720p"}
|
||||
- {id: 100, cat: TV/HD, desc: "HDrip1080p"}
|
||||
- {id: 99, cat: TV/HD, desc: "HDrip720p"}
|
||||
|
||||
# SPECTACLES
|
||||
- {id: 118, cat: TV/Sport, desc: "HDRIP1080p"}
|
||||
- {id: 117, cat: TV/Sport, desc: "HDRIP720p"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: "yes"
|
||||
returnto: "/"
|
||||
error:
|
||||
- selector: div.myFrame:has(font.error)
|
||||
test:
|
||||
path: torrents-search.php
|
||||
|
||||
search:
|
||||
path: torrents-search.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
|
||||
rows:
|
||||
selector: table.ttable_headinner > tbody > tr[class^="t-row"]
|
||||
filters:
|
||||
- name: andmatch
|
||||
after: 1
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrents-details.php", "download.php"]
|
||||
title:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
description:
|
||||
selector: ul
|
||||
banner:
|
||||
selector: img.rounded-img
|
||||
attribute: src
|
||||
size:
|
||||
selector: td:nth-child(3)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(4)
|
||||
leechers:
|
||||
selector: td:nth-child(5)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="freeleech"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: freedomhd
|
||||
name: Freedom-HD
|
||||
language: fr-fr
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://freedom-paradise.eu/
|
||||
|
||||
download:
|
||||
before:
|
||||
path: "list_thanks.php"
|
||||
method: "get"
|
||||
inputs:
|
||||
id: "{{ .DownloadUri.Query.id }}"
|
||||
to: "give"
|
||||
torrent: "{{ .DownloadUri.Query.id }}"
|
||||
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# ANIMES
|
||||
- {id: 105, cat: TV/Anime, desc: "1080p"}
|
||||
- {id: 104, cat: TV/Anime, desc: "720p"}
|
||||
- {id: 90, cat: TV/Anime, desc: "HDRIP-720p"}
|
||||
- {id: 93, cat: TV/Anime, desc: "HDRIP1080p"}
|
||||
- {id: 131, cat: TV/Anime, desc: "SD"}
|
||||
- {id: 120, cat: TV/Anime, desc: "X265-1080p"}
|
||||
- {id: 119, cat: TV/Anime, desc: "X265-720p"}
|
||||
- {id: 107, cat: TV/Anime, desc: "1080p"}
|
||||
- {id: 106, cat: TV/Anime, desc: "720p"}
|
||||
- {id: 94, cat: TV/Anime, desc: "HDRIP1080p"}
|
||||
- {id: 91, cat: TV/Anime, desc: "HDRIP720p"}
|
||||
|
||||
# EBOOK
|
||||
- {id: 124, cat: Books, desc: "Livres et Magazines"}
|
||||
|
||||
# FILMS
|
||||
- {id: 97, cat: Movies/HD, desc: "1080p"}
|
||||
- {id: 103, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 111, cat: Movies/HD, desc: "4K"}
|
||||
- {id: 96, cat: Movies/HD, desc: "720p"}
|
||||
- {id: 127, cat: Movies/HD, desc: "BDrip"}
|
||||
- {id: 128, cat: Movies/HD, desc: "BRrip"}
|
||||
- {id: 126, cat: Movies/SD, desc: "DVDrip"}
|
||||
- {id: 89, cat: Movies/HD, desc: "HDRIP-720p"}
|
||||
- {id: 92, cat: Movies/HD, desc: "HDRIP1080p"}
|
||||
- {id: 112, cat: Movies/SD, desc: "Team-Hush"}
|
||||
- {id: 129, cat: Movies/HD, desc: "Team-Romkent"}
|
||||
- {id: 125, cat: Movies/Other, desc: "WEBrip"}
|
||||
- {id: 110, cat: Movies/HD, desc: "X265-1080p"}
|
||||
- {id: 109, cat: Movies/HD, desc: "X265-720p"}
|
||||
|
||||
# MUSIQUES
|
||||
- {id: 114, cat: Audio/Lossless, desc: "Flac"}
|
||||
- {id: 113, cat: Audio/MP3, desc: "MP3"}
|
||||
- {id: 132, cat: Audio, desc: "Musiques-HQ"}
|
||||
- {id: 130, cat: Audio/Video, desc: "video clip"}
|
||||
|
||||
# SERIE-sd
|
||||
- {id: 121, cat: TV/SD, desc: "SD"}
|
||||
|
||||
# SERIES-HD
|
||||
- {id: 102, cat: TV/HD, desc: "1080p"}
|
||||
- {id: 101, cat: TV/HD, desc: "720p"}
|
||||
- {id: 100, cat: TV/HD, desc: "HDrip1080p"}
|
||||
- {id: 99, cat: TV/HD, desc: "HDrip720p"}
|
||||
|
||||
# SPECTACLES
|
||||
- {id: 118, cat: TV/Sport, desc: "HDRIP1080p"}
|
||||
- {id: 117, cat: TV/Sport, desc: "HDRIP720p"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: "yes"
|
||||
returnto: "/"
|
||||
error:
|
||||
- selector: div.myFrame:has(font.error)
|
||||
test:
|
||||
path: torrents-search.php
|
||||
|
||||
search:
|
||||
path: torrents-search.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "1"
|
||||
|
||||
rows:
|
||||
selector: table.ttable_headinner > tbody > tr[class^="t-row"]
|
||||
filters:
|
||||
- name: andmatch
|
||||
after: 1
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["torrents-details.php", "download.php"]
|
||||
title:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
description:
|
||||
selector: ul
|
||||
banner:
|
||||
selector: img.rounded-img
|
||||
attribute: src
|
||||
size:
|
||||
selector: td:nth-child(3)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(4)
|
||||
leechers:
|
||||
selector: td:nth-child(5)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="freeleech"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -5,6 +5,8 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://fullmixmusic.org/
|
||||
legacylinks:
|
||||
- http://fullmixmusic.org/
|
||||
|
||||
caps:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: funkytorrents
|
||||
name: FunkyTorrents
|
||||
language: en-us
|
||||
@@ -72,7 +72,8 @@
|
||||
rows:
|
||||
selector: table.mainouter > tbody > tr > td.outer > table > tbody > tr.mouse_out
|
||||
fields:
|
||||
description|optional:
|
||||
description:
|
||||
optional: true
|
||||
selector: td:nth-child(2) > font
|
||||
title:
|
||||
selector: td:nth-child(2)
|
||||
@@ -83,7 +84,8 @@
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
category|optional:
|
||||
category:
|
||||
optional: true
|
||||
case:
|
||||
a[href="/browse.php?ext=1&bitrate=Lossless"]: "3040"
|
||||
a[href="/browse.php?ext=1&format=MP3"]: "3010"
|
||||
@@ -116,4 +118,4 @@
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
"*": "1"
|
||||
|
||||
114
src/Jackett/Definitions/gay-torrents.yml
Normal file
114
src/Jackett/Definitions/gay-torrents.yml
Normal file
@@ -0,0 +1,114 @@
|
||||
site: gay-torrents
|
||||
name: Gay-Torrents.net
|
||||
description: "Gay Torrents Live Free!"
|
||||
language: en-us
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.gay-torrents.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: porn , cat: XXX , desc: "Porn"}
|
||||
- {id: porn/Amateur , cat: XXX , desc: "Amateur"}
|
||||
- {id: porn/Anal , cat: XXX , desc: "Anal"}
|
||||
- {id: porn/Asian , cat: XXX , desc: "Asian"}
|
||||
- {id: porn/Bareback , cat: XXX , desc: "Bareback"}
|
||||
- {id: porn/Bears , cat: XXX , desc: "Bears"}
|
||||
- {id: porn/Bisexual , cat: XXX , desc: "Bisexual"}
|
||||
- {id: porn/Black-Men , cat: XXX , desc: "Black-Men"}
|
||||
- {id: porn/Chubs , cat: XXX , desc: "Chubs"}
|
||||
- {id: porn/Clips , cat: XXX/Packs , desc: "Clips"}
|
||||
- {id: porn/Cross-Generation , cat: XXX , desc: "Cross-Generation"}
|
||||
- {id: porn/DVD-R , cat: XXX/DVD , desc: "DVD-R"}
|
||||
- {id: porn/Fetish , cat: XXX , desc: "Fetish"}
|
||||
- {id: porn/Group-Sex , cat: XXX , desc: "Group-Sex"}
|
||||
- {id: porn/HD-Movies , cat: XXX , desc: "HD-Movies"}
|
||||
- {id: porn/Hunks , cat: XXX , desc: "Hunks"}
|
||||
- {id: porn/Images , cat: XXX/Imageset , desc: "Images"}
|
||||
- {id: porn/Interracial , cat: XXX , desc: "Interracial"}
|
||||
- {id: porn/Jocks , cat: XXX , desc: "Jocks"}
|
||||
- {id: porn/Latino , cat: XXX , desc: "Latino"}
|
||||
- {id: porn/Mature , cat: XXX , desc: "Mature"}
|
||||
- {id: porn/Member , cat: XXX , desc: "Member"}
|
||||
- {id: porn/MiddleEast , cat: XXX , desc: "MiddleEast"}
|
||||
- {id: porn/Military , cat: XXX , desc: "Military"}
|
||||
- {id: porn/Muscle , cat: XXX , desc: "Muscle"}
|
||||
- {id: porn/Oral-Sex , cat: XXX , desc: "Oral-Sex"}
|
||||
- {id: porn/Solo , cat: XXX , desc: "Solo"}
|
||||
- {id: porn/Transsexual , cat: XXX , desc: "Transsexual"}
|
||||
- {id: porn/Twinks , cat: XXX , desc: "Twinks"}
|
||||
- {id: porn/Vintage , cat: XXX , desc: "Vintage"}
|
||||
- {id: porn/Wrestling , cat: XXX , desc: "Wrestling"}
|
||||
- {id: nonporn , cat: Other , desc: "NonPorn"}
|
||||
- {id: nonporn/Anime , cat: TV/Anime , desc: "Anime"}
|
||||
- {id: nonporn/Applications , cat: PC , desc: "Applications"}
|
||||
- {id: nonporn/Comedy , cat: Movies , desc: "Comedy"}
|
||||
- {id: nonporn/Comics , cat: Books/Comics , desc: "Comics"}
|
||||
- {id: nonporn/Coming-Out , cat: Movies , desc: "Coming-Out"}
|
||||
- {id: nonporn/Documentary , cat: Movies , desc: "Documentary"}
|
||||
- {id: nonporn/Drama , cat: Movies , desc: "Drama"}
|
||||
- {id: nonporn/DVD-R , cat: Movies/DVD , desc: "DVD-R"}
|
||||
- {id: nonporn/Gay-Movies , cat: Movies , desc: "Gay-Movies"}
|
||||
- {id: nonporn/Misc , cat: Other/Misc , desc: "Misc"}
|
||||
- {id: nonporn/Short-Film , cat: Movies , desc: "Short-Film"}
|
||||
- {id: nonporn/Softcore , cat: Movies , desc: "Softcore"}
|
||||
- {id: nonporn/Thriller , cat: Movies , desc: "Thriller"}
|
||||
- {id: nonporn/TV-Episode , cat: TV , desc: "TV-Episode"}
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
vb_login_username: "{{ .Config.username }}"
|
||||
vb_login_password: "{{ .Config.password }}"
|
||||
cookieuser: "1"
|
||||
do: "login"
|
||||
test:
|
||||
path: torrentslist.php
|
||||
selector: ul.isuser
|
||||
|
||||
search:
|
||||
path: "{{if .Query.Keywords}}search.php{{else}}torrentslist.php{{end}}"
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}type={{.}}&{{end}}"
|
||||
textsearch: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: ul.TorrentList
|
||||
fields:
|
||||
category:
|
||||
selector: .TorrentList1 > a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: type
|
||||
title:
|
||||
selector: .TorrentList2 > a
|
||||
download:
|
||||
selector: .TorrentList2 > a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: append
|
||||
args: "&do=download"
|
||||
details:
|
||||
selector: .TorrentList2 > a
|
||||
attribute: href
|
||||
size:
|
||||
selector: .TorrentList3
|
||||
seeders:
|
||||
selector: .TorrentList6
|
||||
leechers:
|
||||
selector: .TorrentList7
|
||||
date:
|
||||
selector: li.TorrentList8
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "02 Jan 06, 15:04"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
".TorrentList2 > a:contains(\"[FFL]\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
113
src/Jackett/Definitions/gaytorrentru.yml
Normal file
113
src/Jackett/Definitions/gaytorrentru.yml
Normal file
@@ -0,0 +1,113 @@
|
||||
site: gaytorrentru
|
||||
name: GayTorrent.ru
|
||||
description: "World largest gay porn library for free with a stunning forum and 24/7 Chat"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.gaytorrent.ru/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 62 , cat: XXX , desc: "Amateur"}
|
||||
- {id: 29 , cat: XXX , desc: "Anal"}
|
||||
- {id: 46 , cat: XXX , desc: "Anime Games"}
|
||||
- {id: 30 , cat: XXX , desc: "Asian"}
|
||||
- {id: 43 , cat: XXX , desc: "Bareback"}
|
||||
- {id: 19 , cat: XXX , desc: "BDSM"}
|
||||
- {id: 17 , cat: XXX , desc: "Bears"}
|
||||
- {id: 44 , cat: XXX , desc: "Black"}
|
||||
- {id: 50 , cat: Books , desc: "Books & Magazines"}
|
||||
- {id: 9 , cat: XXX , desc: "Chubbies"}
|
||||
- {id: 7 , cat: XXX , desc: "Clips"}
|
||||
- {id: 48 , cat: Books/Comics , desc: "Comic & Yaoi"}
|
||||
- {id: 5 , cat: XXX , desc: "Daddies / Sons"}
|
||||
- {id: 34 , cat: XXX , desc: "Fetish"}
|
||||
- {id: 27 , cat: XXX , desc: "Grey / Older"}
|
||||
- {id: 32 , cat: XXX , desc: "Group-Sex"}
|
||||
- {id: 63 , cat: XXX , desc: "Homemade"}
|
||||
- {id: 12 , cat: XXX , desc: "Hunks"}
|
||||
- {id: 33 , cat: XXX , desc: "Images"}
|
||||
- {id: 53 , cat: XXX , desc: "Interracial"}
|
||||
- {id: 57 , cat: XXX , desc: "Jocks"}
|
||||
- {id: 35 , cat: XXX , desc: "Latino"}
|
||||
- {id: 36 , cat: XXX , desc: "Mature"}
|
||||
- {id: 58 , cat: PC , desc: "Media Programs"}
|
||||
- {id: 37 , cat: XXX , desc: "Member"}
|
||||
- {id: 54 , cat: XXX , desc: "Middle Eastern"}
|
||||
- {id: 38 , cat: XXX , desc: "Military"}
|
||||
- {id: 39 , cat: XXX , desc: "Oral-Sex"}
|
||||
- {id: 47 , cat: XXX , desc: "Shemale"}
|
||||
- {id: 56 , cat: XXX , desc: "Softcore"}
|
||||
- {id: 40 , cat: XXX , desc: "Solo"}
|
||||
- {id: 45 , cat: Movies , desc: "Themed Movie"}
|
||||
- {id: 1 , cat: TV , desc: "TV / Episodes"}
|
||||
- {id: 41 , cat: XXX , desc: "Twinks"}
|
||||
- {id: 42 , cat: XXX , desc: "Vintage"}
|
||||
- {id: 51 , cat: XXX , desc: "Voyeur"}
|
||||
- {id: 65 , cat: XXX , desc: "Wrestling and Sports"}
|
||||
- {id: 28 , cat: XXX , desc: "Youngblood"}
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
test:
|
||||
path: browse.php
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: "0" # Searches only for alive torrents
|
||||
rows:
|
||||
selector: table.browse_result > tbody > tr:has(a[href^="details.php?id="])
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: .browsedesc > a
|
||||
download:
|
||||
selector: a[href^="download.php/"]
|
||||
attribute: href
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: .tsnatch
|
||||
files:
|
||||
selector: .tfiles
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d]+)
|
||||
size:
|
||||
selector: .tsize
|
||||
seeders:
|
||||
optional: true
|
||||
selector: a[href$="&toseeders=1"]
|
||||
leechers:
|
||||
optional: true
|
||||
selector: a[href$="&todlers=1"]
|
||||
date:
|
||||
selector: .tadded
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(\\d{4}-\\d{2}-\\d{2})(\\d{2}:\\d{2}:\\d{2})(.*)","$1 $2"]
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"td:nth-child(3) > div > nobr > font[color=\"yellow\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,80 +1,80 @@
|
||||
---
|
||||
site: gfxpeers
|
||||
name: GFXPeers
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://gfxpeers.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: PC/0day, desc: "Applications"}
|
||||
- {id: 2, cat: PC/0day, desc: "Plug-ins"}
|
||||
- {id: 3, cat: Other, desc: "Tutorials"}
|
||||
- {id: 4, cat: Other, desc: "Textures"}
|
||||
- {id: 5, cat: Other, desc: "3D Models"}
|
||||
- {id: 6, cat: Other, desc: "Game-Dev"}
|
||||
- {id: 7, cat: Other, desc: "Miscellaneous"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: /login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: "1"
|
||||
error:
|
||||
- selector: .auth_form > .warning
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: "time"
|
||||
order_way: "desc"
|
||||
action: "advanced"
|
||||
searchsubmit: "1"
|
||||
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
category:
|
||||
selector: a[href^="torrents.php?filter_cat"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "\\[(\\d+?)\\]"
|
||||
details:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
---
|
||||
site: gfxpeers
|
||||
name: GFXPeers
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://gfxpeers.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: PC/0day, desc: "Applications"}
|
||||
- {id: 2, cat: PC/0day, desc: "Plug-ins"}
|
||||
- {id: 3, cat: Other, desc: "Tutorials"}
|
||||
- {id: 4, cat: Other, desc: "Textures"}
|
||||
- {id: 5, cat: Other, desc: "3D Models"}
|
||||
- {id: 6, cat: Other, desc: "Game-Dev"}
|
||||
- {id: 7, cat: Other, desc: "Miscellaneous"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: /login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: "1"
|
||||
error:
|
||||
- selector: .auth_form > .warning
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: "time"
|
||||
order_way: "desc"
|
||||
action: "advanced"
|
||||
searchsubmit: "1"
|
||||
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
category:
|
||||
selector: a[href^="torrents.php?filter_cat"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "\\[(\\d+?)\\]"
|
||||
details:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
|
||||
@@ -70,6 +70,8 @@
|
||||
blah: "0"
|
||||
rows:
|
||||
selector: table#torrenttable > tbody > tr:has()
|
||||
error:
|
||||
- selector: div.content:contains("Meg van vonva a letöltési jogod")
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="/details.php?id="]
|
||||
|
||||
77
src/Jackett/Definitions/gktorrent.yml
Normal file
77
src/Jackett/Definitions/gktorrent.yml
Normal file
@@ -0,0 +1,77 @@
|
||||
---
|
||||
site: gktorrent
|
||||
name: GkTorrent
|
||||
language: fr-fr
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.gktorrent.com
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: movies, cat: Movies, desc: "Movies"}
|
||||
- {id: tvshows, cat: TV, desc: "TV Shows"}
|
||||
- {id: softwares, cat: PC, desc: "Softwares"}
|
||||
- {id: music, cat: Audio, desc: "Music"}
|
||||
- {id: games, cat: Console, desc: "Games"}
|
||||
- {id: books, cat: Books, desc: "Books"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings: []
|
||||
|
||||
download:
|
||||
selector: a[href^="/get_torrent/"]
|
||||
|
||||
search:
|
||||
path: "/search/{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: div.listing-torrent > table > tbody > tr:has(a)
|
||||
fields:
|
||||
site_date:
|
||||
selector: td:nth-child(1) a
|
||||
filters:
|
||||
# date is at the end of the title, so we get it and name it site_date
|
||||
- name: regexp
|
||||
args: "(\\w+)$"
|
||||
title:
|
||||
selector: td:nth-child(1) a
|
||||
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"]
|
||||
- name: replace
|
||||
args: ["TRUEFRENCH", "{{ .Result.site_date }} TRUEFRENCH"]
|
||||
- name: replace
|
||||
args: ["VOSTFR", "{{ .Result.site_date }} VOSTFR"]
|
||||
# and we delete it at the end
|
||||
- name: re_replace
|
||||
args: ["(\\w+)$", ""]
|
||||
details:
|
||||
selector: td:nth-child(1) a
|
||||
attribute: href
|
||||
download:
|
||||
selector: td:nth-child(1) a
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(2)
|
||||
seeders:
|
||||
selector: td:nth-child(3)
|
||||
leechers:
|
||||
selector: td:nth-child(4)
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
category:
|
||||
selector: td:nth-child(1) > i
|
||||
case:
|
||||
.Movies: "movies"
|
||||
.TV: "tvshows"
|
||||
.Softwares: "softwares"
|
||||
.Music: "music"
|
||||
.Games: "games"
|
||||
.Books: "books"
|
||||
@@ -1,162 +1,162 @@
|
||||
---
|
||||
site: gods
|
||||
name: GODS
|
||||
language: de-de
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
links:
|
||||
- https://gods.lu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Movie
|
||||
- {id: 132, cat: Movies/BluRay, desc: "BluRay"}
|
||||
- {id: 146, cat: Movies/HD, desc: "Remux"}
|
||||
- {id: 186, cat: Movies/HD, desc: "UHD"}
|
||||
- {id: 189, cat: Movies/HD, desc: "HD"}
|
||||
- {id: 190, cat: Movies/SD, desc: "SD"}
|
||||
- {id: 20, cat: Movies/DVD, desc: "DVD"}
|
||||
- {id: 131, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 16, cat: Movies, desc: "Packs"}
|
||||
|
||||
# Serien
|
||||
- {id: 187, cat: TV/HD, desc: "Staffeln UHD"}
|
||||
- {id: 173, cat: TV/HD, desc: "Staffeln HD"}
|
||||
- {id: 133, cat: TV/SD, desc: "Staffeln SD"}
|
||||
- {id: 188, cat: TV/HD, desc: "Folgen UHD"}
|
||||
- {id: 174, cat: TV/HD, desc: "Folgen HD"}
|
||||
- {id: 7, cat: TV/SD, desc: "Folgen SD"}
|
||||
|
||||
# Doku
|
||||
- {id: 152, cat: TV/Documentary, desc: "HD"}
|
||||
- {id: 153, cat: TV/Documentary, desc: "SD"}
|
||||
|
||||
# Spiele
|
||||
- {id: 4, cat: PC/Games, desc: "Windows"}
|
||||
- {id: 29, cat: Console/XBox360, desc: "XBOX 360"}
|
||||
- {id: 126, cat: Console/Wii, desc: "Wii"}
|
||||
- {id: 183, cat: Console/Wii, desc: "Wii U"}
|
||||
- {id: 128, cat: Console/PS3, desc: "PS3"}
|
||||
- {id: 154, cat: Console/Other, desc: "Andere"}
|
||||
|
||||
# Musik
|
||||
- {id: 6, cat: Audio, desc: "Alben"}
|
||||
- {id: 139, cat: Audio/Lossless, desc: "Lossless"}
|
||||
- {id: 177, cat: Audio, desc: "Singles"}
|
||||
- {id: 157, cat: Audio, desc: "Charts"}
|
||||
- {id: 192, cat: Audio, desc: "Packs"}
|
||||
- {id: 161, cat: Audio/Video, desc: "Video"}
|
||||
|
||||
- {id: 22, cat: PC/0day, desc: "Windows"}
|
||||
- {id: 129, cat: PC/Mac, desc: "Mac OS"}
|
||||
- {id: 164, cat: PC/0day, desc: "Linux"}
|
||||
- {id: 124, cat: PC/Phone-Android, desc: "Android"}
|
||||
- {id: 165, cat: PC/Phone-IOS, desc: "Apple iOS"}
|
||||
- {id: 167, cat: PC/Phone-Other, desc: "Andere"}
|
||||
|
||||
# Sport
|
||||
- {id: 130, cat: TV/Sport, desc: "HD"}
|
||||
- {id: 135, cat: TV/Sport, desc: "SD"}
|
||||
|
||||
# International
|
||||
- {id: 170, cat: Movies/Foreign, desc: "Filme HD"}
|
||||
- {id: 134, cat: Movies/Foreign, desc: "Filme SD"}
|
||||
- {id: 171, cat: TV/Foreign, desc: "Folgen HD"}
|
||||
- {id: 172, cat: TV/Foreign, desc: "Folgen SD"}
|
||||
|
||||
# Sonstiges
|
||||
- {id: 28, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 13, cat: Books, desc: "e-Book"}
|
||||
- {id: 11, cat: Audio/Audiobook, desc: "Hören"}
|
||||
- {id: 136, cat: Other, desc: "Bilder"}
|
||||
- {id: 9, cat: Other, desc: "Tutorial"}
|
||||
- {id: 178, cat: Other, desc: "Anderes"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
settings:
|
||||
- name: pin
|
||||
type: text
|
||||
label: Pin
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
|
||||
login:
|
||||
path: /login/
|
||||
method: form
|
||||
form: form
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
pin: "{{ .Config.pin }}"
|
||||
test:
|
||||
path: browse.php
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
intitle: "1"
|
||||
incldead: "1"
|
||||
team: "0"
|
||||
orderby: "added"
|
||||
sort: desc
|
||||
rows:
|
||||
selector: table.tableinborder > tbody > tr:has(a[href^="details.php"])
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php"]
|
||||
banner:
|
||||
selector: a[href^="details.php"] > span > img
|
||||
attribute: src
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php"]
|
||||
attribute: href
|
||||
comments:
|
||||
selector: a[href*="&tocomm="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(2)
|
||||
grabs:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
|
||||
size:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(1)
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
seeders:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
|
||||
leechers:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(6)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\xA0", " "]
|
||||
- name: dateparse
|
||||
args: "02.01.2006 15:04:05"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="onlyupload"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: gods
|
||||
name: GODS
|
||||
language: de-de
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
links:
|
||||
- https://gods.lu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Movie
|
||||
- {id: 132, cat: Movies/BluRay, desc: "BluRay"}
|
||||
- {id: 146, cat: Movies/HD, desc: "Remux"}
|
||||
- {id: 186, cat: Movies/HD, desc: "UHD"}
|
||||
- {id: 189, cat: Movies/HD, desc: "HD"}
|
||||
- {id: 190, cat: Movies/SD, desc: "SD"}
|
||||
- {id: 20, cat: Movies/DVD, desc: "DVD"}
|
||||
- {id: 131, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 16, cat: Movies, desc: "Packs"}
|
||||
|
||||
# Serien
|
||||
- {id: 187, cat: TV/HD, desc: "Staffeln UHD"}
|
||||
- {id: 173, cat: TV/HD, desc: "Staffeln HD"}
|
||||
- {id: 133, cat: TV/SD, desc: "Staffeln SD"}
|
||||
- {id: 188, cat: TV/HD, desc: "Folgen UHD"}
|
||||
- {id: 174, cat: TV/HD, desc: "Folgen HD"}
|
||||
- {id: 7, cat: TV/SD, desc: "Folgen SD"}
|
||||
|
||||
# Doku
|
||||
- {id: 152, cat: TV/Documentary, desc: "HD"}
|
||||
- {id: 153, cat: TV/Documentary, desc: "SD"}
|
||||
|
||||
# Spiele
|
||||
- {id: 4, cat: PC/Games, desc: "Windows"}
|
||||
- {id: 29, cat: Console/XBox360, desc: "XBOX 360"}
|
||||
- {id: 126, cat: Console/Wii, desc: "Wii"}
|
||||
- {id: 183, cat: Console/Wii, desc: "Wii U"}
|
||||
- {id: 128, cat: Console/PS3, desc: "PS3"}
|
||||
- {id: 154, cat: Console/Other, desc: "Andere"}
|
||||
|
||||
# Musik
|
||||
- {id: 6, cat: Audio, desc: "Alben"}
|
||||
- {id: 139, cat: Audio/Lossless, desc: "Lossless"}
|
||||
- {id: 177, cat: Audio, desc: "Singles"}
|
||||
- {id: 157, cat: Audio, desc: "Charts"}
|
||||
- {id: 192, cat: Audio, desc: "Packs"}
|
||||
- {id: 161, cat: Audio/Video, desc: "Video"}
|
||||
|
||||
- {id: 22, cat: PC/0day, desc: "Windows"}
|
||||
- {id: 129, cat: PC/Mac, desc: "Mac OS"}
|
||||
- {id: 164, cat: PC/0day, desc: "Linux"}
|
||||
- {id: 124, cat: PC/Phone-Android, desc: "Android"}
|
||||
- {id: 165, cat: PC/Phone-IOS, desc: "Apple iOS"}
|
||||
- {id: 167, cat: PC/Phone-Other, desc: "Andere"}
|
||||
|
||||
# Sport
|
||||
- {id: 130, cat: TV/Sport, desc: "HD"}
|
||||
- {id: 135, cat: TV/Sport, desc: "SD"}
|
||||
|
||||
# International
|
||||
- {id: 170, cat: Movies/Foreign, desc: "Filme HD"}
|
||||
- {id: 134, cat: Movies/Foreign, desc: "Filme SD"}
|
||||
- {id: 171, cat: TV/Foreign, desc: "Folgen HD"}
|
||||
- {id: 172, cat: TV/Foreign, desc: "Folgen SD"}
|
||||
|
||||
# Sonstiges
|
||||
- {id: 28, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 13, cat: Books, desc: "e-Book"}
|
||||
- {id: 11, cat: Audio/Audiobook, desc: "Hören"}
|
||||
- {id: 136, cat: Other, desc: "Bilder"}
|
||||
- {id: 9, cat: Other, desc: "Tutorial"}
|
||||
- {id: 178, cat: Other, desc: "Anderes"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
settings:
|
||||
- name: pin
|
||||
type: text
|
||||
label: Pin
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
|
||||
login:
|
||||
path: /login/
|
||||
method: form
|
||||
form: form
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
pin: "{{ .Config.pin }}"
|
||||
test:
|
||||
path: browse.php
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
intitle: "1"
|
||||
incldead: "1"
|
||||
team: "0"
|
||||
orderby: "added"
|
||||
sort: desc
|
||||
rows:
|
||||
selector: table.tableinborder > tbody > tr:has(a[href^="details.php"])
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php"]
|
||||
banner:
|
||||
selector: a[href^="details.php"] > span > img
|
||||
attribute: src
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php"]
|
||||
attribute: href
|
||||
comments:
|
||||
selector: a[href*="&tocomm="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(2)
|
||||
grabs:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
|
||||
size:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(1)
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
seeders:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
|
||||
leechers:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(6)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\xA0", " "]
|
||||
- name: dateparse
|
||||
args: "02.01.2006 15:04:05"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="onlyupload"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,193 +1,193 @@
|
||||
---
|
||||
site: gormogon
|
||||
name: Gormogon
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.gormogon.com
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Movies:
|
||||
- {id: 1, cat: Movies/DVD, desc: "DVD-R"}
|
||||
- {id: 2, cat: Movies, desc: "Action"}
|
||||
- {id: 14, cat: Movies, desc: "Adventure"}
|
||||
- {id: 15, cat: Movies, desc: "Animation"}
|
||||
- {id: 16, cat: Movies, desc: "Biography"}
|
||||
- {id: 17, cat: Movies, desc: "Comedy"}
|
||||
- {id: 18, cat: Movies, desc: "Crime"}
|
||||
- {id: 19, cat: Movies, desc: "Disney"}
|
||||
- {id: 92, cat: Movies, desc: "Documentary"}
|
||||
- {id: 20, cat: Movies, desc: "Drama"}
|
||||
- {id: 21, cat: Movies, desc: "Family"}
|
||||
- {id: 22, cat: Movies, desc: "Fantasy"}
|
||||
- {id: 23, cat: Movies, desc: "Film Noir"}
|
||||
- {id: 97, cat: Movies, desc: "History"}
|
||||
- {id: 24, cat: Movies, desc: "Horror"}
|
||||
- {id: 25, cat: Movies, desc: "Martial Arts"}
|
||||
- {id: 26, cat: Movies, desc: "Musicals"}
|
||||
- {id: 27, cat: Movies, desc: "Mystery"}
|
||||
- {id: 28, cat: Movies, desc: "Romance"}
|
||||
- {id: 29, cat: Movies, desc: "Sci-Fi"}
|
||||
- {id: 30, cat: Movies, desc: "Thriller"}
|
||||
- {id: 31, cat: Movies, desc: "War"}
|
||||
- {id: 32, cat: Movies, desc: "Western"}
|
||||
- {id: 33, cat: Movies, desc: "Other"}
|
||||
|
||||
# Classic TV:
|
||||
- {id: 34, cat: TV, desc: "Action"}
|
||||
- {id: 35, cat: TV, desc: "Adventure"}
|
||||
- {id: 36, cat: TV, desc: "Animation"}
|
||||
- {id: 37, cat: TV, desc: "Biography"}
|
||||
- {id: 38, cat: TV, desc: "Comedy"}
|
||||
- {id: 39, cat: TV, desc: "Crime"}
|
||||
- {id: 40, cat: TV, desc: "Disney"}
|
||||
- {id: 41, cat: TV, desc: "Documentary"}
|
||||
- {id: 42, cat: TV, desc: "Drama"}
|
||||
- {id: 43, cat: TV, desc: "Family"}
|
||||
- {id: 44, cat: TV, desc: "Fantasy"}
|
||||
- {id: 45, cat: TV, desc: "TV Noir"}
|
||||
- {id: 46, cat: TV, desc: "Horror"}
|
||||
- {id: 47, cat: TV, desc: "Martial Arts"}
|
||||
- {id: 49, cat: TV, desc: "Musicals"}
|
||||
- {id: 50, cat: TV, desc: "Mystery"}
|
||||
- {id: 51, cat: TV, desc: "Romance"}
|
||||
- {id: 52, cat: TV, desc: "Sci-Fi"}
|
||||
- {id: 48, cat: TV, desc: "Shows"}
|
||||
- {id: 53, cat: TV, desc: "Thriller"}
|
||||
- {id: 54, cat: TV, desc: "War"}
|
||||
- {id: 55, cat: TV, desc: "Western"}
|
||||
- {id: 56, cat: TV, desc: "Other"}
|
||||
- {id: 90, cat: TV, desc: "TV Movies"}
|
||||
|
||||
# Old Time Radio
|
||||
- {id: 57, cat: Audio, desc: "Action"}
|
||||
- {id: 58, cat: Audio, desc: "Adventure"}
|
||||
- {id: 59, cat: Audio, desc: "Biography"}
|
||||
- {id: 60, cat: Audio, desc: "Comedy"}
|
||||
- {id: 61, cat: Audio, desc: "Crime"}
|
||||
- {id: 62, cat: Audio, desc: "Documentary"}
|
||||
- {id: 63, cat: Audio, desc: "Drama"}
|
||||
- {id: 64, cat: Audio, desc: "Family"}
|
||||
- {id: 65, cat: Audio, desc: "Fantasy"}
|
||||
- {id: 66, cat: Audio, desc: "Radio Noir"}
|
||||
- {id: 67, cat: Audio, desc: "Horror"}
|
||||
- {id: 68, cat: Audio, desc: "Musicals"}
|
||||
- {id: 69, cat: Audio, desc: "Mystery"}
|
||||
- {id: 70, cat: Audio, desc: "Romance"}
|
||||
- {id: 71, cat: Audio, desc: "Sci-Fi"}
|
||||
- {id: 72, cat: Audio, desc: "Shows"}
|
||||
- {id: 73, cat: Audio, desc: "Thriller"}
|
||||
- {id: 74, cat: Audio, desc: "War"}
|
||||
- {id: 75, cat: Audio, desc: "Western"}
|
||||
- {id: 76, cat: Audio, desc: "Other"}
|
||||
|
||||
# Music:
|
||||
- {id: 77, cat: Audio, desc: "Official Sountracks"}
|
||||
- {id: 78, cat: Audio, desc: "Theme Tunes"}
|
||||
- {id: 79, cat: Audio, desc: "Music 30s"}
|
||||
- {id: 80, cat: Audio, desc: "Music 40s"}
|
||||
- {id: 81, cat: Audio, desc: "Music 50s"}
|
||||
- {id: 85, cat: Audio, desc: "Music 60s"}
|
||||
- {id: 86, cat: Audio, desc: "Music 70s"}
|
||||
- {id: 87, cat: Audio, desc: "Music '80 - '84"}
|
||||
|
||||
# Printed:
|
||||
- {id: 82, cat: Books, desc: "Books"}
|
||||
- {id: 91, cat: Books, desc: "Newspaper"}
|
||||
- {id: 83, cat: Books, desc: "Scripts"}
|
||||
- {id: 84, cat: Books, desc: "Posters"}
|
||||
- {id: 88, cat: Books, desc: "Comics"}
|
||||
- {id: 89, cat: Books, desc: "Magazines"}
|
||||
|
||||
# Software:
|
||||
- {id: 94, cat: Other, desc: "Screensavers"}
|
||||
- {id: 95, cat: PC, desc: "Programs"}
|
||||
- {id: 96, cat: Other, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: index.php?page=login&returnto=index.php
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.lista > span[style="color:#FF0000;"]
|
||||
test:
|
||||
path: index.php
|
||||
selector: form[name="jump1"]
|
||||
|
||||
ratio:
|
||||
path: index.php
|
||||
selector: form[name="jump1"] > table > tbody > tr > td:contains("SR ")
|
||||
filters:
|
||||
- name: trim
|
||||
args: ")"
|
||||
- name: split
|
||||
args: [" ", 1]
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
search: "{{ .Query.Keywords }}"
|
||||
category: "{{range .Categories}}{{.}};{{end}}"
|
||||
page: torrents
|
||||
active: 0
|
||||
rows:
|
||||
selector: table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="index.php?page=downloadcheck&id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
details:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(10)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "02/01/2006"
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="gold"]: "0"
|
||||
img[alt="silver"]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[alt="2x Upload Multiplier"]: "2"
|
||||
img[alt="3x Upload Multiplier"]: "3"
|
||||
img[alt="4x Upload Multiplier"]: "4"
|
||||
img[alt="5x Upload Multiplier"]: "5"
|
||||
img[alt="6x Upload Multiplier"]: "6"
|
||||
img[alt="7x Upload Multiplier"]: "7"
|
||||
img[alt="8x Upload Multiplier"]: "8"
|
||||
img[alt="9x Upload Multiplier"]: "9"
|
||||
img[alt="10x Upload Multiplier"]: "10"
|
||||
---
|
||||
site: gormogon
|
||||
name: Gormogon
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.gormogon.com
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Movies:
|
||||
- {id: 1, cat: Movies/DVD, desc: "DVD-R"}
|
||||
- {id: 2, cat: Movies, desc: "Action"}
|
||||
- {id: 14, cat: Movies, desc: "Adventure"}
|
||||
- {id: 15, cat: Movies, desc: "Animation"}
|
||||
- {id: 16, cat: Movies, desc: "Biography"}
|
||||
- {id: 17, cat: Movies, desc: "Comedy"}
|
||||
- {id: 18, cat: Movies, desc: "Crime"}
|
||||
- {id: 19, cat: Movies, desc: "Disney"}
|
||||
- {id: 92, cat: Movies, desc: "Documentary"}
|
||||
- {id: 20, cat: Movies, desc: "Drama"}
|
||||
- {id: 21, cat: Movies, desc: "Family"}
|
||||
- {id: 22, cat: Movies, desc: "Fantasy"}
|
||||
- {id: 23, cat: Movies, desc: "Film Noir"}
|
||||
- {id: 97, cat: Movies, desc: "History"}
|
||||
- {id: 24, cat: Movies, desc: "Horror"}
|
||||
- {id: 25, cat: Movies, desc: "Martial Arts"}
|
||||
- {id: 26, cat: Movies, desc: "Musicals"}
|
||||
- {id: 27, cat: Movies, desc: "Mystery"}
|
||||
- {id: 28, cat: Movies, desc: "Romance"}
|
||||
- {id: 29, cat: Movies, desc: "Sci-Fi"}
|
||||
- {id: 30, cat: Movies, desc: "Thriller"}
|
||||
- {id: 31, cat: Movies, desc: "War"}
|
||||
- {id: 32, cat: Movies, desc: "Western"}
|
||||
- {id: 33, cat: Movies, desc: "Other"}
|
||||
|
||||
# Classic TV:
|
||||
- {id: 34, cat: TV, desc: "Action"}
|
||||
- {id: 35, cat: TV, desc: "Adventure"}
|
||||
- {id: 36, cat: TV, desc: "Animation"}
|
||||
- {id: 37, cat: TV, desc: "Biography"}
|
||||
- {id: 38, cat: TV, desc: "Comedy"}
|
||||
- {id: 39, cat: TV, desc: "Crime"}
|
||||
- {id: 40, cat: TV, desc: "Disney"}
|
||||
- {id: 41, cat: TV, desc: "Documentary"}
|
||||
- {id: 42, cat: TV, desc: "Drama"}
|
||||
- {id: 43, cat: TV, desc: "Family"}
|
||||
- {id: 44, cat: TV, desc: "Fantasy"}
|
||||
- {id: 45, cat: TV, desc: "TV Noir"}
|
||||
- {id: 46, cat: TV, desc: "Horror"}
|
||||
- {id: 47, cat: TV, desc: "Martial Arts"}
|
||||
- {id: 49, cat: TV, desc: "Musicals"}
|
||||
- {id: 50, cat: TV, desc: "Mystery"}
|
||||
- {id: 51, cat: TV, desc: "Romance"}
|
||||
- {id: 52, cat: TV, desc: "Sci-Fi"}
|
||||
- {id: 48, cat: TV, desc: "Shows"}
|
||||
- {id: 53, cat: TV, desc: "Thriller"}
|
||||
- {id: 54, cat: TV, desc: "War"}
|
||||
- {id: 55, cat: TV, desc: "Western"}
|
||||
- {id: 56, cat: TV, desc: "Other"}
|
||||
- {id: 90, cat: TV, desc: "TV Movies"}
|
||||
|
||||
# Old Time Radio
|
||||
- {id: 57, cat: Audio, desc: "Action"}
|
||||
- {id: 58, cat: Audio, desc: "Adventure"}
|
||||
- {id: 59, cat: Audio, desc: "Biography"}
|
||||
- {id: 60, cat: Audio, desc: "Comedy"}
|
||||
- {id: 61, cat: Audio, desc: "Crime"}
|
||||
- {id: 62, cat: Audio, desc: "Documentary"}
|
||||
- {id: 63, cat: Audio, desc: "Drama"}
|
||||
- {id: 64, cat: Audio, desc: "Family"}
|
||||
- {id: 65, cat: Audio, desc: "Fantasy"}
|
||||
- {id: 66, cat: Audio, desc: "Radio Noir"}
|
||||
- {id: 67, cat: Audio, desc: "Horror"}
|
||||
- {id: 68, cat: Audio, desc: "Musicals"}
|
||||
- {id: 69, cat: Audio, desc: "Mystery"}
|
||||
- {id: 70, cat: Audio, desc: "Romance"}
|
||||
- {id: 71, cat: Audio, desc: "Sci-Fi"}
|
||||
- {id: 72, cat: Audio, desc: "Shows"}
|
||||
- {id: 73, cat: Audio, desc: "Thriller"}
|
||||
- {id: 74, cat: Audio, desc: "War"}
|
||||
- {id: 75, cat: Audio, desc: "Western"}
|
||||
- {id: 76, cat: Audio, desc: "Other"}
|
||||
|
||||
# Music:
|
||||
- {id: 77, cat: Audio, desc: "Official Sountracks"}
|
||||
- {id: 78, cat: Audio, desc: "Theme Tunes"}
|
||||
- {id: 79, cat: Audio, desc: "Music 30s"}
|
||||
- {id: 80, cat: Audio, desc: "Music 40s"}
|
||||
- {id: 81, cat: Audio, desc: "Music 50s"}
|
||||
- {id: 85, cat: Audio, desc: "Music 60s"}
|
||||
- {id: 86, cat: Audio, desc: "Music 70s"}
|
||||
- {id: 87, cat: Audio, desc: "Music '80 - '84"}
|
||||
|
||||
# Printed:
|
||||
- {id: 82, cat: Books, desc: "Books"}
|
||||
- {id: 91, cat: Books, desc: "Newspaper"}
|
||||
- {id: 83, cat: Books, desc: "Scripts"}
|
||||
- {id: 84, cat: Books, desc: "Posters"}
|
||||
- {id: 88, cat: Books, desc: "Comics"}
|
||||
- {id: 89, cat: Books, desc: "Magazines"}
|
||||
|
||||
# Software:
|
||||
- {id: 94, cat: Other, desc: "Screensavers"}
|
||||
- {id: 95, cat: PC, desc: "Programs"}
|
||||
- {id: 96, cat: Other, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: index.php?page=login&returnto=index.php
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.lista > span[style="color:#FF0000;"]
|
||||
test:
|
||||
path: index.php
|
||||
selector: form[name="jump1"]
|
||||
|
||||
ratio:
|
||||
path: index.php
|
||||
selector: form[name="jump1"] > table > tbody > tr > td:contains("SR ")
|
||||
filters:
|
||||
- name: trim
|
||||
args: ")"
|
||||
- name: split
|
||||
args: [" ", 1]
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: index.php
|
||||
inputs:
|
||||
search: "{{ .Query.Keywords }}"
|
||||
category: "{{range .Categories}}{{.}};{{end}}"
|
||||
page: torrents
|
||||
active: 0
|
||||
rows:
|
||||
selector: table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="index.php?page=downloadcheck&id="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
details:
|
||||
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(10)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "02/01/2006"
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["---", "0"]
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[alt="gold"]: "0"
|
||||
img[alt="silver"]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[alt="2x Upload Multiplier"]: "2"
|
||||
img[alt="3x Upload Multiplier"]: "3"
|
||||
img[alt="4x Upload Multiplier"]: "4"
|
||||
img[alt="5x Upload Multiplier"]: "5"
|
||||
img[alt="6x Upload Multiplier"]: "6"
|
||||
img[alt="7x Upload Multiplier"]: "7"
|
||||
img[alt="8x Upload Multiplier"]: "8"
|
||||
img[alt="9x Upload Multiplier"]: "9"
|
||||
img[alt="10x Upload Multiplier"]: "10"
|
||||
"*": "1"
|
||||
@@ -119,9 +119,9 @@
|
||||
download:
|
||||
text: "download2.php?torrent={{ .Result._id }}"
|
||||
size:
|
||||
selector: td:nth-last-child(3)
|
||||
selector: td:nth-last-child(4)
|
||||
date:
|
||||
selector: td:nth-last-child(5)
|
||||
selector: td:nth-last-child(6) > nobr
|
||||
filters:
|
||||
- name: append
|
||||
args: " +02:00"
|
||||
@@ -130,9 +130,9 @@
|
||||
files:
|
||||
selector: td:nth-last-child(7)
|
||||
seeders:
|
||||
selector: td:nth-last-child(2)
|
||||
selector: td:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td:nth-last-child(1)
|
||||
selector: td:nth-last-child(2)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[src=\"pic/free.png\"]": "0"
|
||||
|
||||
@@ -1,83 +1,83 @@
|
||||
---
|
||||
site: hdbits
|
||||
name: HDBits
|
||||
description: "Best HD Tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdbits.org
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: "Movies", desc: "Movie"}
|
||||
- {id: 2, cat: "TV", desc: "TV"}
|
||||
- {id: 3, cat: "TV/Documentary", desc: "Documentary"}
|
||||
- {id: 4, cat: "Audio", desc: "Music"}
|
||||
- {id: 5, cat: "TV/Sport", desc: "Sport"}
|
||||
- {id: 6, cat: "Audio", desc: "Audio Track"}
|
||||
- {id: 7, cat: "XXX", desc: "XXX"}
|
||||
- {id: 8, cat: "Other", desc: "Misc/Demo"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: /login
|
||||
method: form
|
||||
form: form
|
||||
inputs:
|
||||
uname: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table.main:contains("Login Failed!")
|
||||
test:
|
||||
path: my.php
|
||||
|
||||
download:
|
||||
selector: a[href^="/download.php"]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table#torrent-list > tbody > tr:has(a[href^="/details.php?id="])
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: td:nth-child(3) a
|
||||
download:
|
||||
selector: a[href^="/download.php"]
|
||||
attribute: href
|
||||
details:
|
||||
selector: a[href^="/details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(7) a
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " ago"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"a[title=\"25% Free Leech: only 75% of the download is counted.\"]": "0.25"
|
||||
"a[title=\"50% Free Leech: only half the download is counted.\"]": "0.5"
|
||||
"a[title=\"100% FL: no download is counted.\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: hdbits
|
||||
name: HDBits
|
||||
description: "Best HD Tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdbits.org
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: "Movies", desc: "Movie"}
|
||||
- {id: 2, cat: "TV", desc: "TV"}
|
||||
- {id: 3, cat: "TV/Documentary", desc: "Documentary"}
|
||||
- {id: 4, cat: "Audio", desc: "Music"}
|
||||
- {id: 5, cat: "TV/Sport", desc: "Sport"}
|
||||
- {id: 6, cat: "Audio", desc: "Audio Track"}
|
||||
- {id: 7, cat: "XXX", desc: "XXX"}
|
||||
- {id: 8, cat: "Other", desc: "Misc/Demo"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: /login
|
||||
method: form
|
||||
form: form
|
||||
inputs:
|
||||
uname: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table.main:contains("Login Failed!")
|
||||
test:
|
||||
path: my.php
|
||||
|
||||
download:
|
||||
selector: a[href^="/download.php"]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table#torrent-list > tbody > tr:has(a[href^="/details.php?id="])
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: td:nth-child(3) a
|
||||
download:
|
||||
selector: a[href^="/download.php"]
|
||||
attribute: href
|
||||
details:
|
||||
selector: a[href^="/details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(7) a
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " ago"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"a[title=\"25% Free Leech: only 75% of the download is counted.\"]": "0.25"
|
||||
"a[title=\"50% Free Leech: only half the download is counted.\"]": "0.5"
|
||||
"a[title=\"100% FL: no download is counted.\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,97 +1,97 @@
|
||||
---
|
||||
site: hdbitscom
|
||||
name: HD-Bits.com
|
||||
description: "HD tracker"
|
||||
language: en-us
|
||||
encoding: UTF-8
|
||||
type: private
|
||||
links:
|
||||
- https://www.hd-bits.com
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Audio, desc: "Music"}
|
||||
- {id: 2, cat: Movies, desc: "Movies"}
|
||||
- {id: 3, cat: TV, desc: "TV-Series"}
|
||||
- {id: 4, cat: PC, desc: "Applications"}
|
||||
- {id: 5, cat: XXX, desc: "Adult"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
login: "Log in"
|
||||
error:
|
||||
- selector: form#loginform > span.warning
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
ratio:
|
||||
path: torrents.php
|
||||
selector: li#stats_ratio > span
|
||||
|
||||
search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: time
|
||||
order_way: desc
|
||||
action: basic
|
||||
searchsubmit: 1
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
description:
|
||||
selector: div.group_info div.tags
|
||||
title:
|
||||
selector: div.group_info a[href^="torrents.php?id="]
|
||||
category:
|
||||
selector: td.cats_col
|
||||
case:
|
||||
div.cats_music: 1
|
||||
div.cats_movies: 2
|
||||
div.cats_tvseries: 3
|
||||
div.cats_applications: 4
|
||||
div.cats_xxx: 5
|
||||
comments:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
imdb:
|
||||
selector: a[href*="http://www.imdb.com/title/"]
|
||||
optional: true
|
||||
attribute: href
|
||||
banner:
|
||||
selector: img[alt="Cover"]
|
||||
optional: true
|
||||
attribute: src
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"div.freeleech:contains('Freeleech!')": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
---
|
||||
site: hdbitscom
|
||||
name: HD-Bits.com
|
||||
description: "HD tracker"
|
||||
language: en-us
|
||||
encoding: UTF-8
|
||||
type: private
|
||||
links:
|
||||
- https://www.hd-bits.com
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Audio, desc: "Music"}
|
||||
- {id: 2, cat: Movies, desc: "Movies"}
|
||||
- {id: 3, cat: TV, desc: "TV-Series"}
|
||||
- {id: 4, cat: PC, desc: "Applications"}
|
||||
- {id: 5, cat: XXX, desc: "Adult"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
login: "Log in"
|
||||
error:
|
||||
- selector: form#loginform > span.warning
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
ratio:
|
||||
path: torrents.php
|
||||
selector: li#stats_ratio > span
|
||||
|
||||
search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: time
|
||||
order_way: desc
|
||||
action: basic
|
||||
searchsubmit: 1
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
description:
|
||||
selector: div.group_info div.tags
|
||||
title:
|
||||
selector: div.group_info a[href^="torrents.php?id="]
|
||||
category:
|
||||
selector: td.cats_col
|
||||
case:
|
||||
div.cats_music: 1
|
||||
div.cats_movies: 2
|
||||
div.cats_tvseries: 3
|
||||
div.cats_applications: 4
|
||||
div.cats_xxx: 5
|
||||
comments:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
imdb:
|
||||
selector: a[href*="http://www.imdb.com/title/"]
|
||||
optional: true
|
||||
attribute: href
|
||||
banner:
|
||||
selector: img[alt="Cover"]
|
||||
optional: true
|
||||
attribute: src
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"div.freeleech:contains('Freeleech!')": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
|
||||
@@ -1,111 +1,121 @@
|
||||
---
|
||||
site: hdchina
|
||||
name: HDChina
|
||||
description: "A chinese tracker"
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdchina.club/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 20, cat: Movies/BluRay, desc: "Movie Full BD"}
|
||||
- {id: 17, cat: Movies/HD, desc: "Movie 1080p"}
|
||||
- {id: 16, cat: Movies/HD, desc: "Movie 1080i"}
|
||||
- {id: 9, cat: Movies/HD, desc: "Movie 720p"}
|
||||
- {id: 13, cat: TV, desc: "EU/US TV series"}
|
||||
- {id: 25, cat: TV, desc: "Chinese TV series"}
|
||||
- {id: 26, cat: TV, desc: "Kor Drama"}
|
||||
- {id: 24, cat: TV, desc: "Jpn Drama"}
|
||||
- {id: 21, cat: TV, desc: "EU/US TV series pack"}
|
||||
- {id: 22, cat: TV, desc: "Chinese TV series pack"}
|
||||
- {id: 23, cat: TV, desc: "JPN/KOR drama pack"}
|
||||
- {id: 27, cat: Movies/SD, desc: "iPad Video"}
|
||||
- {id: 5, cat: TV/Documentary, desc: "Documentary"}
|
||||
- {id: 15, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 14, cat: TV/Anime, desc: "Animation"}
|
||||
- {id: 401, cat: TV, desc: "TV Shows"}
|
||||
- {id: 402, cat: Audio, desc: "Vocal Concert"}
|
||||
- {id: 406, cat: Audio, desc: "Music Video"}
|
||||
- {id: 408, cat: Audio, desc: "Music"}
|
||||
- {id: 19, cat: Audio, desc: "Audio Track"}
|
||||
- {id: 405, cat: Audio, desc: "Drama"}
|
||||
- {id: 404, cat: Books, desc: "Book"}
|
||||
- {id: 409, cat: Other, desc: "Other"}
|
||||
- {id: 410, cat: Movies/HD, desc: "4K UltraHD"}
|
||||
- {id: 411, cat: TV, desc: "Travel"}
|
||||
- {id: 412, cat: TV, desc: "Food"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
captcha:
|
||||
type: image
|
||||
image: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: "0"
|
||||
spstate: "0"
|
||||
inclbookmarked: "0"
|
||||
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
search_mode: "0"
|
||||
rows:
|
||||
selector: table.torrent_list > tbody > tr:has(a[href^="?cat="])
|
||||
fields:
|
||||
title:
|
||||
selector: td:nth-child(2) a
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php", "download.php"]
|
||||
size:
|
||||
selector: td.t_size
|
||||
grabs:
|
||||
selector: td.t_completed
|
||||
seeders:
|
||||
selector: td.t_torrents
|
||||
leechers:
|
||||
selector: td.t_leech
|
||||
date:
|
||||
selector: td.t_time
|
||||
filters:
|
||||
- name: append
|
||||
args: " ago"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown: ".5"
|
||||
img.pro_30pctdown: ".3"
|
||||
img.pro_free: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: hdchina
|
||||
name: HDChina
|
||||
description: "A chinese tracker"
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdchina.club/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 20, cat: Movies/BluRay, desc: "Movie Full BD"}
|
||||
- {id: 17, cat: Movies/HD, desc: "Movie 1080p"}
|
||||
- {id: 16, cat: Movies/HD, desc: "Movie 1080i"}
|
||||
- {id: 9, cat: Movies/HD, desc: "Movie 720p"}
|
||||
- {id: 13, cat: TV, desc: "EU/US TV series"}
|
||||
- {id: 25, cat: TV, desc: "Chinese TV series"}
|
||||
- {id: 26, cat: TV, desc: "Kor Drama"}
|
||||
- {id: 24, cat: TV, desc: "Jpn Drama"}
|
||||
- {id: 21, cat: TV, desc: "EU/US TV series pack"}
|
||||
- {id: 22, cat: TV, desc: "Chinese TV series pack"}
|
||||
- {id: 23, cat: TV, desc: "JPN/KOR drama pack"}
|
||||
- {id: 27, cat: Movies/SD, desc: "iPad Video"}
|
||||
- {id: 5, cat: TV/Documentary, desc: "Documentary"}
|
||||
- {id: 15, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 14, cat: TV/Anime, desc: "Animation"}
|
||||
- {id: 401, cat: TV, desc: "TV Shows"}
|
||||
- {id: 402, cat: Audio, desc: "Vocal Concert"}
|
||||
- {id: 406, cat: Audio, desc: "Music Video"}
|
||||
- {id: 408, cat: Audio, desc: "Music"}
|
||||
- {id: 19, cat: Audio, desc: "Audio Track"}
|
||||
- {id: 405, cat: Audio, desc: "Drama"}
|
||||
- {id: 404, cat: Books, desc: "Book"}
|
||||
- {id: 409, cat: Other, desc: "Other"}
|
||||
- {id: 410, cat: Movies/HD, desc: "4K UltraHD"}
|
||||
- {id: 411, cat: TV, desc: "Travel"}
|
||||
- {id: 412, cat: TV, desc: "Food"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
captcha:
|
||||
type: image
|
||||
image: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: "0"
|
||||
spstate: "0"
|
||||
inclbookmarked: "0"
|
||||
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
search_mode: "0"
|
||||
rows:
|
||||
selector: table.torrent_list > tbody > tr:has(a[href^="?cat="])
|
||||
fields:
|
||||
title:
|
||||
selector: td:nth-child(2) a
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php", "download.php"]
|
||||
size:
|
||||
selector: td.t_size
|
||||
grabs:
|
||||
selector: td.t_completed
|
||||
seeders:
|
||||
selector: td.t_torrents
|
||||
leechers:
|
||||
selector: td.t_leech
|
||||
date:
|
||||
selector: td.t_time
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["时", " hours"]
|
||||
- name: replace
|
||||
args: ["分", " minutes"]
|
||||
- name: replace
|
||||
args: ["天", " days"]
|
||||
- name: replace
|
||||
args: ["年", " year"]
|
||||
- name: replace
|
||||
args: ["月", " months"]
|
||||
- name: append
|
||||
args: " ago"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown: ".5"
|
||||
img.pro_30pctdown: ".3"
|
||||
img.pro_free: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,98 +0,0 @@
|
||||
---
|
||||
site: hdclub
|
||||
name: HDClub
|
||||
language: ru-ru
|
||||
type: private
|
||||
encoding: windows-1251
|
||||
links:
|
||||
- http://hdclub.org
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 70, cat: Movies, desc: "Animation"}
|
||||
- {id: 71, cat: Movies, desc: "Movie"}
|
||||
- {id: 81, cat: Audio, desc: "HD Audio"}
|
||||
- {id: 78, cat: TV/Documentary, desc: "Documentary"}
|
||||
- {id: 68, cat: Audio/Video, desc: "Music Video"}
|
||||
- {id: 64, cat: TV, desc: "TV Show"}
|
||||
- {id: 62, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 82, cat: Other, desc: "Demo"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
image: img#captcha
|
||||
input: imagestring
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded > div.error
|
||||
test:
|
||||
path: browse.php
|
||||
selector: td.main_bottom
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
dsearch: ""
|
||||
stype: "or"
|
||||
incldead: "1"
|
||||
webdl: "0"
|
||||
3d: "0"
|
||||
rows:
|
||||
selector: tbody#highlighted > tr
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php", "download.php"]
|
||||
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
|
||||
date:
|
||||
selector: div#frame > div#cleft > font
|
||||
filters:
|
||||
- name: append
|
||||
args: " +02:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
seeders:
|
||||
selector: td:nth-child(5)
|
||||
leechers:
|
||||
selector: td:nth-child(6)
|
||||
grabs:
|
||||
selector: td:nth-child(7) b
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
remove: a, br, b
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/freedownload.gif"]: "0"
|
||||
img[src="pic/silver.gif"]: "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,142 +1,142 @@
|
||||
---
|
||||
site: hdhome
|
||||
name: HDHome
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdhome.org
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 411, cat: Movies/SD, desc: "Movies SD"}
|
||||
- {id: 412, cat: Movies/SD, desc: "Movies IPad"}
|
||||
- {id: 413, cat: Movies/HD, desc: "Movies 720p"}
|
||||
- {id: 414, cat: Movies/HD, desc: "Movies 1080p"}
|
||||
- {id: 415, cat: Movies/HD, desc: "Movies REMUX"}
|
||||
- {id: 450, cat: Movies/BluRay, desc: "Movies Bluray"}
|
||||
- {id: 416, cat: Movies/HD, desc: "Movies 2160p"}
|
||||
- {id: 417, cat: TV/Documentary, desc: "Doc SD"}
|
||||
- {id: 418, cat: TV/Documentary, desc: "Doc IPad"}
|
||||
- {id: 419, cat: TV/Documentary, desc: "Doc 720p"}
|
||||
- {id: 420, cat: TV/Documentary, desc: "Doc 1080p"}
|
||||
- {id: 421, cat: TV/Documentary, desc: "Doc REMUX"}
|
||||
- {id: 451, cat: TV/Documentary, desc: "Doc Bluray"}
|
||||
- {id: 422, cat: TV/Documentary, desc: "Doc 2160p"}
|
||||
- {id: 423, cat: TV/HD, desc: "TVMusic 720p"}
|
||||
- {id: 424, cat: TV/HD, desc: "TVMusic 1080i"}
|
||||
- {id: 425, cat: TV/SD, desc: "TVShow SD"}
|
||||
- {id: 426, cat: TV/SD, desc: "TVShow IPad"}
|
||||
- {id: 427, cat: TV/HD, desc: "TVShow 720p"}
|
||||
- {id: 428, cat: TV/HD, desc: "TVShow 1080i"}
|
||||
- {id: 429, cat: TV/HD, desc: "TVShow 1080p"}
|
||||
- {id: 430, cat: TV/HD, desc: "TVShow REMUX"}
|
||||
- {id: 452, cat: TV/HD, desc: "TVShows Bluray"}
|
||||
- {id: 431, cat: TV/HD, desc: "TVShow 2160p"}
|
||||
- {id: 432, cat: TV/SD, desc: "TVSeries SD"}
|
||||
- {id: 433, cat: TV/SD, desc: "TVSeries IPad"}
|
||||
- {id: 434, cat: TV/HD, desc: "TVSeries 720p"}
|
||||
- {id: 435, cat: TV/HD, desc: "TVSeries 1080i"}
|
||||
- {id: 436, cat: TV/HD, desc: "TVSeries 1080p"}
|
||||
- {id: 437, cat: TV/HD, desc: "TVSeries REMUX"}
|
||||
- {id: 453, cat: TV/HD, desc: "TVSereis Bluray"}
|
||||
- {id: 438, cat: TV/HD, desc: "TVSeries 2160p"}
|
||||
- {id: 439, cat: Audio/Other, desc: "Musics APE"}
|
||||
- {id: 440, cat: Audio/Lossless, desc: "Musics FLAC"}
|
||||
- {id: 441, cat: Audio/Video, desc: "Musics MV"}
|
||||
- {id: 442, cat: TV/Sport, desc: "Sports 720p"}
|
||||
- {id: 443, cat: TV/Sport, desc: "Sports 1080i"}
|
||||
- {id: 444, cat: TV/Anime, desc: "Anime SD"}
|
||||
- {id: 445, cat: TV/Anime, desc: "Anime IPad"}
|
||||
- {id: 446, cat: TV/Anime, desc: "Anime 720p"}
|
||||
- {id: 447, cat: TV/Anime, desc: "Anime 1080p"}
|
||||
- {id: 448, cat: TV/Anime, desc: "Anime REMUX"}
|
||||
- {id: 454, cat: TV/Anime, desc: "Anime Bluray"}
|
||||
- {id: 409, cat: Other, desc: "Misc"}
|
||||
- {id: 449, cat: TV/Anime, desc: "Anime 2160p"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
image: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
inputs:
|
||||
logintype: "username"
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("姿势不正确"))
|
||||
- selector: td.embedded:has(h2:contains("失败"))
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: "1"
|
||||
spstate: "0"
|
||||
inclbookmarked: "0"
|
||||
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
search_mode: "0"
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(table.torrentname)
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
date:
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: "0"
|
||||
img.pro_free2up: "0"
|
||||
img.pro_50pctdown: "0.5"
|
||||
img.pro_50pctdown2up: "0.5"
|
||||
img.pro_30pctdown: "0.3"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: "2"
|
||||
img.pro_free2up: "2"
|
||||
img.pro_2up: "2"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
---
|
||||
site: hdhome
|
||||
name: HDHome
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdhome.org
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 411, cat: Movies/SD, desc: "Movies SD"}
|
||||
- {id: 412, cat: Movies/SD, desc: "Movies IPad"}
|
||||
- {id: 413, cat: Movies/HD, desc: "Movies 720p"}
|
||||
- {id: 414, cat: Movies/HD, desc: "Movies 1080p"}
|
||||
- {id: 415, cat: Movies/HD, desc: "Movies REMUX"}
|
||||
- {id: 450, cat: Movies/BluRay, desc: "Movies Bluray"}
|
||||
- {id: 416, cat: Movies/HD, desc: "Movies 2160p"}
|
||||
- {id: 417, cat: TV/Documentary, desc: "Doc SD"}
|
||||
- {id: 418, cat: TV/Documentary, desc: "Doc IPad"}
|
||||
- {id: 419, cat: TV/Documentary, desc: "Doc 720p"}
|
||||
- {id: 420, cat: TV/Documentary, desc: "Doc 1080p"}
|
||||
- {id: 421, cat: TV/Documentary, desc: "Doc REMUX"}
|
||||
- {id: 451, cat: TV/Documentary, desc: "Doc Bluray"}
|
||||
- {id: 422, cat: TV/Documentary, desc: "Doc 2160p"}
|
||||
- {id: 423, cat: TV/HD, desc: "TVMusic 720p"}
|
||||
- {id: 424, cat: TV/HD, desc: "TVMusic 1080i"}
|
||||
- {id: 425, cat: TV/SD, desc: "TVShow SD"}
|
||||
- {id: 426, cat: TV/SD, desc: "TVShow IPad"}
|
||||
- {id: 427, cat: TV/HD, desc: "TVShow 720p"}
|
||||
- {id: 428, cat: TV/HD, desc: "TVShow 1080i"}
|
||||
- {id: 429, cat: TV/HD, desc: "TVShow 1080p"}
|
||||
- {id: 430, cat: TV/HD, desc: "TVShow REMUX"}
|
||||
- {id: 452, cat: TV/HD, desc: "TVShows Bluray"}
|
||||
- {id: 431, cat: TV/HD, desc: "TVShow 2160p"}
|
||||
- {id: 432, cat: TV/SD, desc: "TVSeries SD"}
|
||||
- {id: 433, cat: TV/SD, desc: "TVSeries IPad"}
|
||||
- {id: 434, cat: TV/HD, desc: "TVSeries 720p"}
|
||||
- {id: 435, cat: TV/HD, desc: "TVSeries 1080i"}
|
||||
- {id: 436, cat: TV/HD, desc: "TVSeries 1080p"}
|
||||
- {id: 437, cat: TV/HD, desc: "TVSeries REMUX"}
|
||||
- {id: 453, cat: TV/HD, desc: "TVSereis Bluray"}
|
||||
- {id: 438, cat: TV/HD, desc: "TVSeries 2160p"}
|
||||
- {id: 439, cat: Audio/Other, desc: "Musics APE"}
|
||||
- {id: 440, cat: Audio/Lossless, desc: "Musics FLAC"}
|
||||
- {id: 441, cat: Audio/Video, desc: "Musics MV"}
|
||||
- {id: 442, cat: TV/Sport, desc: "Sports 720p"}
|
||||
- {id: 443, cat: TV/Sport, desc: "Sports 1080i"}
|
||||
- {id: 444, cat: TV/Anime, desc: "Anime SD"}
|
||||
- {id: 445, cat: TV/Anime, desc: "Anime IPad"}
|
||||
- {id: 446, cat: TV/Anime, desc: "Anime 720p"}
|
||||
- {id: 447, cat: TV/Anime, desc: "Anime 1080p"}
|
||||
- {id: 448, cat: TV/Anime, desc: "Anime REMUX"}
|
||||
- {id: 454, cat: TV/Anime, desc: "Anime Bluray"}
|
||||
- {id: 409, cat: Other, desc: "Misc"}
|
||||
- {id: 449, cat: TV/Anime, desc: "Anime 2160p"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
image: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
inputs:
|
||||
logintype: "username"
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("姿势不正确"))
|
||||
- selector: td.embedded:has(h2:contains("失败"))
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: "1"
|
||||
spstate: "0"
|
||||
inclbookmarked: "0"
|
||||
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
search_mode: "0"
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(table.torrentname)
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
date:
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: "0"
|
||||
img.pro_free2up: "0"
|
||||
img.pro_50pctdown: "0.5"
|
||||
img.pro_50pctdown2up: "0.5"
|
||||
img.pro_30pctdown: "0.3"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: "2"
|
||||
img.pro_free2up: "2"
|
||||
img.pro_2up: "2"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, img
|
||||
@@ -1,119 +1,119 @@
|
||||
---
|
||||
site: hdsky
|
||||
name: HDSky
|
||||
description: "A chinese tracker"
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdsky.me
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies/电影"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
|
||||
- {id: 410, cat: Movies, desc: "iPad/iPad影视"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations/动漫"}
|
||||
- {id: 402, cat: TV, desc: "TV Series/剧集"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows/综艺"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos/音乐MV"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports/体育"}
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
|
||||
- {id: 409, cat: Other, desc: "Misc/其他"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
image: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
ratio:
|
||||
path: /torrents.php
|
||||
selector: table#info_block
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Ratio:\\s(.*?)\\s\\s"
|
||||
|
||||
download:
|
||||
method: post
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: "1"
|
||||
spstate: "0"
|
||||
inclbookmarked: "0"
|
||||
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
search_mode: "0"
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(table.torrentname)
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: form[action^="download.php?id="]
|
||||
attribute: action
|
||||
imdb:
|
||||
selector: a[href^="http://www.imdb.com/title/tt"]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
date:
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: "0"
|
||||
img.pro_free2up: "0"
|
||||
img.pro_50pctdown: "0.5"
|
||||
img.pro_50pctdown2up: "0.5"
|
||||
img.pro_30pctdown: "0.3"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: "2"
|
||||
img.pro_free2up: "2"
|
||||
img.pro_2up: "2"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
---
|
||||
site: hdsky
|
||||
name: HDSky
|
||||
description: "A chinese tracker"
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdsky.me
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies/电影"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
|
||||
- {id: 410, cat: Movies, desc: "iPad/iPad影视"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations/动漫"}
|
||||
- {id: 402, cat: TV, desc: "TV Series/剧集"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows/综艺"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos/音乐MV"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports/体育"}
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
|
||||
- {id: 409, cat: Other, desc: "Misc/其他"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
image: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
ratio:
|
||||
path: /torrents.php
|
||||
selector: table#info_block
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Ratio:\\s(.*?)\\s\\s"
|
||||
|
||||
download:
|
||||
method: post
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: "1"
|
||||
spstate: "0"
|
||||
inclbookmarked: "0"
|
||||
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
search_mode: "0"
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(table.torrentname)
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: form[action^="download.php?id="]
|
||||
attribute: action
|
||||
imdb:
|
||||
selector: a[href^="http://www.imdb.com/title/tt"]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
date:
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: "0"
|
||||
img.pro_free2up: "0"
|
||||
img.pro_50pctdown: "0.5"
|
||||
img.pro_50pctdown2up: "0.5"
|
||||
img.pro_30pctdown: "0.3"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: "2"
|
||||
img.pro_free2up: "2"
|
||||
img.pro_2up: "2"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, img
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: hon3yhd
|
||||
name: Hon3y HD
|
||||
language: en-us
|
||||
@@ -69,6 +69,7 @@
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
searchin: "title"
|
||||
incldead: "1"
|
||||
rows:
|
||||
selector: table > tbody > tr.tt
|
||||
@@ -87,7 +88,8 @@
|
||||
download:
|
||||
selector: a[href^="download.php?torrent="]
|
||||
attribute: href
|
||||
banner|optional:
|
||||
banner:
|
||||
optional: true
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
|
||||
63
src/Jackett/Definitions/horriblesubs.yml
Normal file
63
src/Jackett/Definitions/horriblesubs.yml
Normal file
@@ -0,0 +1,63 @@
|
||||
---
|
||||
site: horriblesubs
|
||||
name: Horrible Subs
|
||||
description: "Anime Sub Group - \"So bad yet so good\""
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://horriblesubs.info/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
1: TV/Anime # Anime
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
settings:
|
||||
- name: prepend-horriblesubs
|
||||
type: checkbox
|
||||
label: Prepend [Horriblesubs] to torrent title
|
||||
|
||||
search:
|
||||
path: "lib/{{if .Query.Keywords }}search.php{{else}}latest.php{{end}}"
|
||||
inputs:
|
||||
value: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: "div.release-links"
|
||||
dateheaders:
|
||||
selector: table.release-info
|
||||
filters:
|
||||
- name: split
|
||||
args: [" ", 0 ]
|
||||
- name: replace
|
||||
args: ["(", ""]
|
||||
- name: replace
|
||||
args: [")", ""]
|
||||
- name: replace
|
||||
args: ["/", "-"]
|
||||
- name: dateparse
|
||||
args: "01-02-06"
|
||||
- name: dateparse
|
||||
args: "01-02"
|
||||
fields:
|
||||
category:
|
||||
text: "1"
|
||||
title:
|
||||
selector: table.release-table > tbody > tr > td.dl-label
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "{{if .Config.prepend-horriblesubs}}[Horriblesubs] {{else}}{{end}}"
|
||||
details:
|
||||
attribute: class
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["release-links", ""]
|
||||
- name: re_replace
|
||||
args: [" ?(\\S+?)-((?:s\\d-)?(?:\\d+v?\\d?-){0,2}\\d+p)", "http://horriblesubs.info/shows/$1#$2"]
|
||||
download:
|
||||
selector: table.release-table > tbody > tr > td.hs-magnet-link > span > a
|
||||
attribute: href
|
||||
size:
|
||||
text: "500 MB"
|
||||
@@ -1,107 +1,107 @@
|
||||
---
|
||||
site: hyperay
|
||||
name: Hyperay
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.hyperay.cc
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 410, cat: Movies/HD, desc: "Movies 1080p"}
|
||||
- {id: 411, cat: Movies/HD, desc: "Movies 720p"}
|
||||
- {id: 401, cat: Movies/BluRay, desc: "Movies Blu-ray"}
|
||||
- {id: 415, cat: Movies, desc: "Movies REMUX"}
|
||||
- {id: 416, cat: Movies/3D, desc: "Movies 3D"}
|
||||
- {id: 414, cat: Movies/DVD, desc: "Movies DVD"}
|
||||
- {id: 412, cat: Movies/WEBDL, desc: "Movies WEB-DL"}
|
||||
- {id: 413, cat: Movies/SD, desc: "Movies HDTV"}
|
||||
- {id: 417, cat: Movies/Other, desc: "Movies iPad"}
|
||||
- {id: 402, cat: TV, desc: "TV Series"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio"}
|
||||
- {id: 418, cat: Books, desc: "Book"}
|
||||
- {id: 409, cat: Other, desc: "Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
authcode: ""
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: "1"
|
||||
spstate: "0"
|
||||
inclbookmarked: "0"
|
||||
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
search_mode: "0"
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr[class]
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
imdb:
|
||||
selector: a[href^="http://www.imdb.com/title/"]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: a[title][onmouseover][href^="details.php?id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "showmenu\\(this,'.*','(.*)'\\);"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(9)
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
date:
|
||||
selector: td.rowfollow:nth-child(5) > span[title]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
---
|
||||
site: hyperay
|
||||
name: Hyperay
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.hyperay.cc
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 410, cat: Movies/HD, desc: "Movies 1080p"}
|
||||
- {id: 411, cat: Movies/HD, desc: "Movies 720p"}
|
||||
- {id: 401, cat: Movies/BluRay, desc: "Movies Blu-ray"}
|
||||
- {id: 415, cat: Movies, desc: "Movies REMUX"}
|
||||
- {id: 416, cat: Movies/3D, desc: "Movies 3D"}
|
||||
- {id: 414, cat: Movies/DVD, desc: "Movies DVD"}
|
||||
- {id: 412, cat: Movies/WEBDL, desc: "Movies WEB-DL"}
|
||||
- {id: 413, cat: Movies/SD, desc: "Movies HDTV"}
|
||||
- {id: 417, cat: Movies/Other, desc: "Movies iPad"}
|
||||
- {id: 402, cat: TV, desc: "TV Series"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio"}
|
||||
- {id: 418, cat: Books, desc: "Book"}
|
||||
- {id: 409, cat: Other, desc: "Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
authcode: ""
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /torrents.php
|
||||
|
||||
search:
|
||||
path: /torrents.php
|
||||
method: post
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: "1"
|
||||
spstate: "0"
|
||||
inclbookmarked: "0"
|
||||
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
|
||||
search_mode: "0"
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr[class]
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
imdb:
|
||||
selector: a[href^="http://www.imdb.com/title/"]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: a[title][onmouseover][href^="details.php?id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "showmenu\\(this,'.*','(.*)'\\);"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(9)
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
date:
|
||||
selector: td.rowfollow:nth-child(5) > span[title]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
|
||||
@@ -1,151 +1,151 @@
|
||||
---
|
||||
site: icetorrent
|
||||
name: ICE Torrent
|
||||
language: ro-ro
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.icetorrent.org
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: PC/0day , desc: "Appz"}
|
||||
- {id: 85, cat: Audio/Audiobook, desc: "AudioBooks"}
|
||||
- {id: 68, cat: Books, desc: "Carti/Reviste"}
|
||||
- {id: 23, cat: Books, desc: "Cartoons"}
|
||||
- {id: 73, cat: Audio/Video, desc: "Concert/Videoclip"}
|
||||
- {id: 75, cat: Other, desc: "Diverse"}
|
||||
- {id: 69, cat: Books, desc: "Documentare"}
|
||||
- {id: 51, cat: TV/Documentary, desc: "Documentaries"}
|
||||
- {id: 43, cat: Books, desc: "eBooks"}
|
||||
- {id: 63, cat: Movies/DVD, desc: "Filme DVD"}
|
||||
- {id: 65, cat: Movies/HD, desc: "Filme HD"}
|
||||
- {id: 64, cat: Movies/SD, desc: "Filme Xvid"}
|
||||
- {id: 40, cat: Console, desc: "Games/Console"}
|
||||
- {id: 26, cat: PC/Games, desc: "Games/PC"}
|
||||
- {id: 38, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
- {id: 59, cat: Movies/3D, desc: "Movies/3D"}
|
||||
- {id: 92, cat: Movies/HD, desc: "Movies/4K-UHD"}
|
||||
- {id: 32, cat: Movies/BluRay, desc: "Movies/Blu-Ray"}
|
||||
- {id: 28, cat: Movies/DVD, desc: "Movies/DVD"}
|
||||
- {id: 42, cat: Movies/HD, desc: "Movies/HD-x264"}
|
||||
- {id: 91, cat: Movies/HD, desc: "Movies/HEVC-x265"}
|
||||
- {id: 79, cat: Movies/HD, desc: "Movies/microHD"}
|
||||
- {id: 29, cat: Movies/SD, desc: "Movies/SD"}
|
||||
- {id: 72, cat: Audio/Lossless, desc: "Music/FLAC"}
|
||||
- {id: 6, cat: Audio/MP3, desc: "Music/MP3"}
|
||||
- {id: 37, cat: Audio/Video, desc: "Music/Video"}
|
||||
- {id: 70, cat: Audio/Lossless, desc: "Muzica FLAC"}
|
||||
- {id: 71, cat: Audio/MP3, desc: "Muzica MP3"}
|
||||
- {id: 74, cat: Other, desc: "Other"}
|
||||
- {id: 41, cat: Other, desc: "Pictures"}
|
||||
- {id: 67, cat: TV, desc: "Seriale TV"}
|
||||
- {id: 48, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 87, cat: Other, desc: "TUTS"}
|
||||
- {id: 33, cat: TV/SD, desc: "TV Episodes"}
|
||||
- {id: 34, cat: TV/HD, desc: "TVHD Episodes"}
|
||||
- {id: 9, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: /login.php
|
||||
method: form
|
||||
form: form
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: font:contains("failed") + table
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
ratio:
|
||||
text: -1
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
categorymappings: ["!", 9]
|
||||
- path: browseadult.php
|
||||
categorymappings: [9]
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBIDShort }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: 1
|
||||
search_by: "{{ if .Query.IMDBID }}imdb{{else}}name{{end}}"
|
||||
rows:
|
||||
selector: table.torrenttable > tbody > tr:has(a[title][href^="details.php?id="])
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
details:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href*=".php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
imdb:
|
||||
selector: a[title="IMDB"]
|
||||
attribute: href
|
||||
banner:
|
||||
attribute: rel
|
||||
imdb:
|
||||
selector: a[href^="http://www.imdb.com/title/"]
|
||||
optional: true
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(5) > a
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
remove: a
|
||||
date:
|
||||
selector: td:nth-child(2) > div
|
||||
remove: b
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\xA0", " "]
|
||||
- name: replace
|
||||
args: ["Added on ", ""]
|
||||
- name: replace
|
||||
args: ["st ", " "]
|
||||
- name: replace
|
||||
args: ["nd ", " "]
|
||||
- name: replace
|
||||
args: ["rd ", " "]
|
||||
- name: replace
|
||||
args: ["th ", " "]
|
||||
- name: replace
|
||||
args: [" by", ""]
|
||||
- name: append
|
||||
args: " +02:00"
|
||||
- name: dateparse
|
||||
args: "2 Jan 2006 15:04:05 -07:00"
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "0"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a[title][href^="details.php?id="], div
|
||||
seeders:
|
||||
text: "9999"
|
||||
leechers:
|
||||
text: "9999"
|
||||
---
|
||||
site: icetorrent
|
||||
name: ICE Torrent
|
||||
language: ro-ro
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.icetorrent.org
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: PC/0day , desc: "Appz"}
|
||||
- {id: 85, cat: Audio/Audiobook, desc: "AudioBooks"}
|
||||
- {id: 68, cat: Books, desc: "Carti/Reviste"}
|
||||
- {id: 23, cat: Books, desc: "Cartoons"}
|
||||
- {id: 73, cat: Audio/Video, desc: "Concert/Videoclip"}
|
||||
- {id: 75, cat: Other, desc: "Diverse"}
|
||||
- {id: 69, cat: Books, desc: "Documentare"}
|
||||
- {id: 51, cat: TV/Documentary, desc: "Documentaries"}
|
||||
- {id: 43, cat: Books, desc: "eBooks"}
|
||||
- {id: 63, cat: Movies/DVD, desc: "Filme DVD"}
|
||||
- {id: 65, cat: Movies/HD, desc: "Filme HD"}
|
||||
- {id: 64, cat: Movies/SD, desc: "Filme Xvid"}
|
||||
- {id: 40, cat: Console, desc: "Games/Console"}
|
||||
- {id: 26, cat: PC/Games, desc: "Games/PC"}
|
||||
- {id: 38, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
- {id: 59, cat: Movies/3D, desc: "Movies/3D"}
|
||||
- {id: 92, cat: Movies/HD, desc: "Movies/4K-UHD"}
|
||||
- {id: 32, cat: Movies/BluRay, desc: "Movies/Blu-Ray"}
|
||||
- {id: 28, cat: Movies/DVD, desc: "Movies/DVD"}
|
||||
- {id: 42, cat: Movies/HD, desc: "Movies/HD-x264"}
|
||||
- {id: 91, cat: Movies/HD, desc: "Movies/HEVC-x265"}
|
||||
- {id: 79, cat: Movies/HD, desc: "Movies/microHD"}
|
||||
- {id: 29, cat: Movies/SD, desc: "Movies/SD"}
|
||||
- {id: 72, cat: Audio/Lossless, desc: "Music/FLAC"}
|
||||
- {id: 6, cat: Audio/MP3, desc: "Music/MP3"}
|
||||
- {id: 37, cat: Audio/Video, desc: "Music/Video"}
|
||||
- {id: 70, cat: Audio/Lossless, desc: "Muzica FLAC"}
|
||||
- {id: 71, cat: Audio/MP3, desc: "Muzica MP3"}
|
||||
- {id: 74, cat: Other, desc: "Other"}
|
||||
- {id: 41, cat: Other, desc: "Pictures"}
|
||||
- {id: 67, cat: TV, desc: "Seriale TV"}
|
||||
- {id: 48, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 87, cat: Other, desc: "TUTS"}
|
||||
- {id: 33, cat: TV/SD, desc: "TV Episodes"}
|
||||
- {id: 34, cat: TV/HD, desc: "TVHD Episodes"}
|
||||
- {id: 9, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: /login.php
|
||||
method: form
|
||||
form: form
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: font:contains("failed") + table
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
ratio:
|
||||
text: -1
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
categorymappings: ["!", 9]
|
||||
- path: browseadult.php
|
||||
categorymappings: [9]
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBIDShort }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: 1
|
||||
search_by: "{{ if .Query.IMDBID }}imdb{{else}}name{{end}}"
|
||||
rows:
|
||||
selector: table.torrenttable > tbody > tr:has(a[title][href^="details.php?id="])
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
details:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href*=".php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
imdb:
|
||||
selector: a[title="IMDB"]
|
||||
attribute: href
|
||||
banner:
|
||||
attribute: rel
|
||||
imdb:
|
||||
selector: a[href^="http://www.imdb.com/title/"]
|
||||
optional: true
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(5) > a
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
remove: a
|
||||
date:
|
||||
selector: td:nth-child(2) > div
|
||||
remove: b
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\xA0", " "]
|
||||
- name: replace
|
||||
args: ["Added on ", ""]
|
||||
- name: replace
|
||||
args: ["st ", " "]
|
||||
- name: replace
|
||||
args: ["nd ", " "]
|
||||
- name: replace
|
||||
args: ["rd ", " "]
|
||||
- name: replace
|
||||
args: ["th ", " "]
|
||||
- name: replace
|
||||
args: [" by", ""]
|
||||
- name: append
|
||||
args: " +02:00"
|
||||
- name: dateparse
|
||||
args: "2 Jan 2006 15:04:05 -07:00"
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "0"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a[title][href^="details.php?id="], div
|
||||
seeders:
|
||||
text: "9999"
|
||||
leechers:
|
||||
text: "9999"
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://ilcorsaronero.info/
|
||||
certificates:
|
||||
- FFB230323B987B07C24DCC13BC892CF30536F015 # incomplete CA chain
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -1,106 +1,106 @@
|
||||
---
|
||||
site: iloveclassics
|
||||
name: I Love Classics
|
||||
description: "Classics movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.iloveclassics.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Action/Adventure"}
|
||||
- {id: 22, cat: Movies, desc: "Animation"}
|
||||
- {id: 18, cat: Movies, desc: "Audio"}
|
||||
- {id: 2, cat: Movies, desc: "Comedy"}
|
||||
- {id: 12, cat: Movies, desc: "Crime/Mystery"}
|
||||
- {id: 4, cat: Movies, desc: "Documentary"}
|
||||
- {id: 3, cat: Movies, desc: "Drama"}
|
||||
- {id: 24, cat: Movies, desc: "E-Book"}
|
||||
- {id: 9, cat: Movies, desc: "Family"}
|
||||
- {id: 23, cat: Movies, desc: "Fantasy"}
|
||||
- {id: 6, cat: Movies, desc: "Film Noir"}
|
||||
- {id: 7, cat: Movies, desc: "Film Short"}
|
||||
- {id: 8, cat: Movies, desc: "Horror"}
|
||||
- {id: 10, cat: Movies, desc: "Martial Arts"}
|
||||
- {id: 11, cat: Movies, desc: "Musical"}
|
||||
- {id: 20, cat: Movies, desc: "Other"}
|
||||
- {id: 13, cat: Movies, desc: "Romance"}
|
||||
- {id: 5, cat: Movies, desc: "Sci-Fi"}
|
||||
- {id: 14, cat: Movies, desc: "Silent"}
|
||||
- {id: 15, cat: Movies, desc: "Thriller"}
|
||||
- {id: 19, cat: Movies, desc: "TV Shows"}
|
||||
- {id: 16, cat: Movies, desc: "War"}
|
||||
- {id: 17, cat: Movies, desc: "Western"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table#hover-over > tbody > tr.table_col1
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: td:nth-child(2) a
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(9)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+\s+)(?=x)
|
||||
files:
|
||||
selector: td:nth-child(4)
|
||||
size:
|
||||
selector: td:nth-child(9)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+.*(MB|GB)+)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
date:
|
||||
selector: td:nth-child(2) div
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[title=\"This Torrent is on Free Leech. Download amounts do not count to your ratio\"]": "0"
|
||||
"img[title=\"This Torrent is Free Leech because it has 5 or more seeders. Download amounts do not count to your ratio while 5 seeders remain\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: iloveclassics
|
||||
name: I Love Classics
|
||||
description: "Classics movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.iloveclassics.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Action/Adventure"}
|
||||
- {id: 22, cat: Movies, desc: "Animation"}
|
||||
- {id: 18, cat: Movies, desc: "Audio"}
|
||||
- {id: 2, cat: Movies, desc: "Comedy"}
|
||||
- {id: 12, cat: Movies, desc: "Crime/Mystery"}
|
||||
- {id: 4, cat: Movies, desc: "Documentary"}
|
||||
- {id: 3, cat: Movies, desc: "Drama"}
|
||||
- {id: 24, cat: Movies, desc: "E-Book"}
|
||||
- {id: 9, cat: Movies, desc: "Family"}
|
||||
- {id: 23, cat: Movies, desc: "Fantasy"}
|
||||
- {id: 6, cat: Movies, desc: "Film Noir"}
|
||||
- {id: 7, cat: Movies, desc: "Film Short"}
|
||||
- {id: 8, cat: Movies, desc: "Horror"}
|
||||
- {id: 10, cat: Movies, desc: "Martial Arts"}
|
||||
- {id: 11, cat: Movies, desc: "Musical"}
|
||||
- {id: 20, cat: Movies, desc: "Other"}
|
||||
- {id: 13, cat: Movies, desc: "Romance"}
|
||||
- {id: 5, cat: Movies, desc: "Sci-Fi"}
|
||||
- {id: 14, cat: Movies, desc: "Silent"}
|
||||
- {id: 15, cat: Movies, desc: "Thriller"}
|
||||
- {id: 19, cat: Movies, desc: "TV Shows"}
|
||||
- {id: 16, cat: Movies, desc: "War"}
|
||||
- {id: 17, cat: Movies, desc: "Western"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
rows:
|
||||
selector: table#hover-over > tbody > tr.table_col1
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: td:nth-child(2) a
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(9)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+\s+)(?=x)
|
||||
files:
|
||||
selector: td:nth-child(4)
|
||||
size:
|
||||
selector: td:nth-child(9)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+.*(MB|GB)+)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
date:
|
||||
selector: td:nth-child(2)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[title=\"This Torrent is on Free Leech. Download amounts do not count to your ratio\"]": "0"
|
||||
"img[title=\"This Torrent is Free Leech because it has 5 or more seeders. Download amounts do not count to your ratio while 5 seeders remain\"]": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,106 +1,106 @@
|
||||
---
|
||||
site: infinityt
|
||||
name: Infinity-T
|
||||
language: da-dk
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://infinity-t.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 22, cat: Audio/Audiobook, desc: "aBook"}
|
||||
- {id: 13, cat: PC/Phone-Android, desc: "Appz/Android"}
|
||||
- {id: 14, cat: PC/Phone-IOS, desc: "Appz/iPhone"}
|
||||
- {id: 12, cat: PC/Mac, desc: "Appz/Mac"}
|
||||
- {id: 11, cat: PC/0day, desc: "Appz/Win"}
|
||||
- {id: 19, cat: Movies, desc: "AU/NEED"}
|
||||
- {id: 20, cat: Books, desc: "eBook"}
|
||||
- {id: 17, cat: Console, desc: "Games/Console"}
|
||||
- {id: 16, cat: PC/Mac, desc: "Games/Mac"}
|
||||
- {id: 15, cat: PC/Games, desc: "Games/PC"}
|
||||
- {id: 8, cat: Movies, desc: "Movie/Boxset"}
|
||||
- {id: 7, cat: Movies/DVD, desc: "Movie/DVD"}
|
||||
- {id: 5, cat: Movies/HD, desc: "Movie/HD"}
|
||||
- {id: 6, cat: Movies/SD, desc: "Movie/SD"}
|
||||
- {id: 10, cat: Audio/Lossless, desc: "Music/FLAC"}
|
||||
- {id: 9, cat: Audio/MP3, desc: "Music/MP3"}
|
||||
- {id: 21, cat: Movies/Bluray, desc: "REMUX/Bluray"}
|
||||
- {id: 4, cat: TV, desc: "TV/Boxset"}
|
||||
- {id: 3, cat: TV, desc: "TV/DVD"}
|
||||
- {id: 1, cat: TV/HD, desc: "TV/HD"}
|
||||
- {id: 2, cat: TV/SD, desc: "TV/SD"}
|
||||
- {id: 18, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: 1
|
||||
rows:
|
||||
selector: td.outer > table > tbody > tr[id]
|
||||
fields:
|
||||
imdb:
|
||||
selector: a[href^="https://www.nullrefer.com/?http://imdb.com/title/"]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: a[rel]
|
||||
attribute: rel
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["pic/noposter.jpg", ""]
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["I Dag", "Today"]
|
||||
- name: replace
|
||||
args: ["I Går", "Yesterday"]
|
||||
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
td[style*="/pic/free.png"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: infinityt
|
||||
name: Infinity-T
|
||||
language: da-dk
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://infinity-t.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 22, cat: Audio/Audiobook, desc: "aBook"}
|
||||
- {id: 13, cat: PC/Phone-Android, desc: "Appz/Android"}
|
||||
- {id: 14, cat: PC/Phone-IOS, desc: "Appz/iPhone"}
|
||||
- {id: 12, cat: PC/Mac, desc: "Appz/Mac"}
|
||||
- {id: 11, cat: PC/0day, desc: "Appz/Win"}
|
||||
- {id: 19, cat: Movies, desc: "AU/NEED"}
|
||||
- {id: 20, cat: Books, desc: "eBook"}
|
||||
- {id: 17, cat: Console, desc: "Games/Console"}
|
||||
- {id: 16, cat: PC/Mac, desc: "Games/Mac"}
|
||||
- {id: 15, cat: PC/Games, desc: "Games/PC"}
|
||||
- {id: 8, cat: Movies, desc: "Movie/Boxset"}
|
||||
- {id: 7, cat: Movies/DVD, desc: "Movie/DVD"}
|
||||
- {id: 5, cat: Movies/HD, desc: "Movie/HD"}
|
||||
- {id: 6, cat: Movies/SD, desc: "Movie/SD"}
|
||||
- {id: 10, cat: Audio/Lossless, desc: "Music/FLAC"}
|
||||
- {id: 9, cat: Audio/MP3, desc: "Music/MP3"}
|
||||
- {id: 21, cat: Movies/Bluray, desc: "REMUX/Bluray"}
|
||||
- {id: 4, cat: TV, desc: "TV/Boxset"}
|
||||
- {id: 3, cat: TV, desc: "TV/DVD"}
|
||||
- {id: 1, cat: TV/HD, desc: "TV/HD"}
|
||||
- {id: 2, cat: TV/SD, desc: "TV/SD"}
|
||||
- {id: 18, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: 1
|
||||
rows:
|
||||
selector: td.outer > table > tbody > tr[id]
|
||||
fields:
|
||||
imdb:
|
||||
selector: a[href^="https://www.nullrefer.com/?http://imdb.com/title/"]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: a[rel]
|
||||
attribute: rel
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["pic/noposter.jpg", ""]
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["I Dag", "Today"]
|
||||
- name: replace
|
||||
args: ["I Går", "Yesterday"]
|
||||
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
td[style*="/pic/free.png"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,104 +1,104 @@
|
||||
---
|
||||
site: inperil
|
||||
name: inPeril
|
||||
type: private
|
||||
language: lv-lv
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.inperil.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 34, cat: TV/Anime, desc: "Animation"}
|
||||
- {id: 22, cat: PC/0day, desc: "Appz"}
|
||||
- {id: 25, cat: PC/Games, desc: "Games/Console"}
|
||||
- {id: 4, cat: PC/Games, desc: "Games/PC"}
|
||||
- {id: 27, cat: Other/Misc, desc: "Misc"}
|
||||
- {id: 35, cat: Movies/HD, desc: "Movies/HD"}
|
||||
- {id: 37, cat: Movies/Foreign, desc: "Movies/LAT"}
|
||||
- {id: 42, cat: Movies, desc: "Movies/Pack"}
|
||||
- {id: 38, cat: Movies, desc: "Movies/Retro"}
|
||||
- {id: 36, cat: Movies/Foreign, desc: "Movies/RUS"}
|
||||
- {id: 19, cat: Movies/SD, desc: "Movies/SD"}
|
||||
- {id: 6, cat: Audio, desc: "Music"}
|
||||
- {id: 26, cat: Audio/Video, desc: "Music Videos"}
|
||||
- {id: 31, cat: Audio/Lossless, desc: "Music/FLAC"}
|
||||
- {id: 39, cat: TV/HD, desc: "TV/HD"}
|
||||
- {id: 43, cat: TV, desc: "TV/Pack"}
|
||||
- {id: 7, cat: TV/SD, desc: "TV/SD"}
|
||||
- {id: 40, cat: XXX, desc: "XXX/HD"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: /takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: font.logintext
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: 1
|
||||
rows:
|
||||
selector: table > tbody > tr:has(a[href^="details.php?id="])
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php?id="][title]
|
||||
attribute: title
|
||||
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
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +02:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-0215:04:05 -07:00"
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([,\d]+)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
banner:
|
||||
selector: a[onmouseover][href^="details.php?id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=([^\s]+)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[alt=\"Zelta Torrents\"]": "0"
|
||||
"img[alt=\"Sudraba Torrents\"]": "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
---
|
||||
site: inperil
|
||||
name: inPeril
|
||||
type: private
|
||||
language: lv-lv
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.inperil.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 34, cat: TV/Anime, desc: "Animation"}
|
||||
- {id: 22, cat: PC/0day, desc: "Appz"}
|
||||
- {id: 25, cat: PC/Games, desc: "Games/Console"}
|
||||
- {id: 4, cat: PC/Games, desc: "Games/PC"}
|
||||
- {id: 27, cat: Other/Misc, desc: "Misc"}
|
||||
- {id: 35, cat: Movies/HD, desc: "Movies/HD"}
|
||||
- {id: 37, cat: Movies/Foreign, desc: "Movies/LAT"}
|
||||
- {id: 42, cat: Movies, desc: "Movies/Pack"}
|
||||
- {id: 38, cat: Movies, desc: "Movies/Retro"}
|
||||
- {id: 36, cat: Movies/Foreign, desc: "Movies/RUS"}
|
||||
- {id: 19, cat: Movies/SD, desc: "Movies/SD"}
|
||||
- {id: 6, cat: Audio, desc: "Music"}
|
||||
- {id: 26, cat: Audio/Video, desc: "Music Videos"}
|
||||
- {id: 31, cat: Audio/Lossless, desc: "Music/FLAC"}
|
||||
- {id: 39, cat: TV/HD, desc: "TV/HD"}
|
||||
- {id: 43, cat: TV, desc: "TV/Pack"}
|
||||
- {id: 7, cat: TV/SD, desc: "TV/SD"}
|
||||
- {id: 40, cat: XXX, desc: "XXX/HD"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: /takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: font.logintext
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
incldead: 1
|
||||
rows:
|
||||
selector: table > tbody > tr:has(a[href^="details.php?id="])
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php?id="][title]
|
||||
attribute: title
|
||||
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
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +02:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-0215:04:05 -07:00"
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([,\d]+)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
banner:
|
||||
selector: a[onmouseover][href^="details.php?id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=([^\s]+)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[alt=\"Zelta Torrents\"]": "0"
|
||||
"img[alt=\"Sudraba Torrents\"]": "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
|
||||
@@ -1,140 +1,143 @@
|
||||
---
|
||||
site: insanetracker
|
||||
name: Insane Tracker
|
||||
language: hu-hu
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://newinsane.info/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 8, cat: TV/SD, desc: "Sorozat/Hun"}
|
||||
- {id: 40, cat: TV/HD, desc: "Sorozat/Hun/HD"}
|
||||
- {id: 41, cat: Movies/SD, desc: "Film/Hun/SD"}
|
||||
- {id: 15, cat: Movies/DVD, desc: "Film/Hun/DVD-R"}
|
||||
- {id: 27, cat: Movies/HD, desc: "Film/Hun/HD"}
|
||||
- {id: 44, cat: Movies/HD, desc: "Film/Hun/UHD"}
|
||||
- {id: 2, cat: Books, desc: "eBook/Hun"}
|
||||
- {id: 7, cat: TV/SD, desc: "Sorozat/Eng"}
|
||||
- {id: 39, cat: TV/HD, desc: "Sorozat/Eng/HD"}
|
||||
- {id: 42, cat: Movies/SD, desc: "Film/Eng/SD"}
|
||||
- {id: 14, cat: Movies/DVD, desc: "Film/Eng/DVD-R"}
|
||||
- {id: 25, cat: Movies/HD, desc: "Film/Eng/HD"}
|
||||
- {id: 45, cat: Movies/HD, desc: "Film/Eng/UHD"}
|
||||
- {id: 1, cat: Books, desc: "eBook/Eng"}
|
||||
- {id: 38, cat: Audio/Audiobook, desc: "Hangoskönyv"}
|
||||
- {id: 21, cat: XXX, desc: "XXX"}
|
||||
- {id: 4, cat: PC/ISO, desc: "Program/ISO"}
|
||||
- {id: 19, cat: Audio/Other, desc: "Zene/Hun"}
|
||||
- {id: 37, cat: Audio/Lossless, desc: "Lossless/Hun"}
|
||||
- {id: 9, cat: PC/Games, desc: "Játék/ISO"}
|
||||
- {id: 43, cat: Console, desc: "Játék/Konzol"}
|
||||
- {id: 29, cat: Other, desc: "Képek"}
|
||||
- {id: 28, cat: XXX/Imageset, desc: "XXX Képek"}
|
||||
- {id: 3, cat: PC/0day, desc: "Program/Egyéb"}
|
||||
- {id: 18, cat: Audio/Other, desc: "Zene/Eng"}
|
||||
- {id: 26, cat: Audio/Lossless, desc: "Lossless/Eng"}
|
||||
- {id: 11, cat: PC/Games, desc: "Játék/Rip"}
|
||||
- {id: 13, cat: PC/Phone-Other, desc: "Mobil"}
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
notsecure: "1"
|
||||
error:
|
||||
- selector: div.login_error_content
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
|
||||
t: "all"
|
||||
rows:
|
||||
selector: table.torrentable > tbody > tr:has(td.maintd)
|
||||
fields:
|
||||
title:
|
||||
selector: div.tortitle > a
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: div.tortitle > a
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php/"]
|
||||
attribute: href
|
||||
imdb|optional:
|
||||
selector: a[title="IMDb link"]
|
||||
attribute: href
|
||||
banner|optional|1:
|
||||
selector: img[alt="offer"]
|
||||
attribute: src
|
||||
banner|optional|2:
|
||||
selector: a.cover
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(6)
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
size:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
grabs:
|
||||
selector: td:nth-child(9) > div:first-child
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: regexp
|
||||
args: "^([\\d]+)"
|
||||
seeders:
|
||||
selector: td:nth-child(9) > div:first-child
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: regexp
|
||||
args: "\\|\\s*([\\d]+)\\s*\\|"
|
||||
leechers:
|
||||
selector: td:nth-child(9) > div:first-child
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: regexp
|
||||
args: "([\\d]+)$"
|
||||
date:
|
||||
selector: td.date
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2006.01.02 15:04:05"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[src^="pic/4x.gif"]: "4"
|
||||
img[src^="pic/3x.gif"]: "3"
|
||||
img[src^="pic/2x.gif"]: "2"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td.maintd
|
||||
remove: div.tortitle, div.markcont, div.tablebuttons, div.tablebigbuttons
|
||||
---
|
||||
site: insanetracker
|
||||
name: Insane Tracker
|
||||
language: hu-hu
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://newinsane.info/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 8, cat: TV/SD, desc: "Sorozat/Hun"}
|
||||
- {id: 40, cat: TV/HD, desc: "Sorozat/Hun/HD"}
|
||||
- {id: 41, cat: Movies/SD, desc: "Film/Hun/SD"}
|
||||
- {id: 15, cat: Movies/DVD, desc: "Film/Hun/DVD-R"}
|
||||
- {id: 27, cat: Movies/HD, desc: "Film/Hun/HD"}
|
||||
- {id: 44, cat: Movies/HD, desc: "Film/Hun/UHD"}
|
||||
- {id: 2, cat: Books, desc: "eBook/Hun"}
|
||||
- {id: 7, cat: TV/SD, desc: "Sorozat/Eng"}
|
||||
- {id: 39, cat: TV/HD, desc: "Sorozat/Eng/HD"}
|
||||
- {id: 42, cat: Movies/SD, desc: "Film/Eng/SD"}
|
||||
- {id: 14, cat: Movies/DVD, desc: "Film/Eng/DVD-R"}
|
||||
- {id: 25, cat: Movies/HD, desc: "Film/Eng/HD"}
|
||||
- {id: 45, cat: Movies/HD, desc: "Film/Eng/UHD"}
|
||||
- {id: 1, cat: Books, desc: "eBook/Eng"}
|
||||
- {id: 38, cat: Audio/Audiobook, desc: "Hangoskönyv"}
|
||||
- {id: 21, cat: XXX, desc: "XXX"}
|
||||
- {id: 4, cat: PC/ISO, desc: "Program/ISO"}
|
||||
- {id: 19, cat: Audio/Other, desc: "Zene/Hun"}
|
||||
- {id: 37, cat: Audio/Lossless, desc: "Lossless/Hun"}
|
||||
- {id: 9, cat: PC/Games, desc: "Játék/ISO"}
|
||||
- {id: 43, cat: Console, desc: "Játék/Konzol"}
|
||||
- {id: 29, cat: Other, desc: "Képek"}
|
||||
- {id: 28, cat: XXX/Imageset, desc: "XXX Képek"}
|
||||
- {id: 3, cat: PC/0day, desc: "Program/Egyéb"}
|
||||
- {id: 18, cat: Audio/Other, desc: "Zene/Eng"}
|
||||
- {id: 26, cat: Audio/Lossless, desc: "Lossless/Eng"}
|
||||
- {id: 11, cat: PC/Games, desc: "Játék/Rip"}
|
||||
- {id: 13, cat: PC/Phone-Other, desc: "Mobil"}
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
notsecure: "1"
|
||||
error:
|
||||
- selector: div.login_error_content
|
||||
test:
|
||||
path: /browse.php
|
||||
|
||||
search:
|
||||
path: /browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
|
||||
t: "all"
|
||||
rows:
|
||||
selector: table.torrentable > tbody > tr:has(td.maintd)
|
||||
fields:
|
||||
title:
|
||||
selector: div.tortitle > a
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: div.tortitle > a
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php/"]
|
||||
attribute: href
|
||||
imdb:
|
||||
optional: true
|
||||
selector: a[title="IMDb link"]
|
||||
attribute: href
|
||||
banner:
|
||||
optional: true
|
||||
selector: img[alt="offer"]
|
||||
attribute: src
|
||||
banner:
|
||||
optional: true
|
||||
selector: a.cover
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(6)
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
size:
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
grabs:
|
||||
selector: td:nth-child(9) > div:first-child
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: regexp
|
||||
args: "^([\\d]+)"
|
||||
seeders:
|
||||
selector: td:nth-child(9) > div:first-child
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: regexp
|
||||
args: "\\|\\s*([\\d]+)\\s*\\|"
|
||||
leechers:
|
||||
selector: td:nth-child(9) > div:first-child
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: regexp
|
||||
args: "([\\d]+)$"
|
||||
date:
|
||||
selector: td.date
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2006.01.02 15:04:05"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[src^="pic/4x.gif"]: "4"
|
||||
img[src^="pic/3x.gif"]: "3"
|
||||
img[src^="pic/2x.gif"]: "2"
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td.maintd
|
||||
remove: div.tortitle, div.markcont, div.tablebuttons, div.tablebigbuttons
|
||||
|
||||
@@ -1,105 +1,105 @@
|
||||
---
|
||||
site: jpopsuki
|
||||
name: JPopsuki
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://jpopsuki.eu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Audio, desc: "Album"}
|
||||
- {id: 2, cat: Audio, desc: "Single"}
|
||||
- {id: 3, cat: Movies, desc: "PV"}
|
||||
- {id: 4, cat: Movies/DVD, desc: "DVD"}
|
||||
- {id: 5, cat: TV, desc: "TV-Music"}
|
||||
- {id: 6, cat: TV, desc: "TV-Variety"}
|
||||
- {id: 7, cat: TV, desc: "TV-Drama"}
|
||||
- {id: 8, cat: Other, desc: "Fansubs"}
|
||||
- {id: 9, cat: Other, desc: "Pictures"}
|
||||
- {id: 10, cat: Other/Misc, desc: "Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
login: "Log in"
|
||||
error:
|
||||
- selector: form#loginform > span.warning
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
ratio:
|
||||
path: torrents.php
|
||||
selector: li#stats_ratio > span
|
||||
|
||||
search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: time
|
||||
order_way: desc
|
||||
action: basic
|
||||
searchsubmit: 1
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr[class^="torrent"]
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
description:
|
||||
selector: div.tags
|
||||
title:
|
||||
selector: td:nth-child(4)
|
||||
remove: span, div.tags, a[title="View Comments"]
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" ()", ""]
|
||||
- name: replace
|
||||
args: [" / Freeleech!", ""]
|
||||
category:
|
||||
selector: a[href*="filter_cat"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "%5B(\\d+?)%5D"
|
||||
details:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: td:nth-child(3) img
|
||||
attribute: src
|
||||
files:
|
||||
selector: td:nth-child(5)
|
||||
date:
|
||||
selector: td:nth-child(6)
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00"
|
||||
- name: dateparse
|
||||
args: "Jan 02 2006, 15:04 -07:00"
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"strong:contains(\"Freeleech!\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
---
|
||||
site: jpopsuki
|
||||
name: JPopsuki
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://jpopsuki.eu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Audio, desc: "Album"}
|
||||
- {id: 2, cat: Audio, desc: "Single"}
|
||||
- {id: 3, cat: Movies, desc: "PV"}
|
||||
- {id: 4, cat: Movies/DVD, desc: "DVD"}
|
||||
- {id: 5, cat: TV, desc: "TV-Music"}
|
||||
- {id: 6, cat: TV, desc: "TV-Variety"}
|
||||
- {id: 7, cat: TV, desc: "TV-Drama"}
|
||||
- {id: 8, cat: Other, desc: "Fansubs"}
|
||||
- {id: 9, cat: Other, desc: "Pictures"}
|
||||
- {id: 10, cat: Other/Misc, desc: "Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
login: "Log in"
|
||||
error:
|
||||
- selector: form#loginform > span.warning
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
ratio:
|
||||
path: torrents.php
|
||||
selector: li#stats_ratio > span
|
||||
|
||||
search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: time
|
||||
order_way: desc
|
||||
action: basic
|
||||
searchsubmit: 1
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr[class^="torrent"]
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&id="]
|
||||
attribute: href
|
||||
description:
|
||||
selector: div.tags
|
||||
title:
|
||||
selector: td:nth-child(4)
|
||||
remove: span, div.tags, a[title="View Comments"]
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" ()", ""]
|
||||
- name: replace
|
||||
args: [" / Freeleech!", ""]
|
||||
category:
|
||||
selector: a[href*="filter_cat"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "%5B(\\d+?)%5D"
|
||||
details:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
banner:
|
||||
selector: td:nth-child(3) img
|
||||
attribute: src
|
||||
files:
|
||||
selector: td:nth-child(5)
|
||||
date:
|
||||
selector: td:nth-child(6)
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00"
|
||||
- name: dateparse
|
||||
args: "Jan 02 2006, 15:04 -07:00"
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"strong:contains(\"Freeleech!\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: kapaki
|
||||
name: Kapaki
|
||||
language: el-gr
|
||||
@@ -76,7 +76,8 @@
|
||||
keywords: "{{ .Keywords }}"
|
||||
search_type: "name"
|
||||
searchin: "title"
|
||||
|
||||
error:
|
||||
- selector: div#show_error:not(:contains("Ουπς! Λάθος!Δεν βρέθηκαν αποτελέσματα."))
|
||||
rows:
|
||||
selector: div#content > div.torrent-box[id^="torrent_"]
|
||||
filters:
|
||||
@@ -107,7 +108,8 @@
|
||||
selector: a[rel="torrent_leechers"]
|
||||
grabs:
|
||||
selector: a[rel="times_completed"]
|
||||
banner|optional:
|
||||
banner:
|
||||
optional: true
|
||||
selector: a[rel="fancybox"]
|
||||
attribute: href
|
||||
description:
|
||||
@@ -119,10 +121,12 @@
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
date|optional|1:
|
||||
date:
|
||||
optional: true
|
||||
selector: div.torrentOwner > abbr.timeago
|
||||
attribute: data-time
|
||||
date|optional|2:
|
||||
date:
|
||||
optional: true
|
||||
selector: div.torrentOwner:not(:has(abbr.timeago))
|
||||
remove: span
|
||||
filters:
|
||||
@@ -155,4 +159,4 @@
|
||||
- name: dateparse
|
||||
args: "02-01-2006 15:04"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,83 +1,80 @@
|
||||
---
|
||||
site: karagarga
|
||||
name: Karagarga
|
||||
description: "Rare and obscure movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://karagarga.in/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
captcha:
|
||||
type: image
|
||||
image: img#captcha_img
|
||||
input: imagestring
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "\"{{ .Query.Keywords }}\""
|
||||
search_type: "title"
|
||||
rows:
|
||||
selector: table#browse > tbody > tr:has(a[href^="browse.php?genre="])
|
||||
fields:
|
||||
category:
|
||||
text: 1
|
||||
title:
|
||||
selector: td:nth-child(2) span
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(12)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
files:
|
||||
selector: td:nth-child(10)
|
||||
size:
|
||||
selector: td:nth-child(11)
|
||||
seeders:
|
||||
selector: td:nth-child(13)
|
||||
leechers:
|
||||
selector: td:nth-child(14)
|
||||
date:
|
||||
selector: td:nth-child(9)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["'", ""]
|
||||
- name: dateparse
|
||||
args: "Jan 02 06"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
---
|
||||
site: karagarga
|
||||
name: Karagarga
|
||||
description: "Rare and obscure movie tracker"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://karagarga.in/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
captcha:
|
||||
type: image
|
||||
image: img#captcha_img
|
||||
input: imagestring
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
search:
|
||||
path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "\"{{ .Query.Keywords }}\""
|
||||
search_type: "title"
|
||||
rows:
|
||||
selector: table#browse > tbody > tr:has(a[href^="browse.php?genre="])
|
||||
fields:
|
||||
category:
|
||||
text: 1
|
||||
title:
|
||||
selector: td:nth-child(2) span
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(12)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ([\d,]+)
|
||||
files:
|
||||
selector: td:nth-child(10)
|
||||
size:
|
||||
selector: td:nth-child(11)
|
||||
seeders:
|
||||
selector: td:nth-child(13)
|
||||
leechers:
|
||||
selector: td:nth-child(14)
|
||||
date:
|
||||
selector: td:nth-child(9)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["'", ""]
|
||||
- name: dateparse
|
||||
args: "Jan 02 06"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
|
||||
4
src/Jackett/Definitions/kickasstorrent-kathow.yml
Normal file → Executable file
4
src/Jackett/Definitions/kickasstorrent-kathow.yml
Normal file → Executable file
@@ -1,11 +1,11 @@
|
||||
---
|
||||
site: kickasstorrent-kathow
|
||||
name: KickAssTorrent (kat.how)
|
||||
name: KickAssTorrent (thekat.se)
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://kat.how
|
||||
- https://thekat.se
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user