Compare commits

...

51 Commits

Author SHA1 Message Date
ilike2burnthing
e05570f360 magico: change site link trellas.info 2021-01-21 23:11:53 +00:00
ilike2burnthing
6a1319c308 click trackers: exact title only search. resolves #10887 (#10891)
big thanks to @adamwinn for all their help testing
2021-01-21 20:45:27 +00:00
ilike2burnthing
6d453e9bf3 lesaloon: update login form selector. resolves #10873
also #10888
2021-01-21 20:17:24 +00:00
ilike2burnthing
ceee2d6873 lastfiles: add flaresolverr info 2021-01-20 22:21:35 +00:00
ilike2burnthing
2aa782498f torrentview: change domain *29.com 2021-01-20 22:19:16 +00:00
ilike2burnthing
42f0f9a58c sugoimusic: add new private tracker. resolves #10825 (#10879) 2021-01-20 16:54:34 +00:00
ilike2burnthing
7da865ea07 bigtower, fullmixmusic, hdstreet: removed, down for 30 days (#10874) 2021-01-20 04:58:43 +00:00
ilike2burnthing
b01a72c393 yggtorrent: revert to post method for login (#10852) 2021-01-19 22:40:42 +00:00
xfouloux
b7541191c2 montorrent: add public indexer (#10863)
Co-authored-by: ilike2burnthing <59480337+ilike2burnthing@users.noreply.github.com>
2021-01-19 16:31:07 +00:00
ilike2burnthing
1ead9bb3f0 lepornoinfo: update categories 2021-01-18 23:08:58 +00:00
Diego Heras
f0c19c39dd trackeros: add new spanish tracker (#10862) 2021-01-19 00:01:31 +01:00
CodeMonkey
b0a782d8ac SubsPlease: Enable searching by resolution (#10861) 2021-01-18 23:59:17 +01:00
CodeMonkey
ca585c58ed Fix NRE on empty API response & hardcode size (#10858)
* Fix NRE on empty API response & hardcode size

* Estimate size based on resolution
2021-01-18 21:36:22 +01:00
ilike2burnthing
b2de0cab9c torrentparadise: revert domain *.cl 2021-01-18 15:41:58 +00:00
ilike2burnthing
eada579da0 speedcd: add new alternative link 2021-01-18 15:22:03 +00:00
ilike2burnthing
dfe6d355c6 yourbittorrent: ignore advert rows. resolves #10850 2021-01-18 05:00:33 +00:00
Diego Heras
3f4e88bcbe retroflix: migrate the indexer to c# and use the new api. resolves #10838 (#10847) 2021-01-17 21:12:54 +01:00
Diego Heras
878f3a92aa speedapp: implement new changes in the api #10838 (#10846) 2021-01-17 20:54:19 +01:00
Diego Heras
4f9b0b0c81 webui: increase size precision to 2 decimals. resolves #10732 (#10844) 2021-01-17 20:05:11 +01:00
CodeMonkey
df4fcbd6a0 SubsPlease: add native indexer (#10784) 2021-01-17 18:09:11 +00:00
ilike2burnthing
8b6c5b532b torrentleech-pl: add anime category 2021-01-17 17:32:22 +00:00
Diego Heras
456338399b core: remove rss feed image (legacy code) #324 (#10837) 2021-01-17 13:42:52 +01:00
ilike2burnthing
ee279dffac psytorrents: removed, dead. resolves #1152 (#10835) 2021-01-17 03:50:45 +00:00
tiarnanr
31a7145954 broadcity: update on protocol (#10830) 2021-01-17 03:24:11 +00:00
ilike2burnthing
998d991cd6 mejortorrent: update link *1.com 2021-01-16 00:43:30 +00:00
Fippsy
cc5ad5001a dasunerwartete: fix login handling, add PIN (#10827) 2021-01-15 23:55:48 +00:00
xfouloux
fd35241d15 mononokebt: add vostfr checkbox for add to titles (#10816) 2021-01-15 13:25:32 +00:00
ilike2burnthing
b28def09d6 3evils: removed, down for 30 days. resolves #4264 (#10815) 2021-01-14 00:45:16 +00:00
ilike2burnthing
0b4a1f8f71 onlyscene: removed, down for 30 days. resolves #8763 (#10814) 2021-01-14 00:37:11 +00:00
Daniel Martin Gonzalez
d616ab5717 divteam: Fix categories (#10810) 2021-01-13 22:58:44 +00:00
Daniel Martin Gonzalez
3a0f670845 hdolimpo: Language improvements. (#10808) 2021-01-13 22:58:07 +00:00
Daniel Martin Gonzalez
010b0d8c1b xbytesv2: %DL and language improvements. Fix bugs in Radarr (#10809) 2021-01-13 22:52:33 +00:00
ilike2burnthing
9a2ab09f16 danishbytes: fix file name and categories 2021-01-13 22:17:59 +00:00
Daniel Martin Gonzalez
e9c4d15bff divteam: Remove dots and fixes in 2160p (#10804)
Co-authored-by: ilike2burnthing <59480337+ilike2burnthing@users.noreply.github.com>
2021-01-13 17:02:01 +00:00
ilike2burnthing
f15b45d6bd torrentz2k: oops fix 2021-01-13 15:49:27 +00:00
ilike2burnthing
86cdecf418 torrentz2k: change domain *.pw resolves #10309
- slight changes to categories and search
- add details link
- use infohash for download
2021-01-13 15:25:40 +00:00
Garfield69
20cb8d1d5e newrealworld: sysop requests removal. resolves #10803 2021-01-13 14:58:13 +13:00
ilike2burnthing
f5c23e77f9 sdbits: remove post method for search path. resolves #10629
also add stand-up comedy category
2021-01-13 00:11:03 +00:00
ilike2burnthing
9674ddd4cc idope: add flaresolverr note. resolves #10801 2021-01-12 23:12:14 +00:00
Daniel Martin Gonzalez
d605cc87a4 divteam: Add Multi to languages (#10796)
* divteam: Add Multi to languages. DivTeam usually have Original + Spanish at least

* Fix PR Comments

Co-authored-by: ilike2burnthing <59480337+ilike2burnthing@users.noreply.github.com>
2021-01-12 16:29:15 +00:00
ilike2burnthing
64fb434d0f sktorrent: add posters & change title filters (#10546) 2021-01-12 15:07:33 +00:00
ilike2burnthing
fb9d2fc77c danishbytes: add private indexer. resolves #10758 (#10778) 2021-01-12 15:04:27 +00:00
ilike2burnthing
c9feefd087 assorted: update unblockit proxy domain *.ltd (#10799) 2021-01-12 12:58:34 +00:00
ilike2burnthing
341d761758 iptorrents: update *.eu domain to *.me. resolves #10795 2021-01-12 11:13:00 +00:00
ilike2burnthing
13a8aea9bd lemonhd: site update
- switch to credentials login
- update categories
- remove category input (may be reverted later)
- update category and title selectors
- remove imdb field
https://github.com/Jackett/Jackett/issues/10604
2021-01-12 10:47:58 +00:00
ilike2burnthing
13c94b4b45 skytorrentsclone2: add flaresolverr info 2021-01-12 00:49:11 +00:00
ilike2burnthing
663aa93d72 btdb: add flaresolverr info 2021-01-12 00:45:23 +00:00
ilike2burnthing
234e9cc246 hdreactor: remove *.net domain, doesn't resolve. resolves #6287 2021-01-12 00:40:32 +00:00
ilike2burnthing
f72468463c torrentday: remove tday.love, doesn't resolve 2021-01-12 00:01:41 +00:00
ilike2burnthing
eb538ce6ef speedmasterhd: remove imdbid search. resolves #10787 2021-01-11 22:29:25 +00:00
ilike2burnthing
8a51a26df5 dark-shadow: remove imdbid search. resolves #10788 2021-01-11 22:18:00 +00:00
78 changed files with 1366 additions and 1471 deletions

View File

@@ -83,6 +83,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* MejorTorrent
* MixTapeTorrent
* Monova
* Montorrent
* MovCr
* MoviesDVDR
* MyPornClub
@@ -122,6 +123,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* SkyTorrentsClone2 (*.to)
* Solid Torrents
* sosulki
* SubsPlease
* sukebei-Pantsu
* sukebei.Nyaa.si
* The Pirate Bay (TPB)
@@ -220,7 +222,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* 2 Fast 4 You
* 3ChangTrai (3CT) [![(invite needed)][inviteneeded]](#)
* 3D Torrents (3DT) [![(invite needed)][inviteneeded]](#)
* 3evils
* 4thD (4th Dimension)
* 52PT
* 720pier
@@ -251,7 +252,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* BeyondHD (BHD)
* Bibliotik
* BIGTorrent
* BigTower
* Bit-City Reloaded [![(invite needed)][inviteneeded]](#)
* BIT-HDTV
* BiT-TiTAN
@@ -291,6 +291,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* CrazyHD
* CrazySpirits
* CrnaBerza
* DANISH BYTES
* Darius Tracker
* Dark-Shadow
* Dark Tracker
@@ -326,7 +327,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* FocusX
* Fou-Du-Cinema
* FreeTorrent
* FullMixMusic
* FunFile (FF)
* FunkyTorrents (FT) [![(invite needed)][inviteneeded]](#)
* FunReleases [![(invite needed)][inviteneeded]](#)
@@ -363,7 +363,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* HDME
* HDRoute [![(invite needed)][inviteneeded]](#)
* HDSky
* HDStreet
* HDTime
* HDTorrents.it
* HDTurk [![(invite needed)][inviteneeded]](#)
@@ -414,12 +413,10 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* Nebulance (NBL) (TransmiTheNet)
* NetCosmo
* NetLab
* New Real World [![(invite needed)][inviteneeded]](#)
* NorBits
* notwhat.cd
* oMg[WtF]trackr
* OnlineSelfEducation
* ONLYscene
* Orpheus
* OshenPT
* Ourbits (HDPter)
@@ -440,7 +437,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* Pretome
* PrivateHD (PHD)
* ProAudioTorrents (PAT)
* Psytorrents [![(invite needed)][inviteneeded]](#)
* PTerClub
* PTFiles (PTF)
* PThome
@@ -481,6 +477,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* SportHD [![(invite needed)][inviteneeded]](#)
* SportsCult
* SpringSunday
* SugoiMusic
* Superbits (SBS)
* Tapochek
* Tasmanit [![(invite needed)][inviteneeded]](#)
@@ -523,6 +520,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* Torrenting (TT) [![(invite needed)][inviteneeded]](#)
* Torrentland
* TotallyKids (TK)
* Trackeros
* TranceTraffic [![(invite needed)][inviteneeded]](#)
* Trezzor
* TTsWEB

View File

@@ -25,7 +25,7 @@
<script type="text/javascript" src="../libs/jquery.dataTables.min.js?changed=2017083001" charset="utf8"></script>
<script type="text/javascript" src="../libs/handlebars.min.js?changed=2017083001"></script>
<script type="text/javascript" src="../libs/moment.min.js?changed=2017083001"></script>
<script type="text/javascript" src="../libs/handlebarsmoment.js?changed=2017083001"></script>
<script type="text/javascript" src="../libs/handlebarsmoment.js?changed=20210117"></script>
<script type="text/javascript" src="../libs/handlebarsextend.js?changed=2017083001"></script>
<script type="text/javascript" src="../bootstrap/bootstrap.min.js?changed=2017083001"></script>
<script type="text/javascript" src="../libs/bootstrap-notify.js?changed=2017083001"></script>

View File

@@ -33,5 +33,5 @@ Handlebars.registerHelper('jacketTimespan', function (context, block) {
});
Handlebars.registerHelper('jacketSize', function (context, block) {
return filesize(context, { round: 1 });
return filesize(context, { round: 2 });
});

View File

@@ -14,7 +14,7 @@ links:
- https://x1337x.ws/
- https://x1337x.eu/
- https://x1337x.se/
- https://1337x.unblockit.dev/
- https://1337x.unblockit.ltd/
- https://1337x.unblocked.monster/
legacylinks:
- https://1337x.unblocked.earth/
@@ -36,8 +36,9 @@ legacylinks:
- https://1337x.unblockit.top/
- https://1337x.unblockit.lat/
- https://1337x.unblockit.app/
- https://1337x.unblocked.rest/
- https://1337.root.yt/
- https://1337x.unblocked.rest/
- https://1337x.unblockit.dev/
caps:
categorymappings:

View File

@@ -1,188 +0,0 @@
---
id: 3evils
name: 3evils
description: "3evils is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en
type: private
encoding: UTF-8
links:
- https://www.3evils.net/
legacylinks:
- https://www.3evils.com/
- https://the-unknown.xyz/
caps:
categorymappings:
- {id: 73, cat: PC, desc: "Appz/Linux"}
- {id: 42, cat: PC/Mac, desc: "Appz/Mac"}
- {id: 43, cat: PC/0day, desc: "Appz/Windows"}
- {id: 65, cat: Books/EBook, desc: "Books"}
- {id: 80, cat: Console/NDS, desc: "Games/Nintendo"}
- {id: 78, cat: Console/PS4, desc: "Games/PS4"}
- {id: 77, cat: PC/Games, desc: "Games/Windows"}
- {id: 79, cat: Console/XBox, desc: "Games/XBOX"}
- {id: 13, cat: Movies/3D, desc: "Movies/3D"}
- {id: 71, cat: Movies/UHD, desc: "Movies/4K"}
- {id: 72, cat: Movies/BluRay, desc: "Movies/Blu-Ray"}
- {id: 12, cat: Movies/DVD, desc: "Movies/DVD-R"}
- {id: 14, cat: Movies, desc: "Movies/Packs"}
- {id: 70, cat: Movies/SD, desc: "Movies/Screeners & Cams"}
- {id: 16, cat: Movies/HD, desc: "Movies/x264"}
- {id: 17, cat: Movies/HD, desc: "Movies/X265"}
- {id: 11, cat: Movies/SD, desc: "Movies/XVID"}
- {id: 74, cat: Audio/Lossless, desc: "Music/FLAC"}
- {id: 33, cat: Audio/MP3, desc: "Music/MP3"}
- {id: 32, cat: Audio, desc: "Music/Packs"}
- {id: 75, cat: Audio/Video, desc: "Music/Videos"}
- {id: 6, cat: TV, desc: "TV/Packs"}
- {id: 3, cat: TV/HD, desc: "TV/x264"}
- {id: 4, cat: TV/HD, desc: "TV/x265"}
- {id: 8, cat: TV/SD, desc: "TV/Xvid"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: 4
options:
4: created
7: seeders
5: size
1: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile. The default is <i>15</i>.
login:
path: login.php
method: form
form: form[action="takelogin.php"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
use_ssl: 1
perm_ssl: ""
error:
- selector: div.callout:contains("Login failed!")
test:
path: /
selector: a[href*="/logout.php?hash_please="]
search:
paths:
# https://www.3evils.net/browse.php?c16=1&c17=1&c3=1&c4=1&search=&searchin=title&incldead=0&only_free=1
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# title, descr, genre, all
searchin: title
# 0 active, 1 incldead, 2 onlydead
incldead: 1
only_free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table.unstriped tbody tr:has(a[href^="download.php?torrent="])
filters:
- name: andmatch
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: "Tip\\('<b>(.*?)</b>"
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?torrent="]
attribute: href
poster:
selector: a[href^="details.php?id="]
attribute: onmouseover
filters:
# onmouseover="Tip('<b>blahblah /><img src=\'img.php/tvmaze/80.jpg\' blahblah />');"
# <img src=\'./pic/noposter.png\'
- name: regexp
args: "src=\\\\'(.+?)\\\\'"
- name: replace
args: ["./pic/noposter.png", ""]
files:
selector: td[data-label="Files"]
# 2 flavours of dates
date:
# Today<br> 10:20 AM
# Yesterday<br> 08:03 PM
optional: true
selector: td[data-label="Added"]:contains("day")
filters:
- name: append
args: " +00:00" # auto adjusted by site account profile
date:
# Feb 14 2019<br> 10:20 AM
optional: true
selector: td[data-label="Added"]:not(:contains("day"))
filters:
- name: append
args: " +00:00" # auto adjusted by site account profile
- name: dateparse
args: "Jan 2 2006 03:04 PM -07:00"
size:
selector: td[data-label="Size"]
grabs:
selector: td[data-label="Snatched"]
filters:
- name: regexp
args: (\d+)
seeders:
selector: td[data-label="Seeders"]
leechers:
selector: td[data-label="Leechers"]
downloadvolumefactor:
case:
"a.info:contains(\"[FREE]\")": 0
"*": 1
uploadvolumefactor:
case:
"*": 1
minimumratio:
text: 1.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# U-232 V5 (customised)

View File

@@ -61,6 +61,9 @@ settings:
- name: password
type: password
label: Password
- name: pin
type: text
label: Pin
login:
path: login.php
@@ -69,8 +72,9 @@ login:
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
pin: "{{ .Config.pin }}"
error:
- selector: .tablea:contains("Benutzername oder Passwort ungültig")
- selector: .tablea:contains("Benutzername, Passwort oder Pin ungültig")
test:
path: browse.php

View File

@@ -7,11 +7,12 @@ type: public
encoding: UTF-8
links:
- http://audiobookbay.nl/ # site forces http, does not support https
- https://audiobookbay.unblockit.dev/
- https://audiobookbay.unblockit.ltd/
legacylinks:
- https://audiobookbay.la/
- https://audiobookbay.unblockit.lat/
- https://audiobookbay.unblockit.app/
- https://audiobookbay.unblockit.dev/
caps:
categorymappings:

View File

@@ -1,141 +0,0 @@
---
id: bigtower
name: BigTower
description: "Big Tower is an ITALIAN Private site for TV / MOVIES / GENERAL"
language: it-it
type: private
encoding: UTF-8
links:
- http://bigtower.info/ # site does not support https NET::ERR_CERT_DATE_INVALID
legacylinks:
- https://bigtower.info/
caps:
categorymappings:
- {id: 11, cat: Movies/HD, desc: "DSS"}
- {id: 1, cat: Movies, desc: "Screener"}
- {id: 2, cat: Movies, desc: "DVDRip & BDRip"}
- {id: 3, cat: Movies/BluRay, desc: "Bluray 1080p & 720p"}
- {id: 5, cat: Movies/UHD, desc: "Ultra HD 4K"}
- {id: 6, cat: TV, desc: "Serie TV"}
- {id: 4, cat: TV/Anime, desc: "Cartoni"}
- {id: 7, cat: PC/Games, desc: "Giochi"}
- {id: 8, cat: Audio, desc: "Musica"}
- {id: 9, cat: PC/0day, desc: "Software"}
- {id: 12, cat: PC/Mobile-Other, desc: "Applicazioni"}
- {id: 14, cat: Other, desc: "Varie & Altro"}
- {id: 13, cat: Books, desc: "Libri & Edicola"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: donor
type: checkbox
label: Show donor torrent? (Enable if you're a donor)
default: false
- name: info
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: span:contains("Nome Utente non corretto")
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: index.php
inputs:
search: "{{ .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="]){{ if .Config.donor }}{{ else }}:not(:has(img[src*="keditbookmarks.png"])){{ end }}
fields:
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
title:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
filters:
- name: re_replace # rimozioni varie
args: ["(?i)(\\[Richiesta\\])", ""]
details:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: href
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="]
poster:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) "
size:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(8)
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "02/01/2006 -07:00"
grabs:
selector: td:nth-last-child(5)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-last-child(7)
leechers:
selector: td:nth-last-child(6)
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
# xbtitFM v3.0.00

View File

@@ -6,9 +6,9 @@ language: tr-TR
type: private
encoding: UTF-8
links:
- http://broadcity.in/ # site is forcing to http
- https://broadcity.in/ # site is forcing to https
legacylinks:
- https://broadcity.in/
- http://broadcity.in/
caps:
categorymappings:

View File

@@ -8,7 +8,7 @@ encoding: UTF-8
followredirect: true
links:
- https://btdb.eu/
- https://btdb.unblockit.dev/
- https://btdb.unblockit.ltd/
legacylinks:
- https://btdb.to/
- https://btdb.unblocked.app/
@@ -30,6 +30,7 @@ legacylinks:
- https://btdb.unblockit.top/
- https://btdb.unblockit.lat/
- https://btdb.unblockit.app/
- https://btdb.unblockit.dev/
caps:
categories:
@@ -43,6 +44,10 @@ caps:
book-search: [q]
settings:
- name: flaresolverr
type: info
label: FlareSolverr
default: This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href="https://github.com/Jackett/Jackett#configuring-flaresolverr" target="_blank">FlareSolver</a> to access it.
- name: info_8000
type: info
label: About BTDB Categories

View File

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

View File

@@ -64,8 +64,8 @@ caps:
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
@@ -136,9 +136,9 @@ search:
- path: selection.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 0 name, 1 descr, 2 both, 4 imdb
blah: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}"
search: "{{ .Keywords }}}"
# 0 name, 1 descr, 2 both
blah: "0"
orderby: "{{ .Config.sort }}"
sort: "{{ .Config.type }}"

View File

@@ -10,7 +10,7 @@ links:
- https://www.demonoid.is/
- https://www.dnoid.to/
- https://www.dnoid.pw/
- https://demonoid.unblockit.dev/
- https://demonoid.unblockit.ltd/
- https://demonoid.torrentbay.to/
legacylinks:
- https://demonoid.unblockit.pro/
@@ -27,6 +27,7 @@ legacylinks:
- https://demonoid.unblockit.top/
- https://demonoid.unblockit.lat/
- https://demonoid.unblockit.app/
- https://demonoid.unblockit.dev/
caps:
categorymappings:

View File

@@ -12,18 +12,18 @@ caps:
categorymappings:
- {id: 60, cat: Movies/HD, desc: "MicroHD 720p"}
- {id: 77, cat: Movies/HD, desc: "MicroHD 1080p"}
- {id: 78, cat: Movies/HD, desc: "MicroHD 4K"}
- {id: 78, cat: Movies/UHD, desc: "MicroHD 4K"}
- {id: 64, cat: TV/HD, desc: "Pack Series"}
- {id: 65, cat: TV/HD, desc: "Pack Series VOSE"}
- {id: 80, cat: Movies/BluRay, desc: "BDRip X265 1080p"}
- {id: 80, cat: Movies/HD, desc: "BDRip X265 1080p"}
- {id: 81, cat: Movies/UHD, desc: "UHDRip x265 4K"}
- {id: 82, cat: Movies/WEB-DL, desc: "Pelis Web-DL 1080"}
- {id: 83, cat: Movies/WEB-DL, desc: "Pelis Web-DL 720"}
- {id: 84, cat: Movies/UHD, desc: "UHD Remux x265"}
- {id: 91, cat: Movies/HD, desc: "BDRip x264"}
- {id: 89, cat: Movies/HD, desc: "BDRemux"}
- {id: 88, cat: Movies/HD, desc: "Full HD"}
- {id: 90, cat: Movies/UHD, desc: "UHD Full"}
- {id: 88, cat: Movies/BluRay, desc: "Full HD"}
- {id: 90, cat: Movies/BluRay, desc: "UHD Full"}
- {id: 23, cat: TV/Sport, desc: "Deportes"}
- {id: 20, cat: TV/HD, desc: "Series"}
- {id: 31, cat: TV/HD, desc: "Series VOSE"}
@@ -38,11 +38,11 @@ caps:
- {id: 76, cat: Movies, desc: "x-men saga"}
- {id: 85, cat: Movies, desc: "Sean Connery"}
- {id: 6, cat: Books/EBook, desc: "EBooks"}
- {id: 58, cat: Books/EBook, desc: "Kiosko"}
- {id: 58, cat: Books/Mags, desc: "Kiosko"}
- {id: 24, cat: TV/Documentary, desc: "Documentales"}
- {id: 32, cat: TV/Documentary, desc: "Documentales VOSE"}
- {id: 49, cat: Books/EBook, desc: "eLearning"}
- {id: 68, cat: Books/EBook, desc: "eLearning Multimedia"}
- {id: 49, cat: Books/Technical, desc: "eLearning"}
- {id: 68, cat: Books/Technical, desc: "eLearning Multimedia"}
- {id: 87, cat: Audio/Audiobook, desc: "Audiolibros"}
modes:
@@ -125,16 +125,16 @@ search:
selector: a[href^="index.php?page=torrent-details"][onmouseover]:not(:contains("VOSE"))
optional: true
filters:
- name: re_replace
args: ["\\W", "."] # Spaces and other characters -> .
- name: append
args: ".Spanish-DivTeam"
args: " MULTi/SPANiSH" # DivTeam doesn't bring languages. Usually Original + Spanish.
- name: re_replace
args: ["\\.+", "."] # More than 1 dot -> .
- name: re_replace
args: ["^\\.", ""] # Delete first dot
- name: re_replace
args: ["UHDRip", "BDRip"] # Fix for Radarr
- name: replace
args: ["UHDRip", "Bluray-2160p"] # Fix for Radarr
- name: replace
args: ["2160p BDRip", "Bluray-2160p"] # Fix for Radarr
poster:
selector: a[onmouseover][href^="index.php?page=torrent-details"]
attribute: onmouseover

View File

@@ -9,7 +9,7 @@ followredirect: true
links:
- https://www.ettvcentral.com/
- https://ettv.unblockninja.com/
- https://ettv.unblockit.dev/
- https://ettv.unblockit.ltd/
- https://ettv.unblocked.monster/
legacylinks:
- https://www.ettv.tv/
@@ -35,6 +35,7 @@ legacylinks:
- https://ettv.unblockit.lat/
- https://ettv.unblockit.app/
- https://ettv.unblocked.rest/
- https://ettv.unblockit.dev/
caps:
categorymappings:

View File

@@ -7,11 +7,12 @@ type: public
encoding: UTF-8
links:
- https://extratorrents.it/
- https://extratorrent.unblockit.dev/
- https://extratorrent.unblockit.ltd/
- https://extratorrent2.unblockninja.com/
legacylinks:
- https://extratorrent.ag/
- https://extratorrent.unblockit.app/
- https://extratorrent.unblockit.dev/
caps:
categorymappings:

View File

@@ -12,7 +12,7 @@ links:
- https://eztv.tf/
- https://eztv.yt/
- https://eztv.unblockninja.com/
- https://eztv.unblockit.dev/
- https://eztv.unblockit.ltd/
- https://eztv.unblocked.monster/
legacylinks:
- https://eztv.ag/ # redirects to .re
@@ -38,6 +38,7 @@ legacylinks:
- https://eztv.unblockit.app/
- https://eztv.root.yt/
- https://eztv.unblocked.rest/
- https://eztv.unblockit.dev/
caps:
categories:

View File

@@ -1,89 +0,0 @@
---
id: fullmixmusic
name: FullMixMusic
description: "FullMixMusic is a HUNGARIAN Private Torrent Tracker for MUSIC"
language: hu-hu
type: private
encoding: UTF-8
links:
- https://fullmixmusic.org/
legacylinks:
- http://fullmixmusic.org/
caps:
categories:
1: Audio
modes:
search: [q]
music-search: [q, artist]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table.main:contains("Művelet!")
test:
path: browse.php
search:
paths:
- path: browse.php
inputs:
search: "{{ if .Query.Artist }}{{ .Query.Artist }}{{ else }}{{ .Keywords }}{{ end }}"
showsearch: 1
incldead: 1
rows:
selector: table.tablak > tbody > tr:has(a[href^="details.php?id="])
fields:
category:
text: 1
title:
selector: a[href^="details.php?id="][title]
attribute: title
filters:
- name: regexp
args: ^(.*?)<br />
details:
selector: a[href^="details.php?id="][title]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
poster:
selector: a[href^="details.php?id="][title]
attribute: title
filters:
- name: regexp
args: "src=\"(.*?)\">"
description:
selector: td:nth-child(2) > i > font
date:
selector: td:nth-child(6)
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
grabs:
selector: td:nth-child(10)
downloadvolumefactor:
text: 0
uploadvolumefactor:
case:
font[title^="Dupla feltöltésű torrent!"]: 2
font[title^="x3 feltöltésű torrent!"]: 3
font[title^="x4 feltöltésű torrent!"]: 4
"*": 1
# engine tbd

View File

@@ -9,7 +9,7 @@ followredirect: true
links:
- https://www.gtdb.to/
- https://glodls.to/
- https://glotorrents.unblockit.dev/
- https://glotorrents.unblockit.ltd/
- https://glodls.unblocked.monster/
legacylinks:
- https://glodls.rocks/
@@ -32,6 +32,7 @@ legacylinks:
- https://glotorrents.unblockit.lat/
- https://glotorrents.unblockit.app/
- https://glodls.unblocked.rest/
- https://glotorrents.unblockit.dev/
caps:
categorymappings:

View File

@@ -104,19 +104,51 @@ search:
selector: a.view-torrent
filters:
- name: re_replace
args: ["(?i)full", "BRDISK."] # FULL(BR/UHD) -> BRDISK
args: ["\\[", " "]
- name: re_replace
args: ["\\]", " "]
- name: re_replace
args: ["(?i)(full(bluray)?)", "BRDISK"] # FULL(BR/UHD) -> BRDISK
- name: replace
args: ["HDOlimpo", ""] # Delete HDOlimpo
- name: re_replace
- name: replace
args: ["HD-Olimpo", ""] # Delete HD-Olimpo
- name: re_replace
args: ["\\W", "."] # Spaces and other characters -> .
- name: append
args: ".Spanish-HDOlimpo"
args: ["[ -](?i)español[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)castellano[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)spa[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)esp[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)ingl[eé]s[ -]", " English "]
- name: re_replace
args: ["[ -](?i)[ei]ng[ -]", " English "]
- name: re_replace
args: ["[ -](?i)cat[ -]", " Catalan "]
- name: re_replace
args: ["[ -](?i)vas[ -]", " Basque "]
- name: re_replace
args: ["[ -](?i)fr[ae][ -]", " French "]
- name: re_replace
args: ["[ -](?i)jap[ -]", " Japanese "]
- name: re_replace
args: ["[ -](?i)ita[ -]", " Italian "]
- name: re_replace
args: ["[ -](?i)rus[ -]", " Russian "]
- name: re_replace
args: ["[ -](?i)ger[ -]", " German "]
- name: re_replace
args: ["(?i)(triaudio)", "MULTi/SPANiSH/English"]
- name: re_replace
args: ["(?i)(dual)", " MULTi/SPANiSH "]
- name: re_replace
args: ["\\.+", "."] # More than 1 dot -> .
- name: re_replace
args: ["^\\.", ""] # Delete first dot
- name: re_replace
args: ["\\s+", " "] # More than 1 space to 1 space
download:
selector: a[href*="/download/"]

View File

@@ -6,11 +6,11 @@ language: ru-ru
type: public
encoding: windows-1251
links:
- https://hdreactor.net/
- https://hdreactor.club/
- https://hdreactor.su/
legacylinks:
- https://hdreactor.guru/
- https://hdreactor.net/
caps:
categorymappings:

View File

@@ -1,171 +0,0 @@
---
id: hdstreet
name: HDStreet
description: "HDStreet is a CHINESE Private Torrent Tracker for HD MOVIES / TV"
language: zh-cn
type: private
encoding: UTF-8
links:
- https://hdstreet.club/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies(D)/华语电影", default: true}
- {id: 403, cat: Movies, desc: "Movies(F)/外语电影", default: true}
- {id: 402, cat: TV, desc: "TV Series(D)/华语电视剧", default: true}
- {id: 404, cat: TV, desc: "TV Series(F)/外语电视剧", default: true}
- {id: 406, cat: TV, desc: "TV Shows(D)/华语综艺", default: true}
- {id: 405, cat: TV, desc: "TV Shows(F)/外语综艺", default: true}
- {id: 408, cat: TV/Anime, desc: "TV Anime(D)/华语动漫", default: true}
- {id: 411, cat: TV/Anime, desc: "TV Anime(F)/外语动漫", default: true}
- {id: 409, cat: Audio/Video, desc: "MusicVideo(D)/华语音乐MV", default: true}
- {id: 412, cat: Audio/Video, desc: "MusicVideo(F)/外语音乐MV", default: true}
- {id: 407, cat: TV/Documentary, desc: "Documentaries(D)/华语纪录片", default: true}
- {id: 413, cat: TV/Documentary, desc: "Documentaries(F)/外语纪录片", default: true}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: 4
options:
4: created
7: seeders
5: size
1: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
path: login.php
method: form
form: form[action="takelogin.php"]
inputs:
logintype: username
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
logout: ""
thispagewidth: yes
error:
- selector: td.embedded:has(h2:contains("姿势不正确"))
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
categories: [401, 402, 406, 408, 409, 407]
- path: torrentsasia.php
categories: [403, 404, 405, 411, 412, 413]
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 0 incldead, 1 active, 2 dead, 3 noimdb, 4 onlydead
incldead: 0
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%, 8 all promotions
spstate: "{{ if .Config.freeleech }}8{{ else }}0{{ end }}"
# 0 all, 1 popular, 2 classic, 3 recommended, 4 normal
picktype: 0
# 0 title, 3 uploader, 4 movie info, 5 imdbid, 6 torrent hash, 7 activity seed
search_area: "{{ if .Query.IMDBID }}5{{ else }}0{{ end }}"
# 0 AND, 1 OR, 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
# can search for imdbid but does not show imdb link in search results.
rows:
selector: table.torrents > tbody > tr:has(a[href^="details.php?id="]), table.torrents > tbody > tr:has(a[href^="comment.php?"])
after: 1
fields:
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
title:
optional: true
selector: a[title][href^="details.php?id="]
attribute: title
details:
selector: a[href^="details.php?id="]
attribute: href
download:
# downloads can be missing but we can exclude them due to after:1
selector: a[href^="download.php?id="]
attribute: href
optional: true
seeders:
selector: td:nth-child(3)
leechers:
selector: td:nth-child(4)
grabs:
selector: td:nth-child(5)
date:
# time type: time elapsed (default)
selector: td:nth-child(9) > span[title]
attribute: title
optional: true
filters:
- name: append
args: " +08:00" # CST
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
date:
# time added
selector: td:nth-child(9):not(:has(span))
optional: true
filters:
- name: append
args: " +08:00" # CST
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
size:
selector: td:nth-child(10)
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
# NexusPHP V1.5.β5

View File

@@ -59,6 +59,10 @@ settings:
3: "created asc"
1: "seeders asc"
2: "size asc"
- name: flaresolverr
type: info
label: FlareSolverr
default: This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href="https://github.com/Jackett/Jackett#configuring-flaresolverr" target="_blank">FlareSolver</a> to access it.
search:
paths:

View File

@@ -72,6 +72,10 @@ settings:
type: checkbox
label: Search freeleech only
default: false
- name: flaresolverr
type: info
label: FlareSolverr
default: This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href="https://github.com/Jackett/Jackett#configuring-flaresolverr" target="_blank">FlareSolver</a> to access it.
- name: sort
type: select
label: Sort requested from site

View File

@@ -26,13 +26,12 @@ caps:
- {id: 414, cat: Movies/DVD, desc: "Movies DVD"}
- {id: 402, cat: TV, desc: "TV Series(电视剧)"}
- {id: 403, cat: TV, desc: "TV Shows(综艺)"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries(纪录片)"}
- {id: 405, cat: TV/Anime, desc: "Animations(动画片)"}
- {id: 406, cat: Audio/Video, desc: "Music Videos(MV)"}
- {id: 407, cat: TV/Sport, desc: "Sports(体育)"}
- {id: 408, cat: Audio, desc: "HQ Audio(音乐)"}
- {id: 421, cat: Books, desc: "Book(学习资料)"}
- {id: 422, cat: Console, desc: "Game(游戏)"}
- {id: 409, cat: Other, desc: "Misc(其他)"}
- {id: 500, cat: Audio, desc: "Music(无损)"}
- {id: 409, cat: Other, desc: "Video Portray(写真视频)"}
modes:
search: [q]
@@ -42,13 +41,12 @@ caps:
book-search: [q]
settings:
- name: cookie
- name: username
type: text
label: Cookie
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)<li>Refresh the page by pressing <b>F5</b><li>Click on the first row entry<li>Select the <b>Headers</b> tab on the Right panel<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -75,9 +73,18 @@ settings:
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
method: cookie
path: login.php
method: form
form: form[action="takelogin.php"]
inputs:
cookie: "{{ .Config.cookie }}"
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
selector: img[src^="image.php?"]
input: imagestring
error:
- selector: table:has(a[href="login.php"])
test:
path: index.php
@@ -85,7 +92,6 @@ search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 0 incldead, 1 active, 2 dead
incldead: 0
@@ -103,19 +109,19 @@ search:
fields:
category:
selector: a[href^="?cat="]
selector: a[href*="?cat_"]
attribute: href
filters:
- name: querystring
args: cat
- name: regexp
args: "cat_(\\d{3})"
title:
selector: a[href^="details.php?id="]
selector: a[href^="details_"] > b
title:
optional: true
selector: a[title][href^="details.php?id="]
selector: a[title][href^="details_"] > b
attribute: title
details:
selector: a[href^="details.php?id="]
selector: a[href^="details_"]
attribute: href
download:
selector: a[href^="download.php?"]

View File

@@ -13,6 +13,7 @@ caps:
- {id: 1, cat: XXX/XviD, desc: "Videos SD"}
- {id: 2, cat: XXX/x264, desc: "Videos HD"}
- {id: 3, cat: XXX/WMV, desc: "Movies"}
- {id: 17, cat: XXX/ImageSet, desc: "SiteRip's Picture Packs"}
- {id: 6, cat: XXX/Other, desc: "Porn (Other)"}
- {id: 4, cat: XXX, desc: "AV CENSORED (JAV)"}
- {id: 5, cat: XXX, desc: "AV UNCENSORED (JAV)"}
@@ -26,6 +27,7 @@ caps:
- {id: 15, cat: XXX, desc: "Pregnant"}
- {id: 16, cat: XXX, desc: "Fetish"}
- {id: 9, cat: XXX, desc: "Gay Forum"}
- {id: 18, cat: XXX, desc: "Incest and Taboo"}
modes:
search: [q]

View File

@@ -120,7 +120,7 @@ login:
# https://lesaloonv2-0.net/yupy_login.php
path: yupy_login.php
method: form
form: form[action^="index.php?page=login"]
form: form[action^="login"]
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"

View File

@@ -12,7 +12,7 @@ links:
- https://www.limetorrents.co/
- https://limetor.com/
- https://www.limetor.pro/
- https://limetorrents.unblockit.dev/
- https://limetorrents.unblockit.ltd/
- https://limetorrents.unblockninja.com/
legacylinks:
- https://www.limetorrents.io/
@@ -36,6 +36,7 @@ legacylinks:
- https://limetorrents.unblockit.top/
- https://limetorrents.unblockit.lat/
- https://limetorrents.unblockit.app/
- https://limetorrents.unblockit.dev/
caps:
categorymappings:

View File

@@ -6,11 +6,12 @@ language: el-gr
type: private
encoding: UTF-8
links:
- https://magico.fun/
- https://trellas.info/
legacylinks:
- https://magico.info/
- https://magico.one/
- https://magico.club/
- https://magico.fun/
caps:
categorymappings:

View File

@@ -16,6 +16,18 @@ caps:
search: [q]
tv-search: [q, season, ep]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: vostfr
type: checkbox
label: Add VOSTFR to titles
default: false
login:
path: takelogin.php
method: post
@@ -40,8 +52,12 @@ search:
fields:
category:
text: 1
title:
title_normal:
selector: a[href^="details.php?id="]
title_vostfr:
text: "{{ .Result.title_normal }} VOSTFR"
title:
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_normal }}{{ end }}"
details:
selector: a[href^="details.php?id="]
attribute: href

View File

@@ -9,7 +9,7 @@ followredirect: true
links:
- https://monova.org/
- https://monova.to/
- https://monova.unblockit.dev/
- https://monova.unblockit.ltd/
- https://monova.unblocked.monster/
- https://monova.unblockninja.com/
legacylinks:
@@ -29,6 +29,7 @@ legacylinks:
- https://monova.unblockit.lat/
- https://monova.unblockit.app/
- https://monova.unblocked.rest/
- https://monova.unblockit.dev/
caps:
categorymappings:

View File

@@ -0,0 +1,183 @@
---
id: montorrent
name: MonTorrent
description: "MonTorrent is a FRENCH Public Indexer"
language: fr-fr
type: public
encoding: UTF-8
followredirect: true
links:
- https://www.montorrent.com/
caps:
categorymappings:
- {id: "vo", cat: Movies, desc: "Films VO"}
- {id: "vostfr", cat: Movies, desc: "Films VOSTFR"}
- {id: "dvdrip", cat: Movies, desc: "Films DVDRIP"}
- {id: "bdrip", cat: Movies, desc: "Films BDRIP"}
- {id: "webrip", cat: Movies, desc: "Films WEBRIP"}
- {id: "hdrip", cat: Movies, desc: "Films HDRIP"}
- {id: "dvdscreener", cat: Movies, desc: "Films DVD Screener"}
- {id: "screener", cat: Movies, desc: "Films Screener"}
- {id: "hd2160p", cat: Movies, desc: "Films 2160p"}
- {id: "hd1080p", cat: Movies, desc: "Films 1080p"}
- {id: "hd720p", cat: Movies, desc: "Films 720p"}
- {id: "hd2160p-hdlight", cat: Movies, desc: "Films 2160p HD Light"}
- {id: "hd1080p-hdlight", cat: Movies, desc: "Films 1080p HD Light"}
- {id: "hd720p-hdlight", cat: Movies, desc: "Films 720p HD Light"}
- {id: "hd3d", cat: Movies, desc: "Films 3D"}
- {id: "serie-vostfr", cat: TV, desc: "Emission TV VOSTFR"}
- {id: "serie-vf", cat: TV, desc: "Emission TV VF"}
- {id: "pack-vf", cat: TV, desc: "Emission TV Pack VF"}
- {id: "pack-vostfr", cat: TV, desc: "Emission TV Pack VOSTFR"}
- {id: "pack-vo", cat: TV, desc: "Emission TV VO"}
- {id: "albums", cat: Audio, desc: "Audio"}
- {id: "jeux", cat: PC/Games, desc: "Jeu vidéo"}
- {id: "jeux-pc", cat: PC/Games, desc: "Jeu vidéo PC"}
- {id: "jeux-console", cat: PC/Games, desc: "Jeu vidéo Consoles"}
- {id: "logiciels", cat: PC, desc: "Application"}
- {id: "ebooks", cat: Books, desc: "eBook"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: filter_title
type: checkbox
label: Try to normalize releases names by moving year after the title
default: false
- name: langfilter
type: select
label: Lang Filter / Filtre Langue
default: on
options:
on: Tous
french: French
truefrench: TrueFrench
vostfr: VOSTFR
vo: VO
- name: multilang
type: checkbox
label: Replace MULTI by another language in release name
default: false
- name: multilanguage
type: select
label: Replace MULTI by this language
default: FRENCH
options:
FRENCH: FRENCH
MULTI.FRENCH: MULTI.FRENCH
ENGLISH: ENGLISH
MULTI.ENGLISH: MULTI.ENGLISH
VOSTFR: VOSTFR
MULTI.VOSTFR: MULTI.VOSTFR
- name: vostfr
type: checkbox
label: Replace VOSTFR with ENGLISH
default: false
- name: enhancedAnime
type: checkbox
label: Enhance sonarr compatibility with anime by renaming episode (xxx to exxx). Works only if episode is at the end of the query. Can disturb movies search. (back to the future 3 -> back to the future e3)
default: false
- name: order
type: select
label: Sort requested from site
default: id
options:
id: id
seeders: seeders
size: taille
rls: name
- name: orderby
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
search:
paths:
- path: "{{ if .Keywords }}/recherche/?query={{ .Keywords }}&{{ else }}/torrents/?{{ end }}langue={{ .Config.langfilter }}&order={{ .Config.order }}&orderby={{ .Config.orderby }}"
- path: "{{ if .Keywords }}/recherche/?query={{ .Keywords }}&{{ else }}/torrents/?{{ end }}langue={{ .Config.langfilter }}&order={{ .Config.order }}&orderby={{ .Config.orderby }}&page=2"
rows:
selector: div.t-details
fields:
category:
optional: true
selector: a[href*="id_cat"]
attribute: class
filters:
- name: replace
args: ["liste-categorie-couleur ", ""]
title_normal:
selector: a[href^="/torrent/"]
title_filtered:
text: "{{ .Result.title_normal }}"
filters:
- name: re_replace
args: ["(?i)^(?:(.+?)((?:[\\.\\-\\s_\\[]+(?:imax|(?:dvd|bd|tv)(?:rip|scr)|bluray(?:\\-?rip)?|720\\s*p?|1080\\s*p?|vof?|vost(?:fr)?|multi|vf(?:f|q)?[1-3]?|(?:true)?french|eng?)[\\.\\-\\s_\\]]*)*)([\\(\\[]?(?:20|1[7-9])\\d{2}[\\)\\]]?)(.*)$|(.*))$", "$1 $3 $2 $4 $5"]
- name: replace
args: [".", " "]
- name: trim
- name: re_replace
args: ["(?i)\\s(mkv|avi|divx|xvid|mp4)$", ""]
- name: re_replace
args: ["(\\s{2,5})", " "]
- name: trim
title_phase1:
text: "{{ if .Config.filter_title }}{{ .Result.title_filtered }}{{ else }}{{ .Result.title_normal }}{{ end }}"
title_multilang:
text: "{{ .Result.title_phase1 }}"
filters:
- name: re_replace
args: ["(?i)[\\.\\s\\[\\-]multi[\\.\\s\\]\\-]", ".{{ .Config.multilanguage }}."]
title_phase2:
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
title_vostfr:
text: "{{ .Result.title_phase2 }}"
filters:
- name: re_replace
args: ["(?i)[\\.\\s\\[\\-]vostfr[\\.\\s\\]\\-]", ".ENGLISH."]
- name: re_replace
args: ["(?i)[\\.\\s\\[\\-]subfrench[\\.\\s\\]\\-]", ".ENGLISH."]
title_phase3:
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
title_anime:
text: "{{ .Result.title_phase3 }}"
filters:
# Sonarr need E in front of 3 digit number or else it thinks it is episode
# S01E10 for number 110 for example ==> enhancedAnime
- name: re_replace
args: ["(.*)(\\.| |\\-)(\\d{2,3})(\\.| |\\-)(.*)", "$1 E$3 $5"]
title:
text: "{{ if .Config.enhancedAnime }}{{ .Result.title_anime }}{{ else }}{{ .Result.title_phase3 }}{{ end }}"
details:
selector: a[href^="/torrent/"]
attribute: href
download:
selector: a[href^="/telechargement/"]
attribute: href
size:
selector: div.t-taille
seeders:
text: 0
seeders:
selector: div.t-sources
optional: true
leechers:
text: 0
leechers:
selector: div.t-clients
optional: true
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -9,7 +9,7 @@ followredirect: true
links:
- https://pirateiro.com/
- https://pirateiro.eu/
- https://pirateiro.unblockit.dev/
- https://pirateiro.unblockit.ltd/
legacylinks:
- http://pirateiro.com/
- https://pirateiro.unblockit.pro/
@@ -21,6 +21,7 @@ legacylinks:
- https://pirateiro.unblockit.top/
- https://pirateiro.unblockit.lat/
- https://pirateiro.unblockit.app/
- https://pirateiro.unblockit.dev/
caps:
categorymappings:

View File

@@ -1,181 +0,0 @@
---
id: retroflix
name: RetroFlix
description: "Private Torrent Tracker for Classic Movies / TV / General Releases."
language: en-us
type: private
encoding: UTF-8
links:
- https://retroflix.club/
legacylinks:
- https://retroflix.net/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies"}
- {id: 402, cat: TV, desc: "TV Series"}
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
- {id: 407, cat: TV/Sport, desc: "Sports"}
- {id: 409, cat: Books, desc: "Books"}
- {id: 408, cat: Audio, desc: "HQ Audio"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
book-search: [q]
settings:
- name: cookie
type: text
label: Cookie
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)<li>Refresh the page by pressing <b>F5</b><li>Click on the first row entry<li>Select the <b>Headers</b> tab on the Right panel<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: 4
options:
4: created
7: seeders
5: size
1: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: torrents.php
selector: a[href*="/logout?"]
search:
# https://retroflix.club/torrents.php?incldead=0&spstate=0&inclbookmarked=0&search=tt0055254&search_area=4&search_mode=0
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 0 incldead, 1 active, 2 dead
incldead: 0
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
# 0 title, 1 descr, 3 uploader, 4 imdburl
search_area: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}"
# 0 AND, 1 OR, 2 Exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
release_year:
selector: a[href^="/torrents.php?processing="]
optional: true
quality:
selector: a[href^="/torrents.php?standard="]
optional: true
title:
selector: a[href^="details.php?id="]
filters:
- name: append
args: " {{ .Result.release_year }}"
- name: append
args: " {{ .Result.quality }}"
title:
selector: a[title][href^="details.php?id="]
attribute: title
optional: true
filters:
- name: append
args: " {{ .Result.release_year }}"
- name: append
args: " {{ .Result.quality }}"
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
poster:
selector: tr[onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.+?) "
imdb:
selector: a[href*="imdb.com/title/tt"]
attribute: href
date:
# time type: time elapsed (default)
selector: td:nth-child(4) > span[title]
attribute: title
optional: true
filters:
- name: append
args: " +00:00" # auto adjusted by site account profile
- name: dateparse
args: "02-01-2006 15:04:05 -07:00"
date:
# time added
selector: td:nth-child(4):not(:has(span))
optional: true
filters:
- name: append
args: " +00:00" # auto adjusted by site account profile
- name: dateparse
args: "02-01-200615:04:05 -07:00"
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
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
minimumratio:
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# NexusPHP

View File

@@ -17,6 +17,7 @@ caps:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 4, cat: Audio, desc: "Music"}
- {id: 5, cat: TV/Sport, desc: "Sports"}
- {id: 7, cat: TV/Other, desc: "Stand-up Comedy"}
- {id: 2, cat: TV, desc: "TV"}
modes:
@@ -41,7 +42,6 @@ login:
search:
paths:
- path: browse.php
method: post
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"

View File

@@ -93,20 +93,98 @@ search:
selector: a[href^="details.php?name="]
filters:
- name: re_replace
args: [".*? / ", ""]
args: ["^VA\\s*\\|", "VA -"]
- name: re_replace
args: ["^.*? \\/\\s*|^.*? \\|\\s*", ""]
- name: diacritics
args: replace
- name: re_replace
args: ["( = CSFD \\d+\\%)", ""]
args: ["\\|\\s*\\d+\\% CSFD\\.cz\\/|\\s*=*\\s*CSFD\\s*\\d+\\%|\\s*CSFD\\s*=*\\s*\\d+\\%|\\s*CSFD", ""]
- name: re_replace
args: ["(?i)serie", ""]
args: ["(\\d{1})\\s*\\.*\\s*az*\\s*(\\d{2,})\\s*\\.*\\s(?i)serie\\.*", "S0$1-S$2"]
- name: re_replace
args: ["(\\d{2})\\.", "S$1"]
args: ["(\\d{1})\\s*\\.*\\s*az*\\s*(\\d{1})\\s*\\.*\\s(?i)serie\\.*", "S0$1-S$2"]
- name: re_replace
args: ["(\\d{1})\\.", "S0$1"]
args: ["(?i)serie\\s*(\\d{1})\\s*\\.*\\s*az*\\s*(\\d{2,})\\s*\\.*", "S0$1-S$2"]
- name: re_replace
args: ["(?i)serie\\s*(\\d{1})\\s*\\.*\\s*az*\\s*(\\d{1})\\s*\\.*", "S0$1-S$2"]
- name: re_replace
args: ["(?i)season\\,*\\s*(\\d{1})\\,\\s*\\d{1}\\,\\s*(\\d{2,})", "S0$1-S$2"]
- name: re_replace
args: ["(?i)season\\,*\\s*(\\d{1})\\,\\s*\\d{1}\\,\\s*(\\d{1})", "S0$1-S0$2"]
- name: re_replace
args: ["(?i)season\\s*(\\d{1})\\s*\\.*\\-*\\,*\\+*\\s*(\\d{2,})\\s*\\.*", "S0$1-S$2"]
- name: re_replace
args: ["(?i)season\\s*(\\d{1})\\s*\\.*\\-*\\,*\\+*\\s*(\\d{1})\\s*\\.*", "S0$1-S0$2"]
- name: re_replace
args: ["^GRID\\:*\\s(?i)season", "GRID Seasson"]
- name: re_replace
args: ["(?i)season\\s*(\\d{2,})\\.*", "S$1"]
- name: re_replace
args: ["(?i)season\\s*(\\d{1})\\.*", "S0$1"]
- name: re_replace
args: ["GRID Seasson", "GRID Season"]
- name: re_replace
args: ["\\sPES\\s(\\d{4})\\s(?i)season", " PES $1 Seasson"]
- name: re_replace
args: ["\\s\\(*(\\d{2,})\\.*\\s*(?i)season\\)*", " S$1"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\s*\\.*\\-*\\,*\\+*\\s*(\\d{2,})\\.*\\s(?i)season\\)*", " S0$1-S$2"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\s*\\.*\\-*\\,*\\+*\\s*(\\d{1})\\.*\\s(?i)season\\)*", " S0$1-S0$2"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\.*\\s*(?i)season\\)*", " S0$1"]
- name: re_replace
args: [" PES (\\d{4}) Seasson", " PES $1 Season"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\,\\s*\\d{1}\\,\\s*(\\d{2,})\\,*\\s*(?i)serie\\)*", " S0$1-S$2"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\,\\s*\\d{1}\\,\\s*(\\d{1})\\,*\\s*(?i)serie\\)*", " S0$1-S0$2"]
- name: re_replace
args: ["\\s\\(*(\\d{2,})\\.*\\s*(?i)serie\\)*", " S$1"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\s*\\.*\\-*\\,*\\+*\\s*(\\d{2,})\\.*\\s(?i)serie\\)*", " S0$1-S$2"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\s*\\.*\\-*\\,*\\+*\\s*(\\d{1})\\.*\\s(?i)serie\\)*", " S0$1-S0$2"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\.*\\s*(?i)serie\\)*", " S0$1"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\,\\s*\\d{1}\\,\\s*(\\d{2,})\\,*\\s*(?i)seria\\)*", " S0$1-S$2"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\,\\s*\\d{1}\\,\\s*(\\d{1})\\,*\\s*(?i)seria\\)*", " S0$1-S0$2"]
- name: re_replace
args: ["\\s\\d{2,}\\.*\\s*(?i)seria\\s\\((?i)s(\\d{2,})", " (S$1"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\s*\\.*\\-*\\,*\\+*\\s*(\\d{2,})\\.*\\s(?i)seria\\)*", " S0$1-S$2"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\s*\\.*\\-*\\,*\\+*\\s*(\\d{1})\\.*\\s(?i)seria\\)*", " S0$1-S0$2"]
- name: re_replace
args: ["\\s\\(*(\\d{2,})\\.*\\s*(?i)seria\\)*", " S$1"]
- name: re_replace
args: ["\\s\\(*(\\d{1})\\.*\\s*(?i)seria\\)*", " S0$1"]
- name: re_replace
args: ["\\s\\d{1}\\.*\\s*(?i)seria\\s*\\((?i)s(\\d{1})", " (S0$1"]
- name: re_replace
args: ["(\\d{2,})\\.*\\s*(?i)serii\\)*", "S01-S$1"]
- name: re_replace
args: ["(\\d{1})\\.*\\s*(?i)serii\\)*", "S01-S0$1"]
- name: re_replace
args: ["(?i)pouze (\\d{1})\\-(\\d{2,})", "pouze S0$1-S$2"]
- name: re_replace
args: ["(?i)pouze (\\d{1})\\-(\\d{1})", "pouze S0$1-S0$2"]
- name: re_replace
args: ["(?i)komplet (\\d{1})\\-(\\d{2,})", "komplet S0$1-S$2"]
- name: re_replace
args: ["(?i)komplet (\\d{1})\\-(\\d{1})", "komplet S0$1-S0$2"]
details:
selector: a[href^="details.php?name="]
attribute: href
poster:
selector: img[class="lozad"]
attribute: data-src
poster:
selector: img[src="//cdn.sktorrent.eu/obrazky/xXx.jpg"]
attribute: src
download:
selector: a[href^="details.php?name="]
attribute: href

View File

@@ -50,6 +50,10 @@ settings:
options:
created: created
seeders: seeders
- name: flaresolverr
type: info
label: FlareSolverr
default: This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href="https://github.com/Jackett/Jackett#configuring-flaresolverr" target="_blank">FlareSolver</a> to access it.
search:
# https://skytorrents.to/?search=mr+mercedes+s02e05&sort=created

View File

@@ -71,8 +71,8 @@ caps:
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
@@ -129,9 +129,9 @@ search:
- path: selection.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBIDShort }}{{ else }}{{ .Keywords }}{{ end }}"
# 0 name, 1 descr, 2 both, 3 imdb
blah: "{{ if .Query.IMDBID }}3{{ else }}0{{ end }}"
search: "{{ .Keywords }}"
# 0 name, 1 descr, 2 both
blah: "0"
orderby: "{{ .Config.sort }}"
sort: "{{ .Config.type }}"

View File

@@ -0,0 +1,178 @@
---
id: sugoimusic
name: SugoiMusic
description: "SugoiMusic is a Private Torrent Tracker for Asian MUSIC / TV"
language: en
type: private
encoding: UTF-8
links:
- https://sugoimusic.me/
caps:
categorymappings:
- {id: 1, cat: Audio, desc: Album}
- {id: 2, cat: Audio, desc: EP}
- {id: 3, cat: Audio, desc: Single}
- {id: 4, cat: Audio/Video, desc: Bluray}
- {id: 5, cat: Audio/Video, desc: DVD}
- {id: 6, cat: Audio/Video, desc: PV}
- {id: 7, cat: Audio/Video, desc: "Music Performance"}
- {id: 8, cat: Audio/Video, desc: "TV Music"}
- {id: 9, cat: TV, desc: "TV Variety"}
- {id: 10, cat: TV, desc: "TV Drama"}
- {id: 11, cat: Other, desc: Pictures}
- {id: 12, cat: Other/Misc, desc: Misc}
modes:
search: [q]
tv-search: [q, season, ep]
music-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: 2facode
type: text
label: 2FA code
- name: info_2fa
type: info
label: "About 2FA code"
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the SugoiMusic Web Site. Otherwise just leave it empty."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: time
options:
time: created
seeders: seeders
size: size
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Covers per page:</b> setting to <b>100</b> on your account profile.
login:
path: login.php
method: form
form: form[action="login.php"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
twofa: "{{ .Config.2facode }}"
login: ""
error:
- selector: span.warning
message:
selector: #text
test:
path: index.php
selector: a[href^="logout.php"]
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Keywords }}"
# we can only grab the first release if group_results=1
group_results: 0
action: basic
order_by: "{{ .Config.sort }}"
order_way: "{{ .Config.type }}"
# 0 normal, 1 freeleech, 2 neutral leech, 3 either
freetorrent: "{{ if .Config.freeleech }}1{{ else }}0{{ end }}"
searchsubmit: 1
rows:
selector: tr.torrent
fields:
category:
selector: div:nth-child(1)
case:
"div[title=\"Album\"]": 1
"div[title=\"EP\"]": 2
"div[title=\"Single\"]": 3
"div[title=\"Bluray\"]": 4
"div[title=\"DVD\"]": 5
"div[title=\"PV\"]": 6
"div[title=\"Music Performance\"]": 7
"div[title=\"TV Music\"]": 8
"div[title=\"TV Variety\"]": 9
"div[title=\"TV Drama\"]": 10
"div[title=\"Pictures\"]": 11
"div[title=\"Misc\"]": 12
_title_artist:
selector: div.torrent_artists > a
_title_name:
selector: a.torrent_name
_title_date:
selector: div.group_info.clear
filters:
- name: regexp
args: "(\\[.+?\\])"
title:
text: "{{ .Result._title_artist }} - {{ .Result._title_name }} {{ .Result._title_date }}"
details:
selector: a.torrent_name[href^="torrents.php?id="]
attribute: href
poster:
selector: img
attribute: src
filters:
- name: replace
args: ["/static/common/noartwork/nocover.png", ""]
download:
selector: span > a[href^="torrents.php?action=download&id="]
attribute: href
magnet:
# magnet links can be enabled/disabled in account settings
optional: true
selector: span > a[href^="magnet:?dn="]
attribute: href
date:
selector: span.time.tooltip
filters:
- name: timeago
size:
selector: td.number_column.nobr
files:
selector: td:nth-last-child(6)
seeders:
selector: td:nth-last-child(2)
leechers:
selector: td:nth-last-child(1)
grabs:
selector: td:nth-last-child(3)
downloadvolumefactor:
case:
div.torrent_info:contains("Freeleech"): 0
div.torrent_info:contains("Neutral Leech"): 0
"*": 1
uploadvolumefactor:
case:
div.torrent_info:contains("Neutral Leech"): 0
"*": 1
minimumratio:
text: 0.95
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
description:
selector: div.torrent_info
# NexusPHP Standard v1.5 Beta 4

View File

@@ -72,10 +72,12 @@ search:
inputs:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Keywords }}"
titleonly: 1
# 0 Exact, 1 Fuzzy, 3 Parsed, 4 Simple # 2 Pure is not used
nonboolean: 0
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])
filters:
- name: andmatch
fields:
category:

View File

@@ -115,6 +115,9 @@ search:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Keywords }}"
incldead: 1
titleonly: 1
# 0 Exact, 1 Fuzzy, 3 Parsed, 4 Simple # 2 Pure is not used
nonboolean: 0
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])

View File

@@ -89,6 +89,9 @@ search:
inputs:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Keywords }}"
titleonly: 1
# 0 Exact, 1 Fuzzy, 3 Parsed, 4 Simple # 2 Pure is not used
nonboolean: 0
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])

View File

@@ -70,11 +70,12 @@ search:
inputs:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Keywords }}"
titleonly: 1
# 0 Exact, 1 Fuzzy, 3 Parsed, 4 Simple # 2 Pure is not used
nonboolean: 0
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])
filters:
- name: andmatch
fields:
category:

View File

@@ -89,6 +89,9 @@ search:
inputs:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Keywords }}"
titleonly: 1
# 0 Exact, 1 Fuzzy, 3 Parsed, 4 Simple # 2 Pure is not used
nonboolean: 0
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])

