From 04ee81430e3ba25fc045b01f64c49eb9f0560aee Mon Sep 17 00:00:00 2001 From: seeyabye Date: Mon, 14 Jun 2021 14:13:56 +0900 Subject: [PATCH] core: added download selectors to the download block (#11907) --- src/Jackett.Common/Definitions/1337x.yml | 5 +- src/Jackett.Common/Definitions/acgsou.yml | 5 +- src/Jackett.Common/Definitions/anime-free.yml | 5 +- .../Definitions/arabafenice.yml | 5 +- src/Jackett.Common/Definitions/arenabg.yml | 5 +- .../Definitions/audiobookbay.yml | 3 +- .../Definitions/badasstorrents.yml | 5 +- src/Jackett.Common/Definitions/bigtorrent.yml | 5 +- .../Definitions/boxingtorrents.yml | 5 +- src/Jackett.Common/Definitions/btsow.yml | 5 +- src/Jackett.Common/Definitions/byrutor.yml | 5 +- src/Jackett.Common/Definitions/catorrent.yml | 5 +- src/Jackett.Common/Definitions/classix.yml | 5 +- src/Jackett.Common/Definitions/cpabien.yml | 6 +- .../Definitions/cpasbienclone.yml | 5 +- .../Definitions/crazyspirits.yml | 5 +- src/Jackett.Common/Definitions/demonoid.yml | 5 +- src/Jackett.Common/Definitions/dimeadozen.yml | 5 +- src/Jackett.Common/Definitions/dxp.yml | 5 +- .../Definitions/ebookparadijs.yml | 5 +- .../Definitions/ebooks-shares.yml | 5 +- src/Jackett.Common/Definitions/ehentai.yml | 5 +- src/Jackett.Common/Definitions/ettv.yml | 5 +- .../Definitions/extremetorrents.yml | 5 +- .../Definitions/exttorrents.yml | 5 +- .../Definitions/film-paleis.yml | 5 +- src/Jackett.Common/Definitions/finvip.yml | 5 +- src/Jackett.Common/Definitions/firebit.yml | 5 +- .../Definitions/gamestorrents.yml | 5 +- .../Definitions/generationfree.yml | 5 +- .../Definitions/girotorrent.yml | 5 +- src/Jackett.Common/Definitions/gktorrent.yml | 5 +- src/Jackett.Common/Definitions/gtorrent.yml | 5 +- .../Definitions/gtorrentpro.yml | 5 +- src/Jackett.Common/Definitions/hdhouse.yml | 5 +- src/Jackett.Common/Definitions/hellastz.yml | 5 +- src/Jackett.Common/Definitions/ibit.yml | 3 +- src/Jackett.Common/Definitions/isohunt2.yml | 5 +- src/Jackett.Common/Definitions/itorrent.yml | 5 +- .../Definitions/kickasstorrents-to.yml | 5 +- .../Definitions/limetorrents.yml | 5 +- .../Definitions/magicheaven.yml | 5 +- .../Definitions/mixtapetorrent.yml | 5 +- src/Jackett.Common/Definitions/moviesdvdr.yml | 5 +- .../Definitions/movietorrent.yml | 5 +- .../Definitions/muziekfabriek.yml | 5 +- src/Jackett.Common/Definitions/mypornclub.yml | 5 +- src/Jackett.Common/Definitions/nitro.yml | 3 +- src/Jackett.Common/Definitions/nntt.yml | 5 +- src/Jackett.Common/Definitions/oasis.yml | 5 +- src/Jackett.Common/Definitions/oxtorrent.yml | 5 +- src/Jackett.Common/Definitions/pctorrent.yml | 5 +- src/Jackett.Common/Definitions/pier720.yml | 5 +- src/Jackett.Common/Definitions/piratbit.yml | 5 +- src/Jackett.Common/Definitions/proporno.yml | 5 +- src/Jackett.Common/Definitions/prostylex.yml | 5 +- .../Definitions/puurhollands.yml | 5 +- src/Jackett.Common/Definitions/rapidzona.yml | 5 +- src/Jackett.Common/Definitions/rintornet.yml | 5 +- src/Jackett.Common/Definitions/rofd.yml | 5 +- src/Jackett.Common/Definitions/rus-media.yml | 5 +- src/Jackett.Common/Definitions/seedfile.yml | 13 +-- src/Jackett.Common/Definitions/selezen.yml | 5 +- src/Jackett.Common/Definitions/siambit.yml | 5 +- src/Jackett.Common/Definitions/sktorrent.yml | 5 +- src/Jackett.Common/Definitions/sosulki.yml | 5 +- src/Jackett.Common/Definitions/sporthd.yml | 5 +- src/Jackett.Common/Definitions/toros.yml | 5 +- .../Definitions/torrent4you.yml | 5 +- src/Jackett.Common/Definitions/torrent9.yml | 5 +- .../Definitions/torrent9clone.yml | 5 +- .../Definitions/torrentdownload.yml | 5 +- .../Definitions/torrentdownloads.yml | 5 +- src/Jackett.Common/Definitions/torrentmax.yml | 5 +- .../Definitions/torrentoyunindir.yml | 5 +- .../Definitions/torrentparadise.yml | 5 +- .../Definitions/torrentproject2.yml | 5 +- src/Jackett.Common/Definitions/torrentqq.yml | 5 +- src/Jackett.Common/Definitions/torrentsir.yml | 5 +- src/Jackett.Common/Definitions/torrentv.yml | 5 +- .../Definitions/torrentview.yml | 5 +- .../Definitions/torrentwhiz.yml | 5 +- src/Jackett.Common/Definitions/turkseed.yml | 5 +- src/Jackett.Common/Definitions/uniondht.yml | 7 +- src/Jackett.Common/Definitions/unlimitz.yml | 5 +- src/Jackett.Common/Definitions/vsthouse.yml | 5 +- .../Definitions/vsttorrents.yml | 5 +- .../Definitions/xxxadulttorrent.yml | 5 +- src/Jackett.Common/Definitions/zetorrents.yml | 5 +- .../Indexers/CardigannIndexer.cs | 87 ++++++++++++++----- .../Models/IndexerDefinition.cs | 9 +- 91 files changed, 339 insertions(+), 207 deletions(-) diff --git a/src/Jackett.Common/Definitions/1337x.yml b/src/Jackett.Common/Definitions/1337x.yml index a2800a8ff..01549d3e4 100644 --- a/src/Jackett.Common/Definitions/1337x.yml +++ b/src/Jackett.Common/Definitions/1337x.yml @@ -162,8 +162,9 @@ settings: download: # the .torrent url is on the on the details page - selector: ul li a[href^="{{ .Config.downloadlink }}"] - attribute: href + selectors: + - selector: ul li a[href^="{{ .Config.downloadlink }}"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/acgsou.yml b/src/Jackett.Common/Definitions/acgsou.yml index 7cd0a7826..d23dbea15 100644 --- a/src/Jackett.Common/Definitions/acgsou.yml +++ b/src/Jackett.Common/Definitions/acgsou.yml @@ -51,8 +51,9 @@ caps: settings: [] download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/anime-free.yml b/src/Jackett.Common/Definitions/anime-free.yml index b99faf667..02a8a5907 100644 --- a/src/Jackett.Common/Definitions/anime-free.yml +++ b/src/Jackett.Common/Definitions/anime-free.yml @@ -57,8 +57,9 @@ login: selector: a[href$="/index.php?action=logout"] download: - selector: a[href*="/engine/download.php?id="] - attribute: href + selectors: + - selector: a[href*="/engine/download.php?id="] + attribute: href search: # https://anime-free.biz/index.php?do=search&subaction=search&search_start=0&full_search=1&result_from=1&story=slaves+to+passion&all_word_seach=1&titleonly=3&searchuser=&replyless=0&replylimit=0&searchdate=0&beforeafter=after&sortby=date&resorder=desc&showposts=0&catlist[]=0 diff --git a/src/Jackett.Common/Definitions/arabafenice.yml b/src/Jackett.Common/Definitions/arabafenice.yml index 90796bacf..fd365c7a3 100644 --- a/src/Jackett.Common/Definitions/arabafenice.yml +++ b/src/Jackett.Common/Definitions/arabafenice.yml @@ -121,8 +121,9 @@ download: infohash: "{{ .DownloadUri.Query.id }}" thanks: 1 rndval: "1487013827343" - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/arenabg.yml b/src/Jackett.Common/Definitions/arenabg.yml index 755866c80..61fba986b 100644 --- a/src/Jackett.Common/Definitions/arenabg.yml +++ b/src/Jackett.Common/Definitions/arenabg.yml @@ -111,8 +111,9 @@ login: selector: a[href="/en/users/logout/"] download: - selector: a[href^="{{ .Config.downloadlink }}"] - attribute: href + selectors: + - selector: a[href^="{{ .Config.downloadlink }}"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/audiobookbay.yml b/src/Jackett.Common/Definitions/audiobookbay.yml index a96722727..334c6dfa9 100644 --- a/src/Jackett.Common/Definitions/audiobookbay.yml +++ b/src/Jackett.Common/Definitions/audiobookbay.yml @@ -89,7 +89,8 @@ caps: settings: [] download: - selector: td:contains("Info Hash:") ~ td + selectors: + - selector: td:contains("Info Hash:") ~ td filters: - name: prepend args: "magnet:?xt=urn:btih:" diff --git a/src/Jackett.Common/Definitions/badasstorrents.yml b/src/Jackett.Common/Definitions/badasstorrents.yml index 6d324e856..0a7a788fe 100644 --- a/src/Jackett.Common/Definitions/badasstorrents.yml +++ b/src/Jackett.Common/Definitions/badasstorrents.yml @@ -52,8 +52,9 @@ settings: asc: asc download: - selector: a[href*="{{ .Config.downloadlink }}"] - attribute: href + selectors: + - selector: a[href*="{{ .Config.downloadlink }}"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/bigtorrent.yml b/src/Jackett.Common/Definitions/bigtorrent.yml index dcec3ccb4..47f08edab 100644 --- a/src/Jackett.Common/Definitions/bigtorrent.yml +++ b/src/Jackett.Common/Definitions/bigtorrent.yml @@ -60,8 +60,9 @@ login: path: index.php download: - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/boxingtorrents.yml b/src/Jackett.Common/Definitions/boxingtorrents.yml index b25a4bf64..3f7d98eca 100644 --- a/src/Jackett.Common/Definitions/boxingtorrents.yml +++ b/src/Jackett.Common/Definitions/boxingtorrents.yml @@ -77,8 +77,9 @@ login: selector: a[href="logout.php"] download: - selector: a[href^="download.php"] - attribute: href + selectors: + - selector: a[href^="download.php"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/btsow.yml b/src/Jackett.Common/Definitions/btsow.yml index 35e36e8a7..9fcf4bff5 100644 --- a/src/Jackett.Common/Definitions/btsow.yml +++ b/src/Jackett.Common/Definitions/btsow.yml @@ -44,8 +44,9 @@ settings: default: BTSOW does not return categories in its search results.
To add to your Apps' Torznab indexer, replace all categories with 8000(Other). download: - selector: a#magnetOpen - attribute: href + selectors: + - selector: a#magnetOpen + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/byrutor.yml b/src/Jackett.Common/Definitions/byrutor.yml index 77e9ac15b..e5a38b18a 100644 --- a/src/Jackett.Common/Definitions/byrutor.yml +++ b/src/Jackett.Common/Definitions/byrutor.yml @@ -260,8 +260,9 @@ caps: settings: [] download: - selector: a.itemtop_game - attribute: href + selectors: + - selector: a.itemtop_game + attribute: href search: # keywords (article titles only search) diff --git a/src/Jackett.Common/Definitions/catorrent.yml b/src/Jackett.Common/Definitions/catorrent.yml index c37e1d0b9..baa075b9f 100644 --- a/src/Jackett.Common/Definitions/catorrent.yml +++ b/src/Jackett.Common/Definitions/catorrent.yml @@ -56,8 +56,9 @@ login: selector: a[href$="/index.php?action=logout"] download: - selector: a[href*="/index.php?do=download&id="] - attribute: href + selectors: + - selector: a[href*="/index.php?do=download&id="] + attribute: href search: # https://catorrent.org/index.php?do=search&subaction=search&story=lovelot diff --git a/src/Jackett.Common/Definitions/classix.yml b/src/Jackett.Common/Definitions/classix.yml index 51f88ab6f..472b7ad07 100644 --- a/src/Jackett.Common/Definitions/classix.yml +++ b/src/Jackett.Common/Definitions/classix.yml @@ -28,8 +28,9 @@ login: path: index.php download: - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/cpabien.yml b/src/Jackett.Common/Definitions/cpabien.yml index f2b9126c1..b66bf099d 100644 --- a/src/Jackett.Common/Definitions/cpabien.yml +++ b/src/Jackett.Common/Definitions/cpabien.yml @@ -61,7 +61,6 @@ settings: - name: useragent type: text label: User-Agent - label: User-Agent - name: info_useragent type: info label: How to get the User-Agent @@ -101,8 +100,9 @@ login: user-agent: "[ .Config.useragent ]" download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/cpasbienclone.yml b/src/Jackett.Common/Definitions/cpasbienclone.yml index 38bf387d9..75df606ba 100644 --- a/src/Jackett.Common/Definitions/cpasbienclone.yml +++ b/src/Jackett.Common/Definitions/cpasbienclone.yml @@ -68,8 +68,9 @@ settings: ?trie-nom-a: title asc download: - selector: a[href^="magnet:"] - attribute: href + selectors: + - selector: a[href^="magnet:"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/crazyspirits.yml b/src/Jackett.Common/Definitions/crazyspirits.yml index 777b86d62..e23caa955 100644 --- a/src/Jackett.Common/Definitions/crazyspirits.yml +++ b/src/Jackett.Common/Definitions/crazyspirits.yml @@ -175,8 +175,9 @@ download: id: "{{ .DownloadUri.Query.id }}" to: give torrent: "{{ .DownloadUri.Query.id }}" - selector: "a[href^=\"/{{ .DownloadUri.Query.id }}/\"]" - attribute: href + selectors: + - selector: "a[href^=\"/{{ .DownloadUri.Query.id }}/\"]" + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/demonoid.yml b/src/Jackett.Common/Definitions/demonoid.yml index 0cde87f0f..553174503 100644 --- a/src/Jackett.Common/Definitions/demonoid.yml +++ b/src/Jackett.Common/Definitions/demonoid.yml @@ -318,8 +318,9 @@ login: path: files/ download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/dimeadozen.yml b/src/Jackett.Common/Definitions/dimeadozen.yml index c1bdf22d8..0417bc27f 100644 --- a/src/Jackett.Common/Definitions/dimeadozen.yml +++ b/src/Jackett.Common/Definitions/dimeadozen.yml @@ -100,8 +100,9 @@ login: download: # download.php/673256/Talk%20Talk%20-%201986-07-05%20Paris.torrent - selector: a[href^="download.php/"] - attribute: href + selectors: + - selector: a[href^="download.php/"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/dxp.yml b/src/Jackett.Common/Definitions/dxp.yml index a7ee1ae63..6ef0c8e1d 100644 --- a/src/Jackett.Common/Definitions/dxp.yml +++ b/src/Jackett.Common/Definitions/dxp.yml @@ -79,8 +79,9 @@ login: selector: a[href="logout.php"] download: - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: # https://dxp.ru/torrents.php?search=&sort=4&type=desc diff --git a/src/Jackett.Common/Definitions/ebookparadijs.yml b/src/Jackett.Common/Definitions/ebookparadijs.yml index 2658e8cba..b0d417d14 100644 --- a/src/Jackett.Common/Definitions/ebookparadijs.yml +++ b/src/Jackett.Common/Definitions/ebookparadijs.yml @@ -79,8 +79,9 @@ download: tid: "{{ .DownloadUri.Query.id }}" text: "{{ .Config.thankyou }}" submit: Opslaan - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/ebooks-shares.yml b/src/Jackett.Common/Definitions/ebooks-shares.yml index d74b8f962..8b69fe3bd 100644 --- a/src/Jackett.Common/Definitions/ebooks-shares.yml +++ b/src/Jackett.Common/Definitions/ebooks-shares.yml @@ -308,8 +308,9 @@ login: selector: a[href^="account-logout.php"] download: - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/ehentai.yml b/src/Jackett.Common/Definitions/ehentai.yml index ffe9cdc0b..03595ee3c 100644 --- a/src/Jackett.Common/Definitions/ehentai.yml +++ b/src/Jackett.Common/Definitions/ehentai.yml @@ -19,8 +19,9 @@ caps: tv-search: [q, season, ep] download: - selector: a[href*="/get/"] - attribute: href + selectors: + - selector: a[href*="/get/"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/ettv.yml b/src/Jackett.Common/Definitions/ettv.yml index f7e7c68d9..621997a5b 100644 --- a/src/Jackett.Common/Definitions/ettv.yml +++ b/src/Jackett.Common/Definitions/ettv.yml @@ -124,8 +124,9 @@ settings: asc: asc download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: path: "{{ if .Keywords }}torrents-search.php{{ else }}torrents.php{{ end }}" diff --git a/src/Jackett.Common/Definitions/extremetorrents.yml b/src/Jackett.Common/Definitions/extremetorrents.yml index 8d9b880b3..6aa0a4315 100644 --- a/src/Jackett.Common/Definitions/extremetorrents.yml +++ b/src/Jackett.Common/Definitions/extremetorrents.yml @@ -78,8 +78,9 @@ download: tid: "{{ .DownloadUri.Query.id }}" text: "{{ .Config.thankyou }}" submit: Opslaan - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/exttorrents.yml b/src/Jackett.Common/Definitions/exttorrents.yml index 9b6c1951b..d8a74e9d3 100644 --- a/src/Jackett.Common/Definitions/exttorrents.yml +++ b/src/Jackett.Common/Definitions/exttorrents.yml @@ -96,8 +96,9 @@ settings: default: This site may use Cloudflare DDoS Protection, therefore Jackett requires FlareSolver to access it. download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/film-paleis.yml b/src/Jackett.Common/Definitions/film-paleis.yml index e7ff999d1..287b9c1cf 100644 --- a/src/Jackett.Common/Definitions/film-paleis.yml +++ b/src/Jackett.Common/Definitions/film-paleis.yml @@ -74,8 +74,9 @@ download: tid: "{{ .DownloadUri.Query.id }}" text: "{{ .Config.thankyou }}" submit: Opslaan - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/finvip.yml b/src/Jackett.Common/Definitions/finvip.yml index 835e88cac..b5d505423 100644 --- a/src/Jackett.Common/Definitions/finvip.yml +++ b/src/Jackett.Common/Definitions/finvip.yml @@ -96,8 +96,9 @@ login: selector: a[href="logout.php"] download: - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/firebit.yml b/src/Jackett.Common/Definitions/firebit.yml index 3e7fe6efd..b695f9c5c 100644 --- a/src/Jackett.Common/Definitions/firebit.yml +++ b/src/Jackett.Common/Definitions/firebit.yml @@ -57,8 +57,9 @@ caps: settings: [] download: - selector: a[href^="/download.php?id="] - attribute: href + selectors: + - selector: a[href^="/download.php?id="] + attribute: href search: # http://firebit.net/index.php?do=search&type=simple&q=2019 diff --git a/src/Jackett.Common/Definitions/gamestorrents.yml b/src/Jackett.Common/Definitions/gamestorrents.yml index 0e3a28b17..b7d8fc111 100644 --- a/src/Jackett.Common/Definitions/gamestorrents.yml +++ b/src/Jackett.Common/Definitions/gamestorrents.yml @@ -30,8 +30,9 @@ caps: settings: [] download: - selector: a#download_torrent - attribute: href + selectors: + - selector: a#download_torrent + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/generationfree.yml b/src/Jackett.Common/Definitions/generationfree.yml index 3cd2e149e..5d2df5e6c 100644 --- a/src/Jackett.Common/Definitions/generationfree.yml +++ b/src/Jackett.Common/Definitions/generationfree.yml @@ -142,8 +142,9 @@ download: id: "{{ .DownloadUri.Query.id }}" to: give torrent: "{{ .DownloadUri.Query.id }}" - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/girotorrent.yml b/src/Jackett.Common/Definitions/girotorrent.yml index 0f20bb9da..397e96cf7 100644 --- a/src/Jackett.Common/Definitions/girotorrent.yml +++ b/src/Jackett.Common/Definitions/girotorrent.yml @@ -136,8 +136,9 @@ download: infohash: "{{ .DownloadUri.Query.id }}" thanks: 1 rndval: "1487013827343" - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/gktorrent.yml b/src/Jackett.Common/Definitions/gktorrent.yml index 6d3e87295..9b0fe8f11 100644 --- a/src/Jackett.Common/Definitions/gktorrent.yml +++ b/src/Jackett.Common/Definitions/gktorrent.yml @@ -73,8 +73,9 @@ settings: default: false download: - selector: a[href*="magnet:?xt="] - attribute: href + selectors: + - selector: a[href*="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/gtorrent.yml b/src/Jackett.Common/Definitions/gtorrent.yml index bd41a6531..a375628bb 100644 --- a/src/Jackett.Common/Definitions/gtorrent.yml +++ b/src/Jackett.Common/Definitions/gtorrent.yml @@ -23,8 +23,9 @@ caps: settings: [] download: - selector: a[href^="/uploads/torrents/"] - attribute: href + selectors: + - selector: a[href^="/uploads/torrents/"] + attribute: href search: # do=search&subaction=search&search_start=0&full_search=0&result_from=1&story=%D0%A6%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC%D0%B5%D1%82%D0%B0%D0%BB%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F+%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B0+ diff --git a/src/Jackett.Common/Definitions/gtorrentpro.yml b/src/Jackett.Common/Definitions/gtorrentpro.yml index 93151fd65..ef1b0a849 100644 --- a/src/Jackett.Common/Definitions/gtorrentpro.yml +++ b/src/Jackett.Common/Definitions/gtorrentpro.yml @@ -23,8 +23,9 @@ caps: settings: [] download: - selector: a[href^="/engine/download.php?id="] - attribute: href + selectors: + - selector: a[href^="/engine/download.php?id="] + attribute: href search: # do=search&subaction=search&search_start=0&full_search=0&result_from=1&story=%D0%A6%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC%D0%B5%D1%82%D0%B0%D0%BB%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F+%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B0+ diff --git a/src/Jackett.Common/Definitions/hdhouse.yml b/src/Jackett.Common/Definitions/hdhouse.yml index 4420a0df0..404a8250d 100644 --- a/src/Jackett.Common/Definitions/hdhouse.yml +++ b/src/Jackett.Common/Definitions/hdhouse.yml @@ -52,8 +52,9 @@ settings: asc: asc download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: # https://hdreactor.net/index.php?do=search&subaction=search&showposts=1&story=2020&catlist[]=2001&catlist[]=2006 diff --git a/src/Jackett.Common/Definitions/hellastz.yml b/src/Jackett.Common/Definitions/hellastz.yml index 444ceb2d1..5b369b452 100644 --- a/src/Jackett.Common/Definitions/hellastz.yml +++ b/src/Jackett.Common/Definitions/hellastz.yml @@ -92,8 +92,9 @@ download: infohash: "{{ .DownloadUri.Query.id }}" thanks: 1 rndval: "1487013827343" - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/ibit.yml b/src/Jackett.Common/Definitions/ibit.yml index 19dc164da..900d263cc 100644 --- a/src/Jackett.Common/Definitions/ibit.yml +++ b/src/Jackett.Common/Definitions/ibit.yml @@ -49,7 +49,8 @@ settings: asc: asc download: - selector: script:contains("magnet:?xt=") + selectors: + - selector: script:contains("magnet:?xt=") filters: - name: regexp args: "play\\('(.+?)'" diff --git a/src/Jackett.Common/Definitions/isohunt2.yml b/src/Jackett.Common/Definitions/isohunt2.yml index 8788e2432..aceea0add 100644 --- a/src/Jackett.Common/Definitions/isohunt2.yml +++ b/src/Jackett.Common/Definitions/isohunt2.yml @@ -58,8 +58,9 @@ settings: size: size download: - selector: a.btn-magnet - attribute: href + selectors: + - selector: a.btn-magnet + attribute: href filters: - name: querystring args: url diff --git a/src/Jackett.Common/Definitions/itorrent.yml b/src/Jackett.Common/Definitions/itorrent.yml index 32fea91af..ffd6f68bc 100644 --- a/src/Jackett.Common/Definitions/itorrent.yml +++ b/src/Jackett.Common/Definitions/itorrent.yml @@ -50,8 +50,9 @@ settings: download: - selector: a[href^="/torrentfiles/"] - attribute: href + selectors: + - selector: a[href^="/torrentfiles/"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/kickasstorrents-to.yml b/src/Jackett.Common/Definitions/kickasstorrents-to.yml index 79bb86ee6..1e37d08a0 100644 --- a/src/Jackett.Common/Definitions/kickasstorrents-to.yml +++ b/src/Jackett.Common/Definitions/kickasstorrents-to.yml @@ -51,8 +51,9 @@ settings: asc: asc download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/limetorrents.yml b/src/Jackett.Common/Definitions/limetorrents.yml index d2ced735b..4ed1872bb 100644 --- a/src/Jackett.Common/Definitions/limetorrents.yml +++ b/src/Jackett.Common/Definitions/limetorrents.yml @@ -83,8 +83,9 @@ settings: download: # the .torrent url is on the on the details page - selector: a.csprite_dltorrent[href^="{{ .Config.downloadlink }}"] - attribute: href + selectors: + - selector: a.csprite_dltorrent[href^="{{ .Config.downloadlink }}"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/magicheaven.yml b/src/Jackett.Common/Definitions/magicheaven.yml index ee5ed747e..7e3edf813 100644 --- a/src/Jackett.Common/Definitions/magicheaven.yml +++ b/src/Jackett.Common/Definitions/magicheaven.yml @@ -121,8 +121,9 @@ download: method: post inputs: torrentid: "{{ .DownloadUri.Query.id }}" - selector: a[href*="/download.php?id="] - attribute: href + selectors: + - selector: a[href*="/download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/mixtapetorrent.yml b/src/Jackett.Common/Definitions/mixtapetorrent.yml index 6b6c83da9..1229416e7 100644 --- a/src/Jackett.Common/Definitions/mixtapetorrent.yml +++ b/src/Jackett.Common/Definitions/mixtapetorrent.yml @@ -20,8 +20,9 @@ caps: settings: [] download: - selector: table#attachments > tbody > tr.odd > td > a - attribute: href + selectors: + - selector: table#attachments > tbody > tr.odd > td > a + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/moviesdvdr.yml b/src/Jackett.Common/Definitions/moviesdvdr.yml index c8f7f28fd..c832e954e 100644 --- a/src/Jackett.Common/Definitions/moviesdvdr.yml +++ b/src/Jackett.Common/Definitions/moviesdvdr.yml @@ -21,8 +21,9 @@ caps: settings: [] download: - selector: a.torrent_download - attribute: href + selectors: + - selector: a.torrent_download + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/movietorrent.yml b/src/Jackett.Common/Definitions/movietorrent.yml index 289a6998d..7c9344eac 100644 --- a/src/Jackett.Common/Definitions/movietorrent.yml +++ b/src/Jackett.Common/Definitions/movietorrent.yml @@ -54,8 +54,9 @@ caps: settings: [] download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href filters: - name: append args: "&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969&tr=udp%3A%2F%2Fp4p.arenabg.com%3A1337%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.si%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.pirateparty.gr%3A6969%2Fannounce&tr=udp%3A%2F%2Fipv4.tracker.harry.lu%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.cyberia.is%3A6969%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2710%2Fannounce&tr=udp%3A%2F%2Fdenis.stalker.upeer.me%3A6969%2Fannounce" diff --git a/src/Jackett.Common/Definitions/muziekfabriek.yml b/src/Jackett.Common/Definitions/muziekfabriek.yml index c7d8b3d2a..8c55eff2d 100644 --- a/src/Jackett.Common/Definitions/muziekfabriek.yml +++ b/src/Jackett.Common/Definitions/muziekfabriek.yml @@ -57,8 +57,9 @@ login: selector: :has(a[href="logout.php"]) download: - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/mypornclub.yml b/src/Jackett.Common/Definitions/mypornclub.yml index 48330ff04..6bf95672d 100644 --- a/src/Jackett.Common/Definitions/mypornclub.yml +++ b/src/Jackett.Common/Definitions/mypornclub.yml @@ -24,8 +24,9 @@ settings: default: This site may use Cloudflare DDoS Protection, therefore Jackett requires FlareSolver to access it. download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href filters: - name: re_replace args: ["\\s+", " "] diff --git a/src/Jackett.Common/Definitions/nitro.yml b/src/Jackett.Common/Definitions/nitro.yml index dfd8ba580..d9f0b5497 100644 --- a/src/Jackett.Common/Definitions/nitro.yml +++ b/src/Jackett.Common/Definitions/nitro.yml @@ -49,7 +49,8 @@ settings: asc: asc download: - selector: script:contains("magnet:") + selectors: + - selector: script:contains("magnet:") filters: - name: regexp args: "(magnet:[^\"]+)\"" diff --git a/src/Jackett.Common/Definitions/nntt.yml b/src/Jackett.Common/Definitions/nntt.yml index be28bbccc..183e83b73 100644 --- a/src/Jackett.Common/Definitions/nntt.yml +++ b/src/Jackett.Common/Definitions/nntt.yml @@ -672,8 +672,9 @@ settings: a: asc download: - selector: a[href^="./download/file.php?id="] - attribute: href + selectors: + - selector: a[href^="./download/file.php?id="] + attribute: href search: # http://www.nntt.org/search.php?sr=topics&sf=titleonly&fp=1&tracker_search=torrent&keywords=2020&fid[]=154 diff --git a/src/Jackett.Common/Definitions/oasis.yml b/src/Jackett.Common/Definitions/oasis.yml index 3ba56132a..b22d4a0b6 100644 --- a/src/Jackett.Common/Definitions/oasis.yml +++ b/src/Jackett.Common/Definitions/oasis.yml @@ -196,8 +196,9 @@ download: method: post inputs: torrent: "{{ re_replace .DownloadUri.PathAndQuery \"^(.+?)(\\d+)$\" \"$2\" }}" - selector: a[href*="/Telechargement/"] - attribute: href + selectors: + - selector: a[href*="/Telechargement/"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/oxtorrent.yml b/src/Jackett.Common/Definitions/oxtorrent.yml index 860c57d32..66dd4d83d 100644 --- a/src/Jackett.Common/Definitions/oxtorrent.yml +++ b/src/Jackett.Common/Definitions/oxtorrent.yml @@ -71,8 +71,9 @@ settings: default: false download: - selector: a[href^="magnet:?"] - attribute: href + selectors: + - selector: a[href^="magnet:?"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/pctorrent.yml b/src/Jackett.Common/Definitions/pctorrent.yml index 926091c85..57a622d95 100644 --- a/src/Jackett.Common/Definitions/pctorrent.yml +++ b/src/Jackett.Common/Definitions/pctorrent.yml @@ -21,8 +21,9 @@ caps: settings: [] download: - selector: a[href*="/engine/download.php?id="] - attribute: href + selectors: + - selector: a[href*="/engine/download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/pier720.yml b/src/Jackett.Common/Definitions/pier720.yml index d533d48f6..93f5bf005 100644 --- a/src/Jackett.Common/Definitions/pier720.yml +++ b/src/Jackett.Common/Definitions/pier720.yml @@ -108,8 +108,9 @@ login: selector: :has(a[href^="./ucp.php?mode=logout&"]) download: - selector: a[href*="/download/torrent?id="] - attribute: href + selectors: + - selector: a[href*="/download/torrent?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/piratbit.yml b/src/Jackett.Common/Definitions/piratbit.yml index 35f61e84a..070fb4848 100644 --- a/src/Jackett.Common/Definitions/piratbit.yml +++ b/src/Jackett.Common/Definitions/piratbit.yml @@ -646,8 +646,9 @@ settings: download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/proporno.yml b/src/Jackett.Common/Definitions/proporno.yml index 31cb9f798..08e7a3a00 100644 --- a/src/Jackett.Common/Definitions/proporno.yml +++ b/src/Jackett.Common/Definitions/proporno.yml @@ -31,8 +31,9 @@ caps: settings: [] download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/prostylex.yml b/src/Jackett.Common/Definitions/prostylex.yml index fa5e360db..4e7547807 100644 --- a/src/Jackett.Common/Definitions/prostylex.yml +++ b/src/Jackett.Common/Definitions/prostylex.yml @@ -123,8 +123,9 @@ login: path: search.php download: - selector: a[href^="magnet:?"] - attribute: href + selectors: + - selector: a[href^="magnet:?"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/puurhollands.yml b/src/Jackett.Common/Definitions/puurhollands.yml index 62f0f323f..d6063b7f7 100644 --- a/src/Jackett.Common/Definitions/puurhollands.yml +++ b/src/Jackett.Common/Definitions/puurhollands.yml @@ -55,8 +55,9 @@ download: action: add tid: "{{ .DownloadUri.Query.id }}" text: "{{ .Config.thankyou }}" - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/rapidzona.yml b/src/Jackett.Common/Definitions/rapidzona.yml index 877ea47a7..8ef325375 100644 --- a/src/Jackett.Common/Definitions/rapidzona.yml +++ b/src/Jackett.Common/Definitions/rapidzona.yml @@ -77,8 +77,9 @@ settings: download: - selector: a[href*="/download.php?id="] - attribute: href + selectors: + - selector: a[href*="/download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/rintornet.yml b/src/Jackett.Common/Definitions/rintornet.yml index 139cd04d1..08482d258 100644 --- a/src/Jackett.Common/Definitions/rintornet.yml +++ b/src/Jackett.Common/Definitions/rintornet.yml @@ -37,8 +37,9 @@ caps: settings: [] download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/rofd.yml b/src/Jackett.Common/Definitions/rofd.yml index 72b4e63fd..92ea22977 100644 --- a/src/Jackett.Common/Definitions/rofd.yml +++ b/src/Jackett.Common/Definitions/rofd.yml @@ -100,8 +100,9 @@ login: selector: a[href="logout.php"] download: - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/rus-media.yml b/src/Jackett.Common/Definitions/rus-media.yml index 2c84eb124..d8dbac0f3 100644 --- a/src/Jackett.Common/Definitions/rus-media.yml +++ b/src/Jackett.Common/Definitions/rus-media.yml @@ -297,8 +297,9 @@ settings: a: asc download: - selector: a[href^="./download/file.php?id="] - attribute: href + selectors: + - selector: a[href^="./download/file.php?id="] + attribute: href search: # http://rus-media.org/search.php?tracker_search=torrent&sr=topics&keywords=2020&fid[]=54 diff --git a/src/Jackett.Common/Definitions/seedfile.yml b/src/Jackett.Common/Definitions/seedfile.yml index 8362d6f30..bb7b35d02 100644 --- a/src/Jackett.Common/Definitions/seedfile.yml +++ b/src/Jackett.Common/Definitions/seedfile.yml @@ -27,12 +27,12 @@ caps: - {id: 14, cat: PC/Games, desc: "Jocuri PC"} - {id: 15, cat: Audio, desc: "Muzică"} - {id: 16, cat: PC/Mobile-Other, desc: "Mobile"} - - {id: 17, cat: PC, desc: "Programe "} + - {id: 17, cat: PC, desc: "Programe"} - {id: 18, cat: TV/HD, desc: "Seriale HD"} - - {id: 19, cat: TV/HD, desc: "Seriale HD-RO "} + - {id: 19, cat: TV/HD, desc: "Seriale HD-RO"} - {id: 20, cat: TV/SD, desc: "Seriale TV"} - - {id: 21, cat: TV/SD, desc: "Seriale TV-RO "} - - {id: 22, cat: TV/Sport, desc: "Sport "} + - {id: 21, cat: TV/SD, desc: "Seriale TV-RO"} + - {id: 22, cat: TV/Sport, desc: "Sport"} - {id: 23, cat: Audio/Video, desc: "Video Clip"} - {id: 24, cat: XXX, desc: "Adult 18+"} - {id: 36, cat: Movies/3D, desc: "Video 3D"} @@ -69,8 +69,9 @@ login: path: profile.php download: - selector: a[href^="download.php/"] - attribute: href + selectors: + - selector: a[href^="download.php/"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/selezen.yml b/src/Jackett.Common/Definitions/selezen.yml index 734035b57..eef44517f 100644 --- a/src/Jackett.Common/Definitions/selezen.yml +++ b/src/Jackett.Common/Definitions/selezen.yml @@ -80,8 +80,9 @@ login: selector: a[href$="/index.php?action=logout"] download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: # do=search&subaction=search&story=greyhound&titleonly=0&sortby=date&resorder=desc&showposts=0&catlist[]=45&catlist[]=46&catlist[]=47 diff --git a/src/Jackett.Common/Definitions/siambit.yml b/src/Jackett.Common/Definitions/siambit.yml index 587049448..8d7ee2a41 100644 --- a/src/Jackett.Common/Definitions/siambit.yml +++ b/src/Jackett.Common/Definitions/siambit.yml @@ -112,8 +112,9 @@ download: inputs: _action: "say_thank" id: "{{ .DownloadUri.Query.id }}" - selector: a[href^="downloadnew.php?id="] - attribute: href + selectors: + - selector: a[href^="downloadnew.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/sktorrent.yml b/src/Jackett.Common/Definitions/sktorrent.yml index 549fd43ef..a76762341 100644 --- a/src/Jackett.Common/Definitions/sktorrent.yml +++ b/src/Jackett.Common/Definitions/sktorrent.yml @@ -65,8 +65,9 @@ login: selector: a[href^="usercp.php"] download: - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/sosulki.yml b/src/Jackett.Common/Definitions/sosulki.yml index c9d6a5f76..c86ad9711 100644 --- a/src/Jackett.Common/Definitions/sosulki.yml +++ b/src/Jackett.Common/Definitions/sosulki.yml @@ -35,8 +35,9 @@ caps: settings: [] download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/sporthd.yml b/src/Jackett.Common/Definitions/sporthd.yml index fa5eda6ae..564802a78 100644 --- a/src/Jackett.Common/Definitions/sporthd.yml +++ b/src/Jackett.Common/Definitions/sporthd.yml @@ -145,8 +145,9 @@ login: path: index.php download: - selector: a[href^="download.php?id="] - attribute: href + selectors: + - selector: a[href^="download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/toros.yml b/src/Jackett.Common/Definitions/toros.yml index bad66b565..7f02ad461 100644 --- a/src/Jackett.Common/Definitions/toros.yml +++ b/src/Jackett.Common/Definitions/toros.yml @@ -49,8 +49,9 @@ settings: asc: asc download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/torrent4you.yml b/src/Jackett.Common/Definitions/torrent4you.yml index e87683ffd..0aa89c78a 100644 --- a/src/Jackett.Common/Definitions/torrent4you.yml +++ b/src/Jackett.Common/Definitions/torrent4you.yml @@ -36,8 +36,9 @@ settings: title: name download: - selector: form[action^="../torrents/"] - attribute: action + selectors: + - selector: form[action^="../torrents/"] + attribute: action search: paths: diff --git a/src/Jackett.Common/Definitions/torrent9.yml b/src/Jackett.Common/Definitions/torrent9.yml index cfeb4fa95..1c82397e2 100644 --- a/src/Jackett.Common/Definitions/torrent9.yml +++ b/src/Jackett.Common/Definitions/torrent9.yml @@ -101,8 +101,9 @@ settings: default: Torrent9 only returns category Movies in its Keywordless search results page.
To pass your apps' indexer TEST you will need to include the 131681(Movies) category. download: - selector: a[href^="magnet:?"] - attribute: href + selectors: + - selector: a[href^="magnet:?"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/torrent9clone.yml b/src/Jackett.Common/Definitions/torrent9clone.yml index cc4de05d1..d688ca953 100644 --- a/src/Jackett.Common/Definitions/torrent9clone.yml +++ b/src/Jackett.Common/Definitions/torrent9clone.yml @@ -104,8 +104,9 @@ settings: default: Torrent9clone only returns category Movies in its Keywordless search results page.
To pass your apps' indexer TEST you will need to include the 145469(Movies) category. download: - selector: a[href^="magnet:?"] - attribute: href + selectors: + - selector: a[href^="magnet:?"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/torrentdownload.yml b/src/Jackett.Common/Definitions/torrentdownload.yml index 7e39a911d..5e5f0c0fd 100644 --- a/src/Jackett.Common/Definitions/torrentdownload.yml +++ b/src/Jackett.Common/Definitions/torrentdownload.yml @@ -114,8 +114,9 @@ settings: _: size download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href login: method: cookie diff --git a/src/Jackett.Common/Definitions/torrentdownloads.yml b/src/Jackett.Common/Definitions/torrentdownloads.yml index 11628e00b..66ff1c5e2 100644 --- a/src/Jackett.Common/Definitions/torrentdownloads.yml +++ b/src/Jackett.Common/Definitions/torrentdownloads.yml @@ -68,8 +68,9 @@ settings: "magnet:": "magnet" download: - selector: a[href^="{{ .Config.downloadlink }}"] - attribute: href + selectors: + - selector: a[href^="{{ .Config.downloadlink }}"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/torrentmax.yml b/src/Jackett.Common/Definitions/torrentmax.yml index de219a1a8..783f8b542 100644 --- a/src/Jackett.Common/Definitions/torrentmax.yml +++ b/src/Jackett.Common/Definitions/torrentmax.yml @@ -45,8 +45,9 @@ settings: default: This site may use Cloudflare DDoS Protection, therefore Jackett requires FlareSolver to access it. download: - selector: a[href*="magnet:?xt="] - attribute: href + selectors: + - selector: a[href*="magnet:?xt="] + attribute: href filters: - name: append args: "&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969&tr=udp%3A%2F%2Fp4p.arenabg.com%3A1337%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.si%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.pirateparty.gr%3A6969%2Fannounce&tr=udp%3A%2F%2Fipv4.tracker.harry.lu%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.cyberia.is%3A6969%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2710%2Fannounce&tr=udp%3A%2F%2Fdenis.stalker.upeer.me%3A6969%2Fannounce" diff --git a/src/Jackett.Common/Definitions/torrentoyunindir.yml b/src/Jackett.Common/Definitions/torrentoyunindir.yml index 1b1251b4a..2dcdb045d 100644 --- a/src/Jackett.Common/Definitions/torrentoyunindir.yml +++ b/src/Jackett.Common/Definitions/torrentoyunindir.yml @@ -18,8 +18,9 @@ caps: settings: [] download: - selector: div.facepaylas a - attribute: href + selectors: + - selector: div.facepaylas a + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/torrentparadise.yml b/src/Jackett.Common/Definitions/torrentparadise.yml index 5ff14b61b..0f4389b97 100644 --- a/src/Jackett.Common/Definitions/torrentparadise.yml +++ b/src/Jackett.Common/Definitions/torrentparadise.yml @@ -206,8 +206,9 @@ caps: settings: [] download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: # https://torrentparadise.org/search.php?f=monday+night diff --git a/src/Jackett.Common/Definitions/torrentproject2.yml b/src/Jackett.Common/Definitions/torrentproject2.yml index 0d9784ce8..af86d43c4 100644 --- a/src/Jackett.Common/Definitions/torrentproject2.yml +++ b/src/Jackett.Common/Definitions/torrentproject2.yml @@ -51,8 +51,9 @@ settings: size: size download: - selector: "#download > div:nth-child(2) > div:nth-child(1) > a" - attribute: href + selectors: + - selector: "#download > div:nth-child(2) > div:nth-child(1) > a" + attribute: href filters: - name: replace args: ["https://mylink.me.uk/?url=", ""] diff --git a/src/Jackett.Common/Definitions/torrentqq.yml b/src/Jackett.Common/Definitions/torrentqq.yml index 1a0257ee7..972427201 100644 --- a/src/Jackett.Common/Definitions/torrentqq.yml +++ b/src/Jackett.Common/Definitions/torrentqq.yml @@ -55,8 +55,9 @@ settings: default: Some download links on this site use a link to a direct file download service, instead of a .torrent link. Jackett does not support direct file downloads, so you will get a page-cannot-be-found error when you try them. download: - selector: a[href^="/torrent/download/"] - attribute: href + selectors: + - selector: a[href^="/torrent/download/"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/torrentsir.yml b/src/Jackett.Common/Definitions/torrentsir.yml index 81c819de3..6cd417e6f 100644 --- a/src/Jackett.Common/Definitions/torrentsir.yml +++ b/src/Jackett.Common/Definitions/torrentsir.yml @@ -38,8 +38,9 @@ settings: default: This site may use Cloudflare DDoS Protection, therefore Jackett requires FlareSolver to access it. download: - selector: a[href*="magnet:?xt="] - attribute: href + selectors: + - selector: a[href*="magnet:?xt="] + attribute: href filters: - name: append args: "&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969&tr=udp%3A%2F%2Fp4p.arenabg.com%3A1337%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.si%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.pirateparty.gr%3A6969%2Fannounce&tr=udp%3A%2F%2Fipv4.tracker.harry.lu%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.cyberia.is%3A6969%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2710%2Fannounce&tr=udp%3A%2F%2Fdenis.stalker.upeer.me%3A6969%2Fannounce" diff --git a/src/Jackett.Common/Definitions/torrentv.yml b/src/Jackett.Common/Definitions/torrentv.yml index 103ca50a3..ed14aa650 100644 --- a/src/Jackett.Common/Definitions/torrentv.yml +++ b/src/Jackett.Common/Definitions/torrentv.yml @@ -29,8 +29,9 @@ settings: na-1: title download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/torrentview.yml b/src/Jackett.Common/Definitions/torrentview.yml index 973cb5922..d14d0b13f 100644 --- a/src/Jackett.Common/Definitions/torrentview.yml +++ b/src/Jackett.Common/Definitions/torrentview.yml @@ -63,8 +63,9 @@ caps: settings: [] download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/torrentwhiz.yml b/src/Jackett.Common/Definitions/torrentwhiz.yml index d04b1719f..24531d92f 100644 --- a/src/Jackett.Common/Definitions/torrentwhiz.yml +++ b/src/Jackett.Common/Definitions/torrentwhiz.yml @@ -37,8 +37,9 @@ settings: default: This site may use Cloudflare DDoS Protection, therefore Jackett requires FlareSolver to access it. download: - selector: a[href*="magnet:?xt="] - attribute: href + selectors: + - selector: a[href*="magnet:?xt="] + attribute: href filters: - name: append args: "&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969&tr=udp%3A%2F%2Fp4p.arenabg.com%3A1337%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.tiny-vps.com%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.si%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Ftracker.pirateparty.gr%3A6969%2Fannounce&tr=udp%3A%2F%2Fipv4.tracker.harry.lu%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.cyberia.is%3A6969%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2710%2Fannounce&tr=udp%3A%2F%2Fdenis.stalker.upeer.me%3A6969%2Fannounce" diff --git a/src/Jackett.Common/Definitions/turkseed.yml b/src/Jackett.Common/Definitions/turkseed.yml index 095df3915..4246a3280 100644 --- a/src/Jackett.Common/Definitions/turkseed.yml +++ b/src/Jackett.Common/Definitions/turkseed.yml @@ -89,8 +89,9 @@ download: method: post inputs: torrentid: "{{ .DownloadUri.Query.id }}" - selector: a[href*="/download.php?id="] - attribute: href + selectors: + - selector: a[href*="/download.php?id="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/uniondht.yml b/src/Jackett.Common/Definitions/uniondht.yml index 4518b3110..0a648e8e9 100644 --- a/src/Jackett.Common/Definitions/uniondht.yml +++ b/src/Jackett.Common/Definitions/uniondht.yml @@ -1,4 +1,4 @@ ---- +--- id: uniondht name: UnionDHT description: "UnionDHT is a RUSSIAN Public Torrent Tracker for MOVIES / TV / MUSIC / GENERAL" @@ -528,8 +528,9 @@ settings: 1: asc download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/unlimitz.yml b/src/Jackett.Common/Definitions/unlimitz.yml index c62092cf3..f9cc8328a 100644 --- a/src/Jackett.Common/Definitions/unlimitz.yml +++ b/src/Jackett.Common/Definitions/unlimitz.yml @@ -104,8 +104,9 @@ login: selector: a[href="logout.php"] download: - selector: a[href^="d.php?keyalert1="] - attribute: href + selectors: + - selector: a[href^="d.php?keyalert1="] + attribute: href filters: - name: replace args: ["d.php?keyalert1=", "/dI.php/"] diff --git a/src/Jackett.Common/Definitions/vsthouse.yml b/src/Jackett.Common/Definitions/vsthouse.yml index 3f5903c78..41265720d 100644 --- a/src/Jackett.Common/Definitions/vsthouse.yml +++ b/src/Jackett.Common/Definitions/vsthouse.yml @@ -19,8 +19,9 @@ caps: settings: [] download: - selector: a[title^="Скачать:"] - attribute: href + selectors: + - selector: a[title^="Скачать:"] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/vsttorrents.yml b/src/Jackett.Common/Definitions/vsttorrents.yml index 0a758ab5e..38f978e0a 100644 --- a/src/Jackett.Common/Definitions/vsttorrents.yml +++ b/src/Jackett.Common/Definitions/vsttorrents.yml @@ -21,8 +21,9 @@ caps: settings: [] download: - selector: div.wp-block-file a - attribute: href + selectors: + - selector: div.wp-block-file a + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/xxxadulttorrent.yml b/src/Jackett.Common/Definitions/xxxadulttorrent.yml index 7941c65d0..cd2e36136 100644 --- a/src/Jackett.Common/Definitions/xxxadulttorrent.yml +++ b/src/Jackett.Common/Definitions/xxxadulttorrent.yml @@ -18,8 +18,9 @@ caps: settings: [] download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Definitions/zetorrents.yml b/src/Jackett.Common/Definitions/zetorrents.yml index 838d94123..d21f6fce0 100644 --- a/src/Jackett.Common/Definitions/zetorrents.yml +++ b/src/Jackett.Common/Definitions/zetorrents.yml @@ -51,8 +51,9 @@ settings: default: false download: - selector: a[href^="magnet:?xt="] - attribute: href + selectors: + - selector: a[href^="magnet:?xt="] + attribute: href search: paths: diff --git a/src/Jackett.Common/Indexers/CardigannIndexer.cs b/src/Jackett.Common/Indexers/CardigannIndexer.cs index 06da8ab36..043bd5829 100644 --- a/src/Jackett.Common/Indexers/CardigannIndexer.cs +++ b/src/Jackett.Common/Indexers/CardigannIndexer.cs @@ -1757,39 +1757,78 @@ namespace Jackett.Common.Indexers if (Download.Method == "post") method = RequestType.POST; - if (Download.Selector != null) + if (Download.Selectors != null) { - var selector = applyGoTemplateText(Download.Selector, variables); var headers = ParseCustomHeaders(Definition.Search?.Headers, variables); - var response = await RequestWithCookiesAsync(link.ToString(), headers: headers); - if (response.IsRedirect) - response = await RequestWithCookiesAsync(response.RedirectingTo, headers: headers); - var results = response.ContentString; + var results = ""; var searchResultParser = new HtmlParser(); - var searchResultDocument = searchResultParser.ParseDocument(results); - var downloadElement = searchResultDocument.QuerySelector(selector); - if (downloadElement != null) + + foreach (var selector in Download.Selectors) { - logger.Debug(string.Format("CardigannIndexer ({0}): Download selector {1} matched:{2}", Id, selector, downloadElement.ToHtmlPretty())); - var href = ""; - if (Download.Attribute != null) + var querySelector = applyGoTemplateText(selector.Selector, variables); + try { - href = downloadElement.GetAttribute(Download.Attribute); - if (href == null) - throw new Exception(string.Format("Attribute \"{0}\" is not set for element {1}", Download.Attribute, downloadElement.ToHtmlPretty())); + + var response = await RequestWithCookiesAsync(link.ToString(), headers: headers); + if (response.IsRedirect) + response = await RequestWithCookiesAsync(response.RedirectingTo, headers: headers); + results = response.ContentString; + var searchResultDocument = searchResultParser.ParseDocument(results); + var downloadElement = searchResultDocument.QuerySelector(querySelector); + if (downloadElement == null) + { + logger.Debug( + $"CardigannIndexer ({Id}): Download selector {querySelector} could not match any elements, retrying with next available selector."); + continue; + } + + logger.Debug( + $"CardigannIndexer ({Id}): Download selector {querySelector} matched:{downloadElement.ToHtmlPretty()}"); + var href = ""; + if (selector.Attribute != null) + { + href = downloadElement.GetAttribute(selector.Attribute); + if (href == null) + throw new Exception( + $"Attribute \"{selector.Attribute}\" is not set for element {downloadElement.ToHtmlPretty()}"); + } + else + { + href = downloadElement.TextContent; + } + + href = applyFilters(href, Download.Filters, variables); + var torrentLink = resolvePath(href, link); + if (torrentLink.Scheme != "magnet") + { + // Test link + response = await base.RequestWithCookiesAsync( + torrentLink.ToString(), null, RequestType.GET, headers: headers); + if (response.IsRedirect) + await FollowIfRedirect(response); + var content = response.ContentBytes; + if (content.Length >= 1 && content[0] != 'd') + { + logger.Debug( + $"CardigannIndexer ({Id}): Download selector {querySelector}'s torrent file is invalid, retrying with next available selector"); + continue; + } + } + + link = torrentLink; + return await base.Download(link, method, link.ToString()); } - else + catch (Exception e) { - href = downloadElement.TextContent; + logger.Error(e, + $"CardigannIndexer ({Id}): An exception occurred while trying selector {querySelector}, retrying with next available selector" + ); } - href = applyFilters(href, Download.Filters, variables); - link = resolvePath(href, link); - } - else - { - logger.Error(string.Format("CardigannIndexer ({0}): Download selector {1} didn't match:\n{2}", Id, Download.Selector, results)); - throw new Exception(string.Format("Download selector {0} didn't match", Download.Selector)); } + + logger.Error( + $"CardigannIndexer ({Id}): Download selectors didn't match:\n{results}"); + throw new Exception($"Download selectors didn't match"); } } return await base.Download(link, method, link.ToString()); diff --git a/src/Jackett.Common/Models/IndexerDefinition.cs b/src/Jackett.Common/Models/IndexerDefinition.cs index 8b18356f4..91a1bffb2 100644 --- a/src/Jackett.Common/Models/IndexerDefinition.cs +++ b/src/Jackett.Common/Models/IndexerDefinition.cs @@ -167,10 +167,15 @@ namespace Jackett.Common.Models public class downloadBlock { - public string Selector { get; set; } - public string Attribute { get; set; } + public List Selectors { get; set; } public List Filters { get; set; } public string Method { get; set; } public requestBlock Before { get; set; } } + + public class downloadsField + { + public string Selector { get; set; } + public string Attribute { get; set; } + } }