mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-15 00:14:10 +02:00
Compare commits
51 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
91b87ee7be | ||
![]() |
ee8fc6a78f | ||
![]() |
18f48cb04b | ||
![]() |
dd64739af6 | ||
![]() |
05c4d1e331 | ||
![]() |
f9ad475aa8 | ||
![]() |
ad17897edd | ||
![]() |
2356ef3837 | ||
![]() |
b63e97fecd | ||
![]() |
c025a98cbf | ||
![]() |
0c84507b51 | ||
![]() |
875d7a005e | ||
![]() |
b1c25d4c5b | ||
![]() |
5ef6b8601a | ||
![]() |
a512a1e6b5 | ||
![]() |
5ba93dd9c2 | ||
![]() |
5216b6ece7 | ||
![]() |
eb5c8f4dcd | ||
![]() |
8a6ba04688 | ||
![]() |
287ad3a995 | ||
![]() |
00494bdac1 | ||
![]() |
4189aeac0e | ||
![]() |
5f66b1a297 | ||
![]() |
ad77068a7b | ||
![]() |
75d53b4026 | ||
![]() |
a4cd5e0047 | ||
![]() |
eccafdf4af | ||
![]() |
a7fab04e42 | ||
![]() |
95e17d1741 | ||
![]() |
a6c821762a | ||
![]() |
e66a839fb3 | ||
![]() |
1a8b48f4dc | ||
![]() |
e32baf18a4 | ||
![]() |
486a5313e4 | ||
![]() |
79b262569f | ||
![]() |
9a2a019ff5 | ||
![]() |
2dc4582830 | ||
![]() |
48d7ce271b | ||
![]() |
11acfddd64 | ||
![]() |
23f36bb0f8 | ||
![]() |
b2ff7b7091 | ||
![]() |
f73b55215c | ||
![]() |
806eabde31 | ||
![]() |
9538adcc30 | ||
![]() |
aef7b34ec3 | ||
![]() |
13e1548d54 | ||
![]() |
0c667322d9 | ||
![]() |
fa9abf2fed | ||
![]() |
5cd5b5277f | ||
![]() |
3e97da4c1a | ||
![]() |
610821a435 |
@@ -61,6 +61,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* shokweb
|
||||
* ShowRSS
|
||||
* SkyTorrentsClone
|
||||
* SolidTorrents
|
||||
* sukebei.Nyaa.si
|
||||
* sukebei-Pantsu
|
||||
* The Pirate Bay (TPB)
|
||||
@@ -72,6 +73,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* TorrentFunk
|
||||
* TorrentGalaxy.org (TGx)
|
||||
* TorrentKitty
|
||||
* TorrentProject2
|
||||
* Torrents.csv
|
||||
* Torrent9
|
||||
* Torernt9 clone (torrents9.ch)
|
||||
@@ -148,6 +150,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* BitsPiracy
|
||||
* Bitspyder
|
||||
* BitTorrentFiles [![(invite needed)][inviteneeded]](#)
|
||||
* BitTurk
|
||||
* BJ-Share (BJ)
|
||||
* BlueBird
|
||||
* Blutopia (BLU)
|
||||
@@ -271,6 +274,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* PuntoTorrent
|
||||
* PWTorrents (PWT)
|
||||
* Racing4Everyone (R4E)
|
||||
* RacingForMe (RFM)
|
||||
* Redacted (PassTheHeadphones)
|
||||
* Red Star Torrent (RST)
|
||||
* Redtopia (RED)
|
||||
@@ -334,6 +338,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* TurkTorrent (TT)
|
||||
* TV Chaos UK (TVCUK)
|
||||
* TV-Vault
|
||||
* TVstore
|
||||
* u-torrents (SceneFZ)
|
||||
* UHDBits
|
||||
* Ultimate Gamer Club (UGC)
|
||||
@@ -359,7 +364,7 @@ It will query all configured indexers and return the combined results.
|
||||
|
||||
If your client supports multiple feeds it's recommended to add each indexer directly instead of using the all indexer.
|
||||
Using the all indexer has no advantages (besides reduced management overhead), only disadvantages:
|
||||
* you loose control over indexer specific settings (categories, search modes, etc.)
|
||||
* you lose control over indexer specific settings (categories, search modes, etc.)
|
||||
* mixing search modes (IMDB, query, etc.) might cause low quality results
|
||||
* indexer specific categories (>= 100000) can't be used.
|
||||
* slow indexers will slow down the overall result
|
||||
|
@@ -15,11 +15,9 @@
|
||||
- {id: 10, cat: TV/Anime, desc: "Animation: HD720P"}
|
||||
- {id: 11, cat: TV/Anime, desc: "Animation: HD1080P"}
|
||||
- {id: 56, cat: TV/Anime, desc: "Animation: DVDRip"}
|
||||
- {id: 13, cat: TV/Anime, desc: "Animation: DVD"}
|
||||
- {id: 18, cat: PC/0day, desc: "Applications: PC"}
|
||||
- {id: 16, cat: PC/Games, desc: "Applications: Jeux"}
|
||||
- {id: 19, cat: PC/Phone-Android, desc: "Applications: Android"}
|
||||
- {id: 38, cat: PC/Phone-IOS, desc: "Applications: Mobile Phone"}
|
||||
- {id: 17, cat: PC/0day, desc: "Applications: Autres"}
|
||||
- {id: 67, cat: TV, desc: "Autres: Emission TV"}
|
||||
- {id: 68, cat: TV/Sport, desc: "Autres: Sport"}
|
||||
@@ -34,6 +32,7 @@
|
||||
- {id: 53, cat: Books, desc: "E-Books: Livre Anglais"}
|
||||
- {id: 52, cat: Books, desc: "E-Books: Revue - Journaux"}
|
||||
- {id: 51, cat: Books, desc: "E-Books: BD"}
|
||||
- {id: 95, cat: Movies, desc: "Films: Film Divx XviD"}
|
||||
- {id: 66, cat: Movies, desc: "Films: VOSTFR"}
|
||||
- {id: 71, cat: Movies/WEBDL, desc: "Films: WEB-DL"}
|
||||
- {id: 65, cat: Movies, desc: "Films: VO"}
|
||||
@@ -49,19 +48,13 @@
|
||||
- {id: 92, cat: Movies/HD, desc: "Films: 4K"}
|
||||
- {id: 69, cat: Movies/3D, desc: "Films: Film 3D"}
|
||||
- {id: 3, cat: Movies/DVD, desc: "Films: DVDRIP"}
|
||||
- {id: 4, cat: Movies/DVD, desc: "Films: DVD5"}
|
||||
- {id: 5, cat: Movies/DVD, desc: "Films: DVD9"}
|
||||
- {id: 91, cat: Movies/HD, desc: "Films: RemuX"}
|
||||
- {id: 89, cat: Movies/HD, desc: "Films: BD/BR Rip"}
|
||||
- {id: 88, cat: Movies/BluRay, desc: "Films: Full BD/BR"}
|
||||
- {id: 77, cat: Other, desc: "GPS: Cartes"}
|
||||
- {id: 78, cat: Other, desc: "GPS: Radars"}
|
||||
- {id: 97, cat: Movies, desc: "Films: Cours Métrage"}
|
||||
- {id: 79, cat: TV/Anime, desc: "Mangas: HD"}
|
||||
- {id: 80, cat: TV/Anime, desc: "Mangas: HD VO"}
|
||||
- {id: 81, cat: TV/Anime, desc: "Mangas: HD VOSTFR"}
|
||||
- {id: 82, cat: TV/Anime, desc: "Mangas: DVDRIP"}
|
||||
- {id: 83, cat: TV/Anime, desc: "Mangas: DVDRIP VO"}
|
||||
- {id: 84, cat: TV/Anime, desc: "Mangas: DVDRIP VOSTFR"}
|
||||
- {id: 85, cat: TV/Anime, desc: "Mangas: Web-DL"}
|
||||
- {id: 86, cat: TV/Anime, desc: "Mangas: TV-RIP"}
|
||||
- {id: 75, cat: Audio, desc: "Musique: Concert TVRip"}
|
||||
@@ -70,6 +63,7 @@
|
||||
- {id: 22, cat: Audio/MP3, desc: "Musique: Album MP3"}
|
||||
- {id: 23, cat: Audio/Lossless, desc: "Musique: Album Flac"}
|
||||
- {id: 64, cat: Audio, desc: "Musique: Mégamix Maison"}
|
||||
- {id: 96, cat: Audio/MP3, desc: "Musique: PlayList MP3"}
|
||||
- {id: 94, cat: Audio, desc: "Musique: Podcast"}
|
||||
- {id: 58, cat: Audio, desc: "Musique: Concert"}
|
||||
- {id: 93, cat: TV, desc: "Serie TV: Saison VOSTFR"}
|
||||
@@ -80,6 +74,7 @@
|
||||
- {id: 73, cat: TV/WEB-DL, desc: "Serie TV: WEB-DL"}
|
||||
- {id: 7, cat: TV, desc: "Serie TV: Episode FR"}
|
||||
- {id: 6, cat: TV, desc: "Serie TV: Saison FR"}
|
||||
- {id: 98, cat: TV/Anime, desc: "Serie TV: Manga VOSTFR"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
@@ -10,12 +10,24 @@
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 2, cat: Console, desc: "Games"}
|
||||
- {id: 3, cat: Movies, desc: "Movies"}
|
||||
- {id: 4, cat: Audio, desc: "Music"}
|
||||
- {id: 9, cat: TV/Anime, desc: " Anime"}
|
||||
- {id: 17, cat: TV, desc: " TV"}
|
||||
- {id: 18, cat: PC, desc: "Appz"}
|
||||
- {id: 65, cat: Books, desc: "Books"}
|
||||
- {id: 27, cat: Console/NDS, desc: "Games/Nintendo-DS"}
|
||||
- {id: 28, cat: Console/Other, desc: "Games/Switch"}
|
||||
- {id: 42, cat: PC/Phone-Android, desc: "Mobile/Android"}
|
||||
- {id: 44, cat: Movies/UHD, desc: "Movies/4K"}
|
||||
- {id: 13, cat: Movies/BluRay, desc: "Movies/Bluray"}
|
||||
- {id: 12, cat: Movies/DVD, desc: "Movies/DVD-R"}
|
||||
- {id: 14, cat: Movies, desc: "Movies/Packs"}
|
||||
- {id: 67, cat: Movies/HD, desc: "Movies/x264"}
|
||||
- {id: 55, cat: Movies/HD, desc: "Movies/X265"}
|
||||
- {id: 45, cat: Movies, desc: "Movies/Remux"}
|
||||
- {id: 62, cat: Audio, desc: "Music/Audio"}
|
||||
- {id: 32, cat: Audio, desc: "Music/Packs"}
|
||||
- {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"}
|
||||
- {id: 63, cat: PC/0day, desc: "Windows/Applications"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -80,31 +92,35 @@
|
||||
size:
|
||||
selector: td:nth-last-child(6)
|
||||
files:
|
||||
selector: td:nth-last-child(9)
|
||||
selector: a[href^="filelist.php?id="]
|
||||
grabs:
|
||||
selector: td:nth-last-child(5)
|
||||
selector: a[href^="snatches.php?id="]
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Times", ""]
|
||||
- name: regexp
|
||||
args: "(\\d+)"
|
||||
# 2 flavours of dates
|
||||
date:
|
||||
# Today<br />10:20 AM
|
||||
# Yesterday<br />08:03 PM
|
||||
# Today<br /> 10:20 AM
|
||||
# Yesterday<br /> 08:03 PM
|
||||
optional: true
|
||||
selector: td:nth-last-child(7):contains("day")
|
||||
date:
|
||||
# Feb 14 2019<br />10:20 AM
|
||||
# Feb 14 2019<br /> 10:20 AM
|
||||
optional: true
|
||||
selector: td:nth-last-child(7):not(:contains("day"))
|
||||
filters:
|
||||
- name: regex # drop break in between date and time
|
||||
args: ["(.+?)<[^>]*>(.+?)","$1 $2"]
|
||||
- name: dateparse
|
||||
args: "Jan 2 2006 03:04 pm"
|
||||
seeders:
|
||||
selector: td:nth-last-child(4)
|
||||
text: "0"
|
||||
seeders:
|
||||
optional: true
|
||||
selector: a[href$="#seeders"]
|
||||
leechers:
|
||||
selector: td:nth-last-child(3)
|
||||
text: "0"
|
||||
leechers:
|
||||
optional: true
|
||||
selector: a[href$="#leechers"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"b:contains(\"[FREE]\")": "0"
|
||||
|
@@ -95,9 +95,9 @@
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
|
@@ -67,9 +67,6 @@
|
||||
path: /
|
||||
selector: :has(a[href="logout.php"])
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# http://alein.org/index.php?page=torrents&category=1%3B15%3B41%3B14%3B48%3B39%3B20%3B16%3B5%3B21%3B22%3B11&search=venom&active=1
|
||||
@@ -81,22 +78,35 @@
|
||||
active: "1"
|
||||
|
||||
rows:
|
||||
selector: tr.trclass
|
||||
selector: tr.trclass:not(:has(td.lista-cat-rec))
|
||||
fields:
|
||||
title:
|
||||
selector: td.lista-list a
|
||||
selector: td a[href*="id="]
|
||||
details:
|
||||
selector: td.lista-list a
|
||||
selector: td a[href*="id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: td.lista-cat a
|
||||
selector: td a[href*="category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
download:
|
||||
selector: td.lista-list a
|
||||
selector: td a[href*="id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: id
|
||||
- name: prepend
|
||||
args: "download.php?id="
|
||||
- name: append
|
||||
args: "&f={{.Result.title}}.torrent"
|
||||
banner:
|
||||
selector: td a[href*="id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "src=(.+?) width="
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
|
@@ -6,6 +6,8 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://amigos-share.club/
|
||||
legacylinks:
|
||||
- http://amigos-share.club/
|
||||
|
||||
caps:
|
||||
@@ -116,8 +118,7 @@
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
method: form
|
||||
form: form.form-signin
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
|
@@ -95,9 +95,9 @@
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
|
@@ -49,7 +49,7 @@
|
||||
sent: "yes"
|
||||
returnto: "/"
|
||||
error:
|
||||
- selector: table:contains("Login failed!")
|
||||
- selector: div.error
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
search: "{{if .Keywords}}{{ .Keywords }}{{else}} {{end}}"
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr:has(a[href^="browse.php?cat="])
|
||||
fields:
|
||||
|
167
src/Jackett.Common/Definitions/bitturk.yml
Normal file
167
src/Jackett.Common/Definitions/bitturk.yml
Normal file
@@ -0,0 +1,167 @@
|
||||
---
|
||||
site: bitturk
|
||||
name: BitTurk
|
||||
description: "BitTurk is a Turkish Private Torrent Tracker for HD MOVIES / TV / GENERAL. This Indexer is for English only."
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.bitturk.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 69, cat: Movies, desc: "BiTTuRK Altın"}
|
||||
- {id: 56, cat: Movies, desc: "BTRG"}
|
||||
- {id: 57, cat: Movies, desc: "Yerli Dizi"}
|
||||
- {id: 62, cat: Movies, desc: "Yab@ncı Dizi"}
|
||||
- {id: 63, cat: Movies, desc: "Türkçe Film"}
|
||||
- {id: 64, cat: Movies, desc: "Türk Filmi"}
|
||||
- {id: 66, cat: Movies/HD, desc: "x265"}
|
||||
- {id: 67, cat: XXX, desc: "XxX"}
|
||||
- {id: 68, cat: Movies, desc: "Dual (TR-~)"}
|
||||
- {id: 58, cat: Movies, desc: "Film"}
|
||||
- {id: 60, cat: Movies/3D, desc: "3D"}
|
||||
- {id: 45, cat: Movies, desc: "Eğitim / Prog "}
|
||||
- {id: 1, cat: Movies, desc: "Filmler"}
|
||||
- {id: 14, cat: Movies/3D, desc: "3D Film"}
|
||||
- {id: 16, cat: Movies, desc: "Animasyon"}
|
||||
- {id: 17, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 31, cat: Movies, desc: "Belgesel"}
|
||||
- {id: 32, cat: Movies/BluRay, desc: "Bluray"}
|
||||
- {id: 33, cat: Movies/BluRay, desc: "BRRiP"}
|
||||
- {id: 34, cat: Movies, desc: "Çizgi Film"}
|
||||
- {id: 35, cat: Movies, desc: "D-Z0N3"}
|
||||
- {id: 36, cat: Movies/DVD, desc: "DVD"}
|
||||
- {id: 37, cat: Movies, desc: "MP4"}
|
||||
- {id: 38, cat: Movies, desc: "Türk Filmi"}
|
||||
- {id: 39, cat: Movies, desc: "Türkçe BoX"}
|
||||
- {id: 40, cat: Movies, desc: "Türkçe Film"}
|
||||
- {id: 41, cat: Movies, desc: "ViP"}
|
||||
- {id: 42, cat: Movies/SD, desc: "XviD"}
|
||||
- {id: 43, cat: Movies/SD, desc: "XviD BoX"}
|
||||
- {id: 55, cat: Movies/WEBDL, desc: "WEB-DL"}
|
||||
- {id: 7, cat: Audio, desc: "Müzik"}
|
||||
- {id: 20, cat: Audio, desc: "Türkçe MüziK"}
|
||||
- {id: 46, cat: Audio, desc: "Yab@ncı MüziK"}
|
||||
- {id: 21, cat: Audio/Video, desc: "Video Klipler"}
|
||||
- {id: 2, cat: Console, desc: "Oyun"}
|
||||
- {id: 6, cat: PC, desc: "Program / Misc "}
|
||||
- {id: 47, cat: Other, desc: "Resimler"}
|
||||
- {id: 48, cat: TV, desc: "Televizyon"}
|
||||
- {id: 49, cat: TV/HD, desc: "Tv HD"}
|
||||
- {id: 50, cat: TV, desc: "Yab@ncı Dizi"}
|
||||
- {id: 51, cat: TV, desc: "Yerli Dizi"}
|
||||
- {id: 44, cat: Books, desc: "E-BooK"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: info
|
||||
type: info
|
||||
label: Layout
|
||||
default: "<ol><li>Only the English Classic profile is supported.<li>Make sure to set the <b>Torrent Listing (Listeleme Biçimi)</b> option in your profile to <b>Classic (Klasik)</b><li>And set the <b>Language (Dil)</b> to <b>English</b><li>Using the <i>Modern</i> theme will prevent results, and using <i>Turkish</i> will prevent upload dates.</ol>"
|
||||
|
||||
login:
|
||||
path: ?p=home&pid=1
|
||||
method: form
|
||||
form: form#loginbox_form
|
||||
submitpath: ajax/login.php
|
||||
inputs:
|
||||
action: "login"
|
||||
loginbox_membername: "{{ .Config.username }}"
|
||||
loginbox_password: "{{ .Config.password }}"
|
||||
loginbox_remember: 1
|
||||
loginbox_remember: "true"
|
||||
selectorinputs:
|
||||
securitytoken:
|
||||
selector: "script:contains(\"stKey: \")"
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "stKey: \"(.+?)\","
|
||||
error:
|
||||
- selector: ":contains(\"-ERROR-\")"
|
||||
test:
|
||||
path: ?p=home&pid=1
|
||||
selector: a[href*="/?p=logout&"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: /
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["[^a-zA-Z0-9]+", "%25"]
|
||||
inputs:
|
||||
p: "torrents"
|
||||
pid: "32"
|
||||
$raw: "{{range .Categories}}cid[]={{.}}&{{end}}"
|
||||
keywords: "{{ .Keywords }}"
|
||||
search_type: "name"
|
||||
searchin: "title"
|
||||
error:
|
||||
- selector: div.error:not(:contains("Gösterilecek sonuç bulunamadı."))
|
||||
rows:
|
||||
selector: table#torrents_table_classic tr:has(td.torrent_name)
|
||||
fields:
|
||||
title:
|
||||
selector: a[href*="?p=torrents&pid=10&action=details"]
|
||||
category:
|
||||
selector: div.category_image > a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cid
|
||||
details:
|
||||
selector: a[href*="?p=torrents&pid=10&action=details"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="?p=torrents&pid=10&action=download"]
|
||||
attribute: href
|
||||
date:
|
||||
optional: true
|
||||
# Uploaded 30-01-2019 15:02 by
|
||||
selector: td.torrent_name:not(:contains(" at "))
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Uploaded (.+?) by"
|
||||
- name: dateparse
|
||||
args: "02-01-2006 15:04"
|
||||
date:
|
||||
optional: true
|
||||
# Uploaded Friday at 05:11 by
|
||||
# Uploaded Today at 00:48 by
|
||||
# Uploaded Yesterday at 23:57 by
|
||||
selector: td.torrent_name:contains(" at ")
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Uploaded (.+?) by"
|
||||
- name: replace
|
||||
args: [" at ", " "]
|
||||
size:
|
||||
selector: a[rel="torrent_size"]
|
||||
seeders:
|
||||
selector: a[rel="torrent_seeders"]
|
||||
leechers:
|
||||
selector: a[rel="torrent_leechers"]
|
||||
grabs:
|
||||
selector: a[rel="times_completed"]
|
||||
banner:
|
||||
selector: a[rel="fancybox"]
|
||||
optional: true
|
||||
attribute: href
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[src$=\"/torrent_free.png\"]": "0.5"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"img[src$=\"/torrent_multiple_upload.png\"]": "2"
|
||||
"*": "1"
|
@@ -95,9 +95,9 @@
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
|
@@ -94,9 +94,9 @@
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
|
@@ -7,7 +7,7 @@
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www.cpasbiens.cz/
|
||||
- https://www.cpasbiens.bz/
|
||||
legacylinks:
|
||||
- http://www.cpasbiens.cc/
|
||||
- http://www.cpabien.cm/
|
||||
@@ -33,6 +33,7 @@
|
||||
- http://www.cpasbien.io/
|
||||
- https://www.cpabien.bz/
|
||||
- https://www.cpabien.link/
|
||||
- https://www.cpasbiens.cz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -101,9 +101,9 @@
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
|
@@ -27,9 +27,9 @@
|
||||
search:
|
||||
# site returns just 30 results, attempt to fetch upto 90
|
||||
paths:
|
||||
- path: index.php
|
||||
- path: index.php/page/2/
|
||||
- path: index.php/page/3/
|
||||
- path: /
|
||||
- path: /page/2/
|
||||
- path: /page/3/
|
||||
keywordsfilters:
|
||||
# most ES/ITA TV torrents are in XXxYY format, so we search without S/E prefixes and filter later
|
||||
- name: re_replace
|
||||
|
@@ -50,7 +50,7 @@
|
||||
active: 0
|
||||
|
||||
rows:
|
||||
selector: tr:has(a[href^="index.php?page=torrent-details"])
|
||||
selector: tr > td > table > tbody tr:has(a[href^="index.php?page=torrent-details"])
|
||||
fields:
|
||||
title:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
|
@@ -7,7 +7,7 @@
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www.gktorrent.tv/
|
||||
- https://www.gktorrent.cx/
|
||||
legacylinks:
|
||||
- https://www.gktorrent.com/
|
||||
- http://www.gktorrent.com/
|
||||
@@ -24,6 +24,7 @@
|
||||
- https://www.gktorrent.me/
|
||||
- https://www.rantop.org/
|
||||
- https://www.gktorrent.net/
|
||||
- https://www.gktorrent.tv/
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: movies, cat: Movies, desc: "Movies"}
|
||||
|
@@ -100,9 +100,9 @@
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0"
|
||||
|
@@ -44,19 +44,19 @@
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in 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<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
method: cookie
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
captcha:
|
||||
type: image
|
||||
selector: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("failed"))
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
|
@@ -98,9 +98,9 @@
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
|
@@ -26,7 +26,7 @@
|
||||
- {id: 26, cat: PC/Games, desc: "Games/PC"}
|
||||
- {id: 38, cat: PC/Phone-Other, desc: "Mobile"}
|
||||
- {id: 59, cat: Movies/3D, desc: "Movies/3D"}
|
||||
- {id: 92, cat: Movies/HD, desc: "Movies/4K-UHD"}
|
||||
- {id: 92, cat: Movies/UHD, desc: "Movies/4K-UHD"}
|
||||
- {id: 32, cat: Movies/BluRay, desc: "Movies/Blu-Ray"}
|
||||
- {id: 28, cat: Movies/DVD, desc: "Movies/DVD"}
|
||||
- {id: 42, cat: Movies/HD, desc: "Movies/HD-x264"}
|
||||
@@ -79,7 +79,7 @@
|
||||
incldead: 1
|
||||
search_by: "{{ if .Query.IMDBID }}imdb{{else}}name{{end}}"
|
||||
rows:
|
||||
selector: table.torrenttable > tbody > tr:has(a[title][href^="details.php?id="])
|
||||
selector: table.table-striped > tbody > tr:has(a[title][href^="details.php?id="])
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
@@ -93,13 +93,10 @@
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
imdb:
|
||||
selector: a[title="IMDB"]
|
||||
attribute: href
|
||||
banner:
|
||||
attribute: rel
|
||||
imdb:
|
||||
selector: a[href^="http://www.imdb.com/title/"]
|
||||
selector: a[href*="https://www.imdb.com/title/"]
|
||||
optional: true
|
||||
attribute: href
|
||||
download:
|
||||
@@ -114,13 +111,10 @@
|
||||
selector: td:has(a[href$="filelist=1#filelist"])
|
||||
remove: a
|
||||
date:
|
||||
selector: td > span:has(i.fa-clock)
|
||||
remove: b
|
||||
selector: td > small:has(i.fa-clock)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\xA0", " "]
|
||||
- name: replace
|
||||
args: ["Added on ", ""]
|
||||
- name: replace
|
||||
args: ["st ", " "]
|
||||
- name: replace
|
||||
@@ -129,8 +123,8 @@
|
||||
args: ["rd ", " "]
|
||||
- name: replace
|
||||
args: ["th ", " "]
|
||||
- name: replace
|
||||
args: [" by", ""]
|
||||
- name: regexp
|
||||
args: "(.+?) by"
|
||||
- name: append
|
||||
args: " +02:00"
|
||||
- name: dateparse
|
||||
@@ -145,6 +139,3 @@
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
description:
|
||||
selector: td:has(a[title][href^="details.php?id="])
|
||||
remove: a[title][href^="details.php?id="], div, font:contains("Added on")
|
||||
|
@@ -142,7 +142,7 @@
|
||||
- name: re_replace
|
||||
args: ["([a-zA-Z]+)\\s+(\\d{1,2})\\s+'(\\d{2})", "$2 $1 $3"]
|
||||
- name: dateparse
|
||||
args: "02 Jan 06"
|
||||
args: "2 Jan 06"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": 1
|
||||
|
@@ -11,6 +11,7 @@
|
||||
- https://nnm-club.name/
|
||||
certificates:
|
||||
- 7877113458e90f3643dd28424657a29469f5dc55
|
||||
- 0edfdcc8cf9f69dbe5473878145cae92504275b0
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
|
@@ -76,8 +76,6 @@
|
||||
autocomplete_toggle: 1
|
||||
rows:
|
||||
selector: table#torrent_table tr:not(:first-child)
|
||||
# filters:
|
||||
# - name: andmatch
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="/torrents.php?id="]
|
||||
@@ -85,10 +83,8 @@
|
||||
selector: td.cats_col div a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: strdump
|
||||
- name: regexp
|
||||
args: "(\\d+)]=1"
|
||||
- name: strdump
|
||||
details:
|
||||
selector: a[href^="/torrents.php?id="]
|
||||
attribute: href
|
||||
|
@@ -132,8 +132,13 @@
|
||||
selector: td:nth-child(3) a
|
||||
attribute: href
|
||||
size:
|
||||
# 1,36 GB
|
||||
# 296,98 MB
|
||||
# 1.018,29 MB
|
||||
selector: td:nth-child(6)
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
seeders:
|
||||
|
@@ -105,9 +105,9 @@
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
|
223
src/Jackett.Common/Definitions/racingforme.yml
Normal file
223
src/Jackett.Common/Definitions/racingforme.yml
Normal file
@@ -0,0 +1,223 @@
|
||||
---
|
||||
site: racingforme
|
||||
name: RacingForMe
|
||||
description: "Racing For Me (RFM) is a Private Torrent Tracker for RACING"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.racingfor.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1000, cat: TV/Sport, desc: "Formula 1 - Full races"}
|
||||
- {id: 1010, cat: TV/Sport, desc: "F1 Full Seasons"}
|
||||
- {id: 1020, cat: TV/Sport, desc: "F1 Full Season 1950-1980"}
|
||||
- {id: 1030, cat: TV/Sport, desc: "F1 Full Season 1981-1990"}
|
||||
- {id: 1040, cat: TV/Sport, desc: "F1 Full Season 1991-2000"}
|
||||
- {id: 1050, cat: TV/Sport, desc: "F1 Full Season 2001-2010"}
|
||||
- {id: 1060, cat: TV/Sport, desc: "F1 Full Season 2011-2017"}
|
||||
- {id: 1070, cat: TV/Sport, desc: "F1 Full Season 2011-2017 (HD)"}
|
||||
- {id: 2000, cat: TV/Sport, desc: "Formula 1 - Highlights"}
|
||||
- {id: 2010, cat: TV/Sport, desc: "F1 Highlights 1950-1980"}
|
||||
- {id: 2020, cat: TV/Sport, desc: "F1 Highlights 1981-1990"}
|
||||
- {id: 2030, cat: TV/Sport, desc: "F1 Highlights 1991-2000"}
|
||||
- {id: 2040, cat: TV/Sport, desc: "F1 Highlights 2001-2010"}
|
||||
- {id: 2050, cat: TV/Sport, desc: "F1 Highlights 2011-2017"}
|
||||
- {id: 2060, cat: TV/Sport, desc: "F1 Highlights 2011-2017 (HD)"}
|
||||
- {id: 3000, cat: TV/Sport, desc: "Formula 1 - FP and quali"}
|
||||
- {id: 3010, cat: TV/Sport, desc: "F1 FP and quali 1950-1980"}
|
||||
- {id: 3020, cat: TV/Sport, desc: "F1 FP and quali 1981-1990"}
|
||||
- {id: 3030, cat: TV/Sport, desc: "F1 FP and quali 1991-2000"}
|
||||
- {id: 3040, cat: TV/Sport, desc: "F1 FP and quali 2001-2010"}
|
||||
- {id: 3050, cat: TV/Sport, desc: "F1 FP and quali 2011-2017"}
|
||||
- {id: 3060, cat: TV/Sport, desc: "F1 FP and quali 2011-2017 (HD)"}
|
||||
- {id: 4000, cat: TV/Sport, desc: "Formula 1 - Onboard"}
|
||||
- {id: 4010, cat: TV/Sport, desc: "F1 Onboard 1950-1980"}
|
||||
- {id: 4020, cat: TV/Sport, desc: "F1 Onboard 1981-1990"}
|
||||
- {id: 4030, cat: TV/Sport, desc: "F1 Onboard 1991-2000"}
|
||||
- {id: 4040, cat: TV/Sport, desc: "F1 Onboard 2001-2010"}
|
||||
- {id: 4050, cat: TV/Sport, desc: "F1 Onboard 2011-2017"}
|
||||
- {id: 5000, cat: TV/Sport, desc: "Formula 1 - Miscellaneous"}
|
||||
- {id: 5010, cat: TV/Sport, desc: "F1 Misc Documentaries"}
|
||||
- {id: 5020, cat: TV/Sport, desc: "F1 Misc Driver/team specials"}
|
||||
- {id: 5030, cat: TV/Sport, desc: "F1 Misc Event specials"}
|
||||
- {id: 5040, cat: TV/Sport, desc: "F1 Misc Other"}
|
||||
- {id: 6000, cat: TV/Sport, desc: "Formula 1 - 2018"}
|
||||
- {id: 6010, cat: TV/Sport, desc: "F1 2018 Free practices"}
|
||||
- {id: 6020, cat: TV/Sport, desc: "F1 2018 Qualifications"}
|
||||
- {id: 6030, cat: TV/Sport, desc: "F1 2018 Races"}
|
||||
- {id: 6040, cat: TV/Sport, desc: "F1 2018 Highlights"}
|
||||
- {id: 6050, cat: TV/Sport, desc: "F1 2018 Onboards"}
|
||||
- {id: 6060, cat: TV/Sport, desc: "F1 2018 Other"}
|
||||
- {id: 7000, cat: TV/Sport, desc: "Formula 1 - 2018 (HD)"}
|
||||
- {id: 7010, cat: TV/Sport, desc: "F1 2018 (HD) Free practices"}
|
||||
- {id: 7020, cat: TV/Sport, desc: "F1 2018 (HD) Qualifications"}
|
||||
- {id: 7030, cat: TV/Sport, desc: "F1 2018 (HD) Races"}
|
||||
- {id: 7040, cat: TV/Sport, desc: "F1 2018 (HD) Highlights"}
|
||||
- {id: 7050, cat: TV/Sport, desc: "F1 2018 (HD) Other"}
|
||||
- {id: 8000, cat: TV/Sport, desc: "Moto3 / Moto2 / MotoGP"}
|
||||
- {id: 8010, cat: TV/Sport, desc: "Moto 125cc"}
|
||||
- {id: 8020, cat: TV/Sport, desc: "Moto 250cc"}
|
||||
- {id: 8030, cat: TV/Sport, desc: "Moto Moto3"}
|
||||
- {id: 8040, cat: TV/Sport, desc: "Moto Moto2"}
|
||||
- {id: 8050, cat: TV/Sport, desc: "Moto MotoGP"}
|
||||
- {id: 9000, cat: TV/Sport, desc: "Motorbikes"}
|
||||
- {id: 9010, cat: TV/Sport, desc: "Motorbikes AMA"}
|
||||
- {id: 9020, cat: TV/Sport, desc: "Motorbikes World Supersport"}
|
||||
- {id: 9030, cat: TV/Sport, desc: "Motorbikes World Superstock"}
|
||||
- {id: 9040, cat: TV/Sport, desc: "Motorbikes WSBK"}
|
||||
- {id: 9050, cat: TV/Sport, desc: "Motorbikes BSB"}
|
||||
- {id: 9060, cat: TV/Sport, desc: "Motorbikes Other"}
|
||||
- {id: 9070, cat: TV/Sport, desc: "Motorbikes MotoAmerica"}
|
||||
- {id: 10000, cat: TV/Sport, desc: "Touring cars"}
|
||||
- {id: 10010, cat: TV/Sport, desc: "Touring cars WTCC"}
|
||||
- {id: 10020, cat: TV/Sport, desc: "Touring cars DTM"}
|
||||
- {id: 10030, cat: TV/Sport, desc: "Touring cars V8 Supercars"}
|
||||
- {id: 10040, cat: TV/Sport, desc: "Touring cars BTCC"}
|
||||
- {id: 10050, cat: TV/Sport, desc: "Touring cars Porsche Supercup"}
|
||||
- {id: 10060, cat: TV/Sport, desc: "Touring cars Other"}
|
||||
- {id: 11000, cat: TV/Sport, desc: "Sports cars"}
|
||||
- {id: 11010, cat: TV/Sport, desc: "Sports cars BSS"}
|
||||
- {id: 11020, cat: TV/Sport, desc: "Sports cars Le Mans 24H"}
|
||||
- {id: 11030, cat: TV/Sport, desc: "Sports cars WSC/WEC"}
|
||||
- {id: 11040, cat: TV/Sport, desc: "Sports cars IMSA"}
|
||||
- {id: 11050, cat: TV/Sport, desc: "Sports cars USC"}
|
||||
- {id: 11070, cat: TV/Sport, desc: "Sports cars BES"}
|
||||
- {id: 11080, cat: TV/Sport, desc: "Sports cars Super GT"}
|
||||
- {id: 11090, cat: TV/Sport, desc: "Sports cars IMSA Pilot Challenge"}
|
||||
- {id: 11060, cat: TV/Sport, desc: "Sports cars Other"}
|
||||
- {id: 12000, cat: TV/Sport, desc: "American open-wheelers"}
|
||||
- {id: 12010, cat: TV/Sport, desc: "American open-wheelers CCWS"}
|
||||
- {id: 12020, cat: TV/Sport, desc: "American open-wheelers IRL"}
|
||||
- {id: 12030, cat: TV/Sport, desc: "American open-wheelers CART"}
|
||||
- {id: 12040, cat: TV/Sport, desc: "American open-wheelers Indycar Series"}
|
||||
- {id: 12050, cat: TV/Sport, desc: "American open-wheelers Indy Lights"}
|
||||
- {id: 12060, cat: TV/Sport, desc: "American open-wheelers Other"}
|
||||
- {id: 13000, cat: TV/Sport, desc: "Rally"}
|
||||
- {id: 13010, cat: TV/Sport, desc: "Rally WRC"}
|
||||
- {id: 13020, cat: TV/Sport, desc: "Rally ERC"}
|
||||
- {id: 13030, cat: TV/Sport, desc: "Rally BRC"}
|
||||
- {id: 13040, cat: TV/Sport, desc: "Rally National series"}
|
||||
- {id: 13050, cat: TV/Sport, desc: "Rally Enduro-rally"}
|
||||
- {id: 13060, cat: TV/Sport, desc: "Rally Rally cross"}
|
||||
- {id: 13070, cat: TV/Sport, desc: "Rally Other"}
|
||||
- {id: 14000, cat: TV/Sport, desc: "NASCAR / Stockcars"}
|
||||
- {id: 14010, cat: TV/Sport, desc: "NASCAR Sprint Cup"}
|
||||
- {id: 14020, cat: TV/Sport, desc: "NASCAR XFINITY Series"}
|
||||
- {id: 14030, cat: TV/Sport, desc: "NASCAR CW Trucks"}
|
||||
- {id: 14040, cat: TV/Sport, desc: "NASCAR ARCA"}
|
||||
- {id: 14050, cat: TV/Sport, desc: "NASCAR Other"}
|
||||
- {id: 15000, cat: TV/Sport, desc: "F3000 / GP2 / Formula 2"}
|
||||
- {id: 15010, cat: TV/Sport, desc: "F2 1985-1990"}
|
||||
- {id: 15020, cat: TV/Sport, desc: "F2 1991-2000"}
|
||||
- {id: 15030, cat: TV/Sport, desc: "F2 2001-2011"}
|
||||
- {id: 15040, cat: TV/Sport, desc: "F2 2012-2017"}
|
||||
- {id: 15050, cat: TV/Sport, desc: "F2 GP2 Asia"}
|
||||
- {id: 16000, cat: TV/Sport, desc: "Single seaters"}
|
||||
- {id: 16010, cat: TV/Sport, desc: "Single seaters Formula 2"}
|
||||
- {id: 16020, cat: TV/Sport, desc: "Single seaters FIA F3"}
|
||||
- {id: 16030, cat: TV/Sport, desc: "Single seaters GP3"}
|
||||
- {id: 16040, cat: TV/Sport, desc: "Single seaters WSBR 2.0"}
|
||||
- {id: 16050, cat: TV/Sport, desc: "Single seaters WSBR 3.5"}
|
||||
- {id: 16060, cat: TV/Sport, desc: "Single seaters British F3"}
|
||||
- {id: 16070, cat: TV/Sport, desc: "Single seaters Formula E"}
|
||||
- {id: 16080, cat: TV/Sport, desc: "Single seaters Other"}
|
||||
- {id: 17000, cat: TV/Sport, desc: "Other Photographs"}
|
||||
- {id: 17010, cat: TV/Sport, desc: "Other Formula 1"}
|
||||
- {id: 17020, cat: TV/Sport, desc: "Other Motorbikes"}
|
||||
- {id: 17030, cat: TV/Sport, desc: "Other Touring cars"}
|
||||
- {id: 17040, cat: TV/Sport, desc: "Other Rally"}
|
||||
- {id: 17050, cat: TV/Sport, desc: "Other Sports cars"}
|
||||
- {id: 17060, cat: TV/Sport, desc: "Other"}
|
||||
- {id: 18000, cat: TV/Sport, desc: "Miscellaneous"}
|
||||
- {id: 18010, cat: TV/Sport, desc: "Documentaries"}
|
||||
- {id: 18020, cat: TV/Sport, desc: "TV shows"}
|
||||
- {id: 18030, cat: TV/Sport, desc: "DVD covers"}
|
||||
- {id: 18040, cat: TV/Sport, desc: "E-books"}
|
||||
- {id: 18050, cat: TV/Sport, desc: "Other"}
|
||||
- {id: 19000, cat: TV/Sport, desc: "Other"}
|
||||
- {id: 19010, cat: TV/Sport, desc: "Drag racing"}
|
||||
- {id: 19020, cat: TV/Sport, desc: "Truck racing"}
|
||||
- {id: 19030, cat: TV/Sport, desc: "Off-road"}
|
||||
- {id: 19040, cat: TV/Sport, desc: "Drifting"}
|
||||
- {id: 19050, cat: TV/Sport, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: login
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
rememberme: 1
|
||||
error:
|
||||
- selector: div#Error
|
||||
test:
|
||||
path: /
|
||||
selector: a[href="/logout"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# only 20 results per page so attempt to fetch 5 pages
|
||||
# https://www.racingfor.me/search/australia%20f1%202018?c=7000&ob=&offset=20#results
|
||||
- path: "search/{{if .Keywords}}{{.Keywords}}{{else}}*{{end}}"
|
||||
- path: "search/{{if .Keywords}}{{.Keywords}}&offset=20{{else}}*?offset=20{{end}}"
|
||||
- path: "search/{{if .Keywords}}{{.Keywords}}&offset=40{{else}}*?offset=40{{end}}"
|
||||
- path: "search/{{if .Keywords}}{{.Keywords}}&offset=60{{else}}*?offset=60{{end}}"
|
||||
- path: "search/{{if .Keywords}}{{.Keywords}}&offset=80{{else}}*?offset=80{{end}}"
|
||||
rows:
|
||||
selector: div#torrentBorder
|
||||
fields:
|
||||
category:
|
||||
selector: span.catIcon a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: c
|
||||
title:
|
||||
selector: span.browseTitle a
|
||||
download:
|
||||
selector: span.browseTitle a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["/details/", "/download/"]
|
||||
details:
|
||||
selector: span.browseTitle a
|
||||
attribute: href
|
||||
size:
|
||||
selector: span.torrentData span.torrentFiles
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(.+?) in"
|
||||
files:
|
||||
selector: span.torrentData span.torrentFiles
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" in > 100", " in 100 file"]
|
||||
- name: regexp
|
||||
args: " in (\\d+) file"
|
||||
seeders:
|
||||
selector: span.torrentData span.torrentPeers
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d+) seeder"
|
||||
leechers:
|
||||
selector: span.torrentData span.torrentPeers
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "and (\\d+) leecher"
|
||||
grabs:
|
||||
selector: span.torrentData span.torrentSnatched
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d+)"
|
||||
date:
|
||||
text: now
|
||||
downloadvolumefactor:
|
||||
text: "1"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
@@ -98,9 +98,9 @@
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: ["(ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"100% Free\"]": "0"
|
||||
|
@@ -39,13 +39,13 @@
|
||||
default: Without the itorrents option only magnet links will be provided.
|
||||
|
||||
search:
|
||||
# https://www.skytorrents.lol/?query=mr+mercedes+s02e05&sort=created
|
||||
# https://www.skytorrents.lol/?search=mr+mercedes+s02e05&sort=created
|
||||
# https://www.skytorrents.lol/top100
|
||||
paths:
|
||||
- path: "{{ if .Keywords }}?query={{ .Keywords }}&sort=created{{else}}top100{{end}}"
|
||||
- path: "{{ if .Keywords }}?query={{ .Keywords }}&sort=created&page=2{{else}}{{end}}"
|
||||
- path: "{{ if .Keywords }}?query={{ .Keywords }}&sort=created&page=3{{else}}{{end}}"
|
||||
- path: "{{ if .Keywords }}?query={{ .Keywords }}&sort=created&page=4{{else}}{{end}}"
|
||||
- path: "{{ if .Keywords }}?search={{ .Keywords }}&sort=created{{else}}top100{{end}}"
|
||||
- path: "{{ if .Keywords }}?search={{ .Keywords }}&sort=created&page=2{{else}}{{end}}"
|
||||
- path: "{{ if .Keywords }}?search={{ .Keywords }}&sort=created&page=3{{else}}{{end}}"
|
||||
- path: "{{ if .Keywords }}?search={{ .Keywords }}&sort=created&page=4{{else}}{{end}}"
|
||||
rows:
|
||||
selector: tr.result
|
||||
fields:
|
||||
|
74
src/Jackett.Common/Definitions/solidtorrents.yml
Normal file
74
src/Jackett.Common/Definitions/solidtorrents.yml
Normal file
@@ -0,0 +1,74 @@
|
||||
---
|
||||
site: solidtorrents
|
||||
name: SolidTorrents
|
||||
description: "SolidTorrents is a Public torrent meta-search engine"
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://solidtorrents.net/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
"Audio": Audio
|
||||
"Video": Movies
|
||||
"Image": Other/Misc
|
||||
"Document": Books/Comics
|
||||
"eBook": Books/Ebook
|
||||
"Program": PC/0day
|
||||
"Android": PC/Phone-Android
|
||||
"Archive": Other
|
||||
"Diskimage": PC/ISO
|
||||
"Sourcecode": Movies/Other
|
||||
"Database": Movies/DVD
|
||||
"Unknown": Other
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings: []
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://solidtorrents.net/search?q=gotham%20s05e02&sort=date&category=all
|
||||
- path: "search?q={{.Keywords}}&sort=date&category=all"
|
||||
rows:
|
||||
selector: div[role="listitem"]:has(a[href^="magnet:?xt="])
|
||||
fields:
|
||||
title:
|
||||
selector: div[class$="__title"] h3
|
||||
details:
|
||||
selector: div[class$="__title"] a
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="magnet:?xt="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: div.v-list__tile__content div:nth-of-type(2)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(.+?) \\|"
|
||||
date:
|
||||
selector: div.v-list__tile__content div:nth-of-type(2)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["a few", "1"]
|
||||
- name: replace
|
||||
args: ["an ", "1 "]
|
||||
- name: replace
|
||||
args: ["a ", "1 "]
|
||||
- name: regexp
|
||||
args: "(\\d+ \\w+ \\w+)"
|
||||
seeders:
|
||||
selector: div.v-list__tile__content div:nth-of-type(3) span:nth-child(1)
|
||||
leechers:
|
||||
selector: div.v-list__tile__content div:nth-of-type(3) span:nth-child(2)
|
||||
size:
|
||||
selector: div.v-list__tile__content div:nth-of-type(3)
|
||||
remove: span
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
@@ -10,67 +10,13 @@
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 41, cat: PC/Phone-Android, desc: "Applications / Android"}
|
||||
- {id: 42, cat: PC/Phone-IOS, desc: "Applications / iOS"}
|
||||
- {id: 57, cat: Books/Comics, desc: "Ebooks / Bandes dessinées"}
|
||||
- {id: 58, cat: XXX, desc: "Ebooks / Bandes dessinées X"}
|
||||
- {id: 31, cat: Books/Magazines, desc: "Ebooks / Journaux"}
|
||||
- {id: 32, cat: Books/Ebook, desc: "Ebooks / Livres"}
|
||||
- {id: 59, cat: Books/Comics, desc: "Ebooks / Manga"}
|
||||
- {id: 77, cat: Movies/UHD, desc: "Films / 4K rip"}
|
||||
- {id: 23, cat: Movies, desc: "Films / Animés"}
|
||||
- {id: 49, cat: Movies/BluRay, desc: "Films / BDrip"}
|
||||
- {id: 51, cat: Movies/BluRay, desc: "Films / BluRay 1080"}
|
||||
- {id: 52, cat: Movies/BluRay, desc: "Films / BluRay 4K"}
|
||||
- {id: 50, cat: Movies/BluRay, desc: "Films / BluRay 720"}
|
||||
- {id: 19, cat: Movies/BluRay, desc: "Films / BRrip"}
|
||||
- {id: 74, cat: TV/Documentary, desc: "Films / Documentaires"}
|
||||
- {id: 20, cat: Movies/DVD, desc: "Films / DVD-R 5"}
|
||||
- {id: 48, cat: Movies/DVD, desc: "Films / DVD-R 9"}
|
||||
- {id: 53, cat: Movies/DVD, desc: "Films / DVDrip"}
|
||||
- {id: 64, cat: Movies/HD, desc: "Films / HDLight 1080"}
|
||||
- {id: 63, cat: Movies/HD, desc: "Films / HDLight 720"}
|
||||
- {id: 55, cat: Movies/HD, desc: "Films / HDrip 1080"}
|
||||
- {id: 54, cat: Movies/HD, desc: "Films / HDrip 720"}
|
||||
- {id: 60, cat: Movies/HD, desc: "Films / HDTV"}
|
||||
- {id: 62, cat: Movies/HD, desc: "Films / HDTV 1080"}
|
||||
- {id: 61, cat: Movies/HD, desc: "Films / HDTV 720"}
|
||||
- {id: 75, cat: Movies/SD, desc: "Films / VHSrip"}
|
||||
- {id: 65, cat: Movies/WEBDL, desc: "Films / Web-DL"}
|
||||
- {id: 67, cat: Movies/WEBDL, desc: "Films / Web-DL 1080"}
|
||||
- {id: 68, cat: Movies/WEBDL, desc: "Films / Web-DL 4K"}
|
||||
- {id: 69, cat: Movies/WEBDL, desc: "Films / Web-DL 4K"}
|
||||
- {id: 66, cat: Movies/WEBDL, desc: "Films / Web-DL 720"}
|
||||
- {id: 70, cat: Movies/WEBDL, desc: "Films / WEBrip"}
|
||||
- {id: 72, cat: Movies/WEBDL, desc: "Films / WEBrip 1080"}
|
||||
- {id: 73, cat: Movies/WEBDL, desc: "Films / WEBrip 4K"}
|
||||
- {id: 71, cat: Movies/WEBDL, desc: "Films / WEBrip 720"}
|
||||
- {id: 9, cat: XXX, desc: "Films X"}
|
||||
- {id: 76, cat: Console/3DS, desc: "Jeux / 3DS"}
|
||||
- {id: 29, cat: PC/Phone-Android, desc: "Jeux / Android"}
|
||||
- {id: 12, cat: Console, desc: "Jeux / GameBoy"}
|
||||
- {id: 45, cat: Console, desc: "Jeux / GameBoy Advance"}
|
||||
- {id: 30, cat: PC/Phone-IOS, desc: "Jeux / iOS"}
|
||||
- {id: 46, cat: PC/Mac, desc: "Jeux / Mac"}
|
||||
- {id: 4, cat: PC/Games, desc: "Jeux / PC "}
|
||||
- {id: 36, cat: Console/PSP, desc: "Jeux / PS1"}
|
||||
- {id: 37, cat: Console/PSP, desc: "Jeux / PS2"}
|
||||
- {id: 33, cat: Console/PS3, desc: "Jeux / PS3"}
|
||||
- {id: 34, cat: Console/PS4, desc: "Jeux / PS4"}
|
||||
- {id: 78, cat: Console/Wii, desc: "Jeux / Wii"}
|
||||
- {id: 38, cat: Console/Xbox, desc: "Jeux / Xbox"}
|
||||
- {id: 40, cat: Console/Xbox, desc: "Jeux / Xbox One"}
|
||||
- {id: 39, cat: Console/Xbox 360, desc: "Jeux / Xbox360"}
|
||||
- {id: 28, cat: PC/Mac, desc: "Logiciels / Apple"}
|
||||
- {id: 26, cat: PC, desc: "Logiciels / Linux"}
|
||||
- {id: 27, cat: PC/0day, desc: "Logiciels / Windows"}
|
||||
- {id: 56, cat: Audio/Lossless, desc: "Musiques / FLAC"}
|
||||
- {id: 6, cat: Audio/MP3, desc: "Musiques / MP3"}
|
||||
- {id: 7, cat: TV, desc: "Séries"}
|
||||
- {id: 44, cat: XXX, desc: "Séries X"}
|
||||
- {id: 47, cat: TV, desc: "Séries animées"}
|
||||
- {id: 43, cat: TV/HD, desc: "Séries HD"}
|
||||
- {id: 0, cat: Other, desc: "Other"}
|
||||
- {id: 1, cat: Audio, desc: "Musique"}
|
||||
- {id: 2, cat: Movies, desc: "Film"}
|
||||
- {id: 3, cat: TV, desc: "Série"}
|
||||
- {id: 4, cat: Console, desc: "Jeux"}
|
||||
- {id: 5, cat: Books, desc: "Ebook"}
|
||||
- {id: 6, cat: PC, desc: "Logiciels"}
|
||||
- {id: 7, cat: XXX, desc: "Contenu Adulte"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -144,8 +90,14 @@
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
text: "0"
|
||||
seeders:
|
||||
optional: true
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
text: "0"
|
||||
leechers:
|
||||
optional: true
|
||||
selector: td:nth-child(7)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
|
@@ -15,7 +15,8 @@
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
@@ -55,14 +56,12 @@
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
#$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
search: "{{if .Query.IMDBID}}{{ .Query.IMDBIDShort }}{{else}}{{ .Keywords }}{{end}}"
|
||||
incldead: 1
|
||||
cat: 0
|
||||
|
||||
rows:
|
||||
selector: p + table > tbody > tr:has(a[href^="download.php"]), p + table > tbody > tr:has(a[href^="download.php"]) + tr[id^="kdescr"] # sometimes an unexpected tr[id^="kdescr"] row shows up (for unpublished torrents?)
|
||||
filters:
|
||||
- name: andmatch
|
||||
after: 1
|
||||
fields:
|
||||
title:
|
||||
|
@@ -1,161 +1,130 @@
|
||||
---
|
||||
---
|
||||
site: theshinning
|
||||
name: The Shinning
|
||||
description: "The Shinning (TsH) is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: de-de
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://theshinning.me/
|
||||
legacylinks:
|
||||
- https://theshinning.org
|
||||
- https://theshinning.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Filme
|
||||
- {id: 28, cat: Movies/SD, desc: "HORROR"}
|
||||
- {id: 25, cat: Movies/DVD, desc: "SD|DVD"}
|
||||
- {id: 99, cat: Movies/SD, desc: "SD|SPORT"}
|
||||
- {id: 24, cat: Movies/SD, desc: "SD|x264"}
|
||||
- {id: 22, cat: Movies/SD, desc: "SD|XVID"}
|
||||
- {id: 26, cat: XXX, desc: "SD|XxX"}
|
||||
|
||||
# High Definition
|
||||
- {id: 29, cat: Movies/BluRay, desc: "BLURAY"}
|
||||
- {id: 19, cat: Movies/HD, desc: "HD|1080p"}
|
||||
- {id: 21, cat: Movies/3D, desc: "HD|3D"}
|
||||
- {id: 107, cat: Movies/HD, desc: "HD|4K"}
|
||||
- {id: 20, cat: Movies/HD, desc: "HD|720p"}
|
||||
- {id: 101, cat: Movies/HD, desc: "HD|REMUX"}
|
||||
- {id: 100, cat: Movies/HD, desc: "HD|SPORT"}
|
||||
- {id: 27, cat: XXX, desc: "HD|XxX"}
|
||||
- {id: 102, cat: Movies/HD, desc: "SMALL|HD"}
|
||||
|
||||
# Musik
|
||||
- {id: 13, cat: Audio, desc: "CHARTS"}
|
||||
- {id: 31, cat: Audio/Lossless, desc: "FLAC"}
|
||||
- {id: 97, cat: Audio/Audiobook, desc: "HOERSPIELE"}
|
||||
- {id: 30, cat: Audio/MP3, desc: "MP3"}
|
||||
- {id: 106, cat: Audio, desc: "SAMPLER"}
|
||||
|
||||
# Releaser
|
||||
- {id: 18, cat: Movies, desc: "CR3WHD"}
|
||||
- {id: 16, cat: Movies, desc: "ONKEL JENS"}
|
||||
- {id: 17, cat: Movies, desc: "xTM|XviD"}
|
||||
|
||||
# Serie
|
||||
- {id: 11, cat: TV/SD, desc: "DVD|SERIEN"}
|
||||
- {id: 9, cat: TV/HD, desc: "HD|SERIEN"}
|
||||
- {id: 32, cat: TV, desc: "MIXED|SERIEN"}
|
||||
- {id: 10, cat: TV, desc: "PACK|SERIEN"}
|
||||
- {id: 8, cat: TV/SD, desc: "SD|SERIEN"}
|
||||
- {id: 105, cat: TV, desc: "SMALL|SERIE"}
|
||||
- {id: 12, cat: TV, desc: "US|SERIEN"}
|
||||
|
||||
# Sonstige
|
||||
- {id: 98, cat: PC, desc: "APPS"}
|
||||
- {id: 90, cat: TV/Documentary, desc: "DOKUS"}
|
||||
- {id: 91, cat: Books, desc: "EBOOKS"}
|
||||
- {id: 14, cat: Movies, desc: "KINOHITS"}
|
||||
- {id: 15, cat: Other, desc: "REQUEST"}
|
||||
- {id: 23, cat: Other , desc: "SONSTIGES"}
|
||||
- {id: 104, cat: XXX/Imageset, desc: "XXX|IMAGE"}
|
||||
|
||||
# Spiele
|
||||
- {id: 96, cat: Console/NDS, desc: "GAMES|NDS"}
|
||||
- {id: 92, cat: PC/Games, desc: "GAMES|PC"}
|
||||
- {id: 94, cat: Console/PS4, desc: "GAMES|PS"}
|
||||
- {id: 95, cat: Console/Wii, desc: "GAMES|WII"}
|
||||
- {id: 93, cat: Console/Xbox, desc: "GAMES|XBOX"}
|
||||
|
||||
# Wrestling
|
||||
- {id: 3, cat: TV/Sport, desc: "HD|RAW"}
|
||||
- {id: 1, cat: TV/Sport, desc: "HD|SMACKD"}
|
||||
- {id: 6, cat: TV/Sport, desc: "NXT"}
|
||||
- {id: 7, cat: TV/Sport, desc: "PPV"}
|
||||
- {id: 4, cat: TV/Sport, desc: "SD|RAW"}
|
||||
- {id: 2, cat: TV/Sport, desc: "SD|SMACKD"}
|
||||
- {id: 5, cat: TV/Sport, desc: "TNA"}
|
||||
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: Console, desc: "Games"}
|
||||
- {id: 5, cat: PC, desc: "Apps"}
|
||||
- {id: 6, cat: Other, desc: "Misc"}
|
||||
- {id: 7, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
path: login
|
||||
method: form
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
remember: 1
|
||||
selectorinputs:
|
||||
_token:
|
||||
selector: meta[name="csrf-token"]
|
||||
attribute: content
|
||||
error:
|
||||
- selector: div.stderr_info_wrap
|
||||
- selector: form[action$="/login"] .text-red
|
||||
test:
|
||||
path: browse.php
|
||||
selector: img[title="Ratio"] + i
|
||||
path: /
|
||||
selector: a[href$="/logout"]
|
||||
|
||||
ratio:
|
||||
path: browse.php
|
||||
selector: img[title="Ratio"] + i
|
||||
path: /
|
||||
selector: span:has(i.fa-sync-alt)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Ratio : (\\d+)"
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
- path: filterTorrents
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Query.Keywords }}"
|
||||
showsearch: "1"
|
||||
incldead: "1"
|
||||
orderby: "added"
|
||||
sort: "desc"
|
||||
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
|
||||
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
|
||||
uploader: ""
|
||||
imdb: "{{ .Query.IMDBIDShort }}"
|
||||
tvdb: ""
|
||||
tmdb: ""
|
||||
mal: ""
|
||||
sorting: created_at
|
||||
direction: desc
|
||||
qty: 100
|
||||
rows:
|
||||
# correct selector depends on the "Empfohlene Torrents in der Liste anzeigen" profile option
|
||||
selector: table.main > tbody > tr:contains("Alle Torrents") + tr > td > table.tableinborder > tbody > tr, div.bro_torr_wrap:not(:contains("Alle Torrents")) > table.tableinborder > tbody > tr
|
||||
filters:
|
||||
- name: andmatch
|
||||
selector: table > tbody > tr
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="download-ssl.php?torrent="]
|
||||
attribute: href
|
||||
title:
|
||||
selector: div.title_wrap
|
||||
attribute: title
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["[TsH]", ""]
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
selector: a[href*="/categories/"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
- name: regexp
|
||||
args: "/categories/.*?\\.(\\d+)"
|
||||
title:
|
||||
selector: a.view-torrent
|
||||
download:
|
||||
selector: a[href*="/download/"]
|
||||
attribute: href
|
||||
details:
|
||||
selector: div.title_wrap > a
|
||||
selector: a.view-torrent
|
||||
attribute: href
|
||||
size:
|
||||
selector: div.bro_right_ad > b
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
grabs:
|
||||
selector: div.bro_right_ae > b
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
selector: div.bro_box1_aa > b
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: div.bro_box_aaa > b
|
||||
date:
|
||||
selector: div.bro_box_date > span
|
||||
selector: td:nth-child(8)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\u00a0", " "]
|
||||
- name: dateparse
|
||||
args: "02.01.2006 15:04:05"
|
||||
- name: regexp
|
||||
args: ([\d\.]+)
|
||||
date:
|
||||
selector: time
|
||||
filters:
|
||||
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portoguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch
|
||||
- name: re_replace
|
||||
args: ["(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|hace|il y a|vor|преди)", "ago"]
|
||||
- name: re_replace
|
||||
args: ["(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut)", "minute"]
|
||||
- name: re_replace
|
||||
args: ["(dakika|minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
|
||||
- name: re_replace
|
||||
args: ["(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur)", "hour"]
|
||||
- name: re_replace
|
||||
args: ["(saat|tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden)", "hours"]
|
||||
- name: re_replace
|
||||
args: ["(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден)", "day"]
|
||||
- name: re_replace
|
||||
args: ["(gün|päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen)", "days"]
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица)", "week"]
|
||||
- name: re_replace
|
||||
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
|
||||
- name: re_replace
|
||||
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
|
||||
- name: re_replace
|
||||
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
span[title="OnlyUp"]: "0"
|
||||
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
|
||||
"i[data-original-title=\"Global freeleech\"]": "0" # Global Freeleech
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
|
||||
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
|
||||
"*": "1"
|
||||
|
@@ -8,6 +8,7 @@
|
||||
followredirect: true
|
||||
links:
|
||||
- https://wvw.torrent9.uno/
|
||||
- https://wvw.t9.pe/
|
||||
legacylinks:
|
||||
- http://www.torrent9.ec/
|
||||
- http://www.torrent9.red/
|
||||
|
@@ -84,8 +84,7 @@
|
||||
|
||||
login:
|
||||
path: torrent/account-login.php
|
||||
method: form
|
||||
form: form[action="account-login.php"]
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
@@ -93,7 +92,7 @@
|
||||
- selector: div.row p.red-text
|
||||
test:
|
||||
path: torrent/torrents-search.php
|
||||
selector: a[href*="logout"]
|
||||
selector: div.myB-content:contains("Ratio:")
|
||||
|
||||
ratio:
|
||||
path: torrent/torrents-search.php
|
||||
|
@@ -6,9 +6,9 @@
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://et8.org/
|
||||
legacylinks:
|
||||
- http://et8.org/
|
||||
legacylinks:
|
||||
- https://et8.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
90
src/Jackett.Common/Definitions/torrentproject2.yml
Normal file
90
src/Jackett.Common/Definitions/torrentproject2.yml
Normal file
@@ -0,0 +1,90 @@
|
||||
---
|
||||
site: torrentproject2
|
||||
name: TorrentProject2
|
||||
description: "TorrentProject2 is a Public torrent meta-search engine"
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://torrentproject2.se/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
"video tv": TV
|
||||
"video dvd": Movies/SD
|
||||
"Video Dvdrip": Movies/SD
|
||||
"video hdrip": Movies/HD
|
||||
"Video Lq": Movies/Foreign
|
||||
"audio mp3": Audio/MP3
|
||||
"audio lossless": Audio/Lossless
|
||||
"video": Movies
|
||||
"ebooks": Books/Ebook
|
||||
"Ebooks Comics": Books/Comics
|
||||
"Ebooks Magazines": Other
|
||||
"Ebooks Audiobook": Audio/Audiobook
|
||||
"Ebooks Tutorials": Books/Ebook
|
||||
"Games PC": PC/Games
|
||||
"Games Nintendo": Console
|
||||
"Games PlayStation": Console
|
||||
"Games XBox": Console/XBox
|
||||
"Mobile": PC/Phone-Other
|
||||
"Applications": PC
|
||||
"Images": Other
|
||||
"Other": Other
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: filter-verified
|
||||
type: checkbox
|
||||
label: "Only include verifed content in results"
|
||||
default: false
|
||||
- name: info
|
||||
type: info
|
||||
label: A note about TP2
|
||||
default: TP2 does not display categories in its search results page. To add to Sonarr or Radarr replace all categories with 7000.
|
||||
|
||||
download:
|
||||
selector: "#download > div:nth-child(2) > div:nth-child(1) > a"
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://mylink.me.uk/?url=" ,""]
|
||||
- name: urldecode
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "?t={{if .Keywords}}{{.Keywords}}{{else}}test{{end}}&orderby=latest{{if .Config.filter-verified }}&safe=on{{else}}{{end}}"
|
||||
followredirect: true
|
||||
rows:
|
||||
selector: "#similarfiles div:has(a[href^=\"/t3-\"])"
|
||||
fields:
|
||||
title:
|
||||
selector: span > a
|
||||
details:
|
||||
selector: span > a
|
||||
attribute: href
|
||||
download:
|
||||
selector: span > a
|
||||
attribute: href
|
||||
category:
|
||||
text: "Other"
|
||||
category:
|
||||
optional: true
|
||||
selector: div > span:nth-child(1) > span
|
||||
date:
|
||||
selector: div > span:nth-child(4)
|
||||
size:
|
||||
selector: div > span:nth-child(5)
|
||||
seeders:
|
||||
selector: div > span:nth-child(2)
|
||||
leechers:
|
||||
selector: div > span:nth-child(3)
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
@@ -6,6 +6,8 @@
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
links:
|
||||
- https://tsctracker.org/
|
||||
legacylinks:
|
||||
- https://tsctracker.net/
|
||||
|
||||
caps:
|
||||
@@ -175,4 +177,4 @@
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
"*": "1"
|
||||
|
@@ -78,8 +78,13 @@
|
||||
files:
|
||||
selector: td:nth-last-child(8)
|
||||
size:
|
||||
# 1,36 GB
|
||||
# 296,98 MB
|
||||
# 1.018,29 MB
|
||||
selector: td:nth-last-child(5)
|
||||
filters:
|
||||
- name: replace
|
||||
args: [".", ""]
|
||||
- name: replace
|
||||
args: [",", "."]
|
||||
grabs:
|
||||
|
@@ -25,9 +25,6 @@
|
||||
- https://ygg.to/
|
||||
- https://www.ygg.to/
|
||||
- https://ww3.yggtorrent.gg/
|
||||
|
||||
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 2145, cat: TV, desc: "Film/Vidéo"}
|
||||
@@ -157,10 +154,15 @@
|
||||
|
||||
search:
|
||||
followredirect: true
|
||||
keywordsfilters:
|
||||
# Full season seach hack: Sonarrv3 send 'Series Name SXX' but it won't match 'Series Name - Saison 01' for example so we remove the 'SXX' ==> 'Series Name'
|
||||
- name: re_replace
|
||||
args: ["(.*)[sS](\\d{1,4})$", "$1"]
|
||||
- name: replace
|
||||
args: ["\"", ""]
|
||||
paths:
|
||||
- path: "https://{{ .Config.searchanddlurl }}/engine/search?category={{ .Config.category }}&name={{if .Config.enhancedAnime}}{{ re_replace .Keywords \"([\\.\\s\\[\\-])(\\d+)$\" \"$1e$2\" }}{{else}}{{ re_replace .Keywords \"\\s\" \"\"\"\" }}{{end}}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date"
|
||||
- path: "https://{{ .Config.searchanddlurl }}/engine/search?category={{ .Config.category }}&name={{if .Config.enhancedAnime}}{{ re_replace .Keywords \"([\\.\\s\\[\\-])(\\d+)$\" \"$1e$2\" }}{{else}}{{ re_replace .Keywords \"\\s\" \"\"\"\" }}{{end}}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&page=50"
|
||||
|
||||
rows:
|
||||
selector: "table.table > tbody > tr"
|
||||
fields:
|
||||
@@ -177,6 +179,14 @@
|
||||
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"]
|
||||
# Replace Saison/saison by 'S' to match for Full season search Sonarrv3 and tidy up
|
||||
- name: re_replace
|
||||
args: ["([Ss]aison|[Ss]aison )(\\d{1,4})", "S$2"]
|
||||
- name: re_replace
|
||||
args: ["S(\\d+)E(\\d+)(\\D+)", "S$1E$2 $3"]
|
||||
- name: re_replace
|
||||
args: ["([Mm][Uu][Ll][Tt][Ii])", "MULTi"]
|
||||
# End tidy up for sonarrv3 season search
|
||||
- name: replace
|
||||
args: [".", " "]
|
||||
- name: trim
|
||||
@@ -205,62 +215,9 @@
|
||||
selector: ":nth-child(2) > a"
|
||||
attribute: href
|
||||
category:
|
||||
selector: ":nth-child(2) > a"
|
||||
case:
|
||||
"a[href*=\"/filmvidéo/animation/\"]" : 2178
|
||||
"a[href*=\"/film-video/animation/\"]" : 2178
|
||||
"a[href*=\"/filmvidéo/animation-série/\"]" : 2179
|
||||
"a[href*=\"/film-video/animation-serie/\"]" : 2179
|
||||
"a[href*=\"/filmvidéo/concert/\"]" : 2180
|
||||
"a[href*=\"/film-video/concert/\"]" : 2180
|
||||
"a[href*=\"/filmvidéo/documentaire/\"]" : 2181
|
||||
"a[href*=\"/film-video/documentaire/\"]" : 2181
|
||||
"a[href*=\"/filmvidéo/emission-tv/\"]" : 2182
|
||||
"a[href*=\"/film-video/emission-tv/\"]" : 2182
|
||||
"a[href*=\"/filmvidéo/film/\"]" : 2183
|
||||
"a[href*=\"/film-video/film/\"]" : 2183
|
||||
"a[href*=\"/filmvidéo/série-tv/\"]" : 2184
|
||||
"a[href*=\"/film-video/serie-tv/\"]" : 2184
|
||||
"a[href*=\"/filmvidéo/spectacle/\"]" : 2185
|
||||
"a[href*=\"/film-video/spectacle/\"]" : 2185
|
||||
"a[href*=\"/filmvidéo/sport/\"]" : 2186
|
||||
"a[href*=\"/film-video/sport/\"]" : 2186
|
||||
"a[href*=\"/filmvidéo/vidéo-clips/\"]" : 2187
|
||||
"a[href*=\"/film-video/video-clips/\"]" : 2187
|
||||
"a[href*=\"/audio/karaoké/\"]" : 2147
|
||||
"a[href*=\"/audio/musique/\"]" : 2148
|
||||
"a[href*=\"/audio/podcast-radio/\"]" : 2150
|
||||
"a[href*=\"/audio/samples/\"]" : 2149
|
||||
"a[href*=\"/application/autre/\"]" : 2177
|
||||
"a[href*=\"/application/formation/\"]" : 2176
|
||||
"a[href*=\"/application/linux/\"]" : 2171
|
||||
"a[href*=\"/application/macos/\"]" : 2172
|
||||
"a[href*=\"/application/smartphone/\"]" : 2174
|
||||
"a[href*=\"/application/tablette/\"]" : 2175
|
||||
"a[href*=\"/application/windows/\"]" : 2173
|
||||
"a[href*=\"/jeu-vidéo/autre/\"]" : 2167
|
||||
"a[href*=\"/jeu-vidéo/linux/\"]" : 2159
|
||||
"a[href*=\"/jeu-vidéo/macos/\"]" : 2160
|
||||
"a[href*=\"/jeu-vidéo/microsoft/\"]" : 2162
|
||||
"a[href*=\"/jeu-vidéo/nintendo/\"]" : 2163
|
||||
"a[href*=\"/jeu-vidéo/smartphone/\"]" : 2165
|
||||
"a[href*=\"/jeu-vidéo/sony/\"]" : 2164
|
||||
"a[href*=\"/jeu-vidéo/tablette/\"]" : 2166
|
||||
"a[href*=\"/jeu-vidéo/windows/\"]" : 2161
|
||||
"a[href*=\"/ebook/audio/\"]" : 2151
|
||||
"a[href*=\"/ebook/bds/\"]" : 2152
|
||||
"a[href*=\"/ebook/comics/\"]" : 2153
|
||||
"a[href*=\"/ebook/livres/\"]" : 2154
|
||||
"a[href*=\"/ebook/mangas/\"]" : 2155
|
||||
"a[href*=\"/ebook/presse/\"]" : 2156
|
||||
"a[href*=\"/emulation/emulateurs/\"]" : 2157
|
||||
"a[href*=\"/emulation/roms/\"]" : 2158
|
||||
"a[href*=\"/gps/applications/\"]" : 2168
|
||||
"a[href*=\"/gps/cartes/\"]" : 2169
|
||||
"a[href*=\"/gps/divers/\"]" : 2170
|
||||
"a[href*=\"/xxx/films/\"]" : 2189
|
||||
"a[href*=\"/xxx/hentai/\"]" : 2190
|
||||
"a[href*=\"/xxx/images/\"]" : 2191
|
||||
# changed the catid into and hidden div as of last tracker problem
|
||||
selector: ":nth-child(1) > div.hidden"
|
||||
|
||||
comments:
|
||||
optional: true
|
||||
selector: "td:nth-child(1) > a[href$=\"#comments\"]"
|
||||
|
@@ -1617,23 +1617,22 @@ namespace Jackett.Common.Indexers
|
||||
queryCollection.Add("t", "0");
|
||||
queryCollection.Add("submit", "Search");
|
||||
queryCollection.Add("sr", "topics");
|
||||
//queryCollection.Add("sr", "posts");
|
||||
//queryCollection.Add("ch", "99999");
|
||||
|
||||
// if the search string is empty use the getnew view
|
||||
if (string.IsNullOrWhiteSpace(searchString))
|
||||
{
|
||||
queryCollection.Add("search_id", "newposts");
|
||||
//queryCollection.Add("search_id", "newposts");
|
||||
searchString = "test";
|
||||
}
|
||||
else // use the normal search
|
||||
{
|
||||
//else // use the normal search
|
||||
//{
|
||||
searchString = searchString.Replace("-", " ");
|
||||
queryCollection.Add("terms", "all");
|
||||
queryCollection.Add("keywords", searchString);
|
||||
queryCollection.Add("author", "");
|
||||
queryCollection.Add("sc", "1");
|
||||
queryCollection.Add("sf", "titleonly");
|
||||
}
|
||||
//}
|
||||
|
||||
var searchUrl = SearchUrl + "?" + queryCollection.GetQueryString();
|
||||
results = await RequestStringWithCookies(searchUrl);
|
||||
|
@@ -25,6 +25,10 @@ namespace Jackett.Common.Indexers
|
||||
{ get { return SiteLink + "browse.php"; } }
|
||||
private bool TorrentHTTPSMode => configData.TorrentHTTPSMode.Value;
|
||||
|
||||
private static readonly string[] certificateHashs = new string[] {
|
||||
"4482711D19A95CDE01D7958E5F1295E05BCA335D", // Let's Encrypt Authority X3
|
||||
};
|
||||
|
||||
private new ConfigurationDataEliteTracker configData
|
||||
{
|
||||
get { return (ConfigurationDataEliteTracker)base.configData; }
|
||||
@@ -124,6 +128,10 @@ namespace Jackett.Common.Indexers
|
||||
AddCategoryMapping(65, TorznabCatType.TVSport, "UFC");
|
||||
|
||||
AddCategoryMapping(37, TorznabCatType.XXX, "XXX");
|
||||
|
||||
foreach (var certificateHash in certificateHashs)
|
||||
webclient.AddTrustedCertificate(new Uri(SiteLink).Host, certificateHash);
|
||||
|
||||
}
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
|
@@ -62,9 +62,9 @@ namespace Jackett.Common.Indexers
|
||||
private static Uri[] ExtraSiteLinkUris = new Uri[]
|
||||
{
|
||||
new Uri("http://torrentrapid.com/"),
|
||||
new Uri("http://torrentlocura.com/"),
|
||||
new Uri("http://tumejortorrent.com/"),
|
||||
new Uri("http://pctnew.com/"),
|
||||
new Uri("http://torrentlocura.com/"),
|
||||
};
|
||||
|
||||
private static Uri[] LegacySiteLinkUris = new Uri[]
|
||||
@@ -157,7 +157,7 @@ namespace Jackett.Common.Indexers
|
||||
links.Add(linkParam.AbsoluteUri);
|
||||
|
||||
IEnumerable<Uri> knownUris = (new Uri[] { DefaultSiteLinkUri }).
|
||||
Concat(ExtraSiteLinkUris).Concat(LegacySiteLinkUris);
|
||||
Concat(ExtraSiteLinkUris);
|
||||
|
||||
foreach (Uri extraSiteUri in knownUris)
|
||||
{
|
||||
@@ -178,9 +178,15 @@ namespace Jackett.Common.Indexers
|
||||
await FollowIfRedirect(results);
|
||||
var content = results.Content;
|
||||
|
||||
Match match = _downloadMatchRegex.Match(content);
|
||||
if (match.Success)
|
||||
result = await base.Download(new Uri(match.Groups[0].Value));
|
||||
if (content != null)
|
||||
{
|
||||
Match match = _downloadMatchRegex.Match(content);
|
||||
if (match.Success)
|
||||
{
|
||||
Uri uriLink = new Uri(new Uri(link), match.Groups[0].Value);
|
||||
result = await base.Download(uriLink);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -669,6 +675,7 @@ namespace Jackett.Common.Indexers
|
||||
result.Size = size;
|
||||
result.Link = new Uri(detailsUrl);
|
||||
result.Guid = result.Link;
|
||||
result.Comments = result.Link;
|
||||
result.PublishDate = publishDate;
|
||||
result.Seeders = 1;
|
||||
result.Peers = 1;
|
||||
|
@@ -23,9 +23,9 @@ namespace Jackett.Common.Indexers
|
||||
"https://polishtracker.net/",
|
||||
};
|
||||
|
||||
private new ConfigurationDataBasicLoginWithRSSAndDisplay configData
|
||||
private new ConfigurationDataBasicLoginWithEmail configData
|
||||
{
|
||||
get { return (ConfigurationDataBasicLoginWithRSSAndDisplay)base.configData; }
|
||||
get { return (ConfigurationDataBasicLoginWithEmail)base.configData; }
|
||||
set { base.configData = value; }
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace Jackett.Common.Indexers
|
||||
client: wc,
|
||||
logger: l,
|
||||
p: ps,
|
||||
configData: new ConfigurationDataBasicLoginWithRSSAndDisplay())
|
||||
configData: new ConfigurationDataBasicLoginWithEmail())
|
||||
{
|
||||
Encoding = Encoding.UTF8;
|
||||
Language = "pl-pl";
|
||||
@@ -64,7 +64,7 @@ Encoding = Encoding.UTF8;
|
||||
|
||||
var pairs = new Dictionary<string, string>
|
||||
{
|
||||
{ "email", configData.Username.Value },
|
||||
{ "email", configData.Email.Value },
|
||||
{ "pass", configData.Password.Value }
|
||||
};
|
||||
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, SiteLink);
|
||||
@@ -72,6 +72,8 @@ Encoding = Encoding.UTF8;
|
||||
await ConfigureIfOK(result.Cookies, result.Cookies != null && result.Cookies.Contains("id="), () =>
|
||||
{
|
||||
var errorMessage = result.Content;
|
||||
if (errorMessage.Contains("Error!"))
|
||||
errorMessage = "E-mail or password is incorrect";
|
||||
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||
});
|
||||
return IndexerConfigurationStatus.RequiresTesting;
|
||||
|
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Jackett.Common.Models;
|
||||
@@ -37,12 +38,13 @@ namespace Jackett.Common.Indexers
|
||||
private DateTime lastTokenFetch;
|
||||
private string token;
|
||||
private string app_id;
|
||||
private bool provideTorrentLink = false;
|
||||
|
||||
private readonly TimeSpan TOKEN_DURATION = TimeSpan.FromMinutes(10);
|
||||
|
||||
private bool HasValidToken { get { return !string.IsNullOrEmpty(token) && lastTokenFetch > DateTime.Now - TOKEN_DURATION; } }
|
||||
|
||||
public Rarbg(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
|
||||
public Rarbg(IIndexerConfigurationService configService, Utils.Clients.WebClient wc, Logger l, IProtectionService ps)
|
||||
: base(name: "RARBG",
|
||||
description: "RARBG is a Public torrent site for MOVIES / TV / GENERAL",
|
||||
link: "https://rarbg.to/",
|
||||
@@ -57,6 +59,10 @@ namespace Jackett.Common.Indexers
|
||||
Language = "en-us";
|
||||
Type = "public";
|
||||
|
||||
var provideTorrentLinkItem = new ConfigurationData.BoolItem { Value = false };
|
||||
provideTorrentLinkItem.Name = "Generate torrent download link additionally to magnet (not recommended due to DDoS protection).";
|
||||
configData.AddDynamic("providetorrentlink", provideTorrentLinkItem);
|
||||
|
||||
TorznabCaps.SupportsImdbSearch = true;
|
||||
|
||||
webclient.requestDelay = 2.1; // The api has a 1req/2s limit.
|
||||
@@ -89,6 +95,17 @@ namespace Jackett.Common.Indexers
|
||||
app_id = "jackett_v" + EnvironmentUtil.JackettVersion;
|
||||
}
|
||||
|
||||
public override void LoadValuesFromJson(JToken jsonConfig, bool useProtectionService = false)
|
||||
{
|
||||
base.LoadValuesFromJson(jsonConfig, useProtectionService);
|
||||
|
||||
var provideTorrentLinkItem = (ConfigurationData.BoolItem)configData.GetDynamic("providetorrentlink");
|
||||
if (provideTorrentLinkItem != null)
|
||||
{
|
||||
provideTorrentLink = provideTorrentLinkItem.Value;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task CheckToken()
|
||||
{
|
||||
if (!HasValidToken)
|
||||
@@ -109,7 +126,7 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
{
|
||||
configData.LoadValuesFromJson(configJson);
|
||||
LoadValuesFromJson(configJson);
|
||||
var releases = await PerformQuery(new TorznabQuery());
|
||||
|
||||
await ConfigureIfOK(string.Empty, releases.Count() > 0, () =>
|
||||
@@ -210,14 +227,15 @@ namespace Jackett.Common.Indexers
|
||||
foreach (var item in jsonContent.Value<JArray>("torrent_results"))
|
||||
{
|
||||
var release = new ReleaseInfo();
|
||||
release.Title = item.Value<string>("title");
|
||||
release.Title = WebUtility.HtmlDecode(item.Value<string>("title"));
|
||||
release.Category = MapTrackerCatDescToNewznab(item.Value<string>("category"));
|
||||
|
||||
release.MagnetUri = new Uri(item.Value<string>("download"));
|
||||
release.InfoHash = release.MagnetUri.ToString().Split(':')[3].Split('&')[0];
|
||||
|
||||
release.Comments = new Uri(item.Value<string>("info_page"));
|
||||
release.Link = release.Comments; // in case of a torrent download we grab the link from the details page in Download()
|
||||
if (provideTorrentLink)
|
||||
release.Link = release.Comments; // in case of a torrent download we grab the link from the details page in Download()
|
||||
release.Guid = release.MagnetUri;
|
||||
|
||||
var episode_info = item.Value<JToken>("episode_info");
|
||||
|
318
src/Jackett.Common/Indexers/TVstore.cs
Executable file
318
src/Jackett.Common/Indexers/TVstore.cs
Executable file
@@ -0,0 +1,318 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using CsQuery;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig.Bespoke;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using Jackett.Common.Utils;
|
||||
using Jackett.Common.Utils.Clients;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
public class TVstore : BaseWebIndexer
|
||||
{
|
||||
|
||||
private string LoginUrl { get { return SiteLink + "takelogin.php"; } }
|
||||
private string LoginPageUrl { get { return SiteLink + "login.php?returnto=%2F"; } }
|
||||
private string SearchUrl { get { return SiteLink + "torrent/br_process.php"; } }
|
||||
private string DownloadUrl { get { return SiteLink + "torrent/download.php"; } }
|
||||
private string BrowseUrl { get { return SiteLink + "torrent/browse.php"; } }
|
||||
private List<SeriesDetail> series = new List<SeriesDetail>();
|
||||
private Regex _searchStringRegex = new Regex(@"(.+?)S0?(\d+)(E0?(\d+))?$", RegexOptions.IgnoreCase);
|
||||
|
||||
private new ConfigurationDataTVstore configData
|
||||
{
|
||||
get { return (ConfigurationDataTVstore)base.configData; }
|
||||
set { base.configData = value; }
|
||||
}
|
||||
|
||||
public TVstore(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
|
||||
: base(name: "TVstore",
|
||||
description: "TV Store is a HUNGARIAN Private Torrent Tracker for TV",
|
||||
link: "https://tvstore.me/",
|
||||
caps: new TorznabCapabilities(),
|
||||
configService: configService,
|
||||
client: wc,
|
||||
logger: l,
|
||||
p: ps,
|
||||
configData: new ConfigurationDataTVstore())
|
||||
{
|
||||
Encoding = Encoding.UTF8;
|
||||
Language = "hu-hu";
|
||||
Type = "private";
|
||||
|
||||
AddCategoryMapping(1, TorznabCatType.TV);
|
||||
AddCategoryMapping(2, TorznabCatType.TVHD);
|
||||
AddCategoryMapping(3, TorznabCatType.TVSD);
|
||||
|
||||
}
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
{
|
||||
LoadValuesFromJson(configJson);
|
||||
|
||||
var loginPage = await RequestStringWithCookies(LoginPageUrl, string.Empty);
|
||||
var pairs = new Dictionary<string, string> {
|
||||
{ "username", configData.Username.Value },
|
||||
{ "password", configData.Password.Value },
|
||||
{ "back", "%2F" },
|
||||
{ "logout", "1"}
|
||||
};
|
||||
|
||||
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, referer: SiteLink);
|
||||
await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("Főoldal"), () =>
|
||||
{
|
||||
throw new ExceptionWithConfigData("Error while trying to login with: Username: " + configData.Username.Value +
|
||||
" Password: " + configData.Password.Value, configData);
|
||||
});
|
||||
|
||||
return IndexerConfigurationStatus.RequiresTesting;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses the torrents from the content
|
||||
/// </summary>
|
||||
/// <returns>The parsed torrents.</returns>
|
||||
/// <param name="results">The result of the query</param>
|
||||
/// <param name="query">Query.</param>
|
||||
/// <param name="already_found">Number of the already found torrents.(used for limit)</param>
|
||||
/// <param name="limit">The limit to the number of torrents to download </param>
|
||||
async Task<List<ReleaseInfo>> ParseTorrents(WebClientStringResult results, TorznabQuery query, int already_found, int limit)
|
||||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
try
|
||||
{
|
||||
String content = results.Content;
|
||||
/* Content Looks like this
|
||||
* 2\15\2\1\1727\207244\1x08 \[WebDL-720p - Eng - AJP69]\gb\2018-03-09 08:11:53\akció, kaland, sci-fi \0\0\1\191170047\1\0\Anonymous\50\0\0\\0\4\0\174\0\
|
||||
* 1\ 0\0\1\1727\207243\1x08 \[WebDL-1080p - Eng - AJP69]\gb\2018-03-09 08:11:49\akció, kaland, sci-fi \0\0\1\305729738\1\0\Anonymous\50\0\0\\0\8\0\102\0\0\0\0\1\\\
|
||||
*/
|
||||
var splits = content.Split('\\');
|
||||
int i = 0;
|
||||
|
||||
ReleaseInfo release = new ReleaseInfo();
|
||||
|
||||
/* Split the releases by '\' and go through them.
|
||||
* 26 element belongs to one torrent
|
||||
*/
|
||||
foreach (var s in splits)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 4:
|
||||
//ID of the series
|
||||
//Get IMDB id form site series database
|
||||
SeriesDetail seriesinfo = series.Find(x => x.id.Contains(s));
|
||||
if (seriesinfo != null && !s.Equals(""))
|
||||
release.Imdb = long.Parse(seriesinfo.imdbid);
|
||||
goto default;
|
||||
case 5:
|
||||
//ID of the torrent
|
||||
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
|
||||
|
||||
string fileinfoURL = SearchUrl + "?func=getToggle&id=" + s + "&w=F&pg=0&now=" + unixTimestamp;
|
||||
string fileinfo = (await RequestStringWithCookiesAndRetry(fileinfoURL)).Content;
|
||||
release.Link = new Uri(DownloadUrl + "?id=" + s);
|
||||
release.Guid = release.Link;
|
||||
release.Comments = release.Link;
|
||||
string[] fileinf = fileinfo.Split(new string[] { "\\\\" }, StringSplitOptions.None);
|
||||
if (fileinf.Length > 1)
|
||||
release.Title = fileinf[1];
|
||||
goto default;
|
||||
/*case 6:
|
||||
Console.WriteLine("Series season/ep =" + s); --> 9x10
|
||||
goto default;*/
|
||||
/*case 7:
|
||||
Console.WriteLine("Releaseinfo =" + s); --->Releaseinfo =[HDTV - Rip - Eng - SVA]
|
||||
goto default;*/
|
||||
case 9:
|
||||
release.PublishDate = DateTime.Parse(s, CultureInfo.InvariantCulture);
|
||||
goto default;
|
||||
case 13:
|
||||
release.Files = int.Parse(s);
|
||||
goto default;
|
||||
case 14:
|
||||
release.Size = long.Parse(s);
|
||||
goto default;
|
||||
case 23:
|
||||
release.Seeders = int.Parse(s);
|
||||
goto default;
|
||||
case 24:
|
||||
release.Peers = (int.Parse(s) + release.Seeders);
|
||||
goto default;
|
||||
case 25:
|
||||
release.Grabs = int.Parse(s);
|
||||
goto default;
|
||||
case 26:
|
||||
/* This is the last element for the torrent. So add it to releases and start parsing to new torrent */
|
||||
i = 0;
|
||||
release.Category = new List<int> { TvCategoryParser.ParseTvShowQuality(release.Title) };
|
||||
//todo Added some basic configuration need to improve it
|
||||
release.MinimumRatio = 1;
|
||||
release.MinimumSeedTime = 172800;
|
||||
release.DownloadVolumeFactor = 1;
|
||||
release.UploadVolumeFactor = 1;
|
||||
|
||||
if ((already_found + releases.Count) < limit)
|
||||
{
|
||||
releases.Add(release);
|
||||
}
|
||||
else
|
||||
{
|
||||
return releases;
|
||||
}
|
||||
release = new ReleaseInfo();
|
||||
break;
|
||||
default:
|
||||
i++;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnParseError(results.Content, ex);
|
||||
}
|
||||
|
||||
return releases;
|
||||
}
|
||||
/* Search is possible only based by Series ID.
|
||||
* All known series ID is on main page, with their attributes. (ID, EngName, HunName, imdbid)
|
||||
*/
|
||||
|
||||
/// <summary>
|
||||
/// Get all series info known by site
|
||||
/// These are:
|
||||
/// - Series ID
|
||||
/// - Hungarian name
|
||||
/// - English name
|
||||
/// - IMDB ID
|
||||
/// </summary>
|
||||
/// <returns>The series info.</returns>
|
||||
protected async Task<Boolean> GetSeriesInfo()
|
||||
{
|
||||
|
||||
var result = (await RequestStringWithCookiesAndRetry(BrowseUrl)).Content;
|
||||
|
||||
CQ dom = result;
|
||||
var scripts = dom["script"];
|
||||
|
||||
foreach (var script in scripts)
|
||||
{
|
||||
if (script.TextContent.Contains("catsh=Array"))
|
||||
{
|
||||
string[] seriesknowbysite = Regex.Split(script.TextContent, "catl");
|
||||
for (int i = 1; i < seriesknowbysite.Length; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
var id = seriesknowbysite[i];
|
||||
string[] serieselement = id.Split(';');
|
||||
SeriesDetail sd = new SeriesDetail();
|
||||
sd.HunName = serieselement[1].Split('=')[1].Trim('\'').ToLower();
|
||||
sd.EngName = serieselement[2].Split('=')[1].Trim('\'').ToLower();
|
||||
sd.id = serieselement[0].Split('=')[1].Trim('\'');
|
||||
sd.imdbid = serieselement[7].Split('=')[1].Trim('\'');
|
||||
series.Add(sd);
|
||||
}
|
||||
catch (IndexOutOfRangeException e)
|
||||
{ }
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
|
||||
/* If series from sites are indexed than we dont need to reindex them. */
|
||||
if (series == null || series.IsEmpty())
|
||||
{
|
||||
await GetSeriesInfo();
|
||||
}
|
||||
|
||||
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
|
||||
|
||||
WebClientStringResult results;
|
||||
|
||||
string searchString = "";
|
||||
var limit = query.Limit;
|
||||
if (limit == 0)
|
||||
limit = 100;
|
||||
/* SearchString format is the following: Seriesname 1X09 */
|
||||
if (query.SearchTerm != null && !query.SearchTerm.Equals(""))
|
||||
{
|
||||
searchString += query.SanitizedSearchTerm;
|
||||
// convert SnnEnn to nnxnn for dashboard searches
|
||||
if (query.Season == 0 && (query.Episode == null || query.Episode.Equals("")))
|
||||
{
|
||||
Match searchMatch = _searchStringRegex.Match(searchString);
|
||||
if (searchMatch.Success)
|
||||
{
|
||||
query.Season = int.Parse(searchMatch.Groups[2].Value);
|
||||
query.Episode = searchMatch.Groups[4].Success ? string.Format("{0:00}", (int?)int.Parse(searchMatch.Groups[4].Value)) : null;
|
||||
searchString = searchMatch.Groups[1].Value; // strip SnnEnn
|
||||
}
|
||||
}
|
||||
|
||||
if (query.Season != 0)
|
||||
searchString += " " + query.Season.ToString();
|
||||
if (query.Episode != null && !query.Episode.Equals(""))
|
||||
searchString += string.Format("x{0:00}", int.Parse(query.Episode));
|
||||
} else
|
||||
{
|
||||
// if searchquery is empty this is a test, so shorten the response time
|
||||
limit = 20;
|
||||
}
|
||||
|
||||
/* Search string must be converted to Base64 */
|
||||
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(searchString);
|
||||
var base64coded = System.Convert.ToBase64String(plainTextBytes);
|
||||
|
||||
/*Start search*/
|
||||
int page = 1;
|
||||
string exactSearchURL = SearchUrl + "?gyors=" + base64coded +"&p="+ page +"&now=" + unixTimestamp.ToString();
|
||||
results = await RequestStringWithCookiesAndRetry(exactSearchURL);
|
||||
|
||||
/* Parse page Information from result */
|
||||
string content = results.Content;
|
||||
var splits = content.Split('\\');
|
||||
int maxfounded = int.Parse(splits[0]);
|
||||
int perpage = int.Parse(splits[1]);
|
||||
//int incurrentpage = int.Parse(splits[2]);
|
||||
double pages = Math.Ceiling((double)maxfounded / (double)perpage);
|
||||
|
||||
/* First page content is already ready */
|
||||
releases.AddRange(await ParseTorrents(results, query, releases.Count, limit));
|
||||
|
||||
for (page =2;(page<=pages && releases.Count<limit);page++)
|
||||
{
|
||||
exactSearchURL = SearchUrl + "?gyors=" + base64coded + "&p=" + page + "&now=" + unixTimestamp.ToString();
|
||||
results = await RequestStringWithCookiesAndRetry(exactSearchURL);
|
||||
releases.AddRange(await ParseTorrents(results, query, releases.Count, limit));
|
||||
|
||||
}
|
||||
|
||||
return releases;
|
||||
}
|
||||
}
|
||||
public class SeriesDetail
|
||||
{
|
||||
public string id;
|
||||
public string HunName;
|
||||
public string EngName;
|
||||
public string imdbid;
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -37,19 +37,19 @@ namespace Jackett.Common.Indexers {
|
||||
Language = "en-us";
|
||||
Type = "public";
|
||||
|
||||
// Dummy mappings for sonarr, radarr, etc
|
||||
AddCategoryMapping (1, TorznabCatType.TV);
|
||||
AddCategoryMapping (2, TorznabCatType.Movies);
|
||||
AddCategoryMapping (3, TorznabCatType.Console);
|
||||
AddCategoryMapping (4, TorznabCatType.Audio);
|
||||
AddCategoryMapping (5, TorznabCatType.PC);
|
||||
AddCategoryMapping (6, TorznabCatType.XXX);
|
||||
AddCategoryMapping (7, TorznabCatType.Other);
|
||||
AddCategoryMapping (8, TorznabCatType.Books);
|
||||
// dummy mappings for sonarr, radarr, etc since torrents.csv doesnt return categories
|
||||
AddCategoryMapping (1000, TorznabCatType.Console);
|
||||
AddCategoryMapping (2000, TorznabCatType.Movies);
|
||||
AddCategoryMapping (3000, TorznabCatType.Audio);
|
||||
AddCategoryMapping (4000, TorznabCatType.PC);
|
||||
AddCategoryMapping (5000, TorznabCatType.TV);
|
||||
AddCategoryMapping (6000, TorznabCatType.XXX);
|
||||
AddCategoryMapping (7000, TorznabCatType.Other);
|
||||
AddCategoryMapping (8000, TorznabCatType.Books);
|
||||
|
||||
TorznabCaps.SupportsImdbSearch = false;
|
||||
|
||||
webclient.requestDelay = 1;
|
||||
webclient.requestDelay = 0;
|
||||
}
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration (JToken configJson) {
|
||||
@@ -94,31 +94,50 @@ namespace Jackett.Common.Indexers {
|
||||
|
||||
// construct magnet link from infohash with all public trackers known to man
|
||||
string magnet_uri = "magnet:?xt=urn:btih:" + torrent.Value<JToken> ("infohash") +
|
||||
"&tr=udp://tracker.opentrackr.org:1337/announce" +
|
||||
"&tr=udp://tracker.leechers-paradise.org:6969" +
|
||||
"&tr=udp://tracker.coppersurfer.tk:6969/announce" +
|
||||
"&tr=udp://tracker1.itzmx.com:8080/announce" +
|
||||
"&tr=udp://explodie.org:6969/announce" +
|
||||
"&tr=udp://tracker.leechers-paradise.org:6969/announce" +
|
||||
"&tr=udp://tracker.internetwarriors.net:1337/announce" +
|
||||
"&tr=udp://tracker.opentrackr.org:1337/announce" +
|
||||
"&tr=udp://9.rarbg.to:2710/announce" +
|
||||
"&tr=udp://exodus.desync.com:6969/announce" +
|
||||
"&tr=udp://tracker.openbittorrent.com:80" +
|
||||
"&tr=udp://torrent.gresille.org:80/announce" +
|
||||
"&tr=udp://glotorrents.pw:6969/announce" +
|
||||
"&tr=http://tracker3.itzmx.com:6961/announce" +
|
||||
"&tr=udp://tracker.internetwarriors.net:1337/announce" +
|
||||
"&tr=udp://open.demonii.com:1337/announce" +
|
||||
"&tr=udp://p4p.arenabg.com:1337";
|
||||
"&tr=udp://explodie.org:6969/announce" +
|
||||
"&tr=udp://tracker2.itzmx.com:6961/announce" +
|
||||
"&tr=udp://tracker1.itzmx.com:8080/announce" +
|
||||
"&tr=udp://tracker.torrent.eu.org:451/announce" +
|
||||
"&tr=udp://tracker.tiny-vps.com:6969/announce" +
|
||||
"&tr=udp://tracker.port443.xyz:6969/announce" +
|
||||
"&tr=udp://thetracker.org:80/announce" +
|
||||
"&tr=udp://open.stealth.si:80/announce" +
|
||||
"&tr=udp://open.demonii.si:1337/announce" +
|
||||
"&tr=udp://ipv4.tracker.harry.lu:80/announce" +
|
||||
"&tr=udp://denis.stalker.upeer.me:6969/announce" +
|
||||
"&tr=udp://tracker1.wasabii.com.tw:6969/announce" +
|
||||
"&tr=udp://tracker.dler.org:6969/announce" +
|
||||
"&tr=udp://tracker.cyberia.is:6969/announce" +
|
||||
"&tr=udp://tracker4.itzmx.com:2710/announce" +
|
||||
"&tr=udp://tracker.uw0.xyz:6969/announce" +
|
||||
"&tr=udp://tracker.moeking.me:6969/announce" +
|
||||
"&tr=udp://retracker.lanta-net.ru:2710/announce" +
|
||||
"&tr=udp://tracker.nyaa.uk:6969/announce" +
|
||||
"&tr=udp://tracker.novg.net:6969/announce" +
|
||||
"&tr=udp://tracker.iamhansen.xyz:2000/announce" +
|
||||
"&tr=udp://tracker.filepit.to:6969/announce" +
|
||||
"&tr=udp://tracker.dyn.im:6969/announce" +
|
||||
"&tr=udp://torrentclub.tech:6969/announce" +
|
||||
"&tr=udp://tracker.tvunderground.org.ru:3218/announce" +
|
||||
"&tr=udp://tracker.open-tracker.org:1337/announce" +
|
||||
"&tr=udp://tracker.justseed.it:1337/announce";
|
||||
|
||||
release.MagnetUri = new Uri (magnet_uri);
|
||||
release.Comments = release.MagnetUri;
|
||||
release.Guid = release.MagnetUri;
|
||||
release.InfoHash = torrent.Value<JToken> ("infohash").ToString ();
|
||||
|
||||
// convert unix timestamp to human readable date
|
||||
double createdunix = torrent.Value<int> ("created_unix");
|
||||
System.DateTime dateTime = new System.DateTime (1970, 1, 1, 0, 0, 0, 0);
|
||||
dateTime = dateTime.AddSeconds (createdunix);
|
||||
|
||||
release.PublishDate = dateTime;
|
||||
release.Category = new List<int> { TorznabCatType.Other.ID };
|
||||
release.Seeders = torrent.Value<int> ("seeders");
|
||||
release.Peers = torrent.Value<int> ("leechers") + release.Seeders;
|
||||
release.Size = torrent.Value<long> ("size_bytes");
|
||||
@@ -128,13 +147,43 @@ namespace Jackett.Common.Indexers {
|
||||
release.DownloadVolumeFactor = 0;
|
||||
release.UploadVolumeFactor = 1;
|
||||
|
||||
// dummy mappings for sonarr, radarr, etc
|
||||
string categories = string.Join (";", MapTorznabCapsToTrackers (query));
|
||||
if (!string.IsNullOrEmpty (categories)) {
|
||||
if (categories.Contains ("1000")) {
|
||||
release.Category = new List<int> { TorznabCatType.Console.ID };
|
||||
}
|
||||
if (categories.Contains ("2000")) {
|
||||
release.Category = new List<int> { TorznabCatType.Movies.ID };
|
||||
}
|
||||
if (categories.Contains ("3000")) {
|
||||
release.Category = new List<int> { TorznabCatType.Audio.ID };
|
||||
}
|
||||
if (categories.Contains ("4000")) {
|
||||
release.Category = new List<int> { TorznabCatType.PC.ID };
|
||||
}
|
||||
if (categories.Contains ("5000")) {
|
||||
release.Category = new List<int> { TorznabCatType.TV.ID };
|
||||
}
|
||||
if (categories.Contains ("6000")) {
|
||||
release.Category = new List<int> { TorznabCatType.XXX.ID };
|
||||
}
|
||||
if (categories.Contains ("7000")) {
|
||||
release.Category = new List<int> { TorznabCatType.Other.ID };
|
||||
}
|
||||
if (categories.Contains ("8000")) {
|
||||
release.Category = new List<int> { TorznabCatType.Books.ID };
|
||||
}
|
||||
}
|
||||
// for null category
|
||||
if (string.IsNullOrEmpty (categories)) {
|
||||
release.Category = new List<int> { TorznabCatType.Other.ID };
|
||||
}
|
||||
releases.Add (release);
|
||||
}
|
||||
|
||||
} catch (Exception ex) {
|
||||
OnParseError (response.Content, ex);
|
||||
}
|
||||
|
||||
return releases;
|
||||
}
|
||||
}
|
||||
|
@@ -53,43 +53,49 @@ namespace Jackett.Common.Indexers
|
||||
configData.DisplayText.Value = "Expect an initial delay (often around 10 seconds) due to XSpeeds CloudFlare DDoS protection";
|
||||
configData.DisplayText.Name = "Notice";
|
||||
|
||||
AddCategoryMapping(70, TorznabCatType.TVAnime); // Anime
|
||||
AddCategoryMapping(4, TorznabCatType.PC); // Apps
|
||||
AddCategoryMapping(82, TorznabCatType.PCMac); // Mac
|
||||
AddCategoryMapping(80, TorznabCatType.AudioAudiobook); // Audiobooks
|
||||
AddCategoryMapping(66, TorznabCatType.MoviesBluRay); // Blu-Ray
|
||||
AddCategoryMapping(48, TorznabCatType.Books); // Books Magazines
|
||||
AddCategoryMapping(68, TorznabCatType.MoviesOther); // Cams/TS
|
||||
AddCategoryMapping(65, TorznabCatType.TVDocumentary); // Documentaries
|
||||
AddCategoryMapping(10, TorznabCatType.MoviesDVD); // DVDR
|
||||
AddCategoryMapping(72, TorznabCatType.MoviesForeign); // Foreign
|
||||
AddCategoryMapping(74, TorznabCatType.TVOTHER); // Kids
|
||||
AddCategoryMapping(44, TorznabCatType.TVSport); // MMA
|
||||
AddCategoryMapping(11, TorznabCatType.Movies); // Movie Boxsets
|
||||
AddCategoryMapping(12, TorznabCatType.Movies); // Movies
|
||||
AddCategoryMapping(13, TorznabCatType.Audio); // Music
|
||||
AddCategoryMapping(15, TorznabCatType.AudioVideo); // Music Videos
|
||||
AddCategoryMapping(32, TorznabCatType.ConsoleNDS); // NDS Games
|
||||
AddCategoryMapping(9, TorznabCatType.Other); // Other
|
||||
AddCategoryMapping(6, TorznabCatType.PCGames); // PC Games
|
||||
AddCategoryMapping(45, TorznabCatType.Other); // Pictures
|
||||
AddCategoryMapping(31, TorznabCatType.ConsolePS4); // Playstation
|
||||
AddCategoryMapping(71, TorznabCatType.TV); // PPV
|
||||
AddCategoryMapping(54, TorznabCatType.TV); // Soaps
|
||||
AddCategoryMapping(20, TorznabCatType.TVSport); // Sports
|
||||
AddCategoryMapping(86, TorznabCatType.TVSport); // MotorSports
|
||||
AddCategoryMapping(89, TorznabCatType.TVSport); // Olympics 2016
|
||||
AddCategoryMapping(88, TorznabCatType.TVSport); // World Cup
|
||||
AddCategoryMapping(83, TorznabCatType.Movies); // TOTM
|
||||
AddCategoryMapping(21, TorznabCatType.TVSD); // TV Boxsets
|
||||
AddCategoryMapping(76, TorznabCatType.TVHD); // HD Boxsets
|
||||
AddCategoryMapping(47, TorznabCatType.TVHD); // TV-HD
|
||||
AddCategoryMapping(16, TorznabCatType.TVSD); // TV-SD
|
||||
AddCategoryMapping(7, TorznabCatType.ConsoleWii); // Wii Games
|
||||
AddCategoryMapping(43, TorznabCatType.TVSport); // Wrestling
|
||||
AddCategoryMapping(8, TorznabCatType.ConsoleXbox); // Xbox Games
|
||||
AddCategoryMapping(92, TorznabCatType.MoviesUHD, "4K Movies");
|
||||
AddCategoryMapping(91, TorznabCatType.TVUHD, "4K TV");
|
||||
AddCategoryMapping(94, TorznabCatType.TVUHD, "4K TV Boxsets");
|
||||
AddCategoryMapping(70, TorznabCatType.TVAnime, "Anime");
|
||||
AddCategoryMapping(4, TorznabCatType.PC, "Apps");
|
||||
AddCategoryMapping(82, TorznabCatType.PCMac, "Mac");
|
||||
AddCategoryMapping(80, TorznabCatType.AudioAudiobook, "Audiobooks");
|
||||
AddCategoryMapping(66, TorznabCatType.MoviesBluRay, "Blu-Ray");
|
||||
AddCategoryMapping(48, TorznabCatType.Books, "Books Magazines");
|
||||
AddCategoryMapping(68, TorznabCatType.MoviesOther, "Cams/TS");
|
||||
AddCategoryMapping(65, TorznabCatType.TVDocumentary, "Documentaries");
|
||||
AddCategoryMapping(10, TorznabCatType.MoviesDVD, "DVDR");
|
||||
AddCategoryMapping(72, TorznabCatType.MoviesForeign, "Foreign");
|
||||
AddCategoryMapping(74, TorznabCatType.TVOTHER, "Kids");
|
||||
AddCategoryMapping(44, TorznabCatType.TVSport, "MMA");
|
||||
AddCategoryMapping(11, TorznabCatType.Movies, "Movie Boxsets");
|
||||
AddCategoryMapping(12, TorznabCatType.Movies, "Movies");
|
||||
AddCategoryMapping(13, TorznabCatType.Audio, "Music");
|
||||
AddCategoryMapping(15, TorznabCatType.AudioVideo, "Music Videos");
|
||||
AddCategoryMapping(32, TorznabCatType.ConsoleNDS, "NDS Games");
|
||||
AddCategoryMapping(9, TorznabCatType.Other, "Other");
|
||||
AddCategoryMapping(6, TorznabCatType.PCGames, "PC Games");
|
||||
AddCategoryMapping(45, TorznabCatType.Other, "Pictures");
|
||||
AddCategoryMapping(31, TorznabCatType.ConsolePS4, "Playstation");
|
||||
AddCategoryMapping(71, TorznabCatType.TV, "PPV");
|
||||
AddCategoryMapping(54, TorznabCatType.TV, "Soaps");
|
||||
AddCategoryMapping(20, TorznabCatType.TVSport, "Sports");
|
||||
AddCategoryMapping(86, TorznabCatType.TVSport, "MotorSports");
|
||||
AddCategoryMapping(89, TorznabCatType.TVSport, "Olympics 2016");
|
||||
AddCategoryMapping(88, TorznabCatType.TVSport, "World Cup");
|
||||
AddCategoryMapping(83, TorznabCatType.Movies, "TOTM");
|
||||
AddCategoryMapping(21, TorznabCatType.TVSD, "TV Boxsets");
|
||||
AddCategoryMapping(76, TorznabCatType.TVHD, "HD Boxsets");
|
||||
AddCategoryMapping(47, TorznabCatType.TVHD, "TV-HD");
|
||||
AddCategoryMapping(16, TorznabCatType.TVSD, "TV-SD");
|
||||
AddCategoryMapping(7, TorznabCatType.ConsoleWii, "Wii Games");
|
||||
AddCategoryMapping(43, TorznabCatType.TVSport, "Wrestling");
|
||||
AddCategoryMapping(8, TorznabCatType.ConsoleXbox, "Xbox Games");
|
||||
|
||||
// RSS Textual categories
|
||||
AddCategoryMapping("4K Movies", TorznabCatType.MoviesUHD);
|
||||
AddCategoryMapping("4K TV", TorznabCatType.TVUHD);
|
||||
AddCategoryMapping("4K TV Boxsets", TorznabCatType.TVUHD);
|
||||
AddCategoryMapping("Anime", TorznabCatType.TVAnime);
|
||||
AddCategoryMapping("Apps", TorznabCatType.PC);
|
||||
AddCategoryMapping("Mac", TorznabCatType.PCMac);
|
||||
|
46
src/Jackett.Common/Models/IndexerConfig/Bespoke/ConfigurationDataTVstore.cs
Executable file
46
src/Jackett.Common/Models/IndexerConfig/Bespoke/ConfigurationDataTVstore.cs
Executable file
@@ -0,0 +1,46 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Jackett.Common.Models.IndexerConfig.Bespoke
|
||||
{
|
||||
public class ConfigurationDataTVstore : ConfigurationData
|
||||
{
|
||||
public StringItem Username { get; private set; }
|
||||
public StringItem Password { get; private set; }
|
||||
|
||||
public ConfigurationDataTVstore()
|
||||
{
|
||||
Username = new StringItem { Name = "Username", Value = "" };
|
||||
Password = new StringItem { Name = "Password", Value = "" };
|
||||
}
|
||||
|
||||
public ConfigurationDataTVstore(JToken json)
|
||||
{
|
||||
ConfigurationDataTVstore configData = new ConfigurationDataTVstore();
|
||||
|
||||
dynamic configArray = JsonConvert.DeserializeObject(json.ToString());
|
||||
foreach (var config in configArray)
|
||||
{
|
||||
string propertyName = UppercaseFirst((string)config.id);
|
||||
switch (propertyName)
|
||||
{
|
||||
case "Username":
|
||||
Username = new StringItem { Name = propertyName, Value = config.value };
|
||||
break;
|
||||
case "Password":
|
||||
Password = new StringItem { Name = propertyName, Value = config.value };
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static string UppercaseFirst(string s)
|
||||
{
|
||||
if (string.IsNullOrEmpty(s))
|
||||
return string.Empty;
|
||||
return char.ToUpper(s[0]) + s.Substring(1);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,18 @@
|
||||
namespace Jackett.Common.Models.IndexerConfig
|
||||
{
|
||||
public class ConfigurationDataBasicLoginWithEmail : ConfigurationData
|
||||
{
|
||||
public StringItem Email { get; private set; }
|
||||
public StringItem Password { get; private set; }
|
||||
public DisplayItem Instructions { get; private set; }
|
||||
|
||||
public ConfigurationDataBasicLoginWithEmail(string instructionMessageOptional = null)
|
||||
{
|
||||
Email = new StringItem { Name = "Email" };
|
||||
Password = new StringItem { Name = "Password" };
|
||||
Instructions = new DisplayItem(instructionMessageOptional) { Name = "" };
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@@ -62,6 +62,8 @@ namespace Jackett.Common.Models
|
||||
var parameters = new List<string>() { "q", "season", "ep" };
|
||||
if (SupportsTVRageSearch)
|
||||
parameters.Add("rid");
|
||||
if (SupportsImdbSearch)
|
||||
parameters.Add("imdbid");
|
||||
return string.Join(",", parameters);
|
||||
}
|
||||
}
|
||||
|
@@ -116,6 +116,12 @@ namespace Jackett.Common.Utils.Clients
|
||||
if (hosts.Contains(request.Host))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (sslPolicyErrors != SslPolicyErrors.None)
|
||||
{
|
||||
throw new Exception("certificate validation failed: " + certificate.ToString());
|
||||
}
|
||||
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
};
|
||||
}
|
||||
|
@@ -150,6 +150,12 @@ namespace Jackett.Common.Utils.Clients
|
||||
if (hosts.Contains(request.Host))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (sslPolicyErrors != SslPolicyErrors.None)
|
||||
{
|
||||
throw new Exception("certificate validation failed: " + certificate.ToString());
|
||||
}
|
||||
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
};
|
||||
}
|
||||
|
@@ -149,6 +149,12 @@ namespace Jackett.Common.Utils.Clients
|
||||
if (hosts.Contains(request.RequestUri.Host))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (sslPolicyErrors != SslPolicyErrors.None)
|
||||
{
|
||||
throw new Exception("certificate validation failed: " + certificate.ToString());
|
||||
}
|
||||
|
||||
return sslPolicyErrors == SslPolicyErrors.None;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user