View File

@@ -88,6 +88,9 @@ search:
inputs:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Keywords }}"
titleonly: 1
# 0 Exact, 1 Fuzzy, 3 Parsed, 4 Simple # 2 Pure is not used
nonboolean: 0
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])

View File

@@ -10,7 +10,7 @@ links:
- https://www.torlock.com/
- https://www.torlock2.com/
- https://www.torlock.icu/
- https://torlock.unblockit.dev/
- https://torlock.unblockit.ltd/
legacylinks:
- https://torlock.com/
- https://torlock.unblockit.pro/
@@ -22,6 +22,7 @@ legacylinks:
- https://torlock.unblockit.top/
- https://torlock.unblockit.lat/
- https://torlock.unblockit.app/
- https://torlock.unblockit.dev/
caps:
categorymappings:

View File

@@ -8,7 +8,7 @@ encoding: UTF-8
followredirect: true
links:
- https://www.torrentdownload.info/
- https://torrentdownload.unblockit.dev/
- https://torrentdownload.unblockit.ltd/
- https://torrentdownload.unblocked.monster/
legacylinks:
- https://torrentdownload.unblockit.pro/
@@ -29,6 +29,7 @@ legacylinks:
- https://torrentdownload.unblockit.lat/
- https://torrentdownload.unblockit.app/
- https://torrentdownload.unblocked.rest/
- https://torrentdownload.unblockit.dev/
caps:
categorymappings:

