Compare commits

...

67 Commits

Author SHA1 Message Date
kaso17
cc10d9f233 Add BrokenStones indexer 2017-05-19 17:56:16 +02:00
kaso17
805f0f4e0d update formating 2017-05-19 17:33:04 +02:00
kaso17
c5eb78602a update SSL troubleshooting 2017-05-19 17:32:17 +02:00
CodeMonkey
d7b5ab8595 Parse date, seeder, leecher, & grab values. (#1388)
* Fix size field to handle "Unknown" as a value.
2017-05-17 09:25:52 +02:00
CodeMonkey
562cfd57a6 Fix date field so it correctly parses as UTC time (#1389) 2017-05-17 09:24:39 +02:00
CodeMonkey
3d84d12c96 Fix date field so it correctly parses as UTC time. (#1390) 2017-05-17 09:24:21 +02:00
kaso17
2a71dafb0e KickAssTorrent: change to semi private 2017-05-16 07:57:27 +02:00
kaso17
02e2bcdbc2 Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-05-16 07:34:59 +02:00
kaso17
19b496b5c8 Superbits: fix category handling 2017-05-16 07:34:34 +02:00
gustinn
5c03cab5a2 add tracker Deildu (#1378) 2017-05-16 07:20:38 +02:00
thebluepotato
183f9f5649 Add KAT passkey login (#1380) 2017-05-16 07:19:58 +02:00
kaso17
a46b75bef7 remove redacted-scrape 2017-05-15 07:23:01 +02:00
CodeMonkey
f6e0d7d239 Use file glob for yml file inclusion (#1372)
* Should help avoid new items being added but accidentally not included
in the release.
2017-05-15 07:16:25 +02:00
CodeMonkey
6d893a1ac3 Add type and encoding values for HorribleSubs (#1373) 2017-05-15 07:15:58 +02:00
Nodja
175509abc8 [Horriblesubs] prepend horriblesubs tag to title for better filtering in sonarr (#1362)
* [horriblesubs] prepend horriblesubs tag to title for better filtering in sonarr

* make [horriblesubs] prepend an option
2017-05-14 19:48:07 +02:00
kaso17
8900ece8ab Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-05-14 19:43:16 +02:00
kaso17
37dc039de4 AnimeTorrents: Change to HTTPS and fix login 2017-05-14 19:43:10 +02:00
CodeMonkey
15b6afb11e HorribleSubs Fixes (#1364)
* Fix date parsing

* Use http link instead of https

* Site doesn't load properly over https because not all page resources
are serviced via https links.
2017-05-14 19:25:08 +02:00
kaso17
753913ccc7 Nyaa.si cleanup 2017-05-14 19:00:15 +02:00
chibidev
27d4f2108e Feature/aggregate performance improvement (#1349)
* Checking capabilities before executing a query

* Introduce base class for meta indexers

* Build fix - I seriously do not know how I missed that

* Moving things to the appropriate place

* Simplifying things as much as possible and moving once again

* Build fix?
2017-05-14 18:55:36 +02:00
gregorij89
2fb045e94a Add Trezzor (#1354)
* Add Trezzor

* Add Trezzor

* Fixing AooVeyor.yml - removing the file from commit, there is no
valuable changes.
2017-05-14 18:53:49 +02:00
Splosion
7756e8da41 mark nyoo.yml as content and copy to output directory on build (#1361) 2017-05-14 18:53:15 +02:00
chibidev
823e06b84e Adds additional parsing so that it sets the key parameter as well (#1363)
- Fixes Jackett/Jackett#1357
- Fixes Jackett/Jackett#1360
2017-05-14 18:48:55 +02:00
CodeMonkey
f12571d767 Add Nyaa.si (#1365)
* HorribleSubs is using Nyaa.si as their official tracker now
* http://horriblesubs.info/#comment-3267534087
2017-05-14 18:47:25 +02:00
Chaomander
bf1e3a1a53 Fix tokyotosho failing test and add type (#1350)
* Fix tokyotosho failing test and add type

* Revert unnecessary change to language

* Add encoding

* Use UTC for date parse
2017-05-11 21:30:48 +02:00
adamwinn
6276789738 Add AHD (#1352) 2017-05-11 21:29:12 +02:00
adamwinn
4b66273c19 Update bB url (#1355) 2017-05-11 21:22:33 +02:00
eV (㋎)
0fad901ecb Switch anidex to use to torrent link vs magnet link (#1356)
@kaso17 FYI I found out today that anidex does not always have a magnet link corresponding to returned search results. As a result it is more reliable to use the torrent link instead of the magnet link that my definition currently uses. To do this one just needs to change the download selector from `td:nth-child(6) > a` to `td:nth-child(5) > a`.
2017-05-11 21:22:01 +02:00
kaso17
3426e66b3b Horrible Subs: add dummy size 2017-05-11 21:19:02 +02:00
kaso17
b85721e584 add Horrible Subs 2017-05-09 20:25:27 +02:00
kaso17
16c2e5521a horriblesubs: fix porject file 2017-05-09 20:24:09 +02:00
kaso17
42d8c30147 Xthor: disable category support 2017-05-09 20:19:05 +02:00
James Lee
338a4cbf6e Update README with more detailed OS X instructions (#1344)
* Update README with more details OS X instructions

- Adds detailed instructions on syncing ca certs and avoiding SIP issues
outlned in https://github.com/Jackett/Jackett/issues/1179

* Move ubuntu instructions to linux section
2017-05-08 22:34:03 +10:00
Quatroking
813c449065 Adding Nyoo (#1343)
* Removed Nyaa.se due to its closure, added Nyaa mirro Nyaa-Pantsu to replace it

* VS15 project file so that the filelist is correct

* Adding Nyoo support

* Adding Nyoo support
2017-05-08 22:33:29 +10:00
adamwinn
03549b97aa Add SportHD (#1342)
* add

* Add 3D Torrents

* Accidently commited an old version of the 3dtorrents yaml file

* Allow searching by categories for TPB

* add

* add

* Fix error when pressing the Test button for TPB.  This will remove searching by category for the time being.

* Change HDPter to Ourbits

* iloveclassics - the date is not within td:nth-child(2) div, but rather just td:nth-child(2), so remove the div
bigtorrent - grabs and files data are not displayed in the grid.  Seeders and leechers data was off by a column

* Add ThePlace / TheVault / TheShow / TheOccult / TheGeeks (#1302)

* Change SceneFZ domain (#1306)

* Add tracker SportHD
2017-05-08 22:33:03 +10:00
flightlevel
7ee03a9e03 Update README.md 2017-05-08 22:31:20 +10:00
flightlevel
8c6ae89204 Add build status 2017-05-08 22:30:21 +10:00
flightlevel
d5c902eb82 Backup AppVeyor.yml
Backup AppVeyor.yml but still use the settings from the AppVeyor UI
2017-05-08 22:26:56 +10:00
kaso17
8a037295d0 PassThePopcorn: fix peers calculation 2017-05-07 17:43:23 +02:00
kaso17
c4caa62f8b Add Horrible Subs
Thank you @evq
2017-05-07 14:06:14 +02:00
kaso17
d3ea4135b9 Cardigann: extend DateHeaders search to parents 2017-05-07 14:05:39 +02:00
kaso17
d0d62eeae9 Add Anidex tracker
Thank you @evq
2017-05-07 13:27:30 +02:00
kaso17
aa6e7b148b Cardigann: Add support for search/headers 2017-05-07 13:18:22 +02:00
chibidev
251a631523 Bugfix/aggregate indexer radarr compatibility (#1333)
* Improving Torznab compatibility in AggregateIndexer

The indexer was not correctly reporting the Torznab capabilities
it provided. Basically it only reported a default number of
caps instead of combining all the caps of all the configured
indexers. This lead to an issue with external components
(e.g. Radarr) which rendered the Aggregate feed unusable in
certain situations.
- Correctly reports capabilities based on configured indexers

* Fixes incorrect internal state of configured indexers

When adding/deleting configured indexers the aggregate
was never updated leaving out possible search results.
- Introduce reconfiguring of the Aggregate upon addition/deletion
 of an indexer
- Fixing an internal state issue of the indexers reporting
 themselves as unconfigured after addition

* Removing obsolete call (thanks @kaso17)
2017-05-07 09:10:57 +02:00
kaso17
4dd49985c3 KickAssTorrent: category update 2017-05-06 19:56:12 +02:00
kaso17
c24368f8f9 Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-05-06 19:39:07 +02:00
kaso17
6b35da8ad0 SaveConfig() after IsConfigured 2017-05-06 19:39:02 +02:00
Nodja
026fa22a37 Fixed sonarr not finding episode numbers with animebytes (#1329)
* fixed sonarr not finding episode numbers

* animebytes: fixed sonarr compatibility setting description was incorrect
2017-05-06 15:45:24 +02:00
kaso17
9d6d5265e2 Arche Torrent details 2017-05-06 15:33:50 +02:00
kaso17
a86c30fdd4 nyaa cleanup 2017-05-06 15:30:00 +02:00
Quatroking
378b63a658 Nyaa replacement (#1338)
* Removed Nyaa.se due to its closure, added Nyaa mirro Nyaa-Pantsu to replace it

* VS15 project file so that the filelist is correct
2017-05-06 15:27:32 +02:00
Ellmout
e09092bbaf Add ArcheTorrent (#1334) 2017-05-06 15:26:10 +02:00
kaso17
ffdce26639 add Tokyo Toshokan meta data 2017-05-04 21:55:41 +02:00
kaso17
797eff5200 Nebulance: fix URL 2017-05-04 21:50:23 +02:00
chibidev
b942689dad Fixing a bunch of issues with the newly added AggregateIndexer (#1324)
This patch improves the general stability of the aggregate.
- Result is generated even if some trackers failed to answer
  or some other issue were encountered
- Fixes Jackett/Jackett#1316
2017-05-04 21:46:39 +02:00
Victor Bouvier-Deleau
9479eb20b7 Updated T411 domain references to the new domain used. (#1326) 2017-05-04 21:44:54 +02:00
adamwinn
79d87f4809 Add SportsCult (#1330)
* add

* Add 3D Torrents

* Accidently commited an old version of the 3dtorrents yaml file

* Allow searching by categories for TPB

* add

* add

* Fix error when pressing the Test button for TPB.  This will remove searching by category for the time being.

* Change HDPter to Ourbits

* iloveclassics - the date is not within td:nth-child(2) div, but rather just td:nth-child(2), so remove the div
bigtorrent - grabs and files data are not displayed in the grid.  Seeders and leechers data was off by a column

* Add ThePlace / TheVault / TheShow / TheOccult / TheGeeks (#1302)

* Change SceneFZ domain (#1306)

* Add tracker SportsCult
2017-05-04 22:01:28 +10:00
flightlevel
3a0d99acbe TransmitheNet to Nebulance name change 2017-05-04 22:00:54 +10:00
savahu
6b3f42a667 BTN was mentioned twice in supported trackers (#1331) 2017-05-04 21:58:36 +10:00
chibidev
a2d9954a1d Fixing ShowRSS all feed path and node selection (#1328) 2017-05-04 21:57:09 +10:00
eV (㋎)
f5fa7b5217 Add tracker definition for Tokyo Toshokan (#1323) 2017-05-04 21:54:48 +10:00
adamwinn
bab4620c04 Change TTN to Nebulance (#1320)
* add

* Add 3D Torrents

* Accidently commited an old version of the 3dtorrents yaml file

* Allow searching by categories for TPB

* add

* add

* Fix error when pressing the Test button for TPB.  This will remove searching by category for the time being.

* Change HDPter to Ourbits

* iloveclassics - the date is not within td:nth-child(2) div, but rather just td:nth-child(2), so remove the div
bigtorrent - grabs and files data are not displayed in the grid.  Seeders and leechers data was off by a column

* Add ThePlace / TheVault / TheShow / TheOccult / TheGeeks (#1302)

* Change SceneFZ domain (#1306)

* Change TransmitheNet to Nebulance
2017-05-04 21:54:12 +10:00
chibidev
c0b665062e Adding an aggregate torznab feed for all configured trackers (#1312)
* Adding an aggregate torznab feed for all configured trackers

This adds just a basic first implementation of a special
torznab feed that will make all configured trackers available
with all the supported query params.
- This should close #1247 
- This also contributes to #921 

* Adding missing file

* Add missing implementation from Test project
2017-04-30 10:06:29 +02:00
kaso17
117022151b Merge branch 'master' of https://github.com/Jackett/Jackett 2017-04-30 09:46:47 +02:00
kaso17
a96b7cfca9 MoreThanTV: improve search of multiple episodes of a season 2017-04-30 09:38:10 +02:00
adamwinn
d8b83c6b07 Change SceneFZ domain (#1306) 2017-04-26 19:37:46 +02:00
adamwinn
0594e1c52d Add ThePlace / TheVault / TheShow / TheOccult / TheGeeks (#1302) 2017-04-24 06:28:00 +02:00
58 changed files with 3278 additions and 1425 deletions

100
.github/appveyor.yml vendored Normal file
View File

@@ -0,0 +1,100 @@
version: 0.7.{build}
skip_tags: true
image: Visual Studio 2015
configuration: Release
assembly_info:
patch: true
file: '**\AssemblyInfo.*'
assembly_version: '{version}'
assembly_file_version: '{version}'
assembly_informational_version: '{version}'
install:
- cmd: choco install InnoSetup
before_build:
- cmd: nuget restore src\Jackett.sln
build:
verbosity: minimal
after_build:
- cmd: >-
xcopy src\Jackett.Console\bin\Release build.windows\ /e /y
copy /Y src\Jackett.Service\bin\Release\JackettService.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\
copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\
copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\
copy /Y LICENSE build.windows\LICENSE
copy /Y README.md build.windows\README.md
xcopy build.windows WindowsBuild\Jackett\ /e /y
msbuild src\Jackett.sln /t:Clean /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
"C:\Program Files (x86)\Mono\bin\xbuild.bat" src\Jackett.sln /t:Build /p:Configuration=Release /verbosity:minimal /tv:12.0
xcopy src\Jackett.Console\bin\Release build.mono\ /e /y
copy /Y src\Jackett.Service\bin\Release\JackettService.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\
copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\
copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\
copy /Y LICENSE build.mono\LICENSE
copy /Y README.md build.mono\README.md
copy /Y Upstart.config build.mono\Upstart.config
xcopy build.mono MonoBuild\Jackett\ /e /y
"C:\Program Files (x86)\Inno Setup 5\ISCC.exe" Installer.iss
RENAME Output\setup.exe Jackett.Installer.Windows.exe
MOVE Output\Jackett.Installer.Windows.exe %APPVEYOR_BUILD_FOLDER%
cd WindowsBuild
7z a -tzip -r "%APPVEYOR_BUILD_FOLDER%\Jackett.Binaries.Windows.zip" "Jackett\"
cd %APPVEYOR_BUILD_FOLDER%
cd MonoBuild
7z a -ttar "%APPVEYOR_BUILD_FOLDER%\Jackett.Binaries.Mono.tar" "Jackett\"
cd %APPVEYOR_BUILD_FOLDER%
7z a -tgzip "Jackett.Binaries.Mono.tar.gz" "Jackett.Binaries.Mono.tar"
appveyor PushArtifact Jackett.Installer.Windows.exe
appveyor PushArtifact Jackett.Binaries.Windows.zip
appveyor PushArtifact Jackett.Binaries.Mono.tar.gz
deploy:
- provider: GitHub
tag: v$(appveyor_build_version)
auth_token:
secure: hOg+16YTIbq4kO9u4D1YVOTbWDqgCX6mAQYMbnmBBSw2CiUsZh7OKbupoUb3FtWa
draft: true
on:
branch: master
notifications:
- provider: GitHubPullRequest
auth_token:
secure: k6ZZACPbKcvAFiXe/uOmY6Ofs4aw2rgKEWMNA8EilQpdJ6o7ef31we4DPn3SXZzx
on_build_success: true
on_build_failure: true
on_build_status_changed: true

586
README.md
View File

@@ -1,278 +1,308 @@
# Jackett
[![GitHub issues](https://img.shields.io/github/issues/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/issues)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/pulls)
[![Github Releases](https://img.shields.io/github/downloads/Jackett/Jackett/total.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/releases/latest)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/jackett.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/jackett/)
This project is a new fork and is recruiting development help. If you are able to help out please contact us.
Jackett works as a proxy server: it translates queries from apps ([Sonarr](https://github.com/Sonarr/Sonarr), [Radarr](https://github.com/Radarr/Radarr), [SickRage](https://sickrage.github.io/), [CouchPotato](https://couchpota.to/), [Mylar](https://github.com/evilhero/mylar), etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
Developer note: The software implements the [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/dev/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
#### Supported Systems
* Windows using .NET 4.5
* Linux and OSX using Mono 4 (mono 3 is no longer supported).
### Supported Public Trackers
* EZTV
* Il Corsaro Nero <!-- maintained by bonny1992 -->
* Isohunt
* KickAssTorrent
* KickAssTorrent (kat.how clone)
* LimeTorrents
* Nyaa <!-- maintained by bonny1992 -->
* RARBG
* ShowRSS
* Sky torrents
* The Pirate Bay
* TNTVillage <!-- maintained by bonny1992 -->
* TorrentProject
* Torrentz2
### Supported Private Trackers
* 2 Fast 4 You
* 3D Torrents
* 7tor
* Abnormal
* Acid-Lounge
* AlphaRatio
* Andraste
* AnimeBytes
* AnimeTorrents
* AOX
* Apollo (XANAX)
* ArabaFenice
* AsianDVDClub
* Audiobook Torrents
* Avistaz
* BakaBT [![(invite needed)][inviteneeded]](#)
* bB
* Best Friends
* BeyondHD
* BIGTorrent
* Bit-City Reloaded
* BIT-HDTV
* BitHQ
* BitHUmen
* BitMeTV
* BitSoup [![(invite needed)][inviteneeded]](#)
* Bitspyder
* Blu-bits
* BlueBird
* BroadcastTheNet [![(invite needed)][inviteneeded]](#)
* BTN
* BTNext
* Carpathians
* CHDBits
* Cinematik
* Cinemageddon
* CinemaZ
* Classix
* CZTeam
* DanishBits
* DataScene
* Demonoid
* Diablo Torrent
* DigitalHive
* Dragon World (DTW)
* Dragonworld Reloaded
* Dream Team
* EoT-Forum
* eStone
* Ethor.net (Thor's Land)
* FANO.IN
* FileList
* Freedom-HD
* Freshon
* FullMixMusic
* FunFile
* FunkyTorrents
* Fuzer
* GFXPeers
* Ghost City
* GigaTorrents [![(invite needed)][inviteneeded]](#)
* GimmePeers <!-- maintained by jamesb2147 -->
* GODS [![(invite needed)][inviteneeded]](#)
* Gormogon
* Greek Team
* Hardbay
* HD4Free
* HD-Space
* HD-Torrents
* HD-Bits.com
* HDBits
* HDChina
* HDClub
* HDHome
* HDSky
* HDTorrents.it
* Hebits
* Hon3y HD
* Hounddawgs
* House-of-Torrents
* Hyperay
* ICE Torrent
* I Love Classics
* Immortalseed
* Infinity-T
* inPeril
* Insane Tracker
* IPTorrents
* JPopsuki
* Kapaki
* Karagarga
* Le Paradis Du Net
* LinkoManija
* LosslessClub
* M-Team - TP
* Magico
* Majomparádé
* Mononoké-BT
* MoreThanTV
* MyAnonamouse
* myAmity
* MySpleen
* Nachtwerk
* NCore
* NetHD
* New Real World
* NextGen
* Norbits [![(invite needed)][inviteneeded]](#) <!-- added by DiseaseNO but no longer maintained? -->
* notwhat.cd
* Ourbits
* Passione Torrent <!-- maintained by bonny1992 -->
* PassThePopcorn [![(invite needed)][inviteneeded]](#)
* PirateTheNet
* PiXELHD
* PolishSource
* PolishTracker
* Pretome
* PrivateHD
* Psytorrents
* PTFiles
* QcTorrent
* Redacted (PassTheHeadphones)
* RevolutionTT
* Rockhard Lossless
* RoDVD
* RuTracker
* SceneAccess
* SceneFZ
* SceneTime
* SDBits
* Secret Cinema
* Shareisland
* ShareSpaceDB
* Shazbat
* Shellife
* SpeedCD
* Superbits
* Tasmanit
* The Empire
* The Horror Charnel
* The New Retro
* The Shinning
* The-Torrents
* TehConnection
* TenYardTracker
* Torrent Network
* Torrent Sector Crew
* Torrent411
* Torrent9
* TorrentBD
* TorrentBytes
* TorrentCCF [![(invite needed)][inviteneeded]](#)
* TorrentDay
* TorrentHeaven
* TorrentHR
* Torrenting
* TorrentLeech
* Torrents.Md
* Torrent-Syndikat
* ToTheGlory
* TranceTraffic
* TransmitheNet
* TV Chaos UK
* TV-Vault
* u-Torrent
* UHDBits
* Ultimate Gamer Club
* ULTRAHDCLUB
* Waffles
* World-In-HD [![(invite needed)][inviteneeded]](#)
* WorldOfP2P
* x264
* XSpeeds
* Xthor
* Xtreme Zone
* Ztracker
Trackers marked with [![(invite needed)][inviteneeded]](#) have no active maintainer and are missing features or are broken. If you have an invite for them please send it to kaso1717 -at- gmail.com to get them fixed/improved.
## Installation on Windows
We recommend you install Jackett as a Windows service using the supplied installer. You may also download the zipped version if you would like to configure everything manually.
To get started with using the installer for Jackett, follow the steps below:
1. Download the latest version of the Windows installer, "Jackett.Installer.Windows.exe" from the [releases](https://github.com/Jackett/Jackett/releases/latest) page.
2. When prompted if you would like this app to make changes to your computer, select "yes".
3. If you would like to install Jackett as a Windows Service, make sure the "Install as Windows Service" checkbox is filled.
4. Once the installation has finished, check the "Launch Jackett" box to get started.
5. Navigate your web browser to: http://127.0.0.1:9117
6. You're now ready to begin adding your trackers and using Jackett.
When installed as a service the tray icon acts as a way to open/start/stop Jackett. If you opted to not install it as a service then Jackett will run its web server from the tray tool.
Jackett can also be run from the command line if you would like to see log messages (Ensure the server isn't already running from the tray/service). This can be done by using "JackettConsole.exe" (for Command Prompt), found in the Jackett data folder: "%ProgramData%\Jackett".
## Installation on Linux/OSX
1. Install [Mono 4](http://www.mono-project.com/download/#download-lin) or better (version 4.8 is recommended)
* Follow the instructions on the mono website and install the `mono-devel` and the `ca-certificates-mono` packages.
* On Red Hat/CentOS/openSUSE/Fedora the `mono-locale-extras` package is also required.
2. Install libcurl:
* Debian/Ubunutu: `apt-get install libcurl4-openssl-dev`
* Redhat/Fedora: `yum install libcurl-devel`
* For other distros see the [Curl docs](http://curl.haxx.se/dlwiz/?type=devel).
3. Download and extract the latest `Jackett.Binaries.Mono.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett using mono with the command `mono --debug JackettConsole.exe`.
Detailed instructions for [Ubuntu 14.x](http://www.htpcguides.com/install-jackett-on-ubuntu-14-x-for-custom-torrents-in-sonarr/) and [Ubuntu 15.x](http://www.htpcguides.com/install-jackett-ubuntu-15-x-for-custom-torrents-in-sonarr/)
## Installation using Docker
Detailed instructions are available at [LinuxServer.io Jackett Docker](https://hub.docker.com/r/linuxserver/jackett/). The Jackett Docker is highly recommended, especially if you are having Mono stability issues or having issues running Mono on your system eg. QNAP, Synology. Thanks to [LinuxServer.io](https://linuxserver.io)
## Installation on Synology
Jackett is available as beta package from [SynoCommuniy](https://synocommunity.com/)
## Troubleshooting
* __Command line switches__
You can pass various options when running via the command line, see --help for details.
* __Unable to connect to trackers with invalid SSL certificates__
You can disable certificate validation using the `--IgnoreSslErrors true` option but it's not recommended to use it as it enables Man-in-the-middle attacks on your connections.
* __Enable logging__
You can get additional logging with the command line switches `-t -l` or by enabeling `Enhanced logging` via the web interface.
Please post logs if you are unable to resolve your issue with these switches ensuring to remove your username/password/cookies.
The logfiles (log.txt/updater.txt) are stored in `%ProgramData%\Jackett` on Windows and `~/.config/Jackett/` on Linux/OSX.
## Creating an issue
Please supply as much information about the problem you are experiencing as possible. Your issue has a much greater chance of being resolved if logs are supplied so that we can see what is going on. Creating an issue with '### isn't working' doesn't help anyone to fix the problem.
## Contributing
All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/Jackett/Jackett/issues). It is recommended to use Visual studio 2015 when making code changes in this project.
## Screenshots
![screenshot](https://i.imgur.com/0d1nl7g.png "screenshot")
[inviteneeded]: https://raw.githubusercontent.com/Jackett/Jackett/master/.github/label-inviteneeded.png
# Jackett
[![GitHub issues](https://img.shields.io/github/issues/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/issues)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/pulls)
[![Build status](https://ci.appveyor.com/api/projects/status/gaybh5mvyx418nsp?svg=true)](https://ci.appveyor.com/project/camjac251/jackett)
[![Github Releases](https://img.shields.io/github/downloads/Jackett/Jackett/total.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/releases/latest)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/jackett.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/jackett/)
This project is a new fork and is recruiting development help. If you are able to help out please contact us.
Jackett works as a proxy server: it translates queries from apps ([Sonarr](https://github.com/Sonarr/Sonarr), [Radarr](https://github.com/Radarr/Radarr), [SickRage](https://sickrage.github.io/), [CouchPotato](https://couchpota.to/), [Mylar](https://github.com/evilhero/mylar), etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
Developer note: The software implements the [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/dev/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
#### Supported Systems
* Windows using .NET 4.5
* Linux and OSX using Mono 4 (mono 3 is no longer supported).
### Supported Public Trackers
* Anidex
* EZTV
* Horrible Subs
* Il Corsaro Nero <!-- maintained by bonny1992 -->
* Isohunt
* KickAssTorrent
* KickAssTorrent (kat.how clone)
* LimeTorrents
* Nyaa.si
* Nyaa-Pantsu
* Nyoo
* RARBG
* ShowRSS
* Sky torrents
* The Pirate Bay
* TNTVillage <!-- maintained by bonny1992 -->
* Tokyo Toshokan
* TorrentProject
* Torrentz2
### Supported Private Trackers
* 2 Fast 4 You
* 3D Torrents
* 7tor
* Abnormal
* Acid-Lounge
* AlphaRatio
* Andraste
* AnimeBytes
* AnimeTorrents
* AOX
* Apollo (XANAX)
* ArabaFenice
* Arche Torrent
* AsianDVDClub
* Audiobook Torrents
* Awesome-HD
* Avistaz
* BakaBT [![(invite needed)][inviteneeded]](#)
* bB
* Best Friends
* BeyondHD
* BIGTorrent
* Bit-City Reloaded
* BIT-HDTV
* BitHQ
* BitHUmen
* BitMeTV
* BitSoup [![(invite needed)][inviteneeded]](#)
* Bitspyder
* Blu-bits
* BlueBird
* BroadcastTheNet [![(invite needed)][inviteneeded]](#)
* BTNext
* Carpathians
* CHDBits
* Cinematik
* Cinemageddon
* CinemaZ
* Classix
* CZTeam
* DanishBits
* DataScene
* Deildu
* Demonoid
* Diablo Torrent
* DigitalHive
* Dragon World (DTW)
* Dragonworld Reloaded
* Dream Team
* EoT-Forum
* eStone
* Ethor.net (Thor's Land)
* FANO.IN
* FileList
* Freedom-HD
* Freshon
* FullMixMusic
* FunFile
* FunkyTorrents
* Fuzer
* GFXPeers
* Ghost City
* GigaTorrents [![(invite needed)][inviteneeded]](#)
* GimmePeers <!-- maintained by jamesb2147 -->
* GODS [![(invite needed)][inviteneeded]](#)
* Gormogon
* Greek Team
* Hardbay
* HD4Free
* HD-Space
* HD-Torrents
* HD-Bits.com
* HDBits
* HDChina
* HDClub
* HDHome
* HDSky
* HDTorrents.it
* Hebits
* Hon3y HD
* Hounddawgs
* House-of-Torrents
* Hyperay
* ICE Torrent
* I Love Classics
* Immortalseed
* Infinity-T
* inPeril
* Insane Tracker
* IPTorrents
* JPopsuki
* Kapaki
* Karagarga
* Le Paradis Du Net
* LinkoManija
* LosslessClub
* M-Team - TP
* Magico
* Majomparádé
* Mononoké-BT
* MoreThanTV
* MyAnonamouse
* myAmity
* MySpleen
* Nachtwerk
* NCore
* Nebulance
* NetHD
* New Real World
* NextGen
* Norbits [![(invite needed)][inviteneeded]](#) <!-- added by DiseaseNO but no longer maintained? -->
* notwhat.cd
* Ourbits
* Passione Torrent <!-- maintained by bonny1992 -->
* PassThePopcorn [![(invite needed)][inviteneeded]](#)
* PirateTheNet
* PiXELHD
* PolishSource
* PolishTracker
* Pretome
* PrivateHD
* Psytorrents
* PTFiles
* QcTorrent
* Redacted (PassTheHeadphones)
* RevolutionTT
* Rockhard Lossless
* RoDVD
* RuTracker
* SceneAccess
* SceneFZ
* SceneTime
* SDBits
* Secret Cinema
* Shareisland
* ShareSpaceDB
* Shazbat
* Shellife
* SpeedCD
* SportsCult
* SportHD
* Superbits
* Tasmanit
* The Empire
* The Geeks
* The Horror Charnel
* The Occult
* The New Retro
* The Place
* The Shinning
* The Show
* The Vault
* The-Torrents
* TehConnection
* TenYardTracker
* Torrent Network
* Torrent Sector Crew
* Torrent411
* Torrent9
* TorrentBD
* TorrentBytes
* TorrentCCF [![(invite needed)][inviteneeded]](#)
* TorrentDay
* TorrentHeaven
* TorrentHR
* Torrenting
* TorrentLeech
* Torrents.Md
* Torrent-Syndikat
* ToTheGlory
* TranceTraffic
* Trezzor
* TV Chaos UK
* TV-Vault
* u-Torrent
* UHDBits
* Ultimate Gamer Club
* ULTRAHDCLUB
* Waffles
* World-In-HD [![(invite needed)][inviteneeded]](#)
* WorldOfP2P
* x264
* XSpeeds
* Xthor
* Xtreme Zone
* Ztracker
Trackers marked with [![(invite needed)][inviteneeded]](#) have no active maintainer and are missing features or are broken. If you have an invite for them please send it to kaso1717 -at- gmail.com to get them fixed/improved.
## Installation on Windows
We recommend you install Jackett as a Windows service using the supplied installer. You may also download the zipped version if you would like to configure everything manually.
To get started with using the installer for Jackett, follow the steps below:
1. Download the latest version of the Windows installer, "Jackett.Installer.Windows.exe" from the [releases](https://github.com/Jackett/Jackett/releases/latest) page.
2. When prompted if you would like this app to make changes to your computer, select "yes".
3. If you would like to install Jackett as a Windows Service, make sure the "Install as Windows Service" checkbox is filled.
4. Once the installation has finished, check the "Launch Jackett" box to get started.
5. Navigate your web browser to: http://127.0.0.1:9117
6. You're now ready to begin adding your trackers and using Jackett.
When installed as a service the tray icon acts as a way to open/start/stop Jackett. If you opted to not install it as a service then Jackett will run its web server from the tray tool.
Jackett can also be run from the command line if you would like to see log messages (Ensure the server isn't already running from the tray/service). This can be done by using "JackettConsole.exe" (for Command Prompt), found in the Jackett data folder: "%ProgramData%\Jackett".
## Installation on Linux
1. Install [Mono 4](http://www.mono-project.com/download/#download-lin) or better (version 4.8 is recommended)
* Follow the instructions on the mono website and install the `mono-devel` and the `ca-certificates-mono` packages.
* On Red Hat/CentOS/openSUSE/Fedora the `mono-locale-extras` package is also required.
2. Install libcurl:
* Debian/Ubunutu: `apt-get install libcurl4-openssl-dev`
* Redhat/Fedora: `yum install libcurl-devel`
* For other distros see the [Curl docs](http://curl.haxx.se/dlwiz/?type=devel).
3. Download and extract the latest `Jackett.Binaries.Mono.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett using mono with the command `mono --debug JackettConsole.exe`.
Detailed instructions for [Ubuntu 14.x](http://www.htpcguides.com/install-jackett-on-ubuntu-14-x-for-custom-torrents-in-sonarr/) and [Ubuntu 15.x](http://www.htpcguides.com/install-jackett-ubuntu-15-x-for-custom-torrents-in-sonarr/)
## Installation on OSX
1. Install [Mono 4](http://www.mono-project.com/download/#download-mac) or better (version 4.8 is recommended)
* Setup ssl support by running
```
https://curl.haxx.se/ca/cacert.pem
cert-sync --user ~/Downloads/cacert.pem
```
1. Download and extract the latest `Jackett.Binaries.Mono.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett using mono with the command `mono --debug JackettConsole.exe`.
## Installation using Docker
Detailed instructions are available at [LinuxServer.io Jackett Docker](https://hub.docker.com/r/linuxserver/jackett/). The Jackett Docker is highly recommended, especially if you are having Mono stability issues or having issues running Mono on your system eg. QNAP, Synology. Thanks to [LinuxServer.io](https://linuxserver.io)
## Installation on Synology
Jackett is available as beta package from [SynoCommuniy](https://synocommunity.com/)
## Troubleshooting
* __Command line switches__
You can pass various options when running via the command line, see --help for details.
* __Unable to connect to trackers with invalid SSL certificates__
If you're using mono this is often caused by missing ca-certificates.
Try reimporting the certificates in this case:
`wget -O - https://curl.haxx.se/ca/cacert.pem | cert-sync /dev/stdin`
As a option of last resort you can disable certificate validation using the `--IgnoreSslErrors true` option but it's not recommended to use it as it enables Man-in-the-middle attacks on your connections.
* __Enable logging__
You can get additional logging with the command line switches `-t -l` or by enabeling `Enhanced logging` via the web interface.
Please post logs if you are unable to resolve your issue with these switches ensuring to remove your username/password/cookies.
The logfiles (log.txt/updater.txt) are stored in `%ProgramData%\Jackett` on Windows and `~/.config/Jackett/` on Linux/OSX.
## Creating an issue
Please supply as much information about the problem you are experiencing as possible. Your issue has a much greater chance of being resolved if logs are supplied so that we can see what is going on. Creating an issue with '### isn't working' doesn't help anyone to fix the problem.
## Contributing
All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/Jackett/Jackett/issues). It is recommended to use Visual studio 2015 when making code changes in this project.
## Screenshots
![screenshot](https://i.imgur.com/0d1nl7g.png "screenshot")
[inviteneeded]: https://raw.githubusercontent.com/Jackett/Jackett/master/.github/label-inviteneeded.png

View File

@@ -52,5 +52,10 @@ namespace JackettTest
{
throw new NotImplementedException();
}
public void InitAggregateIndexer()
{
throw new NotImplementedException();
}
}
}

View File

@@ -185,6 +185,7 @@ namespace Jackett.Updater
"Definitions/rarbg.yml",
"Definitions/t411.yml",
"Definitions/hdbc.yml", // renamed to hdbitscom
"Definitions/nyaa.yml",
};
foreach (var oldFIle in oldFiles)

View File

@@ -0,0 +1,54 @@
---
site: anidex
name: Anidex
description: "Anidex is a torrent tracker and indexer, primarily for English fansub groups of anime"
language: en-us
encoding: UTF-8
type: public
links:
- https://anidex.info/
caps:
categories:
1: TV/Anime # Anime
modes:
search: [q]
tv-search: [q, season, ep]
settings: []
search:
path: "ajax/page.ajax.php"
headers:
x-requested-with: ["XMLHttpRequest"]
inputs:
page: "torrents"
filename: "{{ .Query.Keywords }}"
category: "0"
rows:
selector: div.table-responsive > table > tbody > tr
fields:
category:
text: "1"
title:
selector: td:nth-child(3) > a.torrent > span.span-1440
details:
selector: td:nth-child(3) > a.torrent
attribute: href
download:
selector: td:nth-child(5) > a
attribute: href
size:
selector: td:nth-child(7)
date:
selector: td:nth-child(8)
attribute: title
filters:
- name: replace
args: ["UTC", "+00:00"]
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)

View File

@@ -0,0 +1,68 @@
---
site: awesomehd
name: Awesome-HD
description: "An HD tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://awesome-hd.me
caps:
categorymappings:
- {id: 1, cat: Movies/HD, desc: "Movies"}
- {id: 2, cat: TV/HD, desc: "TV-Shows"}
modes:
searchstr: [q]
settings:
- name: cookie
type: text
label: Cookie
login:
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
page: torrents
rows:
selector: table#torrent_table > tbody > tr.group, tr.torrent, tr.group_torrent:not(.edition_info)
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
optional: true
details:
selector: a[href^="torrents.php?id="]
attribute: href
title:
selector: td:nth-child(3) > a
category:
selector: td:nth-child(2)
# files:
# selector: td:nth-child(4)
date:
selector: td:nth-last-child(5)
size:
selector: td:nth-last-child(4)
grabs:
selector: td:nth-last-child(3)
seeders:
selector: td:nth-last-child(2)
leechers:
selector: td:nth-last-child(1)
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,92 @@
---
site: deildu
name: Deildu
language: is-is
type: semi-private
encoding: iso-8859-1
links:
- https://deildu.net/
caps:
categorymappings:
- {id: 11, cat: Audio, desc: "Music"}
- {id: 6, cat: Movies, desc: "Movies"}
- {id: 5, cat: Movies/DVD, desc: "Movies DVDR"}
- {id: 8, cat: TV, desc: "TV shows"}
- {id: 12, cat: Movies/HD, desc: "HD Movies"}
- {id: 12, cat: TV/HD, desc: "HD TV"}
- {id: 9, cat: TV/Documentary, desc: "TV - Documentaries"}
- {id: 9, cat: Movies/Other, desc: "Movie - Documentaries"}
- {id: 2, cat: TV/Sport, desc: "Sports"}
- {id: 7, cat: Movies/Other, desc: "Cartoons"}
- {id: 14, cat: PC, desc: "Windows"}
- {id: 3, cat: PC/Mac, desc: "Mac"}
- {id: 10, cat: PC/Games, desc: "Games"}
- {id: 4, cat: XXX, desc: "XXX"}
- {id: 1, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
test:
path: my.php
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table[class="torrentlist"] > tbody > tr:has(a[href*="details.php?id="])
filters:
- name: andmatch
args: 55
fields:
download:
selector: a[href^="download.php"]
attribute: href
title:
selector: td:nth-child(2)
# category:
# selector: a[href^="browse.php?cat="]
# attribute: href
# filters:
# - name: querystring
# args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
size:
selector: td:nth-child(7)
files:
selector: td:nth-child(4)
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(6)
filters:
- name: dateparse
args: "2006-01-0215:04:05"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,61 @@
---
site: horriblesubs
name: Horrible Subs
description: "Anime Sub Group - \"So bad yet so good\""
language: en-us
type: public
encoding: UTF-8
links:
- http://horriblesubs.info/
caps:
categories:
1: TV/Anime # Anime
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: prepend-horriblesubs
type: checkbox
label: Prepend [Horriblesubs] to torrent title
search:
path: "lib/{{if .Query.Keywords }}search.php{{else}}latest.php{{end}}"
inputs:
value: "{{ .Query.Keywords }}"
rows:
selector: "div.release-links"
dateheaders:
selector: table.release-info
filters:
- name: split
args: [" ", 0 ]
- name: replace
args: ["(", ""]
- name: replace
args: [")", ""]
- name: replace
args: ["/", "-"]
- name: dateparse
args: "01-02-06"
fields:
category:
text: "1"
title:
selector: table.release-table > tbody > tr > td.dl-label
filters:
- name: prepend
args: "{{if .Config.prepend-horriblesubs}}[Horriblesubs] {{else}}{{end}}"
details:
attribute: class
filters:
- name: replace
args: ["release-links", ""]
- name: re_replace
args: [" ?(\\S+?)-((?:s\\d-)?(?:\\d+v?\\d?-){0,2}\\d+p)", "http://horriblesubs.info/shows/$1#$2"]
download:
selector: table.release-table > tbody > tr > td.hs-magnet-link > span > a
attribute: href
size:
text: "500 MB"

View File

@@ -2,7 +2,7 @@
site: kickasstorrent
name: KickAssTorrent
language: en-us
type: public
type: semi-private
encoding: UTF-8
links:
- https://katcr.co/
@@ -68,7 +68,7 @@
- {id: 153, cat: Other, desc: "Other - Wordpress"}
- {id: 6, cat: TV/HD, desc: "TV - Blu-Ray Disc"}
- {id: 7, cat: TV/Documentary, desc: "TV - Documentary"}
- {id: 5, cat: TV/SD, desc: "TV - DVD Disc"}
- {id: 5, cat: TV/SD, desc: "TV - DVD ISO"}
- {id: 41, cat: TV/HD, desc: "TV - HD"}
- {id: 151, cat: TV/Other, desc: "TV - Other"}
- {id: 146, cat: TV/Sport, desc: "TV - Sport"}
@@ -85,7 +85,22 @@
search: [q]
tv-search: [q, season, ep]
settings: []
settings:
- name: username
type: text
label: Username
- name: passkey
type: text
label: Passkey
login:
method: post
path: "new/account-login.php"
inputs:
username: "{{ .Config.username }}"
passkey: "{{ .Config.passkey }}"
test:
path: index.php
search:
path: "/new/torrents-search.php"
@@ -164,7 +179,7 @@
":has(a:contains(\"Other\")):contains(\"Wordpress\")": 153
":has(a:contains(\"TV\")):contains(\"Blu-Ray Disc\")": 6
":has(a:contains(\"TV\")):contains(\"Documentary\")": 7
":has(a:contains(\"TV\")):contains(\"DVD Disc\")": 5
":has(a:contains(\"TV\")):contains(\"DVD ISO\")": 5
":has(a:contains(\"TV\")):contains(\"HD\")": 41
":has(a:contains(\"TV\")):contains(\"Other\")": 151
":has(a:contains(\"TV\")):contains(\"Sport\")": 146
@@ -176,6 +191,7 @@
":has(a:contains(\"XXX\")):contains(\"UltraHD\")": 121
":has(a:contains(\"XXX\")):contains(\"Videos\")": 119
":has(a:contains(\"XXX\")):contains(\"XXX Games\")": 126
"*": 0 # some older torrents's don't have a category
details:
selector: a.cellMainLink
attribute: href

View File

@@ -0,0 +1,83 @@
#,==========,
#| | | |
#`-./ \.-' -Config'd by Quatroking, 05-05-2017-
# `.__.'
---
site: nyaa-pantsu
name: Nyaa-pantsu
language: en-en
type: public
encoding: UTF-8
links:
- https://nyaa.pantsu.cat/
settings: []
caps:
categorymappings:
# Anime
# - {id: 3_, cat: TV/Anime, desc: "Anime"}
- {id: 3_12, cat: TV/Anime, desc: "Anime music videos"}
- {id: 3_5, cat: TV/Anime, desc: "English subtitled animes"}
- {id: 3_13, cat: TV/Anime, desc: "Non-english subtitled animes"}
- {id: 3_6, cat: TV/Anime, desc: "Raw animes"}
# Audio
# - {id: 2_, cat: Audio, desc: "Audio"}
- {id: 2_3, cat: Audio, desc: "Lossless audio"}
- {id: 2_4, cat: Audio, desc: "Lossy audio"}
# Literature
# - {id: 4_, cat: Books, desc: "Literature"}
- {id: 4_7, cat: Books, desc: "Literature english translated"}
- {id: 4_14, cat: Books, desc: "Literature non-english translated"}
- {id: 4_8, cat: Books, desc: "Raw literature"}
# Software
- {id: 1_1, cat: PC/ISO, desc: "Applications"}
- {id: 1_2, cat: PC/Games, desc: "Games"}
modes:
search: [q]
tv-search: [q]
search:
path: /search
inputs:
# page: "search"
q: "{{ .Query.Keywords}}"
rows:
selector: tr.torrent-info
fields:
title:
selector: td.name a
category:
selector: td:nth-child(1) a
attribute: href
filters:
- name: split
args: [ "=", -1 ]
details:
selector: td.name a
attribute: href
download:
selector: a[title="Magnet link"]
attribute: href
seeders:
selector: td:nth-child(3) b
optional: true
leechers:
selector: td:nth-child(4) b
optional: true
grabs:
selector: td:nth-child(5)
optional: true
date:
selector: td.date
filters:
- name: dateparse
args: "2006-01-02T15:04:05Z"
size:
selector: td.filesize
filters:
- name: replace
args: ["Unknown", "0"]

View File

@@ -1,74 +0,0 @@
---
site: nyaa
name: Nyaa
language: en-en
type: public
encoding: UTF-8
links:
- https://www.nyaa.se/
settings: []
caps:
categorymappings:
# Anime
- {id: 1_32, cat: TV/Anime, desc: "Anime music videos"}
- {id: 1_37, cat: TV/Anime, desc: "English subtitled animes"}
- {id: 1_38, cat: TV/Anime, desc: "Non-english subtitled animes"}
- {id: 1_11, cat: TV/Anime, desc: "Raw animes"}
# Audio
- {id: 3_14, cat: Audio, desc: "Lossless audio"}
- {id: 3_15, cat: Audio, desc: "Lossy audio"}
# Literature
- {id: 2_12, cat: Books, desc: "Literature english translated"}
- {id: 2_39, cat: Books, desc: "Literature non-english translated"}
- {id: 2_13, cat: Books, desc: "Raw literature"}
# Software
- {id: 6_23, cat: PC/ISO, desc: "Applications"}
- {id: 6_24, cat: PC/Games, desc: "Games"}
modes:
search: [q]
tv-search: [q, season, ep]
search:
path: /
inputs:
page: "search"
term: "{{ .Query.Keywords}}"
rows:
selector: tr.tlistrow
fields:
title:
selector: td.tlistname a
category:
selector: td.tlisticon a
attribute: href
filters:
- name: split
args: [ "=", -1 ]
details:
selector: td.tlistname a
attribute: href
download:
selector: a[title="Download"]
attribute: href
size:
selector: td.tlistsize
seeders:
text: 0
seeders:
selector: td.tlistsn
optional: true
leechers:
text: 0
leechers:
selector: td.tlistln
optional: true
grabs:
selector: td.tlistdn
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -0,0 +1,74 @@
---
site: nyaasi
name: Nyaa.si
language: en-us
type: public
encoding: UTF-8
links:
- https://nyaa.si
settings: []
caps:
categorymappings:
# Anime
- {id: 1_0, cat: TV/Anime, desc: "Anime"}
- {id: 1_1, cat: TV/Anime, desc: "Anime music videos"}
- {id: 1_2, cat: TV/Anime, desc: "English subtitled animes"}
- {id: 1_3, cat: TV/Anime, desc: "Non-english subtitled animes"}
- {id: 1_4, cat: TV/Anime, desc: "Raw animes"}
# Audio
- {id: 2_0, cat: Audio, desc: "Audio"}
- {id: 2_1, cat: Audio, desc: "Lossless audio"}
- {id: 2_2, cat: Audio, desc: "Lossy audio"}
# Literature
- {id: 3_0, cat: Books, desc: "Literature"}
- {id: 3_1, cat: Books, desc: "Literature english translated"}
- {id: 3_2, cat: Books, desc: "Literature non-english translated"}
- {id: 3_3, cat: Books, desc: "Raw literature"}
# Software
- {id: 6_0, cat: PC, desc: "Software"}
- {id: 6_1, cat: PC/ISO, desc: "Applications"}
- {id: 6_2, cat: PC/Games, desc: "Games"}
modes:
search: [q]
tv-search: [q]
search:
path: /
inputs:
q: "{{ .Query.Keywords}}"
rows:
selector: tr.default,tr.danger,tr.success
fields:
category:
selector: td:nth-child(1) a
attribute: href
filters:
- name: split
args: [ "=", -1 ]
title:
selector: td:nth-child(2) a
details:
selector: td:nth-child(2) a
attribute: href
download:
selector: td:nth-child(3) a
attribute: href
size:
selector: td:nth-child(4)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " -00"
- name: dateparse
args: "2006-01-02 15:04 -07"
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)

View File

@@ -0,0 +1,75 @@
# Config'd by Quatroking, 07-05-2017
---
site: nyoo
name: Nyoo
language: en-en
type: public
encoding: UTF-8
links:
- https://nyoo.moe
settings: []
caps:
categorymappings:
# Anime
- {id: 3_12, cat: TV/Anime, desc: "Anime music videos"}
- {id: 3_5, cat: TV/Anime, desc: "English subtitled animes"}
- {id: 3_13, cat: TV/Anime, desc: "Non-english subtitled animes"}
- {id: 3_6, cat: TV/Anime, desc: "Raw animes"}
# Audio
- {id: 2_3, cat: Audio, desc: "Lossless audio"}
- {id: 2_4, cat: Audio, desc: "Lossy audio"}
# Literature
- {id: 4_7, cat: Books, desc: "Literature english translated"}
- {id: 4_14, cat: Books, desc: "Literature non-english translated"}
- {id: 4_8, cat: Books, desc: "Raw literature"}
# Software
- {id: 1_1, cat: PC/ISO, desc: "Applications"}
- {id: 1_2, cat: PC/Games, desc: "Games"}
modes:
search: [q]
tv-search: [q, season, ep]
search:
path: /search
inputs:
page: "search"
q: "{{ .Query.Keywords}}"
rows:
selector: tr.tlistrow
fields:
title:
selector: td.tlistname a
category:
selector: td.tlisticon a
attribute: href
filters:
- name: split
args: [ "=", -1 ]
details:
selector: td.tlistname a
attribute: href
download:
selector: a[title="Magnet Download"]
attribute: href
size:
selector: td.tlistsize
# seeders:
# text: 0
# seeders:
# selector: td.tlistsn
# optional: true
# leechers:
# text: 0
# leechers:
# selector: td.tlistln
# optional: true
# grabs:
# selector: td.tlistdn
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -1,103 +0,0 @@
---
site: redacted-scrape
name: Redacted (scrape)
description: "A music tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://redacted.ch/
caps:
categorymappings:
- {id: 1, cat: Audio, desc: "Music"}
- {id: 2, cat: PC, desc: "Applications"}
- {id: 3, cat: Books, desc: "E-Books"}
- {id: 4, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 5, cat: Movies, desc: "E-Learning Videos"}
- {id: 6, cat: TV, desc: "Comedy"}
- {id: 7, cat: Books/Comics, desc: "Comics"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
login: "Log in"
error:
- selector: form#loginform > span.warning
test:
path: torrents.php
ratio:
path: torrents.php
selector: li#stats_ratio > span
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: time
order_way: desc
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
description:
selector: div.group_info
remove: span
title:
selector: div.group_info
remove: span, div.tags
filters:
- name: replace
args: [" / Neutral Leech!", ""]
- name: replace
args: [" / Freeleech!", ""]
category:
selector: td.cats_col
case:
div.cats_music: 1
div.cats_applications: 2
div.cats_ebooks: 3
div.cats_audiobooks: 4
div.cats_elearningvideos: 5
div.cats_comedy: 6
div.cats_comics: 7
comments:
selector: a[href^="torrents.php?id="]
attribute: href
files:
selector: td:nth-child(3)
date:
selector: td:nth-child(4)
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
"strong.tl_free": "0"
"strong.tl_neutral": "0"
":root div.alertbar:contains(\"freeleech\")": "0"
":root div.alertbar:contains(\"FREELEECH\")": "0"
"*": "1"
uploadvolumefactor:
case:
"strong.tl_neutral": "0"
"*": "1"

View File

@@ -0,0 +1,143 @@
---
site: sporthd
name: SportHD
description: "Sports tracker"
language: en-us
type: private
encoding: UTF-8
links:
- http://sporthd.org/
caps:
categorymappings:
- {id: 50, cat: Movies, desc: "Australian Open"}
- {id: 32, cat: Movies, desc: "Basketball"}
- {id: 22, cat: Movies, desc: "Boxing"}
- {id: 23, cat: Movies, desc: "Brasilareo Seria A"}
- {id: 54, cat: Movies, desc: "Brazil League"}
- {id: 11, cat: Movies, desc: "BundesLiga"}
- {id: 45, cat: Movies, desc: "CAF"}
- {id: 37, cat: Movies, desc: "Champions Hockey League"}
- {id: 46, cat: Movies, desc: "Copa Americana"}
- {id: 41, cat: Movies, desc: "Copa Del Rey"}
- {id: 42, cat: Movies, desc: "Copa do Brasil"}
- {id: 43, cat: Movies, desc: "Copa Libertadores"}
- {id: 40, cat: Movies, desc: "Coppa Italia"}
- {id: 51, cat: Movies, desc: "Coupe de France"}
- {id: 39, cat: Movies, desc: "DFB Pokal"}
- {id: 49, cat: Movies, desc: "English League Cup"}
- {id: 8, cat: Movies, desc: "EPL"}
- {id: 13, cat: Movies, desc: "Eredivisie"}
- {id: 2, cat: Movies, desc: "EURO Cup"}
- {id: 6, cat: Movies, desc: "EURO Cup Qualification"}
- {id: 66, cat: Movies, desc: "Eurobasket"}
- {id: 53, cat: Movies, desc: "Euroleague ULEB"}
- {id: 38, cat: Movies, desc: "FA Cup"}
- {id: 59, cat: Movies, desc: "FIFA U-20 World Cup"}
- {id: 69, cat: Movies, desc: "FIFA World Clup Cup"}
- {id: 19, cat: Movies, desc: "Football League Championship"}
- {id: 18, cat: Movies, desc: "Formula 1"}
- {id: 7, cat: Movies, desc: "Friendly matches"}
- {id: 30, cat: Movies, desc: "Handball"}
- {id: 31, cat: Movies, desc: "IIHF"}
- {id: 15, cat: Movies, desc: "IndyCar"}
- {id: 20, cat: Movies, desc: "KHL"}
- {id: 10, cat: Movies, desc: "La Liga"}
- {id: 12, cat: Movies, desc: "Ligue 1"}
- {id: 21, cat: Movies, desc: "Major League Soccer"}
- {id: 67, cat: Movies, desc: "MLB"}
- {id: 63, cat: Movies, desc: "MMA"}
- {id: 58, cat: Movies, desc: "MotoGP"}
- {id: 16, cat: Movies, desc: "NBA"}
- {id: 57, cat: Movies, desc: "NBA Playoffs"}
- {id: 14, cat: Movies, desc: "NCAA"}
- {id: 34, cat: Movies, desc: "NFL"}
- {id: 17, cat: Movies, desc: "NHL"}
- {id: 36, cat: Movies, desc: "Old classic games"}
- {id: 68, cat: Movies, desc: "Olympic Games 2016"}
- {id: 28, cat: Movies, desc: "Other domestic leagues"}
- {id: 55, cat: Movies, desc: "Paulista A1"}
- {id: 26, cat: Movies, desc: "Portuguese League"}
- {id: 65, cat: Movies, desc: "ROH"}
- {id: 61, cat: Movies, desc: "Rollan Garros"}
- {id: 29, cat: Movies, desc: "Rugby"}
- {id: 9, cat: Movies, desc: "Serie A"}
- {id: 33, cat: Movies, desc: "SHL"}
- {id: 47, cat: Movies, desc: "Ski Jumping"}
- {id: 25, cat: Movies, desc: "Sport video"}
- {id: 44, cat: Movies, desc: "Sudamericana"}
- {id: 52, cat: Movies, desc: "Taca Da Liga"}
- {id: 24, cat: Movies, desc: "Tennis"}
- {id: 64, cat: Movies, desc: "TNA"}
- {id: 56, cat: Movies, desc: "Torneo Premiera A"}
- {id: 3, cat: Movies, desc: "UCL"}
- {id: 4, cat: Movies, desc: "UEL"}
- {id: 60, cat: Movies, desc: "UFC"}
- {id: 35, cat: Movies, desc: "Volleyball"}
- {id: 5, cat: Movies, desc: "WC Qualification"}
- {id: 1, cat: Movies, desc: "World Cup"}
- {id: 27, cat: Movies, desc: "World Cup 2014"}
- {id: 48, cat: Movies, desc: "WWE"}
modes:
search: [q]
settings:
- name: cookie
type: text
label: Cookie
login:
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table.embedded > tbody > tr:has(a[href^="browse.php?cat="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: td:nth-child(2)
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
# files:
# selector: td:nth-child(3)
# size:
# selector: td:nth-child(4)
#seeders:
# selector: td:nth-child(5)
#leechers:
# selector: td:nth-child(5)
# date:
# selector: td:nth-child(7)
# filters:
# - name: append
# args: " ago"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,124 @@
---
site: sportscult
name: SportsCult
description: "Sports tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://sportscult.org
caps:
categorymappings:
- {id: 47, cat: TV/Sport, desc: "EPL"}
- {id: 41, cat: TV/Sport, desc: "American Football"}
- {id: 17, cat: TV/Sport, desc: "Athletics"}
- {id: 34, cat: TV/Sport, desc: "Bodybuilding/Fitness"}
- {id: 29, cat: TV/Sport, desc: "Boxing"}
- {id: 19, cat: TV/Sport, desc: "BrainGames"}
- {id: 36, cat: TV/Sport, desc: "BreakDance"}
- {id: 40, cat: TV/Sport, desc: "Cricet/Golf/Baseball"}
- {id: 23, cat: TV/Sport, desc: "Cycling"}
- {id: 31, cat: TV/Sport, desc: "Documentary"}
- {id: 1, cat: TV/Sport, desc: "European Basketball"}
- {id: 6, cat: TV/Sport, desc: "European Soccer"}
- {id: 37, cat: TV/Sport, desc: "Extreme Sports"}
- {id: 9, cat: TV/Sport, desc: "Fight Sports"}
- {id: 32, cat: TV/Sport, desc: "Formula1"}
- {id: 45, cat: TV/Sport, desc: "GAA (Gaelic)"}
- {id: 8, cat: TV/Sport, desc: "Golf"}
- {id: 22, cat: TV/Sport, desc: "Gymnastics"}
- {id: 39, cat: TV/Sport, desc: "Handball"}
- {id: 2, cat: TV/Sport, desc: "International Basket"}
- {id: 25, cat: TV/Sport, desc: "IceHockey"}
- {id: 4, cat: TV/Sport, desc: "International Soccer"}
- {id: 42, cat: TV/Sport, desc: "KHL"}
- {id: 35, cat: TV/Sport, desc: "KickBoxing/Muay Thai"}
- {id: 43, cat: TV/Sport, desc: "La Liga"}
- {id: 15, cat: TV/Sport, desc: "MotorSport"}
- {id: 24, cat: TV/Sport, desc: "MLB/Baseball"}
- {id: 28, cat: TV/Sport, desc: "MMA"}
- {id: 11, cat: TV/Sport, desc: "NBA/WNBA"}
- {id: 3, cat: TV/Sport, desc: "NCAA Basket/Football"}
- {id: 5, cat: TV/Sport, desc: "NFL"}
- {id: 27, cat: TV/Sport, desc: "NHL"}
- {id: 26, cat: TV/Sport, desc: "Olympic games"}
- {id: 7, cat: TV/Sport, desc: "Rugby"}
- {id: 44, cat: TV/Sport, desc: "Serie A"}
- {id: 38, cat: TV/Sport, desc: "Snooker/Pool"}
- {id: 30, cat: TV/Sport, desc: "Streetball"}
- {id: 18, cat: TV/Sport, desc: "Swimming/Aquatics"}
- {id: 46, cat: TV/Sport, desc: "AFL(AustralianFB)"}
- {id: 12, cat: TV/Sport, desc: "Tennis"}
- {id: 20, cat: TV/Sport, desc: "Volleyball/Beach"}
- {id: 21, cat: TV/Sport, desc: "Weightlifting"}
- {id: 16, cat: TV/Sport, desc: "WinterSport"}
- {id: 33, cat: TV/Sport, desc: "Wrestling/Grapling"}
- {id: 48, cat: TV/Sport, desc: "Uncategorised"}
modes:
search: [q]
login:
path: /?page=login
method: form
form: form
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: span:contains("Password Incorrect")
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
page: torrents
category: 0
active: 1
rows:
selector: table[cellspacing!="1"].lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
title:
remove: span
selector: td:nth-child(2)
download:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: href
filters:
- name: replace
args: ["index.php?page=torrent-details&id=", "download.php?id="]
details:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-child(4)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
# date:
# selector: td:nth-child(5)
# filters:
# - name: dateparse
# args: "02/05/2017"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -6,7 +6,7 @@
type: private
encoding: UTF-8
links:
- http://www.theempire.bz/
- http://theempire.click/
caps:
categorymappings:

View File

@@ -0,0 +1,157 @@
---
site: thegeeks
name: The Geeks
description: "Technology E-Learning"
language: en-us
type: private
encoding: UTF-8
links:
- http://thegeeks.click/
caps:
categorymappings:
- {id: 71, cat: Other, desc: "Antiques / Collecting"}
- {id: 46, cat: Other, desc: "Comp: Security/Encryption"}
- {id: 37, cat: Other, desc: "Game Shows / Quiz Shows"}
- {id: 16, cat: Other, desc: "Magic &amp; Illusion"}
- {id: 79, cat: Other, desc: "Reality: Competitions"}
- {id: 68, cat: Other, desc: "Arts &amp; Crafts / Jewelry"}
- {id: 52, cat: Other, desc: "Comp: Software Training"}
- {id: 2, cat: Other, desc: "Games: Cards / Gambling"}
- {id: 12, cat: Other, desc: "Math &amp; Statistics"}
- {id: 53, cat: Other, desc: "Reality: Social Experiment"}
- {id: 72, cat: Other, desc: "Astronomy / Space"}
- {id: 41, cat: Other, desc: "Comp: Theory/Ref/Mags"}
- {id: 63, cat: Other, desc: "Games: Tabletop / Roleplay"}
- {id: 10, cat: Other, desc: "Medicine &amp; Health"}
- {id: 61, cat: Other, desc: "Sci: Biology"}
- {id: 28, cat: Other, desc: "Business / Finance"}
- {id: 47, cat: Other, desc: "Comp: Web Development"}
- {id: 36, cat: Other, desc: "Gardening / Agriculture"}
- {id: 26, cat: Other, desc: "Music: History / Theory"}
- {id: 77, cat: Other, desc: "Sci: Chemistry"}
- {id: 38, cat: Other, desc: "Crime &amp; Investigation"}
- {id: 21, cat: Other, desc: "DIY / Workshop"}
- {id: 55, cat: Other, desc: "History of Civilization"}
- {id: 15, cat: Other, desc: "Music: Learning / Courses"}
- {id: 76, cat: Other, desc: "Sci: Physics"}
- {id: 45, cat: Other, desc: "Photography"}
- {id: 82, cat: Other, desc: "Docu: Architecture / Building"}
- {id: 56, cat: Other, desc: "History of War &amp; Politics"}
- {id: 75, cat: Other, desc: "Nature"}
- {id: 80, cat: Other, desc: "Sports - Live/Highlights"}
- {id: 85, cat: Other, desc: "Childrens Educational"}
- {id: 39, cat: Other, desc: "Docu: Fly on The Wall"}
- {id: 58, cat: Other, desc: "History: Biographies"}
- {id: 54, cat: Other, desc: "News / World Reports"}
- {id: 22, cat: Other, desc: "Sports/Exercise/Outdoors"}
- {id: 40, cat: Other, desc: "Comp: Certification Courses"}
- {id: 69, cat: Other, desc: "Documentaries: Misc"}
- {id: 31, cat: Other, desc: "History: Misc"}
- {id: 83, cat: Other, desc: "Nova"}
- {id: 24, cat: Other, desc: "Stock Media"}
- {id: 44, cat: Other, desc: "Comp: Digital Audio/Video"}
- {id: 59, cat: Other, desc: "Earth / Environment"}
- {id: 23, cat: Other, desc: "Hobbies: Misc"}
- {id: 27, cat: Other, desc: "Paleontology"}
- {id: 33, cat: Other, desc: "Style &amp; Fashion"}
- {id: 48, cat: Other, desc: "Comp: Games Dev/Guides"}
- {id: 18, cat: Other, desc: "Engineering"}
- {id: 35, cat: Other, desc: "Home / Property"}
- {id: 60, cat: Other, desc: "Performing Arts"}
- {id: 73, cat: Other, desc: "Survivalism"}
- {id: 3, cat: Other, desc: "Comp: Graphics "}
- {id: 25, cat: Other, desc: "Exam Prep / Education"}
- {id: 78, cat: Other, desc: "Horizon"}
- {id: 67, cat: Other, desc: "Pets / Animal Keeping"}
- {id: 86, cat: Other, desc: "Tattoos/Body Art"}
- {id: 42, cat: Other, desc: "Comp: Lang/DBs"}
- {id: 4, cat: Other, desc: "Fine &amp; Visual Arts"}
- {id: 1, cat: Other, desc: "Languages / Linguistics"}
- {id: 29, cat: Other, desc: "Philosophy"}
- {id: 32, cat: Other, desc: "Travel / Culture"}
- {id: 49, cat: Other, desc: "Comp: Network/Hardware"}
- {id: 9, cat: Other, desc: "Food / Cooking / Nutrition"}
- {id: 20, cat: Other, desc: "Law &amp; Justice"}
- {id: 11, cat: Other, desc: "Political Studies"}
- {id: 34, cat: Other, desc: "Vehicles &amp; Transport"}
- {id: 43, cat: Other, desc: "Comp: Operating Systems"}
- {id: 84, cat: Other, desc: "FrontLine"}
- {id: 30, cat: Other, desc: "Literature"}
- {id: 14, cat: Other, desc: "Psychology/Sociology"}
modes:
search: [q]
login:
path: /login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
image: img#freecap
input: word
error:
- selector: table:contains("Login failed!")
test:
path: main.php
download:
selector: a[href^="download.php"]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
filters:
selector: td:nth-child(2) b
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(4)
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(6)
filters:
- name: regexp
args: (\d{4}-\d{2}-\d{2})
downloadvolumefactor:
case:
"font[color=\"green\"]": "0"
"font[color=\"blue\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"font[color=\"green\"]": "0"
"*": "1"

View File

@@ -0,0 +1,139 @@
---
site: theoccult
name: The Occult
description: "Cult E-Learning"
language: en-us
type: private
encoding: UTF-8
links:
- http://theoccult.click/
caps:
categorymappings:
- {id: 63, cat: Other, desc: "Academic / Reference"}
- {id: 21, cat: Other, desc: "Everything Else"}
- {id: 68, cat: Other, desc: "Mythology and Folklore"}
- {id: 61, cat: Other, desc: "Rajneesh"}
- {id: 1, cat: Other, desc: "Thelema / Crowley"}
- {id: 51, cat: Other, desc: "African/African Diaspora Relig"}
- {id: 30, cat: Other, desc: "Fourth Way"}
- {id: 17, cat: Other, desc: "Native American"}
- {id: 57, cat: Other, desc: "Ritual Magic"}
- {id: 74, cat: Other, desc: "Theosophy / Anthroposophy"}
- {id: 10, cat: Other, desc: "Alchemy"}
- {id: 7, cat: Other, desc: "Freemasonry"}
- {id: 54, cat: Other, desc: "New Age"}
- {id: 34, cat: Other, desc: "Rosicrucian"}
- {id: 73, cat: Other, desc: "Traditional Left-Hand Path"}
- {id: 69, cat: Other, desc: "Ancient Languages"}
- {id: 6, cat: Other, desc: "Golden Dawn"}
- {id: 76, cat: Other, desc: "Non-Dualism"}
- {id: 75, cat: Other, desc: "Sacred Geometry"}
- {id: 71, cat: Other, desc: "Traditional Witchcraft"}
- {id: 9, cat: Other, desc: "Astrology"}
- {id: 35, cat: Other, desc: "Grimoires"}
- {id: 52, cat: Other, desc: "Northern European Paganism"}
- {id: 31, cat: Other, desc: "Satanism"}
- {id: 77, cat: Other, desc: "Transpersonal Psychology"}
- {id: 25, cat: Other, desc: "Buddhism "}
- {id: 26, cat: Other, desc: "Hinduism"}
- {id: 70, cat: Other, desc: "Other Divination"}
- {id: 28, cat: Other, desc: "Shamanism"}
- {id: 19, cat: Other, desc: "Wicca / NeoWicca / Eclectic"}
- {id: 32, cat: Other, desc: "Chaos Magic "}
- {id: 64, cat: Other, desc: "Lovecraft Mythos"}
- {id: 67, cat: Other, desc: "Other Eastern Traditions"}
- {id: 56, cat: Other, desc: "Southern European Paganism"}
- {id: 20, cat: Other, desc: "Yoga / Tantra"}
- {id: 66, cat: Other, desc: "Energy Healing"}
- {id: 13, cat: Other, desc: "Lucid Dreams/Astral Projection"}
- {id: 49, cat: Other, desc: "Paranormal"}
- {id: 72, cat: Other, desc: "Specialty Presses"}
- {id: 4, cat: Other, desc: "Enochian"}
- {id: 14, cat: Other, desc: "Meditation"}
- {id: 33, cat: Other, desc: "Parapsychology"}
- {id: 58, cat: Other, desc: "Sufism"}
- {id: 11, cat: Other, desc: "Entheogens"}
- {id: 53, cat: Other, desc: "Middle Eastern Magic"}
- {id: 15, cat: Other, desc: "Philosophy"}
- {id: 55, cat: Other, desc: "Taoism / Daoism"}
- {id: 29, cat: Other, desc: "Esoteric Christianity"}
- {id: 65, cat: Other, desc: "Modern Grimoires"}
- {id: 12, cat: Other, desc: "Qabalah / Kabbalah / Cabala"}
- {id: 18, cat: Other, desc: "Tarot / Oracle Cards"}
modes:
search: [q]
login:
path: /login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
image: img#freecap
input: word
error:
- selector: table:contains("Login failed!")
test:
path: main.php
download:
selector: a[href^="download.php"]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
filters:
selector: td:nth-child(2) b
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(4)
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(6)
filters:
- name: regexp
args: (\d{4}-\d{2}-\d{2})
downloadvolumefactor:
case:
"font[color=\"green\"]": "0"
"font[color=\"blue\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"font[color=\"green\"]": "0"
"*": "1"

View File

@@ -0,0 +1,120 @@
---
site: theplace
name: The Place
description: "Self-improvement E-Learning"
language: en-us
type: private
encoding: UTF-8
links:
- http://theplace.click/
caps:
categorymappings:
- {id: 46, cat: Other, desc: "Alpha Male Example Clips"}
- {id: 68, cat: Other, desc: "Author: Juggler"}
- {id: 69, cat: Other, desc: "Author: Sean Messenger"}
- {id: 42, cat: Other, desc: "Food / Drink / Cooking"}
- {id: 22, cat: Other, desc: "Seduction: Other"}
- {id: 60, cat: Other, desc: "Author: AMP"}
- {id: 70, cat: Other, desc: "Author: Michael Hall (NLP)"}
- {id: 61, cat: Other, desc: "Author: Style (Neil Strauss)"}
- {id: 47, cat: Other, desc: "Health / Fitness / Massage"}
- {id: 39, cat: Other, desc: "Seduction: Video"}
- {id: 51, cat: Other, desc: "Author: Anthony Robbins"}
- {id: 49, cat: Other, desc: "Author: Mystery"}
- {id: 66, cat: Other, desc: "Author: Vince Kelvin"}
- {id: 43, cat: Other, desc: "Hypnotism / NLP"}
- {id: 14, cat: Other, desc: "Seduction: Written"}
- {id: 50, cat: Other, desc: "Author: Carlos Xuma"}
- {id: 53, cat: Other, desc: "Author: Pickup101"}
- {id: 41, cat: Other, desc: "Dance / Singing / Voice"}
- {id: 44, cat: Other, desc: "Languages / Accents"}
- {id: 40, cat: Other, desc: "Sex"}
- {id: 48, cat: Other, desc: "Author: David DeAngelo"}
- {id: 65, cat: Other, desc: "Author: Richard Bandler (NLP)"}
- {id: 57, cat: Other, desc: "Everything Else"}
- {id: 45, cat: Other, desc: "Magic / Illusions / Tricks"}
- {id: 54, cat: Other, desc: "Author: David Shade"}
- {id: 52, cat: Other, desc: "Author: Ross Jeffries"}
- {id: 58, cat: Other, desc: "Fashion / Clothing / Grooming"}
- {id: 59, cat: Other, desc: "Psychology / Body Language"}
- {id: 71, cat: Other, desc: "Author: Jerry Stocking"}
- {id: 67, cat: Other, desc: "Author: RSD"}
- {id: 64, cat: Other, desc: "Fighting / Martial Arts"}
- {id: 38, cat: Other, desc: "Seduction: Audio"}
modes:
search: [q]
login:
path: /login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
image: img#freecap
input: word
error:
- selector: table:contains("Login failed!")
test:
path: main.php
download:
selector: a[href^="download.php"]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
filters:
selector: td:nth-child(2) b
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(4)
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(6)
filters:
- name: regexp
args: (\d{4}-\d{2}-\d{2})
downloadvolumefactor:
case:
"font[color=\"green\"]": "0"
"font[color=\"blue\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"font[color=\"green\"]": "0"
"*": "1"

View File

@@ -0,0 +1,137 @@
---
site: theshow
name: The Show
description: "Entertainment E-Learning"
language: en-us
type: private
encoding: UTF-8
links:
- http://theshow.click/
caps:
categorymappings:
- {id: 64, cat: Other, desc: "Graphics / Photo Editing"}
- {id: 51, cat: Other, desc: "Performing Craft: Acting"}
- {id: 85, cat: Other, desc: "Scripts: Theatre"}
- {id: 90, cat: Other, desc: "Visual Craft: Handcraft/Sculpt"}
- {id: 32, cat: Other, desc: "Magazines / Trade Journals"}
- {id: 4, cat: Other, desc: "Performing Craft: Dance"}
- {id: 49, cat: Other, desc: "Software / Tutorials"}
- {id: 93, cat: Other, desc: "Visual Craft: Jewelry Making"}
- {id: 17, cat: Other, desc: "A-V: Film/Video Editing"}
- {id: 66, cat: Other, desc: "Mindset / Creativity"}
- {id: 10, cat: Other, desc: "Production: Cinematography"}
- {id: 26, cat: Other, desc: "Stock: Film / Video"}
- {id: 11, cat: Other, desc: "Visual Craft: Needlework"}
- {id: 30, cat: Other, desc: "A-V: Sound Recording/Design"}
- {id: 67, cat: Other, desc: "Music Business / Promotion"}
- {id: 1, cat: Other, desc: "Production: Directing (Film)"}
- {id: 54, cat: Other, desc: "Stock: Music / Sound FX"}
- {id: 52, cat: Other, desc: "Visual Craft: Photography"}
- {id: 6, cat: Other, desc: "A-V: Videography"}
- {id: 73, cat: Other, desc: "Music: Shows/Special Events"}
- {id: 7, cat: Other, desc: "Production: Directing(Theatre)"}
- {id: 13, cat: Other, desc: "Stock: Photos / Illustrations"}
- {id: 89, cat: Other, desc: "Visual Craft: Scrapbooking"}
- {id: 9, cat: Other, desc: "A-V: Visual FX"}
- {id: 70, cat: Other, desc: "Performances: Competitions"}
- {id: 53, cat: Other, desc: "Production: Visuals"}
- {id: 69, cat: Other, desc: "TV Shows: Action/Drama/Mystery"}
- {id: 88, cat: Other, desc: "Visual Craft: Tattoos/Body Art"}
- {id: 29, cat: Other, desc: "Business / Distribution"}
- {id: 94, cat: Other, desc: "Performances: Dance/Ballet"}
- {id: 77, cat: Other, desc: "Radio: Comedy/Drama/Mystery"}
- {id: 68, cat: Other, desc: "TV Shows: Comedy"}
- {id: 21, cat: Other, desc: "Writing Craft: Screenwriting"}
- {id: 56, cat: Other, desc: "Creative Writing"}
- {id: 82, cat: Other, desc: "Performances: Drama/Art"}
- {id: 79, cat: Other, desc: "Radio: Entertain/Arts/Narrativ"}
- {id: 71, cat: Other, desc: "TV Shows: Entertain/Chat/Goss"}
- {id: 25, cat: Other, desc: "Digital Craft: 3D Modeling"}
- {id: 76, cat: Other, desc: "Performances: Sketch/Improv"}
- {id: 80, cat: Other, desc: "Radio: Music Performances"}
- {id: 92, cat: Other, desc: "Visual Craft: Design Theory"}
- {id: 63, cat: Other, desc: "Everything Else"}
- {id: 75, cat: Other, desc: "Performances: Spoken Word"}
- {id: 83, cat: Other, desc: "Scripts: Radio"}
- {id: 91, cat: Other, desc: "Visual Craft: Drawing/Drafting"}
- {id: 65, cat: Other, desc: "Film History / Theory "}
- {id: 78, cat: Other, desc: "Performances: Standup Comedy"}
- {id: 84, cat: Other, desc: "Scripts: Television"}
- {id: 87, cat: Other, desc: "Visual Craft: Fashion/Makeup"}
modes:
search: [q]
login:
path: /login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
image: img#freecap
input: word
error:
- selector: table:contains("Login failed!")
test:
path: main.php
download:
selector: a[href^="download.php"]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
filters:
selector: td:nth-child(2) b
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(4)
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(6)
filters:
- name: regexp
args: (\d{4}-\d{2}-\d{2})
downloadvolumefactor:
case:
"font[color=\"green\"]": "0"
"font[color=\"blue\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"font[color=\"green\"]": "0"
"*": "1"

View File

@@ -0,0 +1,138 @@
---
site: thevault
name: The Vault
description: "Business/Marketing E-Learning"
language: en-us
type: private
encoding: UTF-8
links:
- http://thevault.click/
caps:
categorymappings:
- {id: 87, cat: Other, desc: "Author: Brian Tracy"}
- {id: 106, cat: Other, desc: "Autobiographies / Biographies"}
- {id: 67, cat: Other, desc: "Investing / Trading / Stocks"}
- {id: 93, cat: Other, desc: "Negotiation / Contracts"}
- {id: 99, cat: Other, desc: "Net: Traffic Generation"}
- {id: 107, cat: Other, desc: "Author: Dan Kennedy"}
- {id: 118, cat: Other, desc: "Ayn Rand / Objectivism"}
- {id: 75, cat: Other, desc: "Magazines"}
- {id: 97, cat: Other, desc: "Net: Affiliate Schemes"}
- {id: 102, cat: Other, desc: "Net: Web Site/Blog Templates"}
- {id: 110, cat: Other, desc: "Author: Dan Pena"}
- {id: 112, cat: Other, desc: "Consulting"}
- {id: 70, cat: Other, desc: "Management / Leadership"}
- {id: 105, cat: Other, desc: "Net: Blogging"}
- {id: 114, cat: Other, desc: "Network Marketing (MLM)"}
- {id: 117, cat: Other, desc: "Author: Eben Pagan"}
- {id: 94, cat: Other, desc: "Copywriting"}
- {id: 85, cat: Other, desc: "Mindset / Achievement"}
- {id: 76, cat: Other, desc: "Net: E-Commerce"}
- {id: 111, cat: Other, desc: "Offshore / Tax Avoidance"}
- {id: 92, cat: Other, desc: "Author: Jay Abraham"}
- {id: 103, cat: Other, desc: "Corporate Design / Branding"}
- {id: 80, cat: Other, desc: "Misc: Audio"}
- {id: 100, cat: Other, desc: "Net: eBay / Online Auctions"}
- {id: 116, cat: Other, desc: "Private Label Rights (PLR)"}
- {id: 89, cat: Other, desc: "Author: Jim Rohn"}
- {id: 84, cat: Other, desc: "Customer Service"}
- {id: 90, cat: Other, desc: "Misc: Other"}
- {id: 115, cat: Other, desc: "Net: Email Marketing"}
- {id: 68, cat: Other, desc: "Real Estate / Property Develop"}
- {id: 96, cat: Other, desc: "Author: John Reese"}
- {id: 65, cat: Other, desc: "Economics / Finance"}
- {id: 83, cat: Other, desc: "Misc: Software"}
- {id: 95, cat: Other, desc: "Net: Marketing"}
- {id: 104, cat: Other, desc: "Recruitment / Interviewing"}
- {id: 63, cat: Other, desc: "Author: Robert Kiyosaki"}
- {id: 113, cat: Other, desc: "Entertainment Business"}
- {id: 81, cat: Other, desc: "Misc: Video"}
- {id: 101, cat: Other, desc: "Net: Misc"}
- {id: 71, cat: Other, desc: "Sales / Marketing"}
- {id: 86, cat: Other, desc: "Author: T Harv Eker"}
- {id: 109, cat: Other, desc: "Gambling / Betting"}
- {id: 82, cat: Other, desc: "Misc: Written / E-Books"}
- {id: 98, cat: Other, desc: "Net: Pay-Per-Click Advertising"}
- {id: 72, cat: Other, desc: "Small Business / Entrepreneurs"}
- {id: 88, cat: Other, desc: "Author: Zig Ziglar"}
- {id: 73, cat: Other, desc: "Hypnosis / NLP"}
- {id: 62, cat: Other, desc: "Money Management / Taxes"}
- {id: 108, cat: Other, desc: "Net: Search Engine Optimizing"}
- {id: 91, cat: Other, desc: "TTC Lectures"}
modes:
search: [q]
login:
path: /login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
image: img#freecap
input: word
error:
- selector: table:contains("Login failed!")
test:
path: main.php
download:
selector: a[href^="download.php"]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table[border="0"] > tbody > tr.ttable:has(a[href^="browse.php?cat="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
filters:
selector: td:nth-child(2) b
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(4)
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(6)
filters:
- name: regexp
args: (\d{4}-\d{2}-\d{2})
downloadvolumefactor:
case:
"font[color=\"green\"]": "0"
"font[color=\"blue\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"font[color=\"green\"]": "0"
"*": "1"

View File

@@ -0,0 +1,74 @@
---
site: tokyotosho
name: Tokyo Toshokan
description: "A BitTorrent Library for Japanese Media"
language: en-us
type: public
encoding: UTF-8
links:
- https://www.tokyotosho.info/
caps:
categories:
1: TV/Anime # Anime
10: TV/Anime # Non-English Anime
3: Books # Manga
8: TV/Anime # Drama
2: Audio # Anime Music
9: TV/Anime # Anime Music Videos
7: TV/Anime # Raw Anime
4: XXX # Hentai
12: XXX # Hentai (Anime)
13: XXX # Hentai (Manga)
14: XXX # Hentai (Games)
11: TV/Anime # Batch
15: XXX # JAV
5: Other # Other
modes:
search: [q]
tv-search: [q, season, ep]
search:
path: "{{if .Query.Keywords }}search.php{{else}}index.php{{end}}"
inputs:
terms: "{{ .Query.Keywords }}"
rows:
selector: "table.listing tr.category_0"
after: 1
fields:
category:
selector: td:nth-child(1) > a
attribute: href
filters:
- name: regexp
args: "(\\d+)"
title:
selector: td:nth-child(2) > a:nth-child(2)
details:
selector: td:nth-child(3) > a
attribute: href
download:
selector: td:nth-child(2) > a:nth-child(2)
attribute: href
size:
selector: td:nth-child(4)
filters:
- name: split
args: [ "|", 1 ]
- name: regexp
args: "Size: (.+?) ?$"
date:
selector: td:nth-child(4)
filters:
- name: split
args: [ "|", 2 ]
- name: regexp
args: "Date: (.+?) ?$"
- name: replace
args: ["UTC","-00"]
- name: dateparse
args: "2006-01-02 15:04 -07"
seeders:
selector: td:nth-child(5) > span:nth-child(1)
leechers:
selector: td:nth-child(5) > span:nth-child(2)

View File

@@ -126,9 +126,9 @@ namespace Jackett.Indexers.Abstract
if (!string.IsNullOrEmpty(artist))
release.Title += artist + " - ";
release.Title += groupName;
if (!string.IsNullOrEmpty(groupYear))
if (!string.IsNullOrEmpty(groupYear) && groupYear != "0")
release.Title += " [" + groupYear + "]";
if (!string.IsNullOrEmpty(releaseType))
if (!string.IsNullOrEmpty(releaseType) && releaseType != "Unknown")
release.Title += " [" + releaseType + "]";
release.Description = "";
@@ -180,7 +180,7 @@ namespace Jackett.Indexers.Abstract
var format = (string)torrent["format"];
if (!string.IsNullOrEmpty(format))
flags.Add(format);
flags.Add(HttpUtility.HtmlDecode(format));
var encoding = (string)torrent["encoding"];
if (!string.IsNullOrEmpty(encoding))

View File

@@ -135,8 +135,8 @@ namespace Jackett.Indexers
{
configData.CookieHeader.Value = jsonConfig.Value<string>("cookies");
configData.IncludeRaw.Value = jsonConfig.Value<bool>("raws");
SaveConfig();
IsConfigured = true;
SaveConfig();
return;
}
@@ -302,9 +302,9 @@ namespace Jackett.Indexers
releaseInfo = releaseInfo.Replace("Season ", "S");
releaseInfo = releaseInfo.Trim();
int test = 0;
if (InsertSeason && int.TryParse(releaseInfo, out test) && releaseInfo.Length==1)
if (InsertSeason && int.TryParse(releaseInfo, out test) && releaseInfo.Length<=3)
{
releaseInfo = "S01E0" + releaseInfo;
releaseInfo = "E0" + releaseInfo;
}
}

View File

@@ -35,7 +35,7 @@ namespace Jackett.Indexers
public AnimeTorrents(IIndexerManagerService i, HttpWebClient c, Logger l, IProtectionService ps)
: base(name: "AnimeTorrents",
description: "Definitive source for anime and manga",
link: "http://animetorrents.me/",
link: "https://animetorrents.me/",
caps: new TorznabCapabilities(),
manager: i,
client: c, // Forced HTTP client for custom headers
@@ -78,7 +78,7 @@ namespace Jackett.Indexers
{ "rememberme[]", "1" }
};
var loginPage = await RequestStringWithCookiesAndRetry(LoginUrl, null, null);
var loginPage = await RequestStringWithCookiesAndRetry(LoginUrl, "", LoginUrl);
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true);
await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () =>

View File

@@ -0,0 +1,184 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using AngleSharp.Parser.Html;
using Newtonsoft.Json.Linq;
using NLog;
using Jackett.Models;
using Jackett.Models.IndexerConfig;
using Jackett.Services;
using Jackett.Utils;
using Jackett.Utils.Clients;
namespace Jackett.Indexers
{
class ArcheTorrent : BaseIndexer, IIndexer
{
string LoginUrl { get { return SiteLink + "account-login.php"; } }
string BrowseUrl { get { return SiteLink + "torrents-search.php"; } }
string DownloadUrl { get { return SiteLink + "download.php"; } }
new ConfigurationDataBasicLogin configData
{
get { return (ConfigurationDataBasicLogin)base.configData; }
set { base.configData = value; }
}
public ArcheTorrent(IIndexerManagerService indexerManager, IWebClient webClient, Logger logger, IProtectionService protectionService)
: base(name: "Arche Torrent",
description: "French Torrent Tracker",
link: "https://www.archetorrent.com/",
manager: indexerManager,
logger: logger,
p: protectionService,
client: webClient,
configData: new ConfigurationDataBasicLogin()
)
{
Encoding = Encoding.GetEncoding("UTF-8");
Language = "fr-fr";
Type = "private";
AddCategoryMapping (18, TorznabCatType.PC, "Applications: PC");
AddCategoryMapping (19, TorznabCatType.PCMac, "Applications: Mac");
AddCategoryMapping (54, TorznabCatType.PC, "Applications: linux");
AddCategoryMapping (56, TorznabCatType.XXXOther, "Autres: ebook xxx");
AddCategoryMapping (36, TorznabCatType.Books, "Autres: E-Books");
AddCategoryMapping (37, TorznabCatType.Other, "Autres: Images");
AddCategoryMapping (38, TorznabCatType.PCPhoneOther, "Autres: Telephone-mobile");
AddCategoryMapping (47, TorznabCatType.Movies, "Films: Animé");
AddCategoryMapping (1, TorznabCatType.MoviesDVD, "Films: DVD");
AddCategoryMapping (2, TorznabCatType.MoviesSD, "Films: Dvdrip");
AddCategoryMapping (68, TorznabCatType.Movies, "Films: TAT Releases");
AddCategoryMapping (70, TorznabCatType.MoviesHD, "Films: UHD 4K");
AddCategoryMapping (69, TorznabCatType.Movies, "Films: Retro");
AddCategoryMapping (3, TorznabCatType.MoviesHD, "Films: HD1080");
AddCategoryMapping (42, TorznabCatType.MoviesHD, "Films: HD720");
AddCategoryMapping (4, TorznabCatType.Movies, "Films: Cam/Ts");
AddCategoryMapping (22, TorznabCatType.MoviesBluRay, "Films: bluray");
AddCategoryMapping (23, TorznabCatType.Movies3D, "Films: 3D");
AddCategoryMapping (24, TorznabCatType.MoviesForeign, "Films: VOSTFR");
AddCategoryMapping (25, TorznabCatType.XXX, "Films: Adulte");
AddCategoryMapping (48, TorznabCatType.TVDocumentary, "Films: Documentaire");
AddCategoryMapping (49, TorznabCatType.MoviesOther, "Films: Spectacle");
AddCategoryMapping (51, TorznabCatType.MoviesSD, "Films: R5");
AddCategoryMapping (52, TorznabCatType.MoviesSD, "Films: bdrip");
AddCategoryMapping (53, TorznabCatType.MoviesSD, "Films: brrip");
AddCategoryMapping (55, TorznabCatType.MoviesDVD, "Films: dvd-pack");
AddCategoryMapping (57, TorznabCatType.Movies, "Films: manga");
AddCategoryMapping (59, TorznabCatType.MoviesWEBDL, "Films: Webrip");
AddCategoryMapping (63, TorznabCatType.MoviesSD, "Films: M-HD");
AddCategoryMapping (10, TorznabCatType.PCGames, "Jeux: PC");
AddCategoryMapping (11, TorznabCatType.ConsoleOther, "Jeux: PS2");
AddCategoryMapping (43, TorznabCatType.ConsolePS3, "Jeux: PS3");
AddCategoryMapping (12, TorznabCatType.ConsolePSP, "Jeux: PSP");
AddCategoryMapping (14, TorznabCatType.ConsoleXbox360, "Jeux: Xbox360");
AddCategoryMapping (44, TorznabCatType.ConsoleWii, "Jeux: Wii");
AddCategoryMapping (45, TorznabCatType.ConsoleNDS, "Jeux: DS");
AddCategoryMapping (71, TorznabCatType.AudioMP3, "Musique: TAT Music Release");
AddCategoryMapping (26, TorznabCatType.AudioMP3, "Musique: Mp3");
AddCategoryMapping (27, TorznabCatType.AudioVideo, "Musique: Clip Video");
AddCategoryMapping (58, TorznabCatType.AudioLossless, "Musique: Flac");
AddCategoryMapping (62, TorznabCatType.TVSD, "Serie tv: TV BDRip");
AddCategoryMapping (5, TorznabCatType.TVSD, "Serie tv: Dvdrip");
AddCategoryMapping (41, TorznabCatType.TVHD, "Serie tv: Hd");
AddCategoryMapping (60, TorznabCatType.TVSD, "Serie tv: pack série tv");
AddCategoryMapping (64, TorznabCatType.TVFOREIGN, "Serie tv: vostfr");
AddCategoryMapping (65, TorznabCatType.TVHD, "Serie tv: Série tv 720P");
AddCategoryMapping (66, TorznabCatType.TVHD, "Serie tv: Série tv 1080P");
AddCategoryMapping (67, TorznabCatType.TVHD, "Serie tv: Série tv PackHD");
AddCategoryMapping (73, TorznabCatType.TVAnime, "Serie tv: Anime ");
AddCategoryMapping (72, TorznabCatType.TVSport, "Sport: sport");
AddCategoryMapping (61, TorznabCatType.TVSD, "Tv: DVDRip");
}
public async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
configData.LoadValuesFromJson(configJson);
var pairs = new Dictionary<string, string>
{
{ "username", configData.Username.Value },
{ "password", configData.Password.Value }
};
var result = await PostDataWithCookies(LoginUrl, pairs);
await ConfigureIfOK(result.Cookies, result.Cookies != null, () =>
{
var errorMessage = result.Content;
throw new ExceptionWithConfigData(errorMessage, configData);
});
return IndexerConfigurationStatus.RequiresTesting;
}
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
var releases = new List<ReleaseInfo>();
var searchString = query.GetQueryString();
var queryCollection = new Dictionary<string, string>();
queryCollection.Add ("search", searchString);
queryCollection.Add ("cat", "0");
queryCollection.Add("incldead", "0");
queryCollection.Add("freeleech", "0");
queryCollection.Add ("lang", "0");
var searchUrl = BrowseUrl + "?" + queryCollection.GetQueryString ();
var results = await RequestStringWithCookies (searchUrl);
try
{
var RowsSelector = "table.ttable_headinner tr.t-row";
var SearchResultParser = new HtmlParser();
var SearchResultDocument = SearchResultParser.Parse(results.Content);
var Rows = SearchResultDocument.QuerySelectorAll(RowsSelector);
var lastDate = DateTime.Now;
foreach (var Row in Rows)
{
var release = new ReleaseInfo();
release.MinimumRatio = 1;
release.MinimumSeedTime = 0;
var category = Row.QuerySelector("td:nth-child(1) a");
var title = Row.QuerySelector("td:nth-child(2) a b");
var link = Row.QuerySelector("td:nth-child(2) a");
var Size = Row.QuerySelector("td:nth-child(5)");
var Grabs = Row.QuerySelector("td:nth-child(8) font b");
var Seeders = Row.QuerySelector("td:nth-child(6) font b");
var Leechers = Row.QuerySelector("td:nth-child(7) font b");
var categoryId = category.GetAttribute("href").Split('=').Last();
var torrentId = link.GetAttribute ("href").Split ('&').First ().Split ('=').Last ();
release.Title = title.TextContent;
release.Category = MapTrackerCatToNewznab(categoryId);
release.Link = new Uri(DownloadUrl + "?id=" + torrentId);
release.Guid = release.Link;
release.Size = ReleaseInfo.GetBytes(Size.TextContent);
release.Seeders = ParseUtil.CoerceInt(Seeders.TextContent);
release.Peers = ParseUtil.CoerceInt(Leechers.TextContent) + release.Seeders;
release.Grabs = ParseUtil.CoerceLong(Grabs.TextContent);
releases.Add(release);
}
}
catch (Exception ex)
{
OnParseError(results.Content, ex);
}
return releases;
}
}
}

View File

@@ -36,7 +36,7 @@ namespace Jackett.Indexers
public BB(IIndexerManagerService i, Logger l, IWebClient w, IProtectionService ps)
: base(name: "bB",
description: "bB",
link: "http://www.reddit.com/r/baconbits/",
link: "https://baconbits.org/",
caps: new TorznabCapabilities(),
manager: i,
client: w,

View File

@@ -105,7 +105,7 @@ namespace Jackett.Indexers
return releases;
}
public Uri UncleanLink(Uri link)
public virtual Uri UncleanLink(Uri link)
{
if (string.IsNullOrWhiteSpace(downloadUrlBase))
{
@@ -540,8 +540,8 @@ namespace Jackett.Indexers
if (isLoggedin)
{
CookieHeader = cookies;
SaveConfig();
IsConfigured = true;
SaveConfig();
}
else
{
@@ -641,5 +641,25 @@ namespace Jackett.Indexers
return result.Distinct().ToList();
}
public bool CanHandleQuery(TorznabQuery query)
{
var caps = TorznabCaps;
if (!caps.SearchAvailable && query.IsSearch)
return false;
if (!caps.TVSearchAvailable && query.IsTVSearch)
return false;
if (!caps.MovieSearchAvailable && query.IsMovieSearch)
return false;
if (!caps.SupportsTVRageSearch && query.IsTVRageSearch)
return false;
if (!caps.SupportsImdbSearch && query.IsImdbQuery)
return false;
if (query.HasSpecifiedCategories)
if (!caps.SupportsCategories(query.Categories))
return false;
return true;
}
}
}

View File

@@ -0,0 +1,34 @@
using Jackett.Models;
using NLog;
using Jackett.Services;
using Jackett.Utils.Clients;
using Jackett.Indexers.Abstract;
namespace Jackett.Indexers
{
public class BrokenStones : GazelleTracker, IIndexer
{
public BrokenStones(IIndexerManagerService indexerManager, IWebClient webClient, Logger logger, IProtectionService protectionService)
: base(name: "BrokenStones",
desc: null,
link: "https://brokenstones.club/",
indexerManager: indexerManager,
logger: logger,
protectionService: protectionService,
webClient: webClient
)
{
Language = "en-us";
Type = "private";
AddCategoryMapping(1, TorznabCatType.PCMac, "MacOS Apps");
AddCategoryMapping(2, TorznabCatType.PCMac, "MacOS Games");
AddCategoryMapping(3, TorznabCatType.PCPhoneIOS, "iOS Apps");
AddCategoryMapping(4, TorznabCatType.PCPhoneIOS, "iOS Games");
AddCategoryMapping(5, TorznabCatType.Other, "Graphics");
AddCategoryMapping(6, TorznabCatType.Audio, "Audio");
AddCategoryMapping(7, TorznabCatType.Other, "Tutorials");
AddCategoryMapping(8, TorznabCatType.Other, "Other");
}
}
}

View File

@@ -191,6 +191,7 @@ namespace Jackett.Indexers
{
public string Path { get; set; }
public List<searchPathBlock> Paths { get; set; }
public Dictionary<string, List<string>> Headers { get; set; }
public List<filterBlock> Keywordsfilters { get; set; }
public Dictionary<string, string> Inputs { get; set; }
public List<errorBlock> Error { get; set; }
@@ -915,8 +916,8 @@ namespace Jackett.Indexers
await DoLogin();
await TestLogin();
SaveConfig();
IsConfigured = true;
SaveConfig();
return IndexerConfigurationStatus.Completed;
}
@@ -1005,8 +1006,7 @@ namespace Jackett.Indexers
Data = DateTimeUtil.FromTimeAgo(Data).ToString(DateTimeUtil.RFC1123ZPattern);
break;
case "fuzzytime":
var timestr = (string)Filter.Args;
Data = DateTimeUtil.FromUnknown(timestr).ToString(DateTimeUtil.RFC1123ZPattern);
Data = DateTimeUtil.FromUnknown(Data).ToString(DateTimeUtil.RFC1123ZPattern);
break;
case "hexdump":
// this is mainly for debugging invisible special char related issues
@@ -1051,7 +1051,10 @@ namespace Jackett.Indexers
if (Selector.Selector != null)
{
selection = QuerySelector(Dom, Selector.Selector);
if (Dom.Matches(Selector.Selector))
selection = Dom;
else
selection = QuerySelector(Dom, Selector.Selector);
if (selection == null)
{
throw new Exception(string.Format("Selector \"{0}\" didn't match {1}", Selector.Selector, Dom.ToHtmlPretty()));
@@ -1215,10 +1218,18 @@ namespace Jackett.Indexers
// send HTTP request
WebClientStringResult response = null;
Dictionary<string, string> headers = null;
if (Search.Headers != null)
{
// FIXME: fix jackett header handling (allow it to specifiy the same header multipe times)
headers = new Dictionary<string, string>();
foreach (var header in Search.Headers)
headers.Add(header.Key, header.Value[0]);
}
if (method == RequestType.POST)
response = await PostDataWithCookies(searchUrl, queryCollection);
response = await PostDataWithCookies(searchUrl, queryCollection, null, null, headers);
else
response = await RequestStringWithCookies(searchUrl);
response = await RequestStringWithCookies(searchUrl, null, null, headers);
var results = response.Content;
try
{
@@ -1485,18 +1496,32 @@ namespace Jackett.Indexers
{
var PrevRow = Row.PreviousElementSibling;
string value = null;
if (PrevRow == null) // continue with parent
{
var Parent = Row.ParentElement;
if (Parent != null)
PrevRow = Parent.PreviousElementSibling;
}
while (PrevRow != null)
{
var CurRow = PrevRow;
logger.Info(PrevRow.OuterHtml);
try
{
value = handleSelector(DateHeaders, PrevRow);
value = handleSelector(DateHeaders, CurRow);
break;
}
catch (Exception)
{
// do nothing
}
PrevRow = PrevRow.PreviousElementSibling;
PrevRow = CurRow.PreviousElementSibling;
if (PrevRow == null) // continue with parent
{
var Parent = CurRow.ParentElement;
if (Parent != null)
PrevRow = Parent.PreviousElementSibling;
}
}
if (value == null && DateHeaders.Optional == false)

View File

@@ -123,8 +123,8 @@ namespace Jackett.Indexers
throw new Exception("Your cookie did not work");
}
SaveConfig();
IsConfigured = true;
SaveConfig();
return IndexerConfigurationStatus.Completed;
}
catch (Exception e)

View File

@@ -125,8 +125,8 @@ namespace Jackett.Indexers
throw new Exception("Your cookie did not work");
}
SaveConfig();
IsConfigured = true;
SaveConfig();
return IndexerConfigurationStatus.Completed;
}
catch (Exception e)

View File

@@ -128,8 +128,8 @@ namespace Jackett.Indexers
throw new Exception("Your cookie did not work");
}
SaveConfig();
IsConfigured = true;
SaveConfig();
return IndexerConfigurationStatus.Completed;
}
catch (Exception e)

View File

@@ -45,5 +45,7 @@ namespace Jackett.Indexers
IEnumerable<ReleaseInfo> CleanLinks(IEnumerable<ReleaseInfo> releases);
Uri UncleanLink(Uri link);
bool CanHandleQuery(TorznabQuery query);
}
}

View File

@@ -169,8 +169,8 @@ namespace Jackett.Indexers
throw new Exception("Your cookie did not work");
}
SaveConfig();
IsConfigured = true;
SaveConfig();
return IndexerConfigurationStatus.Completed;
}
catch (Exception e)

View File

@@ -0,0 +1,85 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Jackett.Models;
using Jackett.Models.IndexerConfig;
using Jackett.Services;
using Jackett.Utils.Clients;
using Newtonsoft.Json.Linq;
using NLog;
namespace Jackett.Indexers.Meta
{
public abstract class BaseMetaIndexer : BaseIndexer, IIndexer
{
protected BaseMetaIndexer(string name, string description, IIndexerManagerService manager, Logger logger, ConfigurationData configData, IProtectionService p, Func<IIndexer, bool> filter)
: base(name, "http://127.0.0.1/", description, manager, null, logger, configData, p, null, null)
{
filterFunc = filter;
}
public Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
return Task.FromResult(IndexerConfigurationStatus.Completed);
}
public virtual async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
var tasks = Indexers.Where(i => i.CanHandleQuery(query)).Select(i => i.PerformQuery(query)).ToList(); // explicit conversion to List to execute LINQ query
var aggregateTask = Task.WhenAll<IEnumerable<ReleaseInfo>>(tasks);
await aggregateTask;
if (aggregateTask.Exception != null)
logger.Error(aggregateTask.Exception, "Error during request in metaindexer " + ID);
IEnumerable<ReleaseInfo> result = tasks.Where(x => x.Status == TaskStatus.RanToCompletion).SelectMany(x => x.Result).OrderByDescending(r => r.PublishDate); // Ordering by the number of seeders might be useful as well.
// Limiting the response size might be interesting for use-cases where there are
// tons of trackers configured in Jackett. For now just use the limit param if
// someone wants to do that.
if (query.Limit > 0)
result = result.Take(query.Limit);
return result;
}
public override Uri UncleanLink(Uri link)
{
var indexer = GetOriginalIndexerForLink(link);
if (indexer != null)
return indexer.UncleanLink(link);
return base.UncleanLink(link);
}
public override Task<byte[]> Download(Uri link)
{
var indexer = GetOriginalIndexerForLink(link);
if (indexer != null)
return indexer.Download(link);
return base.Download(link);
}
private IIndexer GetOriginalIndexerForLink(Uri link)
{
var prefix = string.Format("{0}://{1}", link.Scheme, link.Host);
var validIndexers = Indexers.Where(i => i.SiteLink.StartsWith(prefix, StringComparison.CurrentCulture));
if (validIndexers.Count() > 0)
return validIndexers.First();
return null;
}
private Func<IIndexer, bool> filterFunc;
private IEnumerable<IIndexer> indexers;
public IEnumerable<IIndexer> Indexers {
get {
return indexers;
}
set {
indexers = value.Where(i => i.IsConfigured && filterFunc(i));
TorznabCaps = value.Select(i => i.TorznabCaps).Aggregate(new TorznabCapabilities(), TorznabCapabilities.Concat); ;
IsConfigured = true;
}
}
}
}

View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Jackett.Models;
using Newtonsoft.Json.Linq;
using Jackett.Services;
using Jackett.Utils.Clients;
using NLog;
namespace Jackett.Indexers.Meta
{
class AggregateIndexer : BaseMetaIndexer, IIndexer
{
public AggregateIndexer(IIndexerManagerService i, Logger l, IProtectionService ps)
: base("AggregateSearch", "This feed includes all configured trackers", i, l, new Models.IndexerConfig.ConfigurationData(), ps, x => true)
{
}
}
}

View File

@@ -74,8 +74,9 @@ namespace Jackett.Indexers
var isTv = TorznabCatType.QueryContainsParentCategory(query.Categories, new List<int> { TorznabCatType.TV.ID });
var releases = new List<ReleaseInfo>();
var searchQuery = query.GetQueryString();
var searchQuerySingleEpisodes = Regex.Replace(searchQuery, @"(S\d{2})$", "$1*"); // If we're just seaching for a season (no episode) append an * to include all episodes of that season.
await GetReleases(releases, query, searchQuery);
await GetReleases(releases, query, searchQuerySingleEpisodes);
// Search for torrent groups
if (isTv)

View File

@@ -157,6 +157,8 @@ namespace Jackett.Indexers
{
CQ qRow = row.Cq();
var key = dom ["link[rel=alternate]"].First().Attr("href").Split('=').Last();
release = new ReleaseInfo();
var torrentTxt = qRow.Find(".torrent_txt, .torrent_txt2").Find("a").Get(0);
//if (torrentTxt == null) continue;
@@ -170,7 +172,7 @@ namespace Jackett.Indexers
string downloadLink = SiteLink + torrentTxt.GetAttribute("href");
string downloadId = downloadLink.Substring(downloadLink.IndexOf("&id=") + 4);
release.Link = new Uri(SiteLink.ToString() + "torrents.php?action=download&id=" + downloadId);
release.Link = new Uri(SiteLink.ToString() + "torrents.php?action=download&id=" + downloadId + "&key=" + key);
release.Comments = new Uri(SiteLink.ToString() + "torrents.php?action=details&id=" + downloadId);
release.Guid = new Uri(release.Comments.ToString() + "#comments"); ;
release.Seeders = ParseUtil.CoerceInt(qRow.Find(".box_s2").Find("a").First().Text());

View File

@@ -148,7 +148,7 @@ namespace Jackett.Indexers
release.Size = long.Parse((string)torrent["Size"]);
release.Grabs = long.Parse((string)torrent["Snatched"]);
release.Seeders = int.Parse((string)torrent["Seeders"]);
release.Peers = int.Parse((string)torrent["Leechers"]);
release.Peers = release.Seeders + int.Parse((string)torrent["Leechers"]);
release.PublishDate = DateTime.ParseExact((string)torrent["UploadTime"], "yyyy-MM-dd HH:mm:ss",
CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime();
release.Link = new Uri(string.Format("{0}?action=download&id={1}&authkey={2}&torrent_pass={3}",

View File

@@ -30,7 +30,7 @@ namespace Jackett.Indexers
public SceneFZ(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps)
: base(name: "SceneFZ",
description: "Torrent tracker. Tracking over 50.000 torrent files.",
link: "http://scenefz.net/",
link: "http://scenefz.me/",
caps: TorznabUtil.CreateDefaultTorznabTVCaps(),
manager: i,
client: wc,

View File

@@ -128,8 +128,8 @@ namespace Jackett.Indexers
throw new Exception("Your cookie did not work");
}
SaveConfig();
IsConfigured = true;
SaveConfig();
return IndexerConfigurationStatus.Completed;
}
catch (Exception e)

View File

@@ -17,7 +17,7 @@ namespace Jackett.Indexers
{
public class ShowRSS : BaseIndexer, IIndexer
{
private string SearchAllUrl { get { return SiteLink + "feeds/all.rss"; } }
private string SearchAllUrl { get { return SiteLink + "other/all.rss"; } }
new ConfigurationData configData
{
@@ -79,7 +79,7 @@ namespace Jackett.Indexers
release.MinimumRatio = 1;
release.MinimumSeedTime = 172800;
serie_title = node.SelectSingleNode(".//*[local-name()='rawtitle']").InnerText;
serie_title = node.SelectSingleNode(".//*[local-name()='raw_title']").InnerText;
release.Title = serie_title;
if ((query.ImdbID == null || !TorznabCaps.SupportsImdbSearch) && !query.MatchQueryStringAND(release.Title))

View File

@@ -109,10 +109,9 @@ namespace Jackett.Indexers
queryCollection.Add("swesub", "false");
queryCollection.Add("watchview", "false");
foreach (var cat in MapTorznabCapsToTrackers(query))
queryCollection.Add("categories[]", cat);
searchUrl += "?" + queryCollection.GetQueryString();
foreach (var cat in MapTorznabCapsToTrackers(query))
searchUrl += "&categories[]=" + cat;
var results = await RequestStringWithCookies(searchUrl, null, SiteLink);
try

View File

@@ -17,7 +17,7 @@ namespace Jackett.Indexers
{
public class T411 : BaseIndexer, IIndexer
{
const string ApiUrl = "https://api.t411.ai";
const string ApiUrl = "https://api.t411.al";
const string AuthUrl = ApiUrl + "/auth";
const string SearchUrl = ApiUrl + "/torrents/search/";
const string TermsUrl = ApiUrl + "/terms/tree";
@@ -35,7 +35,7 @@ namespace Jackett.Indexers
public T411(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps)
: base(name: "T411",
description: "French Torrent Tracker",
link: "https://t411.ai/",
link: "https://t411.al/",
caps: TorznabUtil.CreateDefaultTorznabTVCaps(),
manager: i,
client: wc,

View File

@@ -142,8 +142,8 @@ namespace Jackett.Indexers
throw new Exception("Your cookie did not work");
}
SaveConfig();
IsConfigured = true;
SaveConfig();
return IndexerConfigurationStatus.Completed;
}
catch (Exception e)

View File

@@ -28,9 +28,9 @@ namespace Jackett.Indexers
}
public TransmitheNet(IIndexerManagerService i, Logger l, IWebClient c, IProtectionService ps)
: base(name: "TransmitTheNet",
description: " At Transmithe.net we will change the way you think about TV",
link: "https://transmithe.net/",
: base(name: "Nebulance",
description: " At Nebulance we will change the way you think about TV",
link: "https://nebulance.io/",
caps: TorznabUtil.CreateDefaultTorznabTVCaps(),
manager: i,
client: c,

View File

@@ -0,0 +1,217 @@
using CsQuery;
using Jackett.Models;
using Jackett.Services;
using Jackett.Utils;
using Jackett.Utils.Clients;
using Newtonsoft.Json.Linq;
using NLog;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using Jackett.Models.IndexerConfig;
namespace Jackett.Indexers
{
public class Trezzor : BaseIndexer, IIndexer
{
string LoginUrl { get { return SiteLink + "prihlasenie.php"; } }
private string SearchUrl { get { return SiteLink + "torrents.php?"; } }
new ConfigurationDataBasicLogin configData
{
get { return (ConfigurationDataBasicLogin)base.configData; }
set { base.configData = value; }
}
public Trezzor(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps)
: base(name: "Trezzor",
description: "SK/CZ Tracker.",
link: "https://tracker.czech-server.com/",
caps: new TorznabCapabilities(),
manager: i,
client: wc,
logger: l,
p: ps,
configData: new ConfigurationDataBasicLogin())
{
Encoding = Encoding.GetEncoding("windows-1250");
Language = "cs-cz";
Type = "private";
AddCategoryMapping(1, TorznabCatType.MoviesDVD, "DVD CZ/SK dabing");
AddCategoryMapping(2, TorznabCatType.MoviesDVD, "DVD CZ/SK titulky");
AddCategoryMapping(3, TorznabCatType.AudioVideo, "DVD Hudební video");
AddCategoryMapping(4, TorznabCatType.MoviesSD, "XviD, DivX CZ/SK dabing");
AddCategoryMapping(13, TorznabCatType.Audio, "Hudba CZ/SK scéna");
AddCategoryMapping(24, TorznabCatType.Audio, "Mluv. slovo CZ/SK dabing");
AddCategoryMapping(10, TorznabCatType.AudioOther, "DTS audio");
AddCategoryMapping(14, TorznabCatType.PCGames, "Hry");
AddCategoryMapping(17, TorznabCatType.PC, "Programy");
AddCategoryMapping(14, TorznabCatType.PC, "Cestiny,patche,upgrady");
AddCategoryMapping(18, TorznabCatType.Books, "Knihy CZ/SK lokalizace");
AddCategoryMapping(18, TorznabCatType.BooksComics, "Komiks CZ/SK lokalizace");
AddCategoryMapping(16, TorznabCatType.Other, "Foto,obrázky");
AddCategoryMapping(20, TorznabCatType.Console, "Konzole");
AddCategoryMapping(21, TorznabCatType.PCPhoneOther, "Mobilmánia");
AddCategoryMapping(22, TorznabCatType.Other, "Ostatní CZ/SK scéna");
AddCategoryMapping(23, TorznabCatType.Other, "Na prani non CZ/SK");
AddCategoryMapping(27, TorznabCatType.Other, "TreZzoR rls");
AddCategoryMapping(35, TorznabCatType.AudioVideo, "HDTV Hudební video");
AddCategoryMapping(36, TorznabCatType.MoviesSD, "XviD, DivX CZ/SK titulky");
AddCategoryMapping(31, TorznabCatType.MoviesHD, "HDTV CZ/SK Dabing");
AddCategoryMapping(33, TorznabCatType.MoviesHD, "HDTV CZ/SK Titulky");
AddCategoryMapping(39, TorznabCatType.Movies3D, "3D HDTV CZ/SK Dabing");
AddCategoryMapping(40, TorznabCatType.Movies3D, "3D HDTV CZ/SK Titulky");
AddCategoryMapping(5, TorznabCatType.MoviesSD, "TV-rip CZ/SK dabing");
AddCategoryMapping(41, TorznabCatType.TVHD, "HD Seriály CZ/SK dabing");
AddCategoryMapping(42, TorznabCatType.TVHD, "HD Seriály CZ/SK titulky");
AddCategoryMapping(7, TorznabCatType.TVSD, "Seriály CZ/SK dabing");
AddCategoryMapping(37, TorznabCatType.TVSD, "Seriály CZ/SK titulky");
AddCategoryMapping(9, TorznabCatType.XXXXviD, "XXX CZ/SK dabing");
AddCategoryMapping(32, TorznabCatType.XXXx264, "XXX HD CZ/SK dabing");
AddCategoryMapping(27, TorznabCatType.Other, "TreZzoR rls");
}
public async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
LoadValuesFromJson(configJson);
var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty);
var pairs = new Dictionary<string, string> {
{ "uid", configData.Username.Value },
{ "pwd", configData.Password.Value }
};
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, null, LoginUrl);
await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("If your browser doesn't have javascript enabled"), () =>
{
var errorMessage = "Couldn't login";
throw new ExceptionWithConfigData(errorMessage, configData);
});
return IndexerConfigurationStatus.RequiresTesting;
}
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
var releases = new List<ReleaseInfo>();
var searchurls = new List<string>();
var searchUrl = SearchUrl;
var queryCollection = new NameValueCollection();
var searchString = query.GetQueryString();
// assign category only if one cat is required, otherwise search in whole tracker (tracker has ability to search only in one category or in everything)
var _cats = MapTorznabCapsToTrackers(query);
if (_cats.Count == 1) searchUrl += "category=" + _cats.First() + "&";
if (!string.IsNullOrWhiteSpace(searchString))
{
queryCollection.Add("search", searchString);
}
queryCollection.Add("active", "1");
searchUrl += queryCollection.GetQueryString().Replace("(", "%28").Replace(")", "%29"); // maually url encode brackets to prevent "hacking" detection
var results = await RequestStringWithCookiesAndRetry(searchUrl);
// Check for being logged out
if (results.IsRedirect)
if (results.RedirectingTo.Contains("prihlasenie.php"))
throw new ExceptionWithConfigData("Login failed, please reconfigure the tracker to update the cookies", configData);
else
throw new ExceptionWithConfigData(string.Format("Got a redirect to {0}, please adjust your the alternative link", results.RedirectingTo), configData);
if (results.Content.Contains("prihlasenie.php")) throw new ExceptionWithConfigData("Login failed, please reconfigure the tracker to update the cookies", configData);
try
{
CQ dom = results.Content;
ReleaseInfo release;
var rows = dom[".torrenty_lista"];
foreach (var row in rows)
{
CQ qRow = row.Cq();
release = new ReleaseInfo();
string _cat = qRow.Find("td").Get(0).FirstChild.GetAttribute("href");
string _catName = qRow.Find("td a img").Get(0).GetAttribute("alt");
int _from = _cat.IndexOf("=");
_cat = _cat.Substring(_from + 1);
// filter results from categories, that were not requested
if ((_cats.Count > 1) && (!_cats.Contains(_cat))) continue;
release.Category = MapTrackerCatToNewznab(_cat);
string _guid = qRow.Find("td").Get(1).FirstChild.GetAttribute("href");
release.Guid = new Uri(SiteLink + _guid);
string _title = qRow.Find("td").Get(1).FirstChild.InnerText;
release.Title = _title + " [" + _catName + "]";
string _commentsLink = qRow.Find("td").Get(2).FirstChild.GetAttribute("href");
release.Comments = new Uri(SiteLink + _guid);
string _downloadLink = qRow.Find("td").Get(3).FirstChild.GetAttribute("href");
release.Link = new Uri(SiteLink + _downloadLink);
string _publishDate = qRow.Find("td").Get(5).InnerText;
DateTime _parsed;
DateTime.TryParse(_publishDate, out _parsed);
release.PublishDate = _parsed;
string _size = qRow.Find("td").Get(6).InnerText;
release.Size = ReleaseInfo.GetBytes(_size);
string _seeds = qRow.Find("td").Get(7).FirstChild.InnerText;
string _leechs = qRow.Find("td").Get(8).FirstChild.InnerText;
int seeders, peers;
if (ParseUtil.TryCoerceInt(_seeds, out seeders))
{
release.Seeders = seeders;
if (ParseUtil.TryCoerceInt(_leechs, out peers))
{
release.Peers = peers + release.Seeders;
}
}
release.MinimumRatio = 1;
release.MinimumSeedTime = 172800;
release.UploadVolumeFactor = 1;
if (release.Title.Contains("FREELEECH")) release.DownloadVolumeFactor = 0;
else release.DownloadVolumeFactor = 1;
releases.Add(release);
}
}
catch (Exception ex)
{
OnParseError(results.Content, ex);
}
return releases;
}
}
}

View File

@@ -305,7 +305,8 @@ namespace Jackett.Indexers
// Loop on Categories needed
if (categoriesList.Count > 0)
{
parameters.Add("category", string.Join("+", categoriesList));
// ignore categories for now, something changed or is buggy, needs investigation
//parameters.Add("category", string.Join("+", categoriesList));
}
// If Only Freeleech Enabled

View File

@@ -89,8 +89,8 @@ namespace Jackett.Indexers
throw new Exception("Your cookie did not work");
}
SaveConfig();
IsConfigured = true;
SaveConfig();
return IndexerConfigurationStatus.Completed;
}
catch (Exception e)

File diff suppressed because it is too large Load Diff

View File

@@ -98,9 +98,8 @@ namespace Jackett
}
// Register indexers
foreach (var indexer in thisAssembly.GetTypes()
.Where(p => typeof(IIndexer).IsAssignableFrom(p) && !p.IsInterface)
.ToArray())
var indexerTypes = thisAssembly.GetTypes().Where(p => typeof (IIndexer).IsAssignableFrom (p) && !p.IsInterface && !p.IsInNamespace("Jackett.Indexers.Meta"));
foreach (var indexer in indexerTypes)
{
builder.RegisterType(indexer).Named<IIndexer>(BaseIndexer.GetIndexerID(indexer));
}

View File

@@ -18,7 +18,7 @@ namespace Jackett.Models.IndexerConfig.Bespoke
{
IncludeRaw = new BoolItem() { Name = "IncludeRaw", Value = false };
DateWarning = new DisplayItem("This tracker does not supply upload dates so they are based off year of release.") { Name = "DateWarning" };
InsertSeason = new BoolItem() { Name = "Prefix episode number with S01 for Sonarr Compatability", Value = false };
InsertSeason = new BoolItem() { Name = "Prefix episode number with E0 for Sonarr Compatability", Value = false };
}
}
}

View File

@@ -66,6 +66,11 @@ namespace Jackett.Models
}
}
public bool SupportsCategories (int[] categories)
{
return Categories.Count(i => categories.Any(c => c == i.ID)) > 0;
}
public JArray CapsToJson()
{
var jArray = new JArray();
@@ -112,5 +117,16 @@ namespace Jackett.Models
return xdoc.Declaration.ToString() + Environment.NewLine + xdoc.ToString();
}
public static TorznabCapabilities Concat (TorznabCapabilities lhs, TorznabCapabilities rhs)
{
lhs.SearchAvailable = lhs.SearchAvailable || rhs.SearchAvailable;
lhs.TVSearchAvailable = lhs.TVSearchAvailable || rhs.TVSearchAvailable;
lhs.MovieSearchAvailable = lhs.MovieSearchAvailable || rhs.MovieSearchAvailable;
lhs.SupportsTVRageSearch = lhs.SupportsTVRageSearch || rhs.SupportsTVRageSearch;
lhs.SupportsImdbSearch = lhs.SupportsImdbSearch || rhs.SupportsImdbSearch;
lhs.Categories.AddRange (rhs.Categories.Except (lhs.Categories));
return lhs;
}
}
}

View File

@@ -31,6 +31,54 @@ namespace Jackett.Models
protected string[] QueryStringParts = null;
public bool IsSearch
{
get
{
return (QueryStringParts != null && QueryStringParts.Length > 0);
}
}
public bool IsTVSearch
{
get
{
return QueryType == "tvsearch";
}
}
public bool IsMovieSearch
{
get
{
return QueryType == "movie";
}
}
public bool IsTVRageSearch
{
get
{
return RageID != null;
}
}
public bool IsImdbQuery
{
get
{
return ImdbID != null;
}
}
public bool HasSpecifiedCategories
{
get
{
return (Categories != null && Categories.Length > 0);
}
}
public string SanitizedSearchTerm
{
get

View File

@@ -11,6 +11,7 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Jackett.Indexers.Meta;
namespace Jackett.Services
{
@@ -23,6 +24,7 @@ namespace Jackett.Services
void SaveConfig(IIndexer indexer, JToken obj);
void InitIndexers();
void InitCardigannIndexers(string path);
void InitAggregateIndexer();
void SortIndexers();
}
@@ -35,6 +37,7 @@ namespace Jackett.Services
private Logger logger;
private Dictionary<string, IIndexer> indexers = new Dictionary<string, IIndexer>();
private ICacheService cacheService;
private AggregateIndexer aggregateIndexer;
public IndexerManagerService(IContainer c, IConfigurationService config, Logger l, ICacheService cache)
{
@@ -86,7 +89,7 @@ namespace Jackett.Services
{
logger.Info("Using HTTP Client: " + container.Resolve<IWebClient>().GetType().Name);
foreach (var idx in container.Resolve<IEnumerable<IIndexer>>().Where(p => p.ID != "cardigannindexer").OrderBy(_ => _.DisplayName))
foreach (var idx in container.Resolve<IEnumerable<IIndexer>>().Where(p => p.ID != "cardigannindexer" && p.ID != "aggregateindexer").OrderBy(_ => _.DisplayName))
{
indexers.Add(idx.ID, idx);
LoadIndexerConfig(idx);
@@ -126,12 +129,24 @@ namespace Jackett.Services
}
}
public void InitAggregateIndexer()
{
logger.Info("Adding aggregate indexer");
AggregateIndexer aggregateIndexer = new AggregateIndexer(this, logger, container.Resolve<IProtectionService>());
this.aggregateIndexer = aggregateIndexer;
UpdateAggregateIndexer();
}
public IIndexer GetIndexer(string name)
{
if (indexers.ContainsKey(name))
{
return indexers[name];
}
else if (name == "all")
{
return aggregateIndexer;
}
else
{
logger.Error("Request for unknown indexer: " + name);
@@ -170,6 +185,7 @@ namespace Jackett.Services
{
indexers[name] = container.ResolveNamed<IIndexer>(indexer.ID);
}
UpdateAggregateIndexer();
}
private string GetIndexerConfigFilePath(IIndexer indexer)
@@ -179,6 +195,7 @@ namespace Jackett.Services
public void SaveConfig(IIndexer indexer, JToken obj)
{
UpdateAggregateIndexer();
lock (configWriteLock)
{
var uID = Guid.NewGuid().ToString("N");
@@ -247,5 +264,10 @@ namespace Jackett.Services
newIndexers.Add(indexer.Key, indexer.Value);
indexers = newIndexers;
}
private void UpdateAggregateIndexer()
{
aggregateIndexer.Indexers = indexers.Where(p => p.Value.IsConfigured).Select(p => p.Value);
}
}
}

View File

@@ -287,6 +287,7 @@ namespace Jackett.Services
{
indexerService.InitCardigannIndexers(dir);
}
indexerService.InitAggregateIndexer();
indexerService.SortIndexers();
client.Init();
updater.CleanupTempDir();