View File

@@ -9,7 +9,7 @@ followredirect: true
links:
- https://www.torrentdownloads.info/
- https://www.torrentdownloads.me/
- https://torrentdownloads.unblockit.dev/
- https://torrentdownloads.unblockit.ltd/
- https://torrentdownloads.unblocked.monster/
legacylinks:
- https://torrentdownloads.unblockit.pro/
@@ -30,6 +30,7 @@ legacylinks:
- https://torrentdownloads.unblockit.lat/
- https://torrentdownloads.unblockit.app/
- https://torrentdownloads.unblocked.rest/
- https://torrentdownloads.unblockit.dev/
caps:
categorymappings:

View File

@@ -9,7 +9,7 @@ followredirect: true
links:
- https://www.torrentfunk.com/
- https://www.torrentfunk2.com/
- https://torrentfunk.unblockit.dev/
- https://torrentfunk.unblockit.ltd/
legacylinks:
- https://torrentfunk.unblockit.pro/
- https://torrentfunk.unblockit.one/
@@ -20,6 +20,7 @@ legacylinks:
- https://torrentfunk.unblockit.top/
- https://torrentfunk.unblockit.lat/
- https://torrentfunk.unblockit.app/
- https://torrentfunk.unblockit.dev/
caps:
categorymappings:

View File

@@ -11,7 +11,7 @@ links:
- https://torrentgalaxy.mx/
- https://torrentgalaxy.su/
- https://torrentgalaxy.unblockninja.com/
- https://torrentgalaxy.unblockit.dev/
- https://torrentgalaxy.unblockit.ltd/
- https://tgx.unblocked.monster/
legacylinks:
- https://torrentgalaxy.org/ # redirects to *.to
@@ -35,6 +35,7 @@ legacylinks:
- https://torrentgalaxy.unblockit.app/
- https://torrentgalaxy.root.yt/
- https://tgx.unblocked.rest/
- https://torrentgalaxy.unblockit.dev/
caps:
categorymappings:

View File

@@ -36,6 +36,7 @@ caps:
- {id: 60, cat: TV/Sport, desc: "Sport"}
- {id: 53, cat: TV, desc: "TV Seriale"}
- {id: 56, cat: XXX, desc: "XXX"}
- {id: 70, cat: TV/Anime, desc: "Anime"}
modes:
search: [q]

View File

@@ -6,12 +6,12 @@ language: en-us
type: public
encoding: UTF-8
links:
- https://torrentparadise.la/
- https://torrentparadise.cl/
legacylinks:
- https://torrentparadise.org/
- https://torrentparadise.cl/
- https://torrentparadise.to/
- https://torrentparadise.cc/
- https://torrentparadise.la/
caps:
categories:

View File

@@ -7,7 +7,7 @@ type: public
encoding: UTF-8
followredirect: true
links:
- https://torrentview28.com/
- https://torrentview29.com/
legacylinks:
- https://torrentview.net/
- https://torrentview3.net/
@@ -35,6 +35,7 @@ legacylinks:
- https://torrentview25.com/
- https://torrentview26.com/
- https://torrentview27.com/
- https://torrentview28.com/
caps:
categorymappings:

View File

@@ -8,7 +8,8 @@ encoding: UTF-8
followredirect: true
links:
- https://torrentzwealmisr.onion.ly/
- https://torrentz.unblockit.dev/
- https://torrentz.unblockit.ltd/
- https://torrentz2.unblockninja.com/
legacylinks:
- https://torrentz.unblockit.pro/
- https://torrentz.unblockit.one/
@@ -30,9 +31,9 @@ legacylinks:
- https://torrentz2.is/ # Error: 503 Service Unavailable
- https://torrentsmirror.com/ # Error: 503 Service Unavailable
- https://torrentz.pl/ # Error: 503 Service Unavailable
- https://torrentz2.unblockninja.com/ # Error: 503 Service Unavailable
- https://torrentz.unblockit.app/ # -> *.dev
- https://torrentz2.unblocked.rest/ # Error: 503 Service Unavailable
- https://torrentz.unblockit.app/
- https://torrentz2.unblocked.rest/
- https://torrentz.unblockit.dev/
caps:
categorymappings:

View File

@@ -6,15 +6,15 @@ language: en-us
type: public
encoding: UTF-8
links:
- https://torrentz2k.xyz/
legacylinks:
- https://torrentz2k.pw/
legacylinks:
- https://torrentz2k.xyz/
caps:
categorymappings:
- {id: book, cat: Books, desc: Books}
- {id: film, cat: Movies, desc: Movies}
- {id: gamepad, cat: Console, desc: Games}
- {id: gamepad, cat: PC/Games, desc: Games}
- {id: list, cat: Other, desc: Other}
- {id: male, cat: XXX, desc: XXX}
- {id: music, cat: Audio, desc: "Music MP3"}
@@ -22,7 +22,7 @@ caps:
- {id: play-circle, cat: TV, desc: WEBTV}
- {id: smile-o, cat: TV/Anime, desc: Anime}
- {id: television, cat: TV, desc: TV}
- {id: wrench, cat: PC, desc: Software}
- {id: wrench, cat: PC, desc: Apps}
modes:
search: [q]
@@ -38,7 +38,7 @@ settings:
default: This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href="https://github.com/Jackett/Jackett#configuring-flaresolverr" target="_blank">FlareSolver</a> to access it.
search:
# https://torrentz2k.xyz/search/
# https://torrentz2k.pw/search/
paths:
- path: search/
method: post
@@ -49,8 +49,6 @@ search:
inputs:
q: "{{ if .Keywords }}{{ .Keywords }}{{ else }}:latest:{{ end }}"
category: all
x: 0
y: 0
keywordsfilters:
# the site uses % for wildcard
- name: re_replace
@@ -78,11 +76,14 @@ search:
selector: span.btntitle
attribute: title
details:
# details page is only accessible via form and post which Cardigann does not support.
text: "{{ .Config.sitelink }}"
download:
selector: a[href^="magnet:?xt="]
selector: a
attribute: href
infohash:
selector: a
attribute: href
filters:
- name: trim
args: "/"
date:
selector: td:nth-child(5)
filters:

View File

@@ -1,30 +1,22 @@
---
id: onlyscene
name: ONLYscene
description: "ONLYscene is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-fr
id: trackeros
name: Trackeros
description: "Trackeros is a Private SPANISH Tracker for HD MOVIES / TV / GENERAL"
language: es-es
type: private
encoding: UTF-8
links:
- https://www.onlyscene.org/
- https://trackeros.tk
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 5, cat: TV/Anime, desc: "Anime"}
- {id: 9, cat: TV/Anime, desc: "TV Anime"}
- {id: 10, cat: TV/Documentary, desc: "DOC"}
- {id: 12, cat: Other, desc: "Attente-Classement"}
- {id: 13, cat: PC/Games, desc: "jeux"}
- {id: 14, cat: Other, desc: "Dox"}
- {id: 15, cat: PC/0day, desc: "APPS"}
- {id: 16, cat: Books/Mags, desc: "Journaux-Mags"}
- {id: 17, cat: Books/EBook, desc: "Ebooks"}
- {id: 18, cat: TV, desc: "Spectacles"}
- {id: 19, cat: TV, desc: "TV Spectacles"}
- {id: 20, cat: TV/Documentary, desc: "TV DOC"}
- {id: 1, cat: Movies, desc: "Películas"}
- {id: 2, cat: TV, desc: "Series"}
- {id: 3, cat: Audio, desc: "Música"}
- {id: 4, cat: Console, desc: "Juegos"}
- {id: 7, cat: Audio/Video, desc: "Conciertos"}
- {id: 5, cat: PC, desc: "Aplicaciones"}
- {id: 6, cat: Other, desc: "Otros"}
modes:
search: [q]
@@ -44,25 +36,6 @@ settings:
type: checkbox
label: Search freeleech only
default: false
- name: multilang
type: checkbox
label: Replace MULTI by another language in release name
default: false
- name: multilanguage
type: select
label: Replace MULTI by this language
default: FRENCH
options:
FRENCH: FRENCH
MULTI.FRENCH: MULTI.FRENCH
ENGLISH: ENGLISH
MULTI.ENGLISH: MULTI.ENGLISH
VOSTFR: VOSTFR
MULTI.VOSTFR: MULTI.VOSTFR
- name: vostfr
type: checkbox
label: Replace VOSTFR with ENGLISH
default: false
- name: sort
type: select
label: Sort requested from site
@@ -130,43 +103,29 @@ search:
filters:
- name: regexp
args: "/categories/(\\d+)"
title_phase1:
title:
selector: a.view-torrent
filters:
- name: re_replace
args: ["([\\.]+)", " "]
title_multilang:
text: "{{ .Result.title_phase1 }}"
filters:
args: ["[\\[\\]]", " "] # remove [ and ]
- name: re_replace
args: ["(?i)(\\smulti\\s)", " {{ .Config.multilanguage }} "]
title_phase2:
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
title_vostfr:
text: "{{ .Result.title_phase2 }}"
filters:
args: [" +", " "] # remove duplicate spaces
- name: re_replace
args: ["(?i)(\\svostfr\\s)", " ENGLISH "]
args: ["(?i)microhd", "BDRip MicroHD"]
- name: re_replace
args: ["(?i)(\\ssubfrench\\s)", " ENGLISH "]
title:
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
args: ["(?i)(m1080p|mhd1080p)", "1080p MicroHD"]
- name: re_replace
args: ["(?i)(m720p|mhd720p)", "720p MicroHD"]
- name: re_replace
args: ["(?i)brrip", "BDRip"]
- name: append
args: " MULTi/SPANiSH" # Add language for Sonarr/Radarr
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: prepend
args: "https://images.weserv.nl/?url=" # for display on dashboard
- name: append
args: "&w=180&h=270" # for display on dashboard
- name: replace
args: ["https://images.weserv.nl/?url=https://via.placeholder.com/600x900&w=180&h=270", ""]
size:
selector: td:nth-last-child(4)
seeders:
@@ -178,12 +137,6 @@ search:
filters:
- name: regexp
args: (\d+)
imdb:
selector: a[href*="imdb.com/title/tt"]
attribute: href
tmdbid:
selector: a[href*="themoviedb.org/movie/"]
attribute: href
date:
selector: time
filters:
@@ -240,8 +193,8 @@ search:
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
minimumratio:
text: 1.0
text: 0.4
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# UNIT3D 2.3.0
# 32 hours => 32 * 60 * 60 seconds
text: 115200
# UNIT3D 4.x.x

View File

@@ -139,12 +139,14 @@ search:
- name: re_replace # eg Supergirl 2018 S04E01 ...
args: ["20[0-2][0-9] (S[0-9][0-9])", "$1"]
- name: replace
args: ["ESP", "Spanish"]
args: ["SPA", "SPANiSH"]
- name: replace
args: ["ESP", "SPANiSH"]
- name: re_replace
args: ["[EI]NG", "English"]
- name: replace
args: ["CAT", "Catalan"]
- name: replace
- name: re_replace
args: ["FR[AE]", "French"]
- name: replace
args: ["JAP", "Japanese"]
@@ -153,15 +155,17 @@ search:
- name: replace
args: ["RUS", "Russian"]
- name: replace
args: ["DUAL", "Spanish English"]
args: ["DUAL", "MULTi/SPANiSH"]
- name: replace
args: ["BDRIP 2160P", "Bluray-2160P"] # Fix for Radarr
- name: re_replace
args: ["MHD", "MHD.BDRip"] # Fix for Radarr
args: ["MHD", "MHD BDRIP"] # Fix for Radarr
- name: re_replace
args: ["WEB.DL", "WEBDL"] # Fix for Radarr
args: ["WEB DL", "WEBDL"] # Fix for Radarr
- name: re_replace
args: ["WEBDL.MHD.BDRip", "WEBDL"] # Fix for Radarr
args: ["WEBDL MHD BDRIP", "WEBDL"] # Fix for Radarr
- name: re_replace
args: ["WEBRIP.MHD.BDRip", "WEBRIP"] # Fix for Radarr
args: ["WEBRIP MHD BDRIP", "WEBRIP"] # Fix for Radarr
details:
selector: td[valign="middle"] a
attribute: href
@@ -196,6 +200,7 @@ search:
case:
img[src$="gold.png"]: 0
img[src$="silver.png"]: 0.5
img[src$="bronze.png"]: 0.25
"*": 1
uploadvolumefactor:
case:

View File

@@ -7,8 +7,7 @@ type: semi-private
encoding: UTF-8
followredirect: true
links:
- https://www.yggtorrent.si/
# don't forget to also change below in settings !
- https://www2.yggtorrent.si/
legacylinks:
- https://yggtorrent.com/
- https://ww1.yggtorrent.com/
@@ -34,6 +33,7 @@ legacylinks:
- https://www5.yggtorrent.pe/
- https://yggtorrent.ws/
- https://yggtorrent.se/
- https://www.yggtorrent.si/
caps:
categorymappings:
@@ -113,10 +113,6 @@ settings:
type: info
label: How to get the User-Agent
default: "<ol><li>From the same place you fetched the cookie,<li>Find <b>'user-agent:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole user-agent string <i>(everything after 'user-agent: ')</i> and <b>Paste</b> here.</ol>"
- name: searchanddlurl
label: Search and download URL
type: text
default: www2.yggtorrent.si
- name: category
type: select
label: Catégorie
@@ -214,11 +210,9 @@ search:
args: [" ", " "]
- name: trim
paths:
- path: "https://{{ .Config.searchanddlurl }}/{{ if .Config.betasearchengine }}new_search{{ else }}engine{{ end }}/search?category={{ .Config.category }}&name={{ if .Config.betasearchengine }}{{ .Keywords }}{{ else }}{{ re_replace .Keywords \"\\b[^\\s]+\\b\" \"\"$&\"\"}}{{ end }}&description=&file=&uploader=&sub_category=&do=search&order={{ .Config.type }}&sort={{ .Config.sort }}"
followredirect: true
- path: "{{ if .Config.betasearchengine }}new_search{{ else }}engine{{ end }}/search?category={{ .Config.category }}&name={{ if .Config.betasearchengine }}{{ .Keywords }}{{ else }}{{ re_replace .Keywords \"\\b[^\\s]+\\b\" \"\"$&\"\"}}{{ end }}&description=&file=&uploader=&sub_category=&do=search&order={{ .Config.type }}&sort={{ .Config.sort }}"
# Saison Word
- path: "https://{{ .Config.searchanddlurl }}/{{ if .Config.betasearchengine }}new_search{{ else }}engine{{ end }}/search?category={{ .Config.category }}&name={{ if .Keywords }}{{ re_replace .Keywords \"[sS]0(\\d{1,2})\" \"Saison.$1\"}}{{ else }}&page=50{{ end }}&description=&file=&uploader=&sub_category=&do=search&order={{ .Config.type }}&sort={{ .Config.sort }}"
followredirect: true
- path: "{{ if .Config.betasearchengine }}new_search{{ else }}engine{{ end }}/search?category={{ .Config.category }}&name={{ if .Keywords }}{{ re_replace .Keywords \"[sS]0(\\d{1,2})\" \"Saison.$1\"}}{{ else }}&page=50{{ end }}&description=&file=&uploader=&sub_category=&do=search&order={{ .Config.type }}&sort={{ .Config.sort }}"
rows:
selector: table.table > tbody > tr
@@ -299,7 +293,7 @@ search:
# changed the catid into and hidden div as of last tracker problem
selector: ":nth-child(1) > div.hidden"
download:
text: "https://{{ .Config.searchanddlurl }}/engine/download_torrent?id={{ .Result._id }}"
text: "{{ .Config.sitelink }}engine/download_torrent?id={{ .Result._id }}"
date:
selector: td:nth-child(5)
filters:

View File

@@ -7,8 +7,7 @@ type: semi-private
encoding: UTF-8
followredirect: true
links:
- https://www.yggtorrent.si/
# don't forget to also change below in settings !
- https://www2.yggtorrent.si/
legacylinks:
- https://yggtorrent.com/
- https://ww1.yggtorrent.com/
@@ -34,6 +33,7 @@ legacylinks:
- https://www5.yggtorrent.pe/
- https://yggtorrent.ws/
- https://yggtorrent.se/
- https://www.yggtorrent.si/
caps:
categorymappings:
@@ -98,10 +98,6 @@ caps:
book-search: [q]
settings:
- name: searchanddlurl
label: Search and download URL
type: text
default: www2.yggtorrent.si
- name: username
type: text
label: Username
@@ -175,13 +171,11 @@ settings:
default: This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href="https://github.com/Jackett/Jackett#configuring-flaresolverr" target="_blank">FlareSolver</a> to access it.
login:
method: form
path: /
form: "#user-login"
method: post
path: "/user/login"
inputs:
id: "{{ .Config.username }}"
pass: "{{ .Config.password }}"
submit: ""
error:
- selector: "#login_msg_pass[style=\"\"][style] > center"
- selector: "#ban_msg_login[style=\"\"][style] > center"
@@ -222,11 +216,9 @@ search:
args: [" ", " "]
- name: trim
paths:
- path: "https://{{ .Config.searchanddlurl }}/{{ if .Config.betasearchengine }}new_search{{ else }}engine{{ end }}/search?category={{ .Config.category }}&name={{ if .Config.betasearchengine }}{{ .Keywords }}{{ else }}{{ re_replace .Keywords \"\\b[^\\s]+\\b\" \"\"$&\"\"}}{{ end }}&description=&file=&uploader=&sub_category=&do=search&order={{ .Config.type }}&sort={{ .Config.sort }}"
followredirect: true
- path: "{{ if .Config.betasearchengine }}new_search{{ else }}engine{{ end }}/search?category={{ .Config.category }}&name={{ if .Config.betasearchengine }}{{ .Keywords }}{{ else }}{{ re_replace .Keywords \"\\b[^\\s]+\\b\" \"\"$&\"\"}}{{ end }}&description=&file=&uploader=&sub_category=&do=search&order={{ .Config.type }}&sort={{ .Config.sort }}"
# Saison Word
- path: "https://{{ .Config.searchanddlurl }}/{{ if .Config.betasearchengine }}new_search{{ else }}engine{{ end }}/search?category={{ .Config.category }}&name={{ if .Keywords }}{{ re_replace .Keywords \"[sS]0(\\d{1,2})\" \"Saison.$1\"}}{{ else }}&page=50{{ end }}&description=&file=&uploader=&sub_category=&do=search&order={{ .Config.type }}&sort={{ .Config.sort }}"
followredirect: true
- path: "{{ if .Config.betasearchengine }}new_search{{ else }}engine{{ end }}/search?category={{ .Config.category }}&name={{ if .Keywords }}{{ re_replace .Keywords \"[sS]0(\\d{1,2})\" \"Saison.$1\"}}{{ else }}&page=50{{ end }}&description=&file=&uploader=&sub_category=&do=search&order={{ .Config.type }}&sort={{ .Config.sort }}"
rows:
selector: table.table > tbody > tr
@@ -307,7 +299,7 @@ search:
# changed the catid into and hidden div as of last tracker problem
selector: ":nth-child(1) > div.hidden"
download:
text: "https://{{ .Config.searchanddlurl }}/engine/download_torrent?id={{ .Result._id }}"
text: "{{ .Config.sitelink }}engine/download_torrent?id={{ .Result._id }}"
date:
selector: td:nth-child(5)
filters:

View File

@@ -48,7 +48,7 @@ search:
- name: tolower
rows:
selector: tr.table-default
selector: tr.table-default:has(a[href^="/torrent/"])
filters:
- name: andmatch

View File

@@ -9,7 +9,7 @@ followredirect: true
links:
- https://zooqle.com/
- https://zooqle.unblockninja.com/
- https://zooqle.unblockit.dev/
- https://zooqle.unblockit.ltd/
- https://zooqle.unblocked.monster/
legacylinks:
- https://zooqle.unblockit.pro/
@@ -30,6 +30,7 @@ legacylinks:
- https://zooqle.unblockit.lat/
- https://zooqle.unblockit.app/
- https://zooqle.unblocked.rest/
- https://zooqle.unblockit.dev/
caps:
categorymappings:

View File

@@ -0,0 +1,184 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils;
using Jackett.Common.Utils.Clients;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
using WebClient = Jackett.Common.Utils.Clients.WebClient;
namespace Jackett.Common.Indexers.Abstract
{
[ExcludeFromCodeCoverage]
public abstract class SpeedAppTracker : BaseWebIndexer
{
private readonly Dictionary<string, string> _apiHeaders = new Dictionary<string, string>
{
{"Accept", "application/json"},
{"Content-Type", "application/json"}
};
// API DOC: https://speedapp.io/api/doc
private string LoginUrl => SiteLink + "api/login";
private string SearchUrl => SiteLink + "api/torrent";
private string _token;
private new ConfigurationDataBasicLoginWithEmail configData => (ConfigurationDataBasicLoginWithEmail)base.configData;
protected SpeedAppTracker(string link, string id, string name, string description,
IIndexerConfigurationService configService, WebClient client, Logger logger,
IProtectionService p, ICacheService cs, TorznabCapabilities caps)
: base(id: id,
name: name,
description: description,
link: link,
caps: caps,
configService: configService,
client: client,
logger: logger,
p: p,
cacheService: cs,
configData: new ConfigurationDataBasicLoginWithEmail())
{
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
LoadValuesFromJson(configJson);
await RenewalTokenAsync();
var releases = await PerformQuery(new TorznabQuery());
await ConfigureIfOK(string.Empty, releases.Any(),
() => throw new Exception("Could not find releases."));
return IndexerConfigurationStatus.Completed;
}
private async Task RenewalTokenAsync()
{
if (configData.Email.Value == null || configData.Password.Value == null)
throw new Exception("Please, check the indexer configuration.");
var body = new Dictionary<string, string>
{
{ "username", configData.Email.Value.Trim() },
{ "password", configData.Password.Value.Trim() }
};
var jsonData = JsonConvert.SerializeObject(body);
var result = await RequestWithCookiesAsync(
LoginUrl, method: RequestType.POST, headers: _apiHeaders, rawbody: jsonData);
var json = JObject.Parse(result.ContentString);
_token = json.Value<string>("token");
if (_token == null)
throw new Exception(json.Value<string>("message"));
}
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
var releases = new List<ReleaseInfo>();
//var categoryMapping = MapTorznabCapsToTrackers(query).Distinct().ToList();
var qc = new List<KeyValuePair<string, string>> // NameValueCollection don't support cat[]=19&cat[]=6
{
{"itemsPerPage", "100"},
{"sort", "torrent.createdAt"},
{"direction", "desc"}
};
foreach (var cat in MapTorznabCapsToTrackers(query))
qc.Add("categories[]", cat);
if (query.IsImdbQuery)
qc.Add("imdbId", query.ImdbID);
else
qc.Add("search", query.GetQueryString());
if (string.IsNullOrWhiteSpace(_token)) // fist time login
await RenewalTokenAsync();
var searchUrl = SearchUrl + "?" + qc.GetQueryString();
var response = await RequestWithCookiesAsync(searchUrl, headers: GetSearchHeaders());
if (response.Status == HttpStatusCode.Unauthorized)
{
await RenewalTokenAsync(); // re-login
response = await RequestWithCookiesAsync(searchUrl, headers: GetSearchHeaders());
}
else if (response.Status != HttpStatusCode.OK)
throw new Exception($"Unknown error in search: {response.ContentString}");
try
{
var rows = JArray.Parse(response.ContentString);
foreach (var row in rows)
{
var id = row.Value<string>("id");
var details = new Uri($"{SiteLink}browse/{id}");
var link = new Uri($"{SiteLink}api/torrent/{id}/download");
var publishDate = DateTime.Parse(row.Value<string>("created_at"), CultureInfo.InvariantCulture);
var cat = row.Value<JToken>("category").Value<string>("id");
// "description" field in API has too much HTML code
var description = row.Value<string>("short_description");
var posterStr = row.Value<string>("poster");
var poster = Uri.TryCreate(posterStr, UriKind.Absolute, out var posterUri) ? posterUri : null;
var dlVolumeFactor = row.Value<double>("download_volume_factor");
var ulVolumeFactor = row.Value<double>("upload_volume_factor");
var release = new ReleaseInfo
{
Title = row.Value<string>("name"),
Link = link,
Details = details,
Guid = details,
Category = MapTrackerCatToNewznab(cat),
PublishDate = publishDate,
Description = description,
Poster = poster,
Size = row.Value<long>("size"),
Grabs = row.Value<long>("times_completed"),
Seeders = row.Value<int>("seeders"),
Peers = row.Value<int>("leechers") + row.Value<int>("seeders"),
DownloadVolumeFactor = dlVolumeFactor,
UploadVolumeFactor = ulVolumeFactor,
MinimumRatio = 1,
MinimumSeedTime = 172800 // 48 hours
};
releases.Add(release);
}
}
catch (Exception ex)
{
OnParseError(response.ContentString, ex);
}
return releases;
}
public override async Task<byte[]> Download(Uri link)
{
var response = await RequestWithCookiesAsync(link.ToString(), headers: GetSearchHeaders());
if (response.Status == HttpStatusCode.Unauthorized)
{
await RenewalTokenAsync();
response = await RequestWithCookiesAsync(link.ToString(), headers: GetSearchHeaders());
}
else if (response.Status != HttpStatusCode.OK)
throw new Exception($"Unknown error in download: {response.ContentBytes}");
return response.ContentBytes;
}
private Dictionary<string, string> GetSearchHeaders() => new Dictionary<string, string>
{
{"Authorization", $"Bearer {_token}"}
};
}
}

View File

@@ -45,12 +45,13 @@ namespace Jackett.Common.Indexers
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://epublibre.org/",
"https://epublibre.unblockit.dev/"
"https://epublibre.unblockit.ltd/"
};
public override string[] LegacySiteLinks { get; protected set; } = {
"https://epublibre.unblockit.lat/",
"https://epublibre.unblockit.app/"
"https://epublibre.unblockit.app/",
"https://epublibre.unblockit.dev/"
};
public EpubLibre(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps,

View File

@@ -24,7 +24,7 @@ namespace Jackett.Common.Indexers
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://iptorrents.com/",
"https://www.iptorrents.com/",
"https://iptorrents.eu/",
"https://iptorrents.me/",
"https://nemo.iptorrents.com/",
"https://ipt.getcrazy.me/",
"https://ipt.findnemo.net/",
@@ -44,7 +44,8 @@ namespace Jackett.Common.Indexers
"http://ghost.cable-modem.org/",
"http://logan.unusualperson.com/",
"https://ipt.rocks/",
"http://baywatch.workisboring.com/"
"http://baywatch.workisboring.com/",
"https://iptorrents.eu/"
};
private new ConfigurationDataCookie configData => (ConfigurationDataCookie)base.configData;

View File

@@ -41,7 +41,8 @@ namespace Jackett.Common.Indexers
"http://www.mejortorrent.tv/",
"http://www.mejortorrentt.com/",
"https://www.mejortorrentt.org/",
"http://www.mejortorrentt.org/"
"http://www.mejortorrentt.org/",
"https://www.mejortorrents.net/"
};
public MejorTorrent(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps,
@@ -49,7 +50,7 @@ namespace Jackett.Common.Indexers
: base(id: "mejortorrent",
name: "MejorTorrent",
description: "MejorTorrent - Hay veces que un torrent viene mejor! :)",
link: "https://www.mejortorrents.net/",
link: "https://www.mejortorrents1.com/",
caps: new TorznabCapabilities
{
TvSearchParams = new List<TvSearchParam>

View File

@@ -1,248 +0,0 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Text;
using System.Threading.Tasks;
using AngleSharp.Dom;
using AngleSharp.Html.Parser;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils;
using Jackett.Common.Utils.Clients;
using Newtonsoft.Json.Linq;
using NLog;
namespace Jackett.Common.Indexers
{
[ExcludeFromCodeCoverage]
public class NewRealWorld : BaseWebIndexer
{
private string LoginUrl => SiteLink + "login.php";
private string BrowseUrl => SiteLink + "browse.php";
private new ConfigurationDataBasicLoginWithRSSAndDisplay configData
{
get => (ConfigurationDataBasicLoginWithRSSAndDisplay)base.configData;
set => base.configData = value;
}
public NewRealWorld(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps,
ICacheService cs)
: base(id: "newrealworld",
name: "New Real World",
description: "A German general tracker.",
link: "https://nrw-tracker.eu/",
caps: new TorznabCapabilities
{
TvSearchParams = new List<TvSearchParam>
{
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
},
MovieSearchParams = new List<MovieSearchParam>
{
MovieSearchParam.Q
},
MusicSearchParams = new List<MusicSearchParam>
{
MusicSearchParam.Q
},
BookSearchParams = new List<BookSearchParam>
{
BookSearchParam.Q
}
},
configService: configService,
client: wc,
logger: l,
p: ps,
cacheService: cs,
configData: new ConfigurationDataBasicLoginWithRSSAndDisplay())
{
Encoding = Encoding.GetEncoding("iso-8859-1");
Language = "de-de";
Type = "private";
AddCategoryMapping(39, TorznabCatType.TVAnime, "Anime: HD|1080p");
AddCategoryMapping(38, TorznabCatType.TVAnime, "Anime: HD|720p");
AddCategoryMapping(1, TorznabCatType.TVAnime, "Anime: SD");
AddCategoryMapping(7, TorznabCatType.PCMobileOther, "Appz: Handy-PDA");
AddCategoryMapping(36, TorznabCatType.PCMac, "Appz: Mac");
AddCategoryMapping(18, TorznabCatType.PC, "Appz: Sonstiges");
AddCategoryMapping(17, TorznabCatType.PC, "Appz: Win");
AddCategoryMapping(15, TorznabCatType.Audio, "Audio: DVD-R");
AddCategoryMapping(49, TorznabCatType.AudioLossless, "Audio: Flac");
AddCategoryMapping(30, TorznabCatType.AudioAudiobook, "Audio: Hörspiele");
AddCategoryMapping(14, TorznabCatType.AudioMP3, "Audio: MP3");
AddCategoryMapping(22, TorznabCatType.AudioVideo, "Audio: Videoclip");
AddCategoryMapping(19, TorznabCatType.Other, "Diverses: Sonstiges");
AddCategoryMapping(43, TorznabCatType.TVDocumentary, "Dokus: HD");
AddCategoryMapping(2, TorznabCatType.TVDocumentary, "Dokus: SD");
AddCategoryMapping(3, TorznabCatType.Books, "Ebooks: Bücher");
AddCategoryMapping(52, TorznabCatType.BooksComics, "Ebooks: Comics");
AddCategoryMapping(53, TorznabCatType.BooksMags, "Ebooks: Magazine");
AddCategoryMapping(55, TorznabCatType.BooksOther, "Ebooks: XXX");
AddCategoryMapping(54, TorznabCatType.BooksOther, "Ebooks: Zeitungen");
AddCategoryMapping(47, TorznabCatType.PCMobileOther, "Games: Andere");
AddCategoryMapping(32, TorznabCatType.PCMac, "Games: Mac");
AddCategoryMapping(41, TorznabCatType.ConsoleNDS, "Games: NDS/3DS");
AddCategoryMapping(4, TorznabCatType.PCGames, "Games: PC");
AddCategoryMapping(5, TorznabCatType.ConsolePS3, "Games: PS2");
AddCategoryMapping(9, TorznabCatType.ConsolePS3, "Games: PS3");
AddCategoryMapping(6, TorznabCatType.ConsolePSP, "Games: PSP");
AddCategoryMapping(28, TorznabCatType.ConsoleWii, "Games: Wii");
AddCategoryMapping(31, TorznabCatType.ConsoleXBox, "Games: XboX");
AddCategoryMapping(51, TorznabCatType.Movies3D, "Movies: 3D");
AddCategoryMapping(37, TorznabCatType.MoviesBluRay, "Movies: BluRay");
AddCategoryMapping(25, TorznabCatType.MoviesHD, "Movies: HD|1080p");
AddCategoryMapping(29, TorznabCatType.MoviesHD, "Movies: HD|720p");
AddCategoryMapping(11, TorznabCatType.MoviesDVD, "Movies: SD|DVD-R");
AddCategoryMapping(8, TorznabCatType.MoviesSD, "Movies: SD|x264");
AddCategoryMapping(13, TorznabCatType.MoviesSD, "Movies: SD|XviD");
AddCategoryMapping(40, TorznabCatType.MoviesForeign, "Movies: US Movies");
AddCategoryMapping(33, TorznabCatType.TV, "Serien: DVD-R");
AddCategoryMapping(34, TorznabCatType.TVHD, "Serien: HD");
AddCategoryMapping(56, TorznabCatType.TVHD, "Serien: Packs|HD");
AddCategoryMapping(44, TorznabCatType.TVSD, "Serien: Packs|SD");
AddCategoryMapping(16, TorznabCatType.TVSD, "Serien: SD");
AddCategoryMapping(10, TorznabCatType.TVOther, "Serien: TV/Shows");
AddCategoryMapping(21, TorznabCatType.TVForeign, "Serien: US TV");
AddCategoryMapping(24, TorznabCatType.TVSport, "Sport: Diverses");
AddCategoryMapping(23, TorznabCatType.TVSport, "Sport: Wrestling");
AddCategoryMapping(57, TorznabCatType.Movies, "Tracker - Crew: pmHD");
AddCategoryMapping(58, TorznabCatType.MoviesHD, "Ultra-HD: 4K");
AddCategoryMapping(46, TorznabCatType.XXXOther, "XXX: Diverses");
AddCategoryMapping(50, TorznabCatType.XXX, "XXX: HD");
AddCategoryMapping(45, TorznabCatType.XXXPack, "XXX: Packs");
AddCategoryMapping(27, TorznabCatType.XXX, "XXX: SD");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
LoadValuesFromJson(configJson);
var pairs = new Dictionary<string, string>
{
{ "username", configData.Username.Value },
{ "password", configData.Password.Value },
{ "submit", "Log+in!" }
};
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, LoginUrl, true);
await ConfigureIfOK(result.Cookies, result.ContentString != null && result.ContentString.Contains("logout.php"), () =>
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(result.ContentString);
var errorMessage = dom.QuerySelector("table.tableinborder").InnerHtml;
throw new ExceptionWithConfigData(errorMessage, configData);
});
return IndexerConfigurationStatus.RequiresTesting;
}
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
var startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0), 3, 5, DayOfWeek.Sunday);
var endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 4, 0, 0), 10, 5, DayOfWeek.Sunday);
var delta = new TimeSpan(1, 0, 0);
var adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1999, 10, 1), DateTime.MaxValue.Date, delta, startTransition, endTransition);
TimeZoneInfo.AdjustmentRule[] adjustments = { adjustment };
var germanyTz = TimeZoneInfo.CreateCustomTimeZone("W. Europe Standard Time", new TimeSpan(1, 0, 0), "(GMT+01:00) W. Europe Standard Time", "W. Europe Standard Time", "W. Europe DST Time", adjustments);
var releases = new List<ReleaseInfo>();
var searchString = query.GetQueryString();
var searchUrl = BrowseUrl;
var queryCollection = new NameValueCollection
{
{"showsearch", "1"},
{"incldead", "1"},
{"orderby", "added"},
{"sort", "desc"},
{"cat", MapTorznabCapsToTrackers(query).FirstIfSingleOrDefault("0")}
};
if (!string.IsNullOrWhiteSpace(searchString))
{
queryCollection.Add("search", searchString);
}
searchUrl += "?" + queryCollection.GetQueryString();
var response = await RequestWithCookiesAsync(searchUrl);
if (response.IsRedirect)
{
// re-login
await ApplyConfiguration(null);
response = await RequestWithCookiesAsync(searchUrl);
}
try
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.ContentString);
var rows = dom.QuerySelectorAll("table.testtable> tbody > tr:has(td.tableb)");
foreach (var row in rows)
{
var qDetailsLink = row.QuerySelector("a[href^=\"details.php?id=\"]");
var title = qDetailsLink.TextContent;
if (!query.MatchQueryStringAND(title))
continue;
var qCatLink = row.QuerySelector("a[href^=\"browse.php?cat=\"]");
var qSeeders = row.QuerySelector("td > table.testtable2 > tbody > tr > td:nth-of-type(2) > strong:nth-of-type(1)");
var qLeechers = row.QuerySelector("td > table.testtable2 > tbody > tr > td:nth-of-type(2) > strong:nth-of-type(2)");
var qDateStr = row.QuerySelector("td > table.testtable2 > tbody > tr > td:nth-of-type(5)");
var qSize = row.QuerySelector("td > table.testtable2 > tbody > tr > td:nth-of-type(1) > strong:nth-of-type(1)");
var qDownloadLink = row.QuerySelector("a[href*=\"download\"]");
var catStr = qCatLink.GetAttribute("href").Split('=')[1];
var dlLink = qDownloadLink.GetAttribute("href");
if (dlLink.Contains("javascript")) // depending on the user agent the DL link is a javascript call
{
var dlLinkParts = dlLink.Split(new[] { '\'', ',' });
dlLink = SiteLink + "download/" + dlLinkParts[3] + "/" + dlLinkParts[5];
}
var link = new Uri(dlLink);
var seeders = ParseUtil.CoerceInt(qSeeders.Text());
var dateStr = qDateStr.TextContent.Replace('\xA0', ' ');
var dateGerman = DateTime.SpecifyKind(DateTime.ParseExact(dateStr, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture), DateTimeKind.Unspecified);
var pubDateUtc = TimeZoneInfo.ConvertTimeToUtc(dateGerman, germanyTz);
var files = ParseUtil.CoerceInt(row.QuerySelector("td:contains(Datei) > strong ~ strong").TextContent);
var details = new Uri(SiteLink + qDetailsLink.GetAttribute("href"));
var leechers = ParseUtil.CoerceInt(qLeechers.Text());
var size = ReleaseInfo.GetBytes(qSize.TextContent.Replace(".", "").Replace(",", "."));
var downloadVolumeFactor = row.QuerySelector("img[title=\"OnlyUpload\"]") != null ? 0 : 1;
var release = new ReleaseInfo
{
MinimumRatio = 0.75,
MinimumSeedTime = 0,
Title = title,
Category = MapTrackerCatToNewznab(catStr),
Link = link,
Details = details,
Guid = link,
Size = size,
Seeders = seeders,
Peers = leechers + seeders,
PublishDate = pubDateUtc,
Files = files,
DownloadVolumeFactor = downloadVolumeFactor,
UploadVolumeFactor = 1
};
releases.Add(release);
}
}
catch (Exception ex)
{
OnParseError(response.ContentString, ex);
}
return releases;
}
}
}

View File

@@ -1,50 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Jackett.Common.Indexers.Abstract;
using Jackett.Common.Models;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils.Clients;
using NLog;
namespace Jackett.Common.Indexers
{
[ExcludeFromCodeCoverage]
public class PsyTorrents : GazelleTracker
{
public PsyTorrents(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps,
ICacheService cs)
: base(id: "psytorrents",
name: "Psytorrents",
description: "Psytorrents (PSY) is a Private Torrent Tracker for ELECTRONIC MUSIC",
link: "https://psytorrents.info/",
caps: new TorznabCapabilities
{
MovieSearchParams = new List<MovieSearchParam>
{
MovieSearchParam.Q
},
MusicSearchParams = new List<MusicSearchParam>
{
MusicSearchParam.Q
}
},
configService: configService,
client: wc,
logger: l,
p: ps,
cs: cs,
supportsFreeleechTokens: true)
{
Language = "en-us";
Type = "private";
webclient.AddTrustedCertificate(new Uri(SiteLink).Host, "B52C043ABDE7AFB2231E162B1DD468758AEEE307");
webclient.AddTrustedCertificate(new Uri(SiteLink).Host, "AAA3E062739F3733FE659BA4A89E55E4EB48063B");
AddCategoryMapping(1, TorznabCatType.Audio, "Music");
AddCategoryMapping(2, TorznabCatType.Movies, "Movies");
AddCategoryMapping(3, TorznabCatType.PC0day, "App");
}
}
}

View File

@@ -0,0 +1,66 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Text;
using Jackett.Common.Indexers.Abstract;
using Jackett.Common.Models;
using Jackett.Common.Services.Interfaces;
using NLog;
using WebClient = Jackett.Common.Utils.Clients.WebClient;
namespace Jackett.Common.Indexers
{
[ExcludeFromCodeCoverage]
public class RetroFlix : SpeedAppTracker
{
public override string[] LegacySiteLinks { get; protected set; } = {
"https://retroflix.net/"
};
public RetroFlix(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps,
ICacheService cs)
: base(
id: "retroflix",
name: "RetroFlix",
description: "Private Torrent Tracker for Classic Movies / TV / General Releases",
link: "https://retroflix.club/",
caps: new TorznabCapabilities
{
TvSearchParams = new List<TvSearchParam>
{
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep, TvSearchParam.ImdbId
},
MovieSearchParams = new List<MovieSearchParam>
{
MovieSearchParam.Q, MovieSearchParam.ImdbId
},
MusicSearchParams = new List<MusicSearchParam>
{
MusicSearchParam.Q
},
BookSearchParams = new List<BookSearchParam>
{
BookSearchParam.Q
}
},
configService: configService,
client: wc,
logger: l,
p: ps,
cs: cs)
{
Encoding = Encoding.UTF8;
Language = "en-us";
Type = "private";
// requestDelay for API Limit (1 request per 2 seconds)
webclient.requestDelay = 2.1;
AddCategoryMapping(401, TorznabCatType.Movies, "Movies");
AddCategoryMapping(402, TorznabCatType.TV, "TV Series");
AddCategoryMapping(406, TorznabCatType.AudioVideo, "Music Videos");
AddCategoryMapping(407, TorznabCatType.TVSport, "Sports");
AddCategoryMapping(409, TorznabCatType.Books, "Books");
AddCategoryMapping(408, TorznabCatType.Audio, "HQ Audio");
}
}
}

View File

@@ -1,38 +1,17 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Jackett.Common.Indexers.Abstract;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils;
using Jackett.Common.Utils.Clients;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
using WebClient = Jackett.Common.Utils.Clients.WebClient;
namespace Jackett.Common.Indexers
{
[ExcludeFromCodeCoverage]
public class SpeedApp : BaseWebIndexer
public class SpeedApp : SpeedAppTracker
{
private readonly Dictionary<string, string> _apiHeaders = new Dictionary<string, string>
{
{"Accept", "application/json"},
{"Content-Type", "application/json"}
};
// API DOC: https://speedapp.io/api/doc
private string LoginUrl => SiteLink + "api/login";
private string SearchUrl => SiteLink + "api/torrent";
private string _token;
private new ConfigurationDataBasicLoginWithEmail configData => (ConfigurationDataBasicLoginWithEmail)base.configData;
public override string[] LegacySiteLinks { get; protected set; } = {
"https://www.icetorrent.org/",
"https://icetorrent.org/",
@@ -74,8 +53,7 @@ namespace Jackett.Common.Indexers
client: wc,
logger: l,
p: ps,
cacheService: cs,
configData: new ConfigurationDataBasicLoginWithEmail())
cs: cs)
{
Encoding = Encoding.UTF8;
Language = "ro-ro";
@@ -128,136 +106,5 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(50, TorznabCatType.XXX, "XXX Packs");
AddCategoryMapping(51, TorznabCatType.XXX, "XXX SD");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
LoadValuesFromJson(configJson);
await RenewalTokenAsync();
var releases = await PerformQuery(new TorznabQuery());
await ConfigureIfOK(string.Empty, releases.Any(),
() => throw new Exception("Could not find releases."));
return IndexerConfigurationStatus.Completed;
}
private async Task RenewalTokenAsync()
{
var body = new Dictionary<string, string>
{
{ "username", configData.Email.Value.Trim() },
{ "password", configData.Password.Value.Trim() }
};
var jsonData = JsonConvert.SerializeObject(body);
var result = await RequestWithCookiesAsync(
LoginUrl, method: RequestType.POST, headers: _apiHeaders, rawbody: jsonData);
var json = JObject.Parse(result.ContentString);
_token = json.Value<string>("token");
if (_token == null)
throw new Exception(json.Value<string>("message"));
}
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
var releases = new List<ReleaseInfo>();
//var categoryMapping = MapTorznabCapsToTrackers(query).Distinct().ToList();
var qc = new List<KeyValuePair<string, string>> // NameValueCollection don't support cat[]=19&cat[]=6
{
{"itemsPerPage", "100"},
{"sort", "torrent.createdAt"},
{"direction", "desc"}
};
foreach (var cat in MapTorznabCapsToTrackers(query))
qc.Add("categories[]", cat);
if (query.IsImdbQuery)
qc.Add("imdbId", query.ImdbID);
else
qc.Add("search", query.GetQueryString());
if (string.IsNullOrWhiteSpace(_token)) // fist time login
await RenewalTokenAsync();
var searchUrl = SearchUrl + "?" + qc.GetQueryString();
var response = await RequestWithCookiesAsync(searchUrl, headers: GetSearchHeaders());
if (response.Status == HttpStatusCode.Unauthorized)
{
await RenewalTokenAsync(); // re-login
response = await RequestWithCookiesAsync(searchUrl, headers: GetSearchHeaders());
}
else if (response.Status != HttpStatusCode.OK)
throw new Exception($"Unknown error in search: {response.ContentString}");
try
{
var rows = JArray.Parse(response.ContentString);
foreach (var row in rows)
{
var id = row.Value<string>("id");
var details = new Uri($"{SiteLink}browse/{id}");
var link = new Uri($"{SiteLink}api/torrent/{id}/download");
var publishDate = DateTime.Parse(row.Value<string>("created_at"), CultureInfo.InvariantCulture);
var cat = row.Value<JToken>("category").Value<string>("id");
// "description" field in API has too much HTML code
var description = row.Value<string>("short_description");
var posterStr = row.Value<string>("poster");
var poster = Uri.TryCreate(posterStr, UriKind.Absolute, out var posterUri) ? posterUri : null;
var dlVolumeFactor = row.Value<bool>("is_half_download") ? 0.5: 1.0;
dlVolumeFactor = row.Value<bool>("is_freeleech") ? 0.0 : dlVolumeFactor;
var ulVolumeFactor = row.Value<bool>("is_double_upload") ? 2.0: 1.0;
var release = new ReleaseInfo
{
Title = row.Value<string>("name"),
Link = link,
Details = details,
Guid = details,
Category = MapTrackerCatToNewznab(cat),
PublishDate = publishDate,
Description = description,
Poster = poster,
Size = row.Value<long>("size"),
Grabs = row.Value<long>("times_completed"),
Seeders = row.Value<int>("seeders"),
Peers = row.Value<int>("leechers") + row.Value<int>("seeders"),
DownloadVolumeFactor = dlVolumeFactor,
UploadVolumeFactor = ulVolumeFactor,
MinimumRatio = 1,
MinimumSeedTime = 172800 // 48 hours
};
releases.Add(release);
}
}
catch (Exception ex)
{
OnParseError(response.ContentString, ex);
}
return releases;
}
public override async Task<byte[]> Download(Uri link)
{
var response = await RequestWithCookiesAsync(link.ToString(), headers: GetSearchHeaders());
if (response.Status == HttpStatusCode.Unauthorized)
{
await RenewalTokenAsync();
response = await RequestWithCookiesAsync(link.ToString(), headers: GetSearchHeaders());
}
else if (response.Status != HttpStatusCode.OK)
throw new Exception($"Unknown error in download: {response.ContentBytes}");
return response.ContentBytes;
}
private Dictionary<string, string> GetSearchHeaders() => new Dictionary<string, string>
{
{"Authorization", $"Bearer {_token}"}
};
}
}

View File

@@ -27,7 +27,8 @@ namespace Jackett.Common.Indexers
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://speed.cd/",
"https://speed.click/"
"https://speed.click/",
"https://speeders.me/"
};
private new ConfigurationDataBasicLogin configData => (ConfigurationDataBasicLogin)base.configData;

View File

@@ -0,0 +1,182 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
namespace Jackett.Common.Indexers
{
[ExcludeFromCodeCoverage]
public class SubsPlease : BaseWebIndexer
{
private string ApiEndpoint => SiteLink + "/api/?";
public SubsPlease(IIndexerConfigurationService configService, Utils.Clients.WebClient wc, Logger l, IProtectionService ps, ICacheService cs)
: base(id: "subsplease",
name: "SubsPlease",
description: "SubsPlease - A better HorribleSubs/Erai replacement",
link: "https://subsplease.org/",
caps: new TorznabCapabilities
{
TvSearchParams = new List<TvSearchParam>
{
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
}
},
configService: configService,
client: wc,
logger: l,
p: ps,
cacheService: cs,
configData: new ConfigurationData())
{
Encoding = Encoding.UTF8;
Language = "en-us";
Type = "public";
// Configure the category mappings
AddCategoryMapping(1, TorznabCatType.TVAnime, "Anime");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
LoadValuesFromJson(configJson);
var releases = await PerformQuery(new TorznabQuery());
await ConfigureIfOK(string.Empty, releases.Any(), () =>
throw new Exception("Could not find releases from this URL"));
return IndexerConfigurationStatus.Completed;
}
// If the search string is empty use the latest releases
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
=> query.IsTest || string.IsNullOrWhiteSpace(query.SearchTerm)
? await FetchNewReleases()
: await PerformSearch(query);
private async Task<IEnumerable<ReleaseInfo>> PerformSearch(TorznabQuery query)
{
// If the search terms contain [SubsPlease] or SubsPlease, remove them from the query sent to the API
string searchTerm = Regex.Replace(query.SearchTerm, "\\[?SubsPlease\\]?\\s*", string.Empty, RegexOptions.IgnoreCase).Trim();
// If the search terms contain a resolution, remove it from the query sent to the API
Match resMatch = Regex.Match(searchTerm, "\\d{3,4}[p|P]");
if (resMatch.Success)
searchTerm = searchTerm.Replace(resMatch.Value, string.Empty);
var queryParameters = new NameValueCollection
{
{ "f", "search" },
{ "tz", "America/New_York" },
{ "s", searchTerm }
};
var response = await RequestWithCookiesAndRetryAsync(ApiEndpoint + queryParameters.GetQueryString());
if (response.Status != HttpStatusCode.OK)
throw new WebException($"SubsPlease search returned unexpected result. Expected 200 OK but got {response.Status}.", WebExceptionStatus.ProtocolError);
var results = ParseApiResults(response.ContentString);
var filteredResults = results.Where(release => query.MatchQueryStringAND(release.Title));
// If we detected a resolution in the search terms earlier, filter by it
if (resMatch.Success)
filteredResults = filteredResults.Where(release => release.Title.IndexOf(resMatch.Value, StringComparison.OrdinalIgnoreCase) >= 0);
return filteredResults;
}
private async Task<IEnumerable<ReleaseInfo>> FetchNewReleases()
{
var queryParameters = new NameValueCollection
{
{ "f", "latest" },
{ "tz", "America/New_York" }
};
var response = await RequestWithCookiesAndRetryAsync(ApiEndpoint + queryParameters.GetQueryString());
if (response.Status != HttpStatusCode.OK)
throw new WebException($"SubsPlease search returned unexpected result. Expected 200 OK but got {response.Status}.", WebExceptionStatus.ProtocolError);
return ParseApiResults(response.ContentString);
}
private List<ReleaseInfo> ParseApiResults(string json)
{
var releaseInfo = new List<ReleaseInfo>();
// When there are no results, the API returns an empty array or empty response instead of an object
if (string.IsNullOrWhiteSpace(json) || json == "[]")
return releaseInfo;
var releases = JsonConvert.DeserializeObject<Dictionary<string, Release>>(json);
foreach (var keyValue in releases)
{
Release r = keyValue.Value;
var baseRelease = new ReleaseInfo
{
Details = new Uri(SiteLink + $"shows/{r.Page}/"),
PublishDate = r.Release_Date.DateTime,
Files = 1,
Category = new List<int> { TorznabCatType.TVAnime.ID },
Seeders = 1,
Peers = 2,
MinimumRatio = 1,
MinimumSeedTime = 172800, // 48 hours
DownloadVolumeFactor = 0,
UploadVolumeFactor = 1
};
foreach (var d in r.Downloads)
{
var release = (ReleaseInfo)baseRelease.Clone();
// Ex: [SubsPlease] Shingeki no Kyojin (The Final Season) - 64 (1080p)
release.Title += $"[SubsPlease] {r.Show} - {r.Episode} ({d.Res}p)";
release.MagnetUri = new Uri(d.Magnet);
release.Link = null;
release.Guid = new Uri(d.Magnet);
// The API doesn't tell us file size, so give an estimate based on resolution
if(string.Equals(d.Res, "1080"))
release.Size = 1395864371; // 1.3GB
else if (string.Equals(d.Res, "720"))
release.Size = 734003200; // 700MB
else if (string.Equals(d.Res, "480"))
release.Size = 367001600; // 350MB
else
release.Size = 1073741824; // 1GB
releaseInfo.Add(release);
}
}
return releaseInfo;
}
public class Release
{
public string Time { get; set; }
public DateTimeOffset Release_Date { get; set; }
public string Show { get; set; }
public string Episode { get; set; }
public DownloadInfo[] Downloads { get; set; }
public string Xdcc { get; set; }
public string ImageUrl { get; set; }
public string Page { get; set; }
}
public class DownloadInfo
{
public string Res { get; set; }
public string Magnet { get; set; }
}
}
}

View File

@@ -22,7 +22,6 @@ namespace Jackett.Common.Indexers
private string SearchUrl => SiteLink + "t.json";
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://tday.love/",
"https://torrentday.cool/",
"https://secure.torrentday.com/",
"https://classic.torrentday.com/",
@@ -41,7 +40,8 @@ namespace Jackett.Common.Indexers
"https://td-update.com/", // redirect to https://www.torrentday.com/
"https://www.torrentday.me/",
"https://www.torrentday.ru/",
"https://www.td.af/"
"https://www.td.af/",
"https://tday.love/"
};
private new ConfigurationDataCookie configData => (ConfigurationDataCookie)base.configData;
@@ -51,7 +51,7 @@ namespace Jackett.Common.Indexers
: base(id: "torrentday",
name: "TorrentDay",
description: "TorrentDay (TD) is a Private site for TV / MOVIES / GENERAL",
link: "https://tday.love/",
link: "https://torrentday.cool/",
caps: new TorznabCapabilities
{
TvSearchParams = new List<TvSearchParam>

View File

@@ -22,7 +22,7 @@ namespace Jackett.Common.Indexers
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://yts.mx/",
"https://yts.unblockit.dev/",
"https://yts.unblockit.ltd/",
"https://yts.unblockninja.com/"
};
@@ -30,6 +30,7 @@ namespace Jackett.Common.Indexers
"https://yts.ag/",
"https://yts.am/",
"https://yts.lt/",
"https://yts.unblockit.dev/",
"https://yts.root.yt/"
};

View File

@@ -9,10 +9,6 @@ namespace Jackett.Common.Models
public Uri Link { get; set; }
public string Language { get; set; }
public string Category { get; set; }
public Uri ImageUrl { get; set; }
public string ImageTitle { get; set; }
public Uri ImageLink { get; set; }
public string ImageDescription { get; set; }
public ChannelInfo()
{

View File

@@ -73,12 +73,6 @@ namespace Jackett.Common.Models
new XElement("link", ChannelInfo.Link.AbsoluteUri),
new XElement("language", ChannelInfo.Language),
new XElement("category", ChannelInfo.Category),
new XElement("image",
new XElement("url", ChannelInfo.ImageUrl.AbsoluteUri),
new XElement("title", ChannelInfo.ImageTitle),
new XElement("link", ChannelInfo.ImageLink.AbsoluteUri),
new XElement("description", ChannelInfo.ImageDescription)
),
from r in Releases
select new XElement("item",
new XElement("title", RemoveInvalidXMLChars(r.Title)),

View File

@@ -403,11 +403,7 @@ namespace Jackett.Server.Controllers
{
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
Link = new Uri(CurrentIndexer.SiteLink)
});
var proxiedReleases = result.Releases.Select(r => AutoMapper.Mapper.Map<ReleaseInfo>(r)).Select(r =>

View File

@@ -48,9 +48,7 @@ namespace Jackett.Test.Common.Models
var resultPage = new ResultPage(
new ChannelInfo // characters in channel info are safe because are provided by us
{
Link = link,
ImageUrl = link,
ImageLink = link
Link = link
})
{
Releases = new List<ReleaseInfo>
@@ -75,7 +73,7 @@ namespace Jackett.Test.Common.Models
var xml = resultPage.ToXml(link);
Assert.AreEqual(5, Regex.Matches(xml, validText).Count);
Assert.AreEqual(10, Regex.Matches(xml, validLink).Count);
Assert.AreEqual(8, Regex.Matches(xml, validLink).Count);
// this should be in another test but it's here to avoid creating the whole object again
Assert.True(xml.Contains("Tue, 22 Sep 2020 00:00:00 "));

View File

@@ -255,6 +255,7 @@ namespace Jackett.Updater
"CurlSharp.dll",
"CurlSharp.pdb",
"Definitions/32pages.yml",
"Definitions/3evils.yml",
"Definitions/420files.yml",
"Definitions/academictorrents.yml",
"Definitions/alein.yml",
@@ -271,6 +272,7 @@ namespace Jackett.Updater
"Definitions/b2s-share.yml",
"Definitions/badasstorrents.yml", // to be migrated to c#
"Definitions/bithq.yml",
"Definitions/bigtower.yml",
"Definitions/bitme.yml",
"Definitions/bittorrentam.yml",
"Definitions/blubits.yml",
@@ -310,6 +312,7 @@ namespace Jackett.Updater
"Definitions/filmsclub.yml",
"Definitions/freakstrackingsystem.yml",
"Definitions/freedomhd.yml",
"Definitions/fullmixmusic.yml",
"Definitions/gdf76.yml",
"Definitions/gfxnews.yml",
"Definitions/gods.yml",
@@ -322,6 +325,7 @@ namespace Jackett.Updater
"Definitions/hdclub.yml",
"Definitions/hddisk.yml",
"Definitions/hdplus.yml",
"Definitions/hdstreet.yml",
"Definitions/hon3yhd-net.yml",
"Definitions/horriblesubs.yml",
"Definitions/hyperay.yml",
@@ -358,6 +362,7 @@ namespace Jackett.Updater
"Definitions/nostalgic.yml", // renamed to vhstapes
"Definitions/nyaa.yml",
"Definitions/nyoo.yml",
"Definitions/onlyscene.yml",
"Definitions/passionetorrent.yml",
"Definitions/polishtracker.yml",
"Definitions/pt99.yml",
@@ -366,6 +371,7 @@ namespace Jackett.Updater
"Definitions/rapidetracker.yml",
"Definitions/rarbg.yml", // migrated to C#
"Definitions/redtopia.yml",
"Definitions/retroflix.yml", // migrated to C#
"Definitions/rgu.yml",
"Definitions/rns.yml", // site merged with audiobooktorrents
"Definitions/rockethd.yml",