Compare commits

...

68 Commits

Author SHA1 Message Date
flightlevel
cc3ebbe1ae Package update 2018-09-15 15:28:50 +10:00
Gerdus van Zyl
d88db81207 Horrible Subs native indexer (#3794)
* Initial Version

* Episode number filtering
2018-09-15 15:25:27 +10:00
flightlevel
9a15f1d1a3 Remove horriblesubs yaml file 2018-09-15 15:22:38 +10:00
flightlevel
4e5f091b6c Check for Mono legacy TLS 2018-09-15 15:20:31 +10:00
Garfield69
517f196d73 torrentkim: readme update 2018-09-15 11:37:35 +12:00
Garfield69
9461d2470a Merge branch 'master' of https://github.com/Jackett/Jackett 2018-09-15 11:33:48 +12:00
Garfield69
c9f874dc93 torrentkim: gone. resolves #3306 2018-09-15 11:33:22 +12:00
hallengreenn
53b6285810 Update Nordicbits - Add support for all themes (#3801)
Last commit of nordicbits.cs only supported the 'old' v2 theme.
With this new update, I have added support for the v3 theme but continue to keep the old support for v2 by looking after the .css file loaded and return the proper _fDom in FindTorrentRows...

I have also added a extended error msg, when torrents can't be found that it could be because of an unsupported theme.
2018-09-15 08:04:13 +12:00
Garfield69
5d4e0c41d6 torrentday: add additional alternate domains. resolves #3796 2018-09-15 07:51:34 +12:00
Garfield69
754337b58f yggtorrent: sort results by publish_date desc. resolves #3775 2018-09-09 11:07:39 +12:00
Garfield69
16f79085ad btdb: load seeders & leechers from popularity field. resolves #3765 2018-09-09 10:43:09 +12:00
hashworks
005539d30d Updated categories for TorrentSyndikat (#3758)
* Updated categories

A lot of categories got dropped, also there are some new categories.
Additionally I updated the namings.

* Fix TV series category names
2018-09-06 04:00:05 +12:00
kaso17
2d5a90ae31 BaseIndexer: add cloudflare ReCaptcha detection 2018-09-04 19:30:48 +02:00
kaso17
fc060d6468 BitHUmen: imporve download link handling 2018-09-04 15:49:12 +02:00
kaso17
d0937d3561 BeyondHD: no longer ratioless 2018-09-04 15:30:16 +02:00
kaso17
7b8de5e28d RuTracker: fix login 2018-09-04 15:25:44 +02:00
HDVinnie
790f5ddfad redtopia: add indexer (#3660) 2018-09-04 14:39:12 +02:00
Garfield69
760231be43 torrentz2: amendment to 9a071a3457
using title: without a query string causes 0 results which meant the
jackett dashboard TEST button failed.
now we only add title: if a query was supplied.
2018-09-04 07:58:34 +12:00
kaso17
837e74a743 Updater: cleanup 2018-09-03 17:23:18 +02:00
kaso17
630f613721 Updater: workaround for WaitForExit() 2018-09-03 17:10:43 +02:00
kaso17
aba9e6db47 Updater: try SIGTERM first 2018-09-03 16:35:56 +02:00
kaso17
88858022af TorrentDay: improve cookie handling 2018-09-03 15:32:16 +02:00
kaso17
852bb27de0 Merge branch 'master' of https://github.com/Jackett/Jackett 2018-09-03 15:12:58 +02:00
kaso17
9a071a3457 Torrentz2: improve search results 2018-09-03 15:12:48 +02:00
Zotan
db11db28e4 Update uhdbits.yml (#3740)
Fix error 'Invalid non-ASCII or control character in header: 0x0009' on download (Tab character, upstream bug in kestrel)
2018-09-03 19:33:34 +10:00
Garfield69
79a8ef957f torrentz2: restore categories in results 2018-09-02 19:23:36 +12:00
Garfield69
0e0dfe80a7 gktorrent: new domain (ww2.gktorrent.com) 2018-09-02 08:32:46 +12:00
flightlevel
c112aef644 Update ConsoleOptions
Use --version to get version info and --help for help
-v no longer attempts to load Jackett
https://github.com/Jackett/Jackett/issues/3720
2018-08-31 20:33:05 +10:00
flightlevel
2e30fe1899 IlCorsaroNero: Update thumbprint
https://github.com/Jackett/Jackett/issues/3718
2018-08-31 20:18:16 +10:00
flightlevel
6b3ffa22c9 Package update 2018-08-31 20:16:07 +10:00
flightlevel
9e78f46010 Move HttpWebClientNetCore to Jackett.Common 2018-08-31 20:04:36 +10:00
kaso17
50a09189e4 Update Linux/OSX build instructions 2018-08-30 18:51:05 +02:00
kaso17
fcda42b9f1 Update Windows build instructions 2018-08-30 18:49:54 +02:00
snamds
48f72a3096 Mejortorrent: query clone (#3710)
* Make ReleaseInflo class derivation friendly

* Mejortorrent was corrupting the currentQuery passed to indexers
2018-08-30 18:34:41 +02:00
flightlevel
e4e1ac2c18 SpeedCd: Update parsing 2018-08-29 20:26:48 +10:00
flightlevel
a719048f81 Update Torrent9 domain 2018-08-29 19:45:59 +10:00
flightlevel
8f1f41a4a1 Kestrel only requires 127.0.0.1 2018-08-29 19:28:45 +10:00
flightlevel
fffd53cc1f Don't remove appsettings.json 2018-08-29 19:26:24 +10:00
snamds
ae7c139452 Derivation plus Newpct minor changes (#3691)
* Make ReleaseInflo class derivation friendly

* Improve releaseinfo inheritance
Ensure provider order is respected
Some season numbers were not parsed in rss mode
Remove s00e00 from movies results
2018-08-29 19:21:07 +10:00
Hugues Granger
76a3e7cd85 Add Retroflix (#3701)
* Create retroflix.yml

* Update README.md

* Update retroflix.yml

* Update retroflix.yml

* Update retroflix.yml

* Update retroflix.yml

* Update retroflix.yml

* Update retroflix.yml

* Update retroflix.yml
2018-08-29 09:23:23 +12:00
Garfield69
20495ef32b btbit: provide default seeders and leeches as web site has none.
some clients require more than 0 seedres to select successfully.
2018-08-27 18:18:45 +12:00
Garfield69
41b91bb0c3 torrent9: domain changed to www.torrent9.rip 2018-08-27 15:51:31 +12:00
kaso17
6e59cc4c33 YGGtorrent: update Animation category mapping 2018-08-25 20:09:16 +02:00
kaso17
2aaed9b9e4 ImmortalSeed: add Movies-4k 2018-08-25 19:23:43 +02:00
kaso17
f7dc404eaf ImmortalSeed: update categories 2018-08-25 19:14:18 +02:00
kaso17
f3b9e70dde Revert "DanishBits: disable imdb support (#3682)"
This reverts commit 3e9006464d.
2018-08-25 18:54:23 +02:00
kaso17
d065f0abf4 CouchPotatoTracker: fix imdb search 2018-08-25 18:53:47 +02:00
kaso17
6e173558db SpeedCD: fix login 2018-08-25 18:49:04 +02:00
kaso17
f78434e758 Torrenting: fix definition 2018-08-25 18:45:58 +02:00
kaso17
ef5f2ccb89 GkTorrent: update domain 2018-08-25 18:39:50 +02:00
kaso17
f05db7f544 ExoticaZ: fix login 2018-08-25 18:37:40 +02:00
kaso17
12cc25bdb0 ExoticaZ: update definition 2018-08-25 18:35:24 +02:00
kaso17
5936defc06 RevolutionTT: add automatic relogin 2018-08-25 18:32:10 +02:00
Andreas Christensen
3e9006464d DanishBits: disable imdb support (#3682)
Added "TorznabCaps.SupportsImdbSearch = false;" on line 42 to disable parameter "imdbid" for indexer DanishBits.
2018-08-25 18:15:34 +02:00
Gabriele
f7bf8fba40 BigTower: add indexer (#3689) 2018-08-25 18:13:04 +02:00
Garfield69
6bbb80a54e yggtorrent: changed domain once again. #3670 2018-08-23 13:05:09 +12:00
kaso17
7889077498 README: update nginx reverse-proxy example 2018-08-22 18:18:00 +02:00
flightlevel
074f0da27f Revert "Jackett.Common: Use NETStandard"
This reverts commit d7c35b2fe4.
2018-08-21 21:21:29 +10:00
flightlevel
d7c35b2fe4 Jackett.Common: Use NETStandard 2018-08-21 20:59:48 +10:00
flightlevel
4d8b55a92f Replace install_service_macos
https://github.com/Jackett/Jackett/issues/3638
2018-08-21 20:52:12 +10:00
Garfield69
7387679a6f eltorrents -> extratorrentclone part 2 2018-08-21 10:50:12 +12:00
Garfield69
af93571568 eltorrents -> extratorrentclone 2018-08-21 10:43:49 +12:00
Garfield69
1e2ecfc0c5 limetorrents: domain changed to .info. resolves #3648 2018-08-20 07:42:42 +12:00
Garfield69
b98a1ff1f5 remove yifi (yifimovie.co) dead #3649 2018-08-20 07:12:47 +12:00
Jorman
6170ef09b4 Update il corsaronero (#3652)
Advanced search always performed
now works even if no categories are selected into a manual search
2018-08-19 20:25:35 +02:00
Jorman
15a1c6566f tntvillage: improve title generation (#3651)
A little update to make:
case insensitive the regex
change web-dlmux to web-dl, sonar don't like it so much, hope resolve a lot of manual import from this traker
2018-08-19 15:29:43 +02:00
Jorman
113b3dffff Readme: add Eltorrents (#3645) 2018-08-19 15:18:13 +02:00
Jorman
511ae721e2 add Eltorrents indexer (#3644)
* Eltorrent

A extratorrent replacement?
Who knows, only the time can ...

* Update eltorrents.yml
2018-08-19 15:17:49 +02:00
48 changed files with 2021 additions and 546 deletions

View File

@@ -30,6 +30,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* cpasbien
* ETTV
* ExtraTorrent.ag
* ExtraTorrentClone
* EZTV
* Frozen Layer
* GkTorrent
@@ -58,10 +59,8 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Torlock
* Torrent Downloads
* Torrent9
* TorrentKim
* Torrentz2
* World Wide Torrents
* YIFY (YTS)
* YTS.ag
* Zooqle
@@ -111,6 +110,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* bB
* BeyondHD
* BIGTorrent
* BigTower
* Bit-City Reloaded
* BIT-HDTV
* Bithorlo
@@ -228,6 +228,8 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Racing4Everyone (R4E)
* Redacted (PassTheHeadphones)
* Red Star Torrent
* Redtopia (RED)
* RetroFlix
* RevolutionTT
* RGU
* RoDVD
@@ -386,11 +388,10 @@ Example config for nginx:
```
location /jackett {
proxy_pass http://127.0.0.1:9117;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_redirect off;
}
```
@@ -431,7 +432,8 @@ All contributions are welcome just send a pull request. Jackett's framework all
* Install the .NET Core [SDK](https://www.microsoft.com/net/download/windows)
* Open the Jackett solution in Visual Studio 2017 (version 15.7 or above)
* Right click on the Jackett solution and click 'Rebuild Solution' to restore nuget packages
* Select Jackett.Console as startup project
* Select Jackett.Server as startup project
* In the drop down menu of the run button select "Jackett.Server" instead of "IIS Express"
* Build/Start the project
### OSX
@@ -445,9 +447,9 @@ NOTE: msbuild is included in the mono release.
NOTE: if you get the error "NU1102: Unable to find package Microsoft.AspNetCore with version (>= 2.1.2)" while restoring packages, you'll need to install it manually.https://www.microsoft.com/net/download/thank-you/dotnet-sdk-2.1.302-macos-x64-installer then delete the entire project directory and restart from a new clone
* msbuild Jackett.Console/Jackett.Console.csproj /t:Build /p:Configuration=Debug
* msbuild Jackett.Server/Jackett.Server.csproj /t:Build /p:Configuration=Debug
* curl -sS https://curl.haxx.se/ca/cacert.pem | cert-sync --user /dev/stdin
* mono Jackett.Console/bin/Debug/JackettConsole.exe
* mono Jackett.Server/bin/Debug/JackettServer.exe
### Linux
@@ -457,8 +459,8 @@ sudo apt install mono-complete nuget msbuild # install build tools (debian/ubunt
git clone https://github.com/Jackett/Jackett.git
cd Jackett/src
nuget restore Jackett.sln # prepare dependencies
msbuild Jackett.Console/Jackett.Console.csproj /t:Build /p:Configuration=Debug # compile
mono Jackett.Console/bin/Debug/JackettConsole.exe # run jackett
msbuild Jackett.Server/Jackett.Server.csproj /t:Build /p:Configuration=Debug # compile
mono Jackett.Server/bin/Debug/JackettServer.exe # run jackett
```
## Screenshots

77
install_service_macos Normal file
View File

@@ -0,0 +1,77 @@
#!/bin/bash
#Setting up colors
BOLDRED="$(printf '\033[1;31m')"
BOLDGREEN="$(printf '\033[1;32m')"
NC="$(printf '\033[0m')" # No Color
# Stop and unload the service if it's running
launchctl remove org.user.Jackett
# Move working directory to Jackett's
cd "$(dirname "$0")"
# Check if we're running from Jackett's directory
if [ ! -f ./JackettConsole.exe ]; then
echo "${BOLDRED}ERROR${NC}: Couldn't locate JackettConsole.exe. Is the script in the right directory?"
exit 1
fi
jackettdir="$(pwd)"
# Check if mono is installed
command -v mono >/dev/null 2>&1 || { echo >&2 "${BOLDRED}ERROR${NC}: Jackett requires Mono but it's not installed. Aborting."; exit 1; }
monodir="$(dirname $(command -v mono))"
# Check that no other service called Jackett is already running
if [[ $(launchctl list | grep org.user.Jackett) ]]; then
echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again."
exit 1
fi
# Write the plist to LaunchAgents
mkdir -p ~/Library/LaunchAgents/
cat >~/Library/LaunchAgents/org.user.Jackett.plist <<EOL
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:${monodir}</string>
</dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>org.user.Jackett</string>
<key>ProgramArguments</key>
<array>
<string>${monodir}/mono</string>
<string>--debug</string>
<string>JackettConsole.exe</string>
<string>--NoRestart</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>${jackettdir}</string>
</dict>
</plist>
EOL
# Run the agent
launchctl load ~/Library/LaunchAgents/org.user.Jackett.plist
# Check that it's running
if [[ $(launchctl list | grep org.user.Jackett) ]]; then
echo "${BOLDGREEN}Agent successfully installed and launched!${NC}"
else
cat << EOL
${BOLDRED}ERROR${NC}: Could not launch agent. The installation might have failed.
Please open an issue on https://github.com/Jackett/Jackett/issues and paste following information:
Mono directory: \`${monodir}\`
Jackett directory: \`${jackettdir}\`
EOL
fi

View File

@@ -0,0 +1,161 @@
---
site: bigtower
name: BigTower
description: "Big Tower is an ITALIAN Private site for TV / MOVIES / GENERAL"
language: it-it
type: private
encoding: UTF-8
links:
- http://bigtower.info/
caps:
categorymappings:
# Movies
- {id: 91, cat: Movies/HD, desc: "DSS"}
- {id: 92, cat: Movies/HD, desc: "DSS 3D"}
- {id: 14, cat: Movies, desc: "Screener"}
- {id: 15, cat: Movies/SD, desc: "DVDRip"}
- {id: 16, cat: Movies/HD, desc: "BDRip"}
- {id: 17, cat: Movies/HD, desc: "HD 720p"}
- {id: 18, cat: Movies/HD, desc: "HD 1080p"}
- {id: 19, cat: Movies/HD, desc: "HD 3D"}
- {id: 83, cat: Movies/HD, desc: "4K (Ultra HD)"}
- {id: 89, cat: Movies/DVD, desc: "DVD 5"}
- {id: 90, cat: Movies/DVD, desc: "DVD 9"}
- {id: 37, cat: Movies, desc: "MP4"}
- {id: 61, cat: TV, desc: "TV Show"}
- {id: 78, cat: TV, desc: "Serie TV"}
- {id: 96, cat: TV/HD, desc: "Serie TV 720p"}
- {id: 97, cat: TV/HD, desc: "Serie TV 1080p"}
- {id: 98, cat: TV, desc: "Serie TV MP4"}
- {id: 24, cat: TV/Anime, desc: "Cartoni"}
- {id: 66, cat: TV/Anime, desc: "Anime"}
- {id: 71, cat: TV, desc: "SUB iTA"}
- {id: 75, cat: TV/Documentary, desc: "Documentari"}
- {id: 72, cat: TV/Sport, desc: "Sport"}
# GAMES
- {id: 28, cat: PC/Games, desc: "PC Games"}
- {id: 63, cat: Console/Xbox 360, desc: "XBOX 360"}
- {id: 64, cat: Console/PS3, desc: "PS3"}
- {id: 33, cat: Console/Wii, desc: "WII"}
- {id: 76, cat: Console/Other, desc: "PS2"}
- {id: 81, cat: Console/Xbox One, desc: "XBOX ONE"}
- {id: 84, cat: Console/PS4, desc: "PS4"}
# MUSIC
- {id: 35, cat: Audio, desc: "MP3"}
- {id: 67, cat: Audio, desc: "FLAC"}
# SOFTWARE
- {id: 52, cat: PC/ISO, desc: "Windows"}
- {id: 54, cat: PC/ISO, desc: "Mac"}
- {id: 69, cat: PC/ISO, desc: "Linux"}
# PHONE
- {id: 40, cat: PC/Phone-IOS, desc: "Android"}
- {id: 41, cat: PC/Phone-Android, desc: "Iphone"}
# OTHER
- {id: 44, cat: Other, desc: "Varie"}
- {id: 82, cat: Other, desc: "Music Video"}
- {id: 86, cat: Other, desc: "Navigatori"}
- {id: 95, cat: Other, desc: "Immagini"}
- {id: 99, cat: Other, desc: "AudioLibri"}
# EBOOK
- {id: 46, cat: Books, desc: "Ebook"}
- {id: 73, cat: Books/Comics, desc: "Fumetti"}
- {id: 74, cat: Books/Comics, desc: "Manga"}
- {id: 87, cat: Books, desc: "Giornali"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: span:contains("Nome Utente non corretto")
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: index.php
inputs:
search: "{{ .Keywords }}"
page: "torrents"
category: "{{range .Categories}}{{.}};{{end}}"
options: "0"
active: "0"
rows:
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
fields:
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="]
title:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
banner:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) "
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
details:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(7)
filters:
- name: append
args: " +01:00"
- name: dateparse
args: "02/01/2006 -07:00"
grabs:
selector: td:nth-last-child(4)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-last-child(6)
leechers:
selector: td:nth-last-child(5)
downloadvolumefactor:
case:
img[alt="Gold 100% Free"]: "0"
img[alt="Silver 50% Free"]: "0.5"
img[alt="Bronze 25% Free"]: "0.75"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"

View File

@@ -69,9 +69,18 @@
filters:
- name: andmatch
fields:
# download button can be disbled in the profile, use details link instead
# download:
# selector: a[href^="download.php/"]
# attribute: href
download:
selector: a[href^="download.php/"]
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php/"]
- name: append
args: "/invalid.torrent"
title:
selector: a[href^="details.php?id="]
title:

View File

@@ -53,6 +53,10 @@
selector: .sbar span:nth-of-type(5) b
grabs:
selector: .sbar span:nth-of-type(6) b
seeders:
text: "999"
leechers:
text: "999"
downloadvolumefactor:
text: "0"
uploadvolumefactor:

View File

@@ -63,9 +63,9 @@
grabs:
selector: div[class$="info"] span:nth-of-type(4)
seeders:
text: "999"
selector: div[class$="info"] span:nth-of-type(4)
leechers:
text: "999"
selector: div[class$="info"] span:nth-of-type(4)
downloadvolumefactor:
text: "0"
uploadvolumefactor:

View File

@@ -0,0 +1,981 @@
---
site: extratorrentclone
name: ExtraTorrentClone
description: "ExtraTorrentClone is a Public tracker, a popular alternative to the original ET site, providing Movie / TV / General magnets"
language: en-us
type: public
encoding: UTF-8
links:
- https://geetorrent.com/
legacylinks:
- https://eltorrents.com/
caps:
categorymappings:
#Anime
- {id: 1, cat: TV/Anime, desc: "Anime"}
- {id: 963, cat: TV/Anime, desc: "Anime - Absolute Duo"}
- {id: 951, cat: TV/Anime, desc: "Anime - Akame ga Kill"}
- {id: 959, cat: TV/Anime, desc: "Anime - Aldnoah Zero"}
- {id: 99, cat: TV/Anime, desc: "Anime - Anime - Other"}
- {id: 86, cat: TV/Anime, desc: "Anime - Battle Programer Shirase"}
- {id: 87, cat: TV/Anime, desc: "Anime - Big O"}
- {id: 960, cat: TV/Anime, desc: "Anime - Binan Koukou Chikyuu Bouei-bu Love"}
- {id: 267, cat: TV/Anime, desc: "Anime - Bleach"}
- {id: 88, cat: TV/Anime, desc: "Anime - Cardcaptor Sakura"}
- {id: 89, cat: TV/Anime, desc: "Anime - Chobits"}
- {id: 142, cat: TV/Anime, desc: "Anime - Comics"}
- {id: 962, cat: TV/Anime, desc: "Anime - Death Parade"}
- {id: 151, cat: TV/Anime, desc: "Anime - Dragon ball"}
- {id: 90, cat: TV/Anime, desc: "Anime - Dragonball GT"}
- {id: 91, cat: TV/Anime, desc: "Anime - Dragonball Z"}
- {id: 156, cat: TV/Anime, desc: "Anime - DVD-R"}
- {id: 950, cat: TV/Anime, desc: "Anime - Fairy Tail"}
- {id: 92, cat: TV/Anime, desc: "Anime - Flame of Recca"}
- {id: 93, cat: TV/Anime, desc: "Anime - Full Metal Alchemist"}
- {id: 95, cat: TV/Anime, desc: "Anime - Ghost In The Shell SAC"}
- {id: 94, cat: TV/Anime, desc: "Anime - Gundam"}
- {id: 620, cat: TV/Anime, desc: "Anime - Hentai"}
- {id: 145, cat: TV/Anime, desc: "Anime - Hunter X Hunter"}
- {id: 949, cat: TV/Anime, desc: "Anime - Inou Battle wa Nichijou-kei no Naka de"}
- {id: 96, cat: TV/Anime, desc: "Anime - InuYasha"}
- {id: 524, cat: TV/Anime, desc: "Anime - Kiba"}
- {id: 97, cat: TV/Anime, desc: "Anime - Konkiki No Gash Bell"}
- {id: 961, cat: TV/Anime, desc: "Anime - Kuroko No Basuke"}
- {id: 98, cat: TV/Anime, desc: "Anime - Last Exile"}
- {id: 964, cat: TV/Anime, desc: "Anime - Log Horizon"}
- {id: 952, cat: TV/Anime, desc: "Anime - Nanatsu no Taizai"}
- {id: 101, cat: TV/Anime, desc: "Anime - Naruto"}
- {id: 508, cat: TV/Anime, desc: "Anime - One Piece"}
- {id: 100, cat: TV/Anime, desc: "Anime - Onegai Twins"}
- {id: 523, cat: TV/Anime, desc: "Anime - Ouran High School Host Club"}
- {id: 102, cat: TV/Anime, desc: "Anime - PlanetES"}
- {id: 146, cat: TV/Anime, desc: "Anime - Prince of Tennis"}
- {id: 103, cat: TV/Anime, desc: "Anime - Ranma 1/2"}
- {id: 104, cat: TV/Anime, desc: "Anime - Ruroni Kenshin"}
- {id: 105, cat: TV/Anime, desc: "Anime - Samurai Champloo"}
- {id: 107, cat: TV/Anime, desc: "Anime - Scrapped Princess"}
- {id: 997, cat: TV/Anime, desc: "Anime - Spider-man"}
- {id: 106, cat: TV/Anime, desc: "Anime - Stellvia of the Universe"}
- {id: 525, cat: TV/Anime, desc: "Anime - Strawberry Panic"}
- {id: 953, cat: TV/Anime, desc: "Anime - Sword Art Online II"}
- {id: 958, cat: TV/Anime, desc: "Anime - Tokyo Ghoul"}
#Audio
- {id: 5, cat: Audio, desc: "Music"}
- {id: 54, cat: Audio, desc: "Music - Alternative"}
- {id: 990, cat: Audio, desc: "Music - Ambient"}
- {id: 160, cat: Audio, desc: "Music - Anime"}
- {id: 55, cat: Audio, desc: "Music - Asian"}
- {id: 56, cat: Audio, desc: "Music - Blues"}
- {id: 809, cat: Audio, desc: "Music - Bollywood"}
- {id: 57, cat: Audio, desc: "Music - Christian"}
- {id: 58, cat: Audio, desc: "Music - Classic"}
- {id: 515, cat: Audio, desc: "Music - Compilation/Various Artists (VA)"}
- {id: 59, cat: Audio, desc: "Music - Country/Western"}
- {id: 971, cat: Audio, desc: "Music - Discography"}
- {id: 60, cat: Audio, desc: "Music - Drum N Bass"}
- {id: 61, cat: Audio, desc: "Music - Electronic"}
- {id: 850, cat: Audio, desc: "Music - FLAC"}
- {id: 519, cat: Audio, desc: "Music - Folk"}
- {id: 62, cat: Audio, desc: "Music - Game Music"}
- {id: 233, cat: Audio, desc: "Music - Gothic"}
- {id: 63, cat: Audio, desc: "Music - Hardcore"}
- {id: 78, cat: Audio, desc: "Music - HardHouse/Old School Radio Mixes"}
- {id: 512, cat: Audio, desc: "Music - Hardrock"}
- {id: 724, cat: Audio, desc: "Music - Hardstyle"}
- {id: 306, cat: Audio, desc: "Music - Heavy/Death Metal"}
- {id: 64, cat: Audio, desc: "Music - Hip Hop"}
- {id: 511, cat: Audio, desc: "Music - Indie/Britpop"}
- {id: 65, cat: Audio, desc: "Music - Industrial"}
- {id: 66, cat: Audio, desc: "Music - Jazz"}
- {id: 67, cat: Audio, desc: "Music - Karaoke"}
- {id: 521, cat: Audio, desc: "Music - Latin"}
- {id: 68, cat: Audio, desc: "Music - Metal"}
- {id: 526, cat: Audio, desc: "Music - Motown"}
- {id: 79, cat: Audio, desc: "Music - Music - Other"}
- {id: 69, cat: Audio, desc: "Music - Music Videos"}
- {id: 522, cat: Audio, desc: "Music - Non-English"}
- {id: 507, cat: Audio, desc: "Music - Now That's What I Call Music"}
- {id: 70, cat: Audio, desc: "Music - Pop"}
- {id: 852, cat: Audio, desc: "Music - Progressive"}
- {id: 71, cat: Audio, desc: "Music - Punk"}
- {id: 72, cat: Audio, desc: "Music - R&B"}
- {id: 851, cat: Audio, desc: "Music - Rai"}
- {id: 73, cat: Audio, desc: "Music - Rap"}
- {id: 74, cat: Audio, desc: "Music - Reggae"}
- {id: 75, cat: Audio, desc: "Music - Rock"}
- {id: 527, cat: Audio, desc: "Music - Rock 'n' Roll"}
- {id: 514, cat: Audio, desc: "Music - Singer Songwriter"}
- {id: 230, cat: Audio, desc: "Music - Ska"}
- {id: 505, cat: Audio, desc: "Music - Soul"}
- {id: 77, cat: Audio, desc: "Music - Soundtracks"}
- {id: 161, cat: Audio, desc: "Music - Techno"}
- {id: 420, cat: Audio, desc: "Music - Trance/House/Dance"}
- {id: 76, cat: Audio, desc: "Music - Unsigned/Amateur"}
- {id: 1002, cat: Audio, desc: "Music - AAC"}
- {id: 1003, cat: Audio, desc: "Music - Album"}
- {id: 1004, cat: Audio, desc: "Music - Box Set"}
- {id: 1005, cat: Audio, desc: "Music - Concerts"}
- {id: 1006, cat: Audio, desc: "Music - Discography"}
- {id: 1007, cat: Audio, desc: "Music - DVD"}
- {id: 1008, cat: Audio/Lossless, desc: "Music - Lossless"}
- {id: 1009, cat: Audio/MP3, desc: "Music - MP3"}
- {id: 1011, cat: Audio, desc: "Music - Radio"}
- {id: 1012, cat: Audio, desc: "Music - Single"}
#Movies
- {id: 4, cat: Movies, desc: "Movies"}
- {id: 419, cat: Movies, desc: "Movies - Action"}
- {id: 28, cat: Movies, desc: "Movies - Adventure"}
- {id: 29, cat: Movies, desc: "Movies - Animation"}
- {id: 30, cat: Movies, desc: "Movies - Asian"}
- {id: 32, cat: Movies, desc: "Movies - Automotive/Cars"}
- {id: 628, cat: Movies, desc: "Movies - Biography"}
- {id: 977, cat: Movies, desc: "Movies - Black and White"}
- {id: 558, cat: Movies, desc: "Movies - Bollywood/Desi"}
- {id: 976, cat: Movies, desc: "Movies - Classic"}
- {id: 33, cat: Movies, desc: "Movies - Comedy"}
- {id: 34, cat: Movies, desc: "Movies - Concerts"}
- {id: 600, cat: Movies, desc: "Movies - Crime"}
- {id: 35, cat: Movies, desc: "Movies - Documentary"}
- {id: 37, cat: Movies, desc: "Movies - Drama"}
- {id: 742, cat: Movies, desc: "Movies - Dubbed/Dual Audio"}
- {id: 36, cat: Movies, desc: "Movies - DVD/Film Extras"}
- {id: 149, cat: Movies, desc: "Movies - Family"}
- {id: 38, cat: Movies, desc: "Movies - Fantasy"}
- {id: 39, cat: Movies, desc: "Movies - Gore Flicks"}
- {id: 602, cat: Movies, desc: "Movies - History"}
- {id: 40, cat: Movies, desc: "Movies - Horror"}
- {id: 41, cat: Movies, desc: "Movies - Kids"}
- {id: 150, cat: Movies, desc: "Movies - KVCD"}
- {id: 974, cat: Movies, desc: "Movies - Lollywood"}
- {id: 42, cat: Movies, desc: "Movies - Martial Arts"}
- {id: 44, cat: Movies/Other, desc: "Movies - Other"}
- {id: 805, cat: Movies/3D, desc: "Movies - 3D"}
- {id: 975, cat: Movies/UHD, desc: "Movies - 4K"}
- {id: 947, cat: Movies, desc: "Movies - Musical"}
- {id: 43, cat: Movies, desc: "Movies - Mystery"}
- {id: 603, cat: Movies/Foreign, desc: "Movies - non English"}
- {id: 978, cat: Movies, desc: "Movies - Rarities"}
- {id: 45, cat: Movies, desc: "Movies - Romance"}
- {id: 46, cat: Movies, desc: "Movies - Samples/Trailers"}
- {id: 47, cat: Movies, desc: "Movies - Sci-Fi"}
- {id: 48, cat: Movies, desc: "Movies - Sports related"}
- {id: 779, cat: Movies, desc: "Movies - Stand-up comedy"}
- {id: 49, cat: Movies, desc: "Movies - Thriller"}
- {id: 671, cat: Movies, desc: "Movies - Travel"}
- {id: 307, cat: Movies, desc: "Movies - War"}
- {id: 601, cat: Movies, desc: "Movies - Western"}
- {id: 1024, cat: Movies, desc: "Movies - HEVC/x265"}
- {id: 1030, cat: Movies, desc: "Movies - Divx/Xvid"}
- {id: 1031, cat: Movies, desc: "Movies - h.264/x264"}
- {id: 1032, cat: Movies/HD, desc: "Movies - HD"}
- {id: 1033, cat: Movies, desc: "Movies - MP4"}
- {id: 1034, cat: Movies, desc: "Movies - SVCD/VCD"}
- {id: 1035, cat: Movies, desc: "Movies - YIFY"}
#TV
- {id: 8, cat: TV, desc: "TV"}
- {id: 986, cat: TV, desc: "TV - 12 Monkeys"}
- {id: 598, cat: TV, desc: "TV - 19-2"}
- {id: 795, cat: TV, desc: "TV - 2 Broke Girls"}
- {id: 435, cat: TV, desc: "TV - 24"}
- {id: 169, cat: TV, desc: "TV - 30 Days"}
- {id: 561, cat: TV, desc: "TV - 30 Rock"}
- {id: 274, cat: TV, desc: "TV - 60 Minutes"}
- {id: 862, cat: TV, desc: "TV - 666 Park Avenue"}
- {id: 273, cat: TV, desc: "TV - 'Allo 'Allo!"}
- {id: 310, cat: TV, desc: "TV - A-Team"}
- {id: 797, cat: TV, desc: "TV - About a Boy"}
- {id: 998, cat: TV, desc: "TV - Above Suspicion"}
- {id: 966, cat: TV, desc: "TV - Adam - E.V.A"}
- {id: 573, cat: TV, desc: "TV - Alaska State Troopers"}
- {id: 821, cat: TV, desc: "TV - Alcatraz"}
- {id: 118, cat: TV, desc: "TV - Alias"}
- {id: 810, cat: TV, desc: "TV - Almost Human"}
- {id: 771, cat: TV, desc: "TV - Alphas"}
- {id: 818, cat: TV, desc: "TV - American Chopper"}
- {id: 234, cat: TV, desc: "TV - American Dad"}
- {id: 194, cat: TV, desc: "TV - American Horror Story"}
- {id: 634, cat: TV, desc: "TV - American Idol"}
- {id: 674, cat: TV, desc: "TV - Americas Got Talent"}
- {id: 675, cat: TV, desc: "TV - Americas Next Top Model"}
- {id: 894, cat: TV, desc: "TV - Ancient Aliens"}
- {id: 170, cat: TV, desc: "TV - Angel"}
- {id: 911, cat: TV, desc: "TV - Anger Management"}
- {id: 659, cat: TV, desc: "TV - Archer"}
- {id: 275, cat: TV, desc: "TV - Arrested Development"}
- {id: 872, cat: TV, desc: "TV - Arrow"}
- {id: 984, cat: TV, desc: "TV - Ash vs Evil Dead"}
- {id: 171, cat: TV, desc: "TV - Attack Of The Show"}
- {id: 837, cat: TV, desc: "TV - Awake"}
- {id: 902, cat: TV, desc: "TV - Awkward"}
- {id: 916, cat: TV, desc: "TV - Baby Daddy"}
- {id: 165, cat: TV, desc: "TV - Babylon 5"}
- {id: 309, cat: TV, desc: "TV - Back In The Game"}
- {id: 460, cat: TV, desc: "TV - Band Of Brothers"}
- {id: 329, cat: TV, desc: "TV - Banshee"}
- {id: 891, cat: TV, desc: "TV - Bates Motel"}
- {id: 802, cat: TV, desc: "TV - Batman The Brave and The Bold"}
- {id: 163, cat: TV, desc: "TV - Battlestar Galactica"}
- {id: 794, cat: TV, desc: "TV - BBC"}
- {id: 886, cat: TV, desc: "TV - Beauty and the Beast"}
- {id: 172, cat: TV, desc: "TV - Beauty And The Geek"}
- {id: 782, cat: TV, desc: "TV - Beavis and Butt-Head"}
- {id: 584, cat: TV, desc: "TV - Being Erica"}
- {id: 669, cat: TV, desc: "TV - Being Human"}
- {id: 683, cat: TV, desc: "TV - Believe"}
- {id: 335, cat: TV, desc: "TV - Bellator FC"}
- {id: 979, cat: TV, desc: "TV - Better Call Saul"}
- {id: 173, cat: TV, desc: "TV - Big Brother"}
- {id: 666, cat: TV, desc: "TV - Big Love"}
- {id: 774, cat: TV, desc: "TV - Bigg Boss"}
- {id: 989, cat: TV, desc: "TV - Billions"}
- {id: 174, cat: TV, desc: "TV - Bitten"}
- {id: 396, cat: TV, desc: "TV - Black Sails"}
- {id: 981, cat: TV, desc: "TV - Blindspot"}
- {id: 717, cat: TV, desc: "TV - Blue Bloods"}
- {id: 754, cat: TV, desc: "TV - Boardwalk Empire"}
- {id: 709, cat: TV, desc: "TV - Bobs Burgers"}
- {id: 767, cat: TV, desc: "TV - Body of Proof"}
- {id: 175, cat: TV, desc: "TV - Bold and the beautiful"}
- {id: 969, cat: TV, desc: "TV - Bollywood TV Shows"}
- {id: 269, cat: TV, desc: "TV - Bones"}
- {id: 235, cat: TV, desc: "TV - Boston Legal"}
- {id: 676, cat: TV, desc: "TV - Breaking Bad"}
- {id: 707, cat: TV, desc: "TV - Breakout Kings"}
- {id: 409, cat: TV, desc: "TV - Brickleberry"}
- {id: 680, cat: TV, desc: "TV - Brooklyn Nine-Nine"}
- {id: 560, cat: TV, desc: "TV - Brothers And Sisters"}
- {id: 147, cat: TV, desc: "TV - Buffy"}
- {id: 677, cat: TV, desc: "TV - Burn Notice"}
- {id: 619, cat: TV, desc: "TV - Californication"}
- {id: 883, cat: TV, desc: "TV - Call of the Wildman"}
- {id: 719, cat: TV, desc: "TV - Camelot"}
- {id: 921, cat: TV, desc: "TV - Camp"}
- {id: 661, cat: TV, desc: "TV - Caprica"}
- {id: 928, cat: TV, desc: "TV - Capture"}
- {id: 128, cat: TV, desc: "TV - Carnivale"}
- {id: 736, cat: TV, desc: "TV - Cartoon"}
- {id: 658, cat: TV, desc: "TV - Castle"}
- {id: 941, cat: TV, desc: "TV - Cedar Cove"}
- {id: 846, cat: TV, desc: "TV - Celebrity Juice"}
- {id: 141, cat: TV, desc: "TV - Charmed"}
- {id: 900, cat: TV, desc: "TV - Chicago Fire"}
- {id: 324, cat: TV, desc: "TV - Chicago PD"}
- {id: 315, cat: TV, desc: "TV - Chopped"}
- {id: 184, cat: TV, desc: "TV - Chozen"}
- {id: 657, cat: TV, desc: "TV - Chuck"}
- {id: 133, cat: TV, desc: "TV - Cold Case"}
- {id: 629, cat: TV, desc: "TV - Community"}
- {id: 178, cat: TV, desc: "TV - Conan O'Brien"}
- {id: 946, cat: TV, desc: "TV - Constantine"}
- {id: 879, cat: TV, desc: "TV - Continuum"}
- {id: 861, cat: TV, desc: "TV - Copper"}
- {id: 322, cat: TV, desc: "TV - Cops"}
- {id: 186, cat: TV, desc: "TV - Cosmos A Space Time Odyssey"}
- {id: 670, cat: TV, desc: "TV - Cougar Town"}
- {id: 729, cat: TV, desc: "TV - Covert Affairs"}
- {id: 651, cat: TV, desc: "TV - Craig Ferguson"}
- {id: 280, cat: TV, desc: "TV - Criminal Minds"}
- {id: 788, cat: TV, desc: "TV - Crisis"}
- {id: 279, cat: TV, desc: "TV - Criss Angel BeLIEve"}
- {id: 323, cat: TV, desc: "TV - Crossing Jordan"}
- {id: 926, cat: TV, desc: "TV - Crossing Lines"}
- {id: 108, cat: TV, desc: "TV - CSI"}
- {id: 325, cat: TV, desc: "TV - Curb Your Enthusiasm"}
- {id: 882, cat: TV, desc: "TV - Da Vincis Demons"}
- {id: 282, cat: TV, desc: "TV - Dallas"}
- {id: 678, cat: TV, desc: "TV - Damages"}
- {id: 798, cat: TV, desc: "TV - Dancing with the Stars US"}
- {id: 652, cat: TV, desc: "TV - David Letterman"}
- {id: 994, cat: TV, desc: "TV - Days of Our Lives"}
- {id: 985, cat: TV, desc: "TV - DCs Legends of Tomorrow"}
- {id: 181, cat: TV, desc: "TV - Dead Like Me"}
- {id: 679, cat: TV, desc: "TV - Deadliest Catch"}
- {id: 182, cat: TV, desc: "TV - Deadwood"}
- {id: 890, cat: TV, desc: "TV - Defiance"}
- {id: 281, cat: TV, desc: "TV - Democracy Now!"}
- {id: 183, cat: TV, desc: "TV - Desperate Housewives"}
- {id: 939, cat: TV, desc: "TV - Devious Maids"}
- {id: 585, cat: TV, desc: "TV - Dexter"}
- {id: 644, cat: TV, desc: "TV - Dirty Jobs"}
- {id: 122, cat: TV, desc: "TV - Discovery Channel"}
- {id: 167, cat: TV, desc: "TV - Doctor Who"}
- {id: 968, cat: TV, desc: "TV - Documentary"}
- {id: 606, cat: TV, desc: "TV - Dollhouse"}
- {id: 839, cat: TV, desc: "TV - Dont Trust the Bitch in Apartment"}
- {id: 326, cat: TV, desc: "TV - Dr Who"}
- {id: 925, cat: TV, desc: "TV - Dracula"}
- {id: 328, cat: TV, desc: "TV - Drawn Together"}
- {id: 732, cat: TV, desc: "TV - Drop Dead"}
- {id: 820, cat: TV, desc: "TV - Eastbound and Down"}
- {id: 875, cat: TV, desc: "TV - Elementary"}
- {id: 283, cat: TV, desc: "TV - Ellen DeGeneres"}
- {id: 330, cat: TV, desc: "TV - Enlisted"}
- {id: 187, cat: TV, desc: "TV - Entourage"}
- {id: 270, cat: TV, desc: "TV - ER"}
- {id: 765, cat: TV, desc: "TV - Eureka"}
- {id: 238, cat: TV, desc: "TV - Everybody Loves Raymond"}
- {id: 571, cat: TV, desc: "TV - Extant"}
- {id: 840, cat: TV, desc: "TV - Fact or Faked Paranormal Files"}
- {id: 828, cat: TV, desc: "TV - Fairly Legeal"}
- {id: 876, cat: TV, desc: "TV - Faking It"}
- {id: 917, cat: TV, desc: "TV - Falling Skies"}
- {id: 188, cat: TV, desc: "TV - Family Guy"}
- {id: 855, cat: TV, desc: "TV - Family Tools"}
- {id: 411, cat: TV, desc: "TV - Fargo"}
- {id: 331, cat: TV, desc: "TV - Farscape"}
- {id: 983, cat: TV, desc: "TV - Fear the Walking Dead"}
- {id: 332, cat: TV, desc: "TV - Fifth Gear"}
- {id: 672, cat: TV, desc: "TV - Flashforward"}
- {id: 753, cat: TV, desc: "TV - Flashpoint"}
- {id: 831, cat: TV, desc: "TV - Foreign Series/Non English"}
- {id: 266, cat: TV, desc: "TV - Forever"}
- {id: 922, cat: TV, desc: "TV - Franklin and Bash"}
- {id: 140, cat: TV, desc: "TV - Friends"}
- {id: 612, cat: TV, desc: "TV - Fringe"}
- {id: 277, cat: TV, desc: "TV - From Dusk Till Dawn"}
- {id: 681, cat: TV, desc: "TV - Futurama"}
- {id: 728, cat: TV, desc: "TV - Game of Thrones"}
- {id: 334, cat: TV, desc: "TV - Gang Related"}
- {id: 996, cat: TV, desc: "TV - General Hospital"}
- {id: 954, cat: TV, desc: "TV - Geordie Shore"}
- {id: 574, cat: TV, desc: "TV - Ghost Adventures"}
- {id: 704, cat: TV, desc: "TV - Ghost Hunters"}
- {id: 642, cat: TV, desc: "TV - Ghost Mine"}
- {id: 338, cat: TV, desc: "TV - Ghost Whisperer"}
- {id: 284, cat: TV, desc: "TV - Gilmore Girls"}
- {id: 682, cat: TV, desc: "TV - Glee"}
- {id: 865, cat: TV, desc: "TV - Go On"}
- {id: 276, cat: TV, desc: "TV - Gold Rush"}
- {id: 339, cat: TV, desc: "TV - Good Eats"}
- {id: 599, cat: TV, desc: "TV - Gossip Girl"}
- {id: 580, cat: TV, desc: "TV - Gotham"}
- {id: 919, cat: TV, desc: "TV - Graceland"}
- {id: 955, cat: TV, desc: "TV - Gracepoint"}
- {id: 285, cat: TV, desc: "TV - Greys Anatomy"}
- {id: 819, cat: TV, desc: "TV - Grimm"}
- {id: 237, cat: TV, desc: "TV - Growing Up Fisher"}
- {id: 340, cat: TV, desc: "TV - Guiding Light"}
- {id: 866, cat: TV, desc: "TV - Guys With Kids"}
- {id: 880, cat: TV, desc: "TV - Hannibal"}
- {id: 813, cat: TV, desc: "TV - Happily Divorced"}
- {id: 769, cat: TV, desc: "TV - Happy Endings"}
- {id: 190, cat: TV, desc: "TV - Harald Schmidt"}
- {id: 713, cat: TV, desc: "TV - Harrys Law"}
- {id: 832, cat: TV, desc: "TV - Hart of Dixie"}
- {id: 341, cat: TV, desc: "TV - Haunted"}
- {id: 773, cat: TV, desc: "TV - Haven"}
- {id: 712, cat: TV, desc: "TV - Hawaii Five-0"}
- {id: 781, cat: TV, desc: "TV - Helix"}
- {id: 853, cat: TV, desc: "TV - Hell on Wheels"}
- {id: 191, cat: TV, desc: "TV - Hells Kitchen"}
- {id: 884, cat: TV, desc: "TV - Hemlock Grove"}
- {id: 342, cat: TV, desc: "TV - Hercules"}
- {id: 556, cat: TV, desc: "TV - Heroes"}
- {id: 343, cat: TV, desc: "TV - Hex"}
- {id: 192, cat: TV, desc: "TV - Hogans Heroes"}
- {id: 588, cat: TV, desc: "TV - Hollands Hoop"}
- {id: 755, cat: TV, desc: "TV - Homeland"}
- {id: 812, cat: TV, desc: "TV - Hostages"}
- {id: 684, cat: TV, desc: "TV - Hot in Cleveland"}
- {id: 286, cat: TV, desc: "TV - House"}
- {id: 913, cat: TV, desc: "TV - House Of Cards"}
- {id: 287, cat: TV, desc: "TV - How I Met Your Mother"}
- {id: 568, cat: TV, desc: "TV - How Its Made"}
- {id: 893, cat: TV, desc: "TV - How to Live with Your Parents"}
- {id: 288, cat: TV, desc: "TV - Howard Stern"}
- {id: 132, cat: TV, desc: "TV - Huff"}
- {id: 345, cat: TV, desc: "TV - Humor Amarillo"}
- {id: 756, cat: TV, desc: "TV - Hung"}
- {id: 637, cat: TV, desc: "TV - Hustle"}
- {id: 346, cat: TV, desc: "TV - In Justice"}
- {id: 685, cat: TV, desc: "TV - In Plain Sight"}
- {id: 582, cat: TV, desc: "TV - Ink Master"}
- {id: 347, cat: TV, desc: "TV - Inked"}
- {id: 965, cat: TV, desc: "TV - Inside MMA"}
- {id: 873, cat: TV, desc: "TV - Intelligence US"}
- {id: 240, cat: TV, desc: "TV - Into the West"}
- {id: 166, cat: TV, desc: "TV - Iron Chef"}
- {id: 289, cat: TV, desc: "TV - Invasion"}
- {id: 817, cat: TV, desc: "TV - Ironside"}
- {id: 772, cat: TV, desc: "TV - Its Always Sunny in Philadelphia"}
- {id: 988, cat: TV, desc: "TV - iZombie"}
- {id: 991, cat: TV, desc: "TV - Jane the Virgin"}
- {id: 290, cat: TV, desc: "TV - Jay Leno"}
- {id: 763, cat: TV, desc: "TV - Jersey Shore"}
- {id: 177, cat: TV, desc: "TV - Joe Rogan Questions Everything"}
- {id: 110, cat: TV, desc: "TV - Joey"}
- {id: 196, cat: TV, desc: "TV - Justice League Unlimited"}
- {id: 686, cat: TV, desc: "TV - Justified"}
- {id: 412, cat: TV, desc: "TV - kabachitare!"}
- {id: 738, cat: TV, desc: "TV - Killer Contact"}
- {id: 349, cat: TV, desc: "TV - Killer Instinct"}
- {id: 197, cat: TV, desc: "TV - Kim Possible"}
- {id: 741, cat: TV, desc: "TV - King"}
- {id: 933, cat: TV, desc: "TV - King and Maxwel"}
- {id: 350, cat: TV, desc: "TV - King Of The Hill"}
- {id: 351, cat: TV, desc: "TV - Kitchen Confidential"}
- {id: 790, cat: TV, desc: "TV - Kitchen Nightmares US"}
- {id: 348, cat: TV, desc: "TV - Kolchak The Night Stalker"}
- {id: 241, cat: TV, desc: "TV - Koot en Bie"}
- {id: 198, cat: TV, desc: "TV - Kung Fu"}
- {id: 199, cat: TV, desc: "TV - La Femme Nikita"}
- {id: 570, cat: TV, desc: "TV - LA Ink"}
- {id: 242, cat: TV, desc: "TV - Laguna Beach"}
- {id: 130, cat: TV, desc: "TV - Las Vegas"}
- {id: 843, cat: TV, desc: "TV - Last Man Standing"}
- {id: 867, cat: TV, desc: "TV - Last Resort"}
- {id: 200, cat: TV, desc: "TV - Late Night with Conan O'Brien"}
- {id: 115, cat: TV, desc: "TV - Law And Order"}
- {id: 591, cat: TV, desc: "TV - Law and Order UK"}
- {id: 243, cat: TV, desc: "TV - Le Cameleon"}
- {id: 578, cat: TV, desc: "TV - Legend of the Seeker"}
- {id: 590, cat: TV, desc: "TV - Legends"}
- {id: 898, cat: TV, desc: "TV - Legit"}
- {id: 638, cat: TV, desc: "TV - Level3"}
- {id: 656, cat: TV, desc: "TV - Leverage"}
- {id: 618, cat: TV, desc: "TV - Lie To Me"}
- {id: 650, cat: TV, desc: "TV - Life"}
- {id: 353, cat: TV, desc: "TV - Life on Mars"}
- {id: 716, cat: TV, desc: "TV - Lights Out"}
- {id: 244, cat: TV, desc: "TV - Line Of Fire"}
- {id: 504, cat: TV, desc: "TV - Little Britain"}
- {id: 665, cat: TV, desc: "TV - Little Mosque on the Prairie"}
- {id: 148, cat: TV, desc: "TV - Long Island Medium"}
- {id: 914, cat: TV, desc: "TV - Longmire"}
- {id: 354, cat: TV, desc: "TV - Los Serrano"}
- {id: 111, cat: TV, desc: "TV - Lost"}
- {id: 314, cat: TV, desc: "TV - Lost Girl"}
- {id: 858, cat: TV, desc: "TV - Louie"}
- {id: 726, cat: TV, desc: "TV - Love Bites"}
- {id: 937, cat: TV, desc: "TV - Low Winter Sun"}
- {id: 956, cat: TV, desc: "TV - Lucha Underground"}
- {id: 980, cat: TV, desc: "TV - Lucifer"}
- {id: 503, cat: TV, desc: "TV - Lucky Louie"}
- {id: 687, cat: TV, desc: "TV - Luther"}
- {id: 157, cat: TV, desc: "TV - MacGyver"}
- {id: 705, cat: TV, desc: "TV - Mad Love"}
- {id: 826, cat: TV, desc: "TV - Mad Men"}
- {id: 869, cat: TV, desc: "TV - Made in Jersey"}
- {id: 355, cat: TV, desc: "TV - MADtv"}
- {id: 871, cat: TV, desc: "TV - Major Crimes"}
- {id: 667, cat: TV, desc: "TV - Make It or Break It"}
- {id: 357, cat: TV, desc: "TV - Malcolm In The Middle"}
- {id: 662, cat: TV, desc: "TV - Man vs Wild"}
- {id: 759, cat: TV, desc: "TV - Marvels Agents of S.H.I.E.L.D"}
- {id: 910, cat: TV, desc: "TV - MasterChef US"}
- {id: 358, cat: TV, desc: "TV - Masters Of Horror"}
- {id: 824, cat: TV, desc: "TV - Masters of Sex"}
- {id: 291, cat: TV, desc: "TV - Medium"}
- {id: 617, cat: TV, desc: "TV - Melrose Place"}
- {id: 688, cat: TV, desc: "TV - Memphis Beat"}
- {id: 905, cat: TV, desc: "TV - Men at Work"}
- {id: 645, cat: TV, desc: "TV - Men of a Certain Age"}
- {id: 633, cat: TV, desc: "TV - Mercy"}
- {id: 579, cat: TV, desc: "TV - Merlin"}
- {id: 359, cat: TV, desc: "TV - Miami Ink"}
- {id: 825, cat: TV, desc: "TV - Midsomer Murders"}
- {id: 783, cat: TV, desc: "TV - Mike and Molly"}
- {id: 823, cat: TV, desc: "TV - Mind Games"}
- {id: 246, cat: TV, desc: "TV - Mind of Mencia"}
- {id: 313, cat: TV, desc: "TV - Misfits"}
- {id: 842, cat: TV, desc: "TV - Missing"}
- {id: 647, cat: TV, desc: "TV - Mistresses US"}
- {id: 179, cat: TV, desc: "TV - Mixology"}
- {id: 632, cat: TV, desc: "TV - Modern Family"}
- {id: 245, cat: TV, desc: "TV - Modern Marvels"}
- {id: 398, cat: TV, desc: "TV - Mom"}
- {id: 201, cat: TV, desc: "TV - Monk"}
- {id: 361, cat: TV, desc: "TV - Monty Pythons Flying Circus"}
- {id: 907, cat: TV, desc: "TV - Motive"}
- {id: 247, cat: TV, desc: "TV - Mr Bean"}
- {id: 992, cat: TV, desc: "TV - Mr. Robot"}
- {id: 356, cat: TV, desc: "TV - MST3K"}
- {id: 292, cat: TV, desc: "TV - My Favorite Martian"}
- {id: 792, cat: TV, desc: "TV - My Ghost Story"}
- {id: 999, cat: TV, desc: "TV - My Little Pony - Friendship is Magic"}
- {id: 362, cat: TV, desc: "TV - My Name Is Earl"}
- {id: 202, cat: TV, desc: "TV - My Restaurant Rules"}
- {id: 193, cat: TV, desc: "TV - Mythbusters"}
- {id: 940, cat: TV, desc: "TV - Naked And Afraid"}
- {id: 203, cat: TV, desc: "TV - NASA 50 Years Of Space Exploration"}
- {id: 899, cat: TV, desc: "TV - Nashville"}
- {id: 636, cat: TV, desc: "TV - National Geographic"}
- {id: 120, cat: TV, desc: "TV - NCIS"}
- {id: 920, cat: TV, desc: "TV - Necessary Roughness"}
- {id: 841, cat: TV, desc: "TV - New Girl"}
- {id: 957, cat: TV, desc: "TV - New Japan Pro Wrestling"}
- {id: 311, cat: TV, desc: "TV - NewGamePlus"}
- {id: 363, cat: TV, desc: "TV - Night Stalker"}
- {id: 722, cat: TV, desc: "TV - Nikita"}
- {id: 293, cat: TV, desc: "TV - Nip Tuck"}
- {id: 710, cat: TV, desc: "TV - No Ordinary Family"}
- {id: 294, cat: TV, desc: "TV - Numb3rs"}
- {id: 689, cat: TV, desc: "TV - Nurse Jackie"}
- {id: 703, cat: TV, desc: "TV - Off the Map"}
- {id: 833, cat: TV, desc: "TV - Once Upon a Time Once"}
- {id: 364, cat: TV, desc: "TV - One Tree Hill"}
- {id: 424, cat: TV, desc: "TV - Only Fools And Horses"}
- {id: 935, cat: TV, desc: "TV - Orange Is The New Black"}
- {id: 881, cat: TV, desc: "TV - Orphan Black"}
- {id: 113, cat: TV, desc: "TV - Other"}
- {id: 365, cat: TV, desc: "TV - Out of Practice S01E"}
- {id: 248, cat: TV, desc: "TV - Outer Limits"}
- {id: 646, cat: TV, desc: "TV - Outer Space Astronauts"}
- {id: 336, cat: TV, desc: "TV - Outlander"}
- {id: 723, cat: TV, desc: "TV - Outsourced"}
- {id: 249, cat: TV, desc: "TV - Over There"}
- {id: 757, cat: TV, desc: "TV - Pan Am"}
- {id: 640, cat: TV, desc: "TV - Paradox"}
- {id: 778, cat: TV, desc: "TV - Parenthood"}
- {id: 613, cat: TV, desc: "TV - Parks and Recreation"}
- {id: 250, cat: TV, desc: "TV - Passions"}
- {id: 414, cat: TV, desc: "TV - PBS NOW"}
- {id: 690, cat: TV, desc: "TV - Penn and Teller Bullshit"}
- {id: 945, cat: TV, desc: "TV - Penny Dreadful"}
- {id: 927, cat: TV, desc: "TV - Perception"}
- {id: 785, cat: TV, desc: "TV - Person of Interest"}
- {id: 366, cat: TV, desc: "TV - Phil of the Future"}
- {id: 204, cat: TV, desc: "TV - Pimp My Ride"}
- {id: 967, cat: TV, desc: "TV - Player Attack"}
- {id: 427, cat: TV, desc: "TV - Poker"}
- {id: 691, cat: TV, desc: "TV - Pretty Little Liars"}
- {id: 784, cat: TV, desc: "TV - Prime Suspect US"}
- {id: 734, cat: TV, desc: "TV - Primeval"}
- {id: 229, cat: TV, desc: "TV - Prison Break"}
- {id: 692, cat: TV, desc: "TV - Private Practice"}
- {id: 368, cat: TV, desc: "TV - Project Runway"}
- {id: 663, cat: TV, desc: "TV - Psych"}
- {id: 205, cat: TV, desc: "TV - Punkd"}
- {id: 803, cat: TV, desc: "TV - QI"}
- {id: 982, cat: TV, desc: "TV - Quantico"}
- {id: 251, cat: TV, desc: "TV - Quantum Leap"}
- {id: 993, cat: TV, desc: "TV - Queen of the South"}
- {id: 252, cat: TV, desc: "TV - Queer as Folk"}
- {id: 714, cat: TV, desc: "TV - Raising Hope"}
- {id: 317, cat: TV, desc: "TV - Ravenswood"}
- {id: 936, cat: TV, desc: "TV - Ray Donovan"}
- {id: 594, cat: TV, desc: "TV - Ray Mears Northern Wilderness"}
- {id: 822, cat: TV, desc: "TV - Real Time with Bill Maher"}
- {id: 369, cat: TV, desc: "TV - Reba"}
- {id: 885, cat: TV, desc: "TV - Rectify"}
- {id: 206, cat: TV, desc: "TV - Red Dwarf"}
- {id: 906, cat: TV, desc: "TV - Red Widow"}
- {id: 117, cat: TV, desc: "TV - ReGenesis"}
- {id: 854, cat: TV, desc: "TV - Reign"}
- {id: 370, cat: TV, desc: "TV - Related"}
- {id: 327, cat: TV, desc: "TV - Remedy"}
- {id: 253, cat: TV, desc: "TV - Remington Steele"}
- {id: 254, cat: TV, desc: "TV - Reno 911"}
- {id: 207, cat: TV, desc: "TV - Rescue Me"}
- {id: 576, cat: TV, desc: "TV - Resurrection"}
- {id: 295, cat: TV, desc: "TV - Reunion"}
- {id: 208, cat: TV, desc: "TV - Revelations"}
- {id: 760, cat: TV, desc: "TV - Revenge"}
- {id: 859, cat: TV, desc: "TV - Revolution"}
- {id: 312, cat: TV, desc: "TV - Rewind"}
- {id: 768, cat: TV, desc: "TV - Ringer"}
- {id: 604, cat: TV, desc: "TV - Rip Off Britain"}
- {id: 693, cat: TV, desc: "TV - River Monsters"}
- {id: 929, cat: TV, desc: "TV - Rizzoli and Isles"}
- {id: 209, cat: TV, desc: "TV - Robot Chicken"}
- {id: 888, cat: TV, desc: "TV - Rogue"}
- {id: 944, cat: TV, desc: "TV - ROH-Wrestling"}
- {id: 255, cat: TV, desc: "TV - Rome"}
- {id: 849, cat: TV, desc: "TV - Rookie Blue"}
- {id: 694, cat: TV, desc: "TV - Royal Pains"}
- {id: 695, cat: TV, desc: "TV - Rubicon"}
- {id: 807, cat: TV, desc: "TV - Rules of Engagement"}
- {id: 372, cat: TV, desc: "TV - Ruri no Shima"}
- {id: 892, cat: TV, desc: "TV - Rush"}
- {id: 555, cat: TV, desc: "TV - Russian TV programs"}
- {id: 789, cat: TV, desc: "TV - Salem"}
- {id: 605, cat: TV, desc: "TV - Sanctuary"}
- {id: 776, cat: TV, desc: "TV - Satisfaction US"}
- {id: 373, cat: TV, desc: "TV - Saturday Night Live"}
- {id: 915, cat: TV, desc: "TV - Save Me"}
- {id: 696, cat: TV, desc: "TV - Saving Grace"}
- {id: 931, cat: TV, desc: "TV - Saving Hope"}
- {id: 844, cat: TV, desc: "TV - Scandal"}
- {id: 344, cat: TV, desc: "TV - Scorpion"}
- {id: 987, cat: TV, desc: "TV - Scream"}
- {id: 138, cat: TV, desc: "TV - Scrubs"}
- {id: 304, cat: TV, desc: "TV - Sean Saves The World"}
- {id: 715, cat: TV, desc: "TV - Secret Diary Of A Call Girl"}
- {id: 210, cat: TV, desc: "TV - Seinfeld"}
- {id: 296, cat: TV, desc: "TV - Sex and The City"}
- {id: 708, cat: TV, desc: "TV - Shameless"}
- {id: 375, cat: TV, desc: "TV - Sin Rastro"}
- {id: 737, cat: TV, desc: "TV - Single Ladies"}
- {id: 211, cat: TV, desc: "TV - Six Feet Under"}
- {id: 697, cat: TV, desc: "TV - Skins"}
- {id: 376, cat: TV, desc: "TV - Sleeper Cell"}
- {id: 112, cat: TV, desc: "TV - Sleepy Hollow"}
- {id: 256, cat: TV, desc: "TV - Sliders"}
- {id: 137, cat: TV, desc: "TV - Smallville"}
- {id: 830, cat: TV, desc: "TV - Smash"}
- {id: 649, cat: TV, desc: "TV - So You Think You Can Dance"}
- {id: 569, cat: TV, desc: "TV - Sons of Anarchy"}
- {id: 815, cat: TV, desc: "TV - Sons of Guns"}
- {id: 212, cat: TV, desc: "TV - South Park"}
- {id: 718, cat: TV, desc: "TV - Southland"}
- {id: 257, cat: TV, desc: "TV - Space 1999"}
- {id: 297, cat: TV, desc: "TV - Space Above and Beyond"}
- {id: 631, cat: TV, desc: "TV - Spartacus"}
- {id: 845, cat: TV, desc: "TV - Spike TV"}
- {id: 607, cat: TV, desc: "TV - Spooks"}
- {id: 131, cat: TV, desc: "TV - Sports Illustrated"}
- {id: 159, cat: TV, desc: "TV - Sports related"}
- {id: 378, cat: TV, desc: "TV - Stacked"}
- {id: 379, cat: TV, desc: "TV - Star Trek"}
- {id: 563, cat: TV, desc: "TV - Star Wars The Clone Wars"}
- {id: 615, cat: TV, desc: "TV - Star-Crossed"}
- {id: 139, cat: TV, desc: "TV - Star-Trek Enterprise"}
- {id: 144, cat: TV, desc: "TV - Star-Trek The Next Generation"}
- {id: 380, cat: TV, desc: "TV - Stargate"}
- {id: 123, cat: TV, desc: "TV - Stargate Atlantis"}
- {id: 124, cat: TV, desc: "TV - StarGate SG1"}
- {id: 562, cat: TV, desc: "TV - Stargate Universe"}
- {id: 258, cat: TV, desc: "TV - Starved"}
- {id: 213, cat: TV, desc: "TV - Stella"}
- {id: 614, cat: TV, desc: "TV - Steven Seagal Lawman"}
- {id: 381, cat: TV, desc: "TV - Still Standing"}
- {id: 857, cat: TV, desc: "TV - Strike Back"}
- {id: 528, cat: TV, desc: "TV - Studio 60 on the Sunset Strip"}
- {id: 838, cat: TV, desc: "TV - Suburgatory"}
- {id: 761, cat: TV, desc: "TV - Suits"}
- {id: 214, cat: TV, desc: "TV - Summerland"}
- {id: 400, cat: TV, desc: "TV - Super Fun Night"}
- {id: 298, cat: TV, desc: "TV - Supernatural"}
- {id: 299, cat: TV, desc: "TV - Surface"}
- {id: 382, cat: TV, desc: "TV - Survivor"}
- {id: 215, cat: TV, desc: "TV - Survivors"}
- {id: 847, cat: TV, desc: "TV - Swamp People"}
- {id: 863, cat: TV, desc: "TV - Switched at Birth"}
- {id: 153, cat: TV, desc: "TV - Tattoo Nightmares"}
- {id: 217, cat: TV, desc: "TV - Teen Titans"}
- {id: 731, cat: TV, desc: "TV - Teen Wolf"}
- {id: 764, cat: TV, desc: "TV - Terra Nova"}
- {id: 119, cat: TV, desc: "TV - That 70s Show"}
- {id: 316, cat: TV, desc: "TV - The 100"}
- {id: 168, cat: TV, desc: "TV - The 4400"}
- {id: 300, cat: TV, desc: "TV - The Adventures of Sherlock Holmes"}
- {id: 185, cat: TV, desc: "TV - The After"}
- {id: 383, cat: TV, desc: "TV - The Amazing Race"}
- {id: 887, cat: TV, desc: "TV - The Americans"}
- {id: 301, cat: TV, desc: "TV - The Apprentice"}
- {id: 384, cat: TV, desc: "TV - The Bernie Mac Show"}
- {id: 583, cat: TV, desc: "TV - The Big Bang Theory"}
- {id: 829, cat: TV, desc: "TV - The Big C"}
- {id: 572, cat: TV, desc: "TV - The Biggest Loser"}
- {id: 581, cat: TV, desc: "TV - The Blacklist"}
- {id: 410, cat: TV, desc: "TV - The Boondocks"}
- {id: 608, cat: TV, desc: "TV - The Border"}
- {id: 775, cat: TV, desc: "TV - The Borgias"}
- {id: 923, cat: TV, desc: "TV - The Bridge US"}
- {id: 711, cat: TV, desc: "TV - The Cape"}
- {id: 730, cat: TV, desc: "TV - The Carrie Diaries"}
- {id: 586, cat: TV, desc: "TV - The Cleveland Show"}
- {id: 896, cat: TV, desc: "TV - The Client List"}
- {id: 218, cat: TV, desc: "TV - The Closer"}
- {id: 272, cat: TV, desc: "TV - The Colbert Report"}
- {id: 219, cat: TV, desc: "TV - The Comeback"}
- {id: 510, cat: TV, desc: "TV - The Contender"}
- {id: 758, cat: TV, desc: "TV - The Crazy Ones"}
- {id: 114, cat: TV, desc: "TV - The Daily Show"}
- {id: 856, cat: TV, desc: "TV - The Dead Files"}
- {id: 220, cat: TV, desc: "TV - The Dead Zone"}
- {id: 189, cat: TV, desc: "TV - The Divide"}
- {id: 386, cat: TV, desc: "TV - The Dog Whisperer"}
- {id: 702, cat: TV, desc: "TV - The Event"}
- {id: 610, cat: TV, desc: "TV - The F Word"}
- {id: 639, cat: TV, desc: "TV - The Family"}
- {id: 835, cat: TV, desc: "TV - The Finder"}
- {id: 834, cat: TV, desc: "TV - The Firm"}
- {id: 973, cat: TV, desc: "TV - The Flash"}
- {id: 877, cat: TV, desc: "TV - The Following"}
- {id: 635, cat: TV, desc: "TV - The Forgotten"}
- {id: 932, cat: TV, desc: "TV - The Fosters"}
- {id: 816, cat: TV, desc: "TV - The Game"}
- {id: 766, cat: TV, desc: "TV - The Gates"}
- {id: 259, cat: TV, desc: "TV - The Girls Next Door"}
- {id: 740, cat: TV, desc: "TV - The Glades"}
- {id: 587, cat: TV, desc: "TV - The Goldbergs"}
- {id: 648, cat: TV, desc: "TV - The Good Wife"}
- {id: 912, cat: TV, desc: "TV - The Goodwin Games"}
- {id: 278, cat: TV, desc: "TV - The Haunting Of"}
- {id: 903, cat: TV, desc: "TV - The Hero"}
- {id: 655, cat: TV, desc: "TV - The Hills"}
- {id: 221, cat: TV, desc: "TV - The Inside"}
- {id: 595, cat: TV, desc: "TV - The Jeff Dunham Show"}
- {id: 387, cat: TV, desc: "TV - The Jetsons"}
- {id: 827, cat: TV, desc: "TV - The Killing"}
- {id: 388, cat: TV, desc: "TV - The King Of Queens"}
- {id: 321, cat: TV, desc: "TV - The Knick"}
- {id: 271, cat: TV, desc: "TV - The L Word"}
- {id: 609, cat: TV, desc: "TV - The League"}
- {id: 897, cat: TV, desc: "TV - The Leftovers"}
- {id: 808, cat: TV, desc: "TV - The Life and Times of Tim"}
- {id: 924, cat: TV, desc: "TV - The Listener"}
- {id: 222, cat: TV, desc: "TV - The Lone Gunmen"}
- {id: 152, cat: TV, desc: "TV - The Lost World"}
- {id: 643, cat: TV, desc: "TV - The Mentalist"}
- {id: 878, cat: TV, desc: "TV - The Michael J Fox"}
- {id: 630, cat: TV, desc: "TV - The Middle"}
- {id: 405, cat: TV, desc: "TV - The Millers"}
- {id: 901, cat: TV, desc: "TV - The Mindy Project"}
- {id: 860, cat: TV, desc: "TV - The Mob Doctor"}
- {id: 870, cat: TV, desc: "TV - The Musketeers"}
- {id: 239, cat: TV, desc: "TV - The Mysteries Of Laura"}
- {id: 938, cat: TV, desc: "TV - The Newsroom"}
- {id: 109, cat: TV, desc: "TV - The O.C."}
- {id: 308, cat: TV, desc: "TV - The Office"}
- {id: 319, cat: TV, desc: "TV - The Originals"}
- {id: 392, cat: TV, desc: "TV - The Others"}
- {id: 390, cat: TV, desc: "TV - The O`Reilly Factor"}
- {id: 698, cat: TV, desc: "TV - The Pacific"}
- {id: 302, cat: TV, desc: "TV - The PJs"}
- {id: 567, cat: TV, desc: "TV - The Practice"}
- {id: 260, cat: TV, desc: "TV - The Real World"}
- {id: 176, cat: TV, desc: "TV - The Red Road"}
- {id: 597, cat: TV, desc: "TV - The Replacements"}
- {id: 664, cat: TV, desc: "TV - The Sci Fi Guys"}
- {id: 393, cat: TV, desc: "TV - The Secret Adventures of Jules Verne"}
- {id: 786, cat: TV, desc: "TV - The Secret Circle"}
- {id: 668, cat: TV, desc: "TV - The Secret Life of the American Teenager"}
- {id: 735, cat: TV, desc: "TV - The Shadow Line"}
- {id: 223, cat: TV, desc: "TV - The Shield"}
- {id: 125, cat: TV, desc: "TV - The Simpsons"}
- {id: 423, cat: TV, desc: "TV - The Sopranos"}
- {id: 333, cat: TV, desc: "TV - The Strain"}
- {id: 236, cat: TV, desc: "TV - The Tomorrow People US"}
- {id: 699, cat: TV, desc: "TV - The Tudors"}
- {id: 611, cat: TV, desc: "TV - The Ultimate Fighter"}
- {id: 320, cat: TV, desc: "TV - The Unexplained Files"}
- {id: 721, cat: TV, desc: "TV - The Vampire Diaries"}
- {id: 654, cat: TV, desc: "TV - The Venture Bros"}
- {id: 725, cat: TV, desc: "TV - The Voice"}
- {id: 720, cat: TV, desc: "TV - The Walking Dead"}
- {id: 394, cat: TV, desc: "TV - The War At Home"}
- {id: 116, cat: TV, desc: "TV - The West Wing"}
- {id: 577, cat: TV, desc: "TV - The X Factor"}
- {id: 425, cat: TV, desc: "TV - Thief"}
- {id: 268, cat: TV, desc: "TV - Threshold"}
- {id: 796, cat: TV, desc: "TV - Thundercats"}
- {id: 216, cat: TV, desc: "TV - TLC Connections"}
- {id: 904, cat: TV, desc: "TV - TNA-Wrestling"}
- {id: 399, cat: TV, desc: "TV - Tonight Show With Jay Leno"}
- {id: 616, cat: TV, desc: "TV - Top Chef"}
- {id: 224, cat: TV, desc: "TV - Top Gear"}
- {id: 942, cat: TV, desc: "TV - Top Shot"}
- {id: 762, cat: TV, desc: "TV - Torchwood"}
- {id: 836, cat: TV, desc: "TV - Touch"}
- {id: 225, cat: TV, desc: "TV - Trailer Park Boys"}
- {id: 1001, cat: TV, desc: "TV - Transformers Prime"}
- {id: 733, cat: TV, desc: "TV - Treme"}
- {id: 303, cat: TV, desc: "TV - Tripping the Rift"}
- {id: 787, cat: TV, desc: "TV - Trophy Wife"}
- {id: 565, cat: TV, desc: "TV - True Blood"}
- {id: 180, cat: TV, desc: "TV - True Detective"}
- {id: 727, cat: TV, desc: "TV - Turn"}
- {id: 261, cat: TV, desc: "TV - Twin Peaks"}
- {id: 930, cat: TV, desc: "TV - Twisted"}
- {id: 401, cat: TV, desc: "TV - Two And A Half Men"}
- {id: 337, cat: TV, desc: "TV - Tyrant"}
- {id: 793, cat: TV, desc: "TV - UFC"}
- {id: 814, cat: TV, desc: "TV - Ugly Americans"}
- {id: 559, cat: TV, desc: "TV - Ugly Betty"}
- {id: 155, cat: TV, desc: "TV - UK"}
- {id: 934, cat: TV, desc: "TV - Under the Dome"}
- {id: 791, cat: TV, desc: "TV - Underbelly"}
- {id: 706, cat: TV, desc: "TV - Undercover Boss"}
- {id: 777, cat: TV, desc: "TV - Unforgettable"}
- {id: 129, cat: TV, desc: "TV - Unscripted"}
- {id: 739, cat: TV, desc: "TV - Unsealed Alien Files"}
- {id: 226, cat: TV, desc: "TV - Unsolved Mysteries"}
- {id: 868, cat: TV, desc: "TV - Up All Night"}
- {id: 262, cat: TV, desc: "TV - Urgences"}
- {id: 566, cat: TV, desc: "TV - V"}
- {id: 895, cat: TV, desc: "TV - Veep"}
- {id: 864, cat: TV, desc: "TV - Vegas"}
- {id: 121, cat: TV, desc: "TV - Veronica Mars"}
- {id: 908, cat: TV, desc: "TV - Vice"}
- {id: 402, cat: TV, desc: "TV - Viewtiful Joe"}
- {id: 799, cat: TV, desc: "TV - Vikings"}
- {id: 227, cat: TV, desc: "TV - Viva La Bam"}
- {id: 263, cat: TV, desc: "TV - Wanted"}
- {id: 593, cat: TV, desc: "TV - Warehouse 13"}
- {id: 995, cat: TV, desc: "TV - Wayward Pines"}
- {id: 264, cat: TV, desc: "TV - Weeds"}
- {id: 404, cat: TV, desc: "TV - Weird U S"}
- {id: 909, cat: TV, desc: "TV - Wentworth"}
- {id: 596, cat: TV, desc: "TV - When Ghosts Attack"}
- {id: 575, cat: TV, desc: "TV - White Collar"}
- {id: 406, cat: TV, desc: "TV - Whose Line Is It Anyway"}
- {id: 918, cat: TV, desc: "TV - Wilfred US"}
- {id: 135, cat: TV, desc: "TV - Will And Grace"}
- {id: 673, cat: TV, desc: "TV - Witches of East End"}
- {id: 408, cat: TV, desc: "TV - Without A Trace"}
- {id: 800, cat: TV, desc: "TV - Workaholics"}
- {id: 127, cat: TV, desc: "TV - WWE - Wrestling"}
- {id: 228, cat: TV, desc: "TV - X Files"}
- {id: 770, cat: TV, desc: "TV - X-Men"}
- {id: 265, cat: TV, desc: "TV - Young and the Restless"}
- {id: 801, cat: TV, desc: "TV - Young Justice"}
- {id: 889, cat: TV, desc: "TV - Zero Hour US"}
- {id: 1025, cat: TV, desc: "TV - HEVC/x265"}
- {id: 1026, cat: TV, desc: "TV - Divx/Xvid"}
- {id: 1027, cat: TV, desc: "TV - DVD"}
- {id: 1028, cat: TV, desc: "TV/HD - HD"}
- {id: 1029, cat: TV, desc: "TV - SVCD/VCD"}
#Apps
- {id: 7, cat: PC, desc: "Software"}
- {id: 416, cat: PC/Phone-Other, desc: "Software - Mobile"}
- {id: 532, cat: PC, desc: "Software - KeyGen / Tools"}
- {id: 17, cat: PC, desc: "Software - Linux"}
- {id: 27, cat: PC/Mac, desc: "Software - Mac"}
- {id: 232, cat: PC/Phone-Other, desc: "Software - Mobile phones"}
- {id: 18, cat: PC, desc: "Software - Other operating systems"}
- {id: 19, cat: PC, desc: "Software - Palm, PocketPC and IPAQ"}
- {id: 20, cat: PC, desc: "Software - Windows - CD/DVD Tools"}
- {id: 25, cat: PC, desc: "Software - Windows - Other"}
- {id: 21, cat: PC, desc: "Software - Windows - Photo Editing"}
- {id: 22, cat: PC, desc: "Software - Windows - Security"}
- {id: 23, cat: PC, desc: "Software - Windows - Sound Editing"}
- {id: 24, cat: PC, desc: "Software - Windows - Video Apps"}
#Games
- {id: 3, cat: PC/Games, desc: "Games"}
- {id: 136, cat: PC/Games, desc: "Games - fixes/patches"}
- {id: 422, cat: PC/Games, desc: "Games - Other"}
- {id: 26, cat: PC/Games, desc: "Games - Mac"}
- {id: 231, cat: Console, desc: "Games - Mobile phones"}
- {id: 627, cat: Console/NDS, desc: "Games - Nintendo DS"}
- {id: 11, cat: Console, desc: "Games - PS 2"}
- {id: 700, cat: Console/PS3, desc: "Games - PS 3"}
- {id: 12, cat: Console, desc: "Games - PS X"}
- {id: 158, cat: Console/PSP, desc: "Games - PSP"}
- {id: 13, cat: Console, desc: "Games - ROMS/Retro"}
- {id: 15, cat: Console, desc: "Games - Sega Saturn"}
- {id: 14, cat: PC/Games, desc: "Games - Video Demonstrations"}
- {id: 701, cat: Console/Wii, desc: "Games -Wii"}
- {id: 421, cat: PC/Games, desc: "Games - Windows"}
- {id: 10, cat: PC/Games, desc: "Games - Windows Kids Games"}
- {id: 16, cat: Console/Xbox, desc: "Games - XBox"}
- {id: 1017, cat: Console, desc: "Games - PS 1"}
- {id: 1018, cat: Console/Xbox 360, desc: "Games - Xbox 360"}
- {id: 1014, cat: Console/3DS, desc: "Games - Nintendo 3DS"}
- {id: 1015, cat: Console, desc: "Games - Dreamcast"}
- {id: 1016, cat: Console, desc: "Games - GameCube"}
#XXX
- {id: 533, cat: XXX, desc: "XXX"}
- {id: 943, cat: XXX, desc: "XXX - Animation/Hentai"}
- {id: 553, cat: XXX/DVD, desc: "XXX - DVD"}
- {id: 536, cat: XXX, desc: "XXX - Games"}
- {id: 948, cat: XXX/x264, desc: "XXX - HD Video"}
- {id: 535, cat: XXX/Imageset, desc: "XXX - Pictures"}
- {id: 552, cat: XXX, desc: "XXX - Video"}
- {id: 804, cat: XXX, desc: "XXX - Video 3D"}
- {id: 970, cat: XXX, desc: "XXX - Virtual Reality"}
- {id: 806, cat: XXX, desc: "XXX - Wallpapers"}
#Books
- {id: 2, cat: Books, desc: "Books"}
- {id: 625, cat: Books, desc: "Books - Adventure"}
- {id: 51, cat: Books, desc: "Books - Audio books"}
- {id: 848, cat: Books/Comics, desc: "Books - Comics"}
- {id: 624, cat: Books, desc: "Books - Crime"}
- {id: 623, cat: Books, desc: "Books - Drama"}
- {id: 50, cat: Books/Ebook, desc: "Books - Ebooks"}
- {id: 621, cat: Books, desc: "Books - Educational"}
- {id: 622, cat: Books, desc: "Books - Horror"}
- {id: 465, cat: Books/Magazines, desc: "Books - Magazines"}
- {id: 1000, cat: Books, desc: "Books - Sexual Fitness and Education"}
- {id: 626, cat: Books, desc: "Books - True Stories"}
#Other
- {id: 6, cat: Other, desc: "Pictures"}
- {id: 9, cat: Other, desc: "Other"}
- {id: 53, cat: Other, desc: "Pictures - Other"}
- {id: 52, cat: Other, desc: "Wallpapers"}
- {id: 80, cat: Other, desc: "Other - Articles"}
- {id: 143, cat: Other, desc: "Other - Comics"}
- {id: 85, cat: Other, desc: "Other - Funny clips"}
- {id: 81, cat: Other, desc: "Other - Manuals"}
- {id: 83, cat: Other, desc: "Other - Other"}
- {id: 413, cat: Other, desc: "Other - Radio shows"}
- {id: 82, cat: Other, desc: "Other - Religion"}
- {id: 874, cat: Other, desc: "Other - Subtitles"}
- {id: 557, cat: Other, desc: "Other - Training "}
- {id: 1021, cat: Other, desc: "Other - Tutorials"}
- {id: 1022, cat: Other, desc: "Other - Sounds"}
- {id: 1023, cat: Other, desc: "Other - Nulled Scripts"}
#Mobile
- {id: 752, cat: PC/Phone-Other, desc: "Mobile - Games for Android"}
- {id: 746, cat: PC/Phone-Other, desc: "Mobile - Games for Apple iPod, iPod Touch, iPad, iPhone"}
- {id: 745, cat: PC/Phone-Other, desc: "Mobile - Games for Java"}
- {id: 744, cat: PC/Phone-Other, desc: "Mobile - Games for Symbian"}
- {id: 743, cat: PC/Phone-Other, desc: "Mobile - Games for Windows Mobile"}
- {id: 517, cat: PC/Phone-Other, desc: "Mobile - Music"}
- {id: 554, cat: PC/Phone-Other, desc: "Mobile - Other"}
- {id: 748, cat: PC/Phone-Other, desc: "Mobile - Software - Other"}
- {id: 972, cat: PC/Phone-Other, desc: "Mobile - Software for Android"}
- {id: 749, cat: PC/Phone-Other, desc: "Mobile - Software for Apple iPad, iPhone, iPod Touch"}
- {id: 747, cat: PC/Phone-Other, desc: "Mobile - Software for Windows Mobile"}
- {id: 428, cat: PC/Phone-Other, desc: "Mobile - Tv"}
- {id: 417, cat: PC/Phone-Other, desc: "Mobile - Video"}
- {id: 750, cat: PC/Phone-Other, desc: "Mobile - Video for Apple iPad, iPhone, iPod Touch"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings: []
search:
paths:
- path: "{{if .Keywords}}search/?search={{ .Keywords}}{{else}}{{end}}"
rows:
selector: tr[class^="tlr"]
fields:
title:
selector: td.tli a
category:
selector: td a[href^="/category/"]
attribute: href
filters:
- name: split
args: ["/", 2]
details:
selector: td.tli a
attribute: href
download:
selector: td a[href^="magnet:?xt="]
attribute: href
date:
selector: td:nth-last-of-type(5)
filters:
- name: timeago
size:
selector: td:nth-last-of-type(4)
seeders:
text: 0
leechers:
text: 0
seeders:
optional: true
selector: td.sy
leechers:
optional: true
selector: td.ly
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -6,11 +6,13 @@
type: public
encoding: UTF-8
links:
- https://www.gktorrent.org/
- http://ww2.gktorrent.com/
legacylinks:
- https://www.gktorrent.org/
- http://www.gktorrent.net/
- https://www.gktorrent.com/ # they're forcing http
- http://www.gktorrent.com/
- http://ww1.gktorrent.com/
caps:
categorymappings:

View File

@@ -1,66 +0,0 @@
---
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/
legacylinks:
- https://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:
paths:
- path: "lib/{{if .Query.Keywords }}search.php{{else}}latest.php{{end}}"
inputs:
value: "{{ .Query.Keywords }}"
rows:
selector: "div.release-links"
dateheaders:
selector: table.release-info
filters:
- name: split
args: [" ", 0 ]
- name: replace
args: ["(", ""]
- name: replace
args: [")", ""]
- name: replace
args: ["/", "-"]
- name: dateparse
args: "01-02-06"
- name: dateparse
args: "01-02"
fields:
category:
text: "1"
title:
selector: table.release-table > tbody > tr > td.dl-label
filters:
- name: prepend
args: "{{if .Config.prepend-horriblesubs}}[Horriblesubs] {{else}}{{end}}"
details:
attribute: class
filters:
- name: replace
args: ["release-links", ""]
- name: re_replace
args: [" ?(\\S+?)-((?:s\\d-)?(?:\\d+v?\\d?-){0,2}\\d+p)", "http://horriblesubs.info/shows/$1#$2"]
download:
selector: table.release-table > tbody > tr > td.hs-magnet-link > span > a
attribute: href
size:
text: "500 MB"

View File

@@ -10,17 +10,18 @@
certificates:
- aa7c40aa360a1cec8a9687312fd50402b912e618 # incomplete CA chain
- 83174ec1f92fa13cdef9d51888ea1dfba2166e17 # incomplete CA chain
- c414bf4ad6c69841693c147849f4c314aa200bdf # incomplete CA chain
caps:
categorymappings:
- {id: 1, cat: Movies/HD, desc: "BDRiP"}
- {id: 2, cat: Audio, desc: "Music"}
- {id: 2, cat: PC/Games, desc: "Games"}
- {id: 5, cat: TV/Anime, desc: "Anime"}
- {id: 7, cat: PC/0day, desc: "App"}
- {id: 15, cat: TV, desc: "TV Series"}
- {id: 19, cat: Movies/SD, desc: "Screener"}
- {id: 20, cat: Movies/SD, desc: "Full DVD"}
- {id: 1, cat: Movies/HD, desc: "BDRiP", default: true}
- {id: 2, cat: Audio, desc: "Music", default: true}
- {id: 2, cat: PC/Games, desc: "Games", default: true}
- {id: 5, cat: TV/Anime, desc: "Anime", default: true}
- {id: 7, cat: PC/0day, desc: "App", default: true}
- {id: 15, cat: TV, desc: "TV Series", default: true}
- {id: 19, cat: Movies/SD, desc: "Screener", default: true}
- {id: 20, cat: Movies/SD, desc: "Full DVD", default: true}
modes:
search: [q]

View File

@@ -6,10 +6,11 @@
type: public
encoding: UTF-8
links:
- https://www.limetorrents.me/
- https://www.limetorrents.info/
legacylinks:
- https://www.limetorrents.io/
- https://www.limetorrents.cc/
- https://www.limetorrents.me/
caps:
categories:

View File

@@ -0,0 +1,89 @@
---
site: redtopia
name: Redtopia
description: "Tracker Music/Podcasts/Audiobooks"
language: en-us
type: private
encoding: UTF-8
links:
- https://redtopia.xyz/
caps:
categorymappings:
- {id: 1, cat: Audio, desc: "Studio Album"}
- {id: 2, cat: Audio, desc: "Studio Single"}
- {id: 3, cat: Audio, desc: "Studio Collection"}
- {id: 4, cat: Audio, desc: "Indie Album"}
- {id: 5, cat: Audio, desc: "Indie Single"}
- {id: 6, cat: Audio, desc: "Indie Collection"}
- {id: 7, cat: Audio, desc: "Live Album"}
- {id: 8, cat: Audio, desc: "OST"}
- {id: 9, cat: Audio, desc: "Podcast"}
- {id: 10, cat: Audio, desc: "Audio Book"}
- {id: 11, cat: Audio, desc: "Audio Drama"}
modes:
search: [q]
music-search: [q]
login:
path: /login
method: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table.main:contains("Login Failed!")
test:
path: /torrents
search:
paths:
- path: /filterTorrents
inputs:
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
search: "{{ .Keywords }}"
uploader: ""
sorting: created_at
direction: desc
qty: 100
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/.*?\\.(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
size:
selector: td:nth-child(4)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(5)
filters:
- name: regexp
args: ([\d\.]+)
date:
selector: time
downloadvolumefactor:
case:
"i[data-original-title=\"100% Free\"]": "0"
"i[data-original-title=\"Global FreeLeech\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"i[data-original-title=\"Double Upload\"]": "2" # global flag
"i[data-original-title=\"Double upload\"]": "2" # torrent specific flag
"*": "1"

View File

@@ -0,0 +1,104 @@
---
site: retroflix
name: RetroFlix
description: "Private Torrent Tracker for Classic Movies / TV / General Releases."
language: en-us
type: private
encoding: UTF-8
links:
- https://retroflix.club/
legacylinks:
- https://retroflix.net/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries"}
- {id: 405, cat: TV/Anime, desc: "Animations"}
- {id: 402, cat: TV, desc: "TV Series"}
- {id: 403, cat: TV, desc: "TV Shows"}
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
- {id: 407, cat: TV/Sport, desc: "Sports"}
- {id: 409, cat: Other, desc: "Misc"}
- {id: 408, cat: Audio, desc: "HQ Audio"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q, imdbid]
settings:
- name: cookie
type: text
label: Cookie
login:
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: torrents.php
search:
paths:
- path: torrents.php
method: get
inputs:
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: 1
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
search_mode: 0
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
release_year:
selector: a[href^="/torrents.php?processing="]
quality:
selector: a[href^="/torrents.php?standard="]
title:
selector: a[title][href^="details.php?id="]
attribute: title
filters:
- name: append
args: " {{ .Result.release_year }}"
- name: append
args: " {{ .Result.quality }}"
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(8)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
date:
selector: td:nth-child(4) > span[title]
attribute: title
filters:
- name: dateparse
args: "02-01-2006 15:04:05"
downloadvolumefactor:
case:
img.pro_free: "0"
img.pro_free2up: "0"
img.pro_50pctdown: "0.5"
img.pro_50pctdown2up: "0.5"
img.pro_30pctdown: "0.3"
"*": "1"
uploadvolumefactor:
case:
img.pro_50pctdown2up: "2"
img.pro_free2up: "2"
img.pro_2up: "2"
"*": "1"

View File

@@ -47,9 +47,10 @@
filters:
- name: split
args: ["=", "-1"]
# normalize to SXXEYY format
- name: re_replace
args: ["\\b([s])?(\\d{1,3})[x\\s](\\d{1,3})", "S$2E$3"]
- name: re_replace # normalize to SXXEYY format
args: ["(?i)\\b([s])?(\\d{1,3})[x\\s](\\d{1,3})", "S$2E$3"]
- name: re_replace # replace web-dlmux with webdl, sonarr don't like it
args: ["(?i)web-?\\s?dlmux", "WEB-DL"]
details:
selector: td:nth-child(7) a
attribute: href

View File

@@ -6,7 +6,7 @@
type: public
encoding: UTF-8
links:
- https://ww2.torrent9.blue/
- https://www.torrent9.ph/
legacylinks:
- http://www.torrent9.ec/
- http://www.torrent9.red/
@@ -16,6 +16,8 @@
- http://www.torrent9.pe/
- http://www.torrent9.blue/
- https://www.torrent9.blue/
- https://ww2.torrent9.blue/
- https://www.torrent9.rip/
caps:
categorymappings:

View File

@@ -53,7 +53,7 @@
q: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: 1
rows:
selector: table#torrentTable > tbody > tr:has(td.torrentNameInfo)
selector: table#torrentsTable > tbody > tr:has(td.torrentNameInfo)
fields:
download:
selector: a[href^="/download.php/"]

View File

@@ -1,66 +0,0 @@
---
site: torrentkim
name: TorrentKim
description: "TorrentKim is a free Korean tracker of pretty much anything Korean."
language: ko-KR
type: public
encoding: UTF-8
links:
- https://torrentkim.pro/
legacylinks:
- https://torrentkim12.com/
- https://torrentkim10.net/
caps:
categorymappings:
- {id: "torrent_variety", cat: TV, desc: "TV - Variety shows"}
- {id: "torrent_tv", cat: TV, desc: "TV - Dramas"}
- {id: "torrent_mid", cat: TV/FOREIGN, desc: "TV - American Series"}
modes:
search: [q]
tv-search: [q]
movie-search: [q]
settings: []
search:
paths:
- path: "{{ if .Keywords }}/bbs/s-1-{{ .Keywords }}{{else}}/bbs/s-1-미운우리새끼{{end}}"
rows:
selector: "table.board_list > tbody > tr.bg1:nth-child(n+3)"
fields:
magnet:
selector: td:nth-child(1) a[href^="javascript:"]
attribute: href
filters:
- name: replace
args: ["javascript:Mag_dn('", ""]
- name: replace
args: ["')", ""]
- name: prepend
args: "magnet:?xt=urn:btih:"
seeders:
selector: "td:nth-child(2) font:nth-child(2)"
leechers:
selector: "td:nth-child(2) font:nth-child(1)"
category:
selector: td:nth-child(3) a[href^="/bbs/bc.php?bo_table="]
attribute: href
filters:
- name: querystring
args: bo_table
title:
selector: td:nth-child(3) a:last-of-type
details:
selector: td:nth-child(3) a:last-of-type
attribute: href
date:
selector: td:nth-child(3) a:last-of-type
filters:
- name: split
args: ['.', 2]
- name: dateparse
args: "060102"
size:
selector: td:nth-child(5)

View File

@@ -69,12 +69,11 @@
paths:
- path: "{{if .Config.filter-verified }}verified{{else}}searchA{{end}}"
inputs:
f: "{{ .Query.Keywords }}"
f: "{{if .Keywords }}title: {{else}}{{end}}{{ .Keywords }}"
safe: "{{if .Config.filter-safe }}1{{else}}0{{end}}"
rows:
selector: "html body #wrap .results dl:has(a)"
filters:
- name: andmatch
# andmatch filter removed, see #3737
fields:
title:
selector: dt a
@@ -114,10 +113,9 @@
selector: dt
remove: a
filters:
- name: re_replace
args: ["[^a-zA-Z\\s]+", ""]
- name: trim
args: "»"
- name: trim
args: " "
date:
selector: dd span:nth-child(2)
attribute: title

View File

@@ -67,6 +67,8 @@
selector: div.group_info
remove: span, div.tags
filters:
- name: replace
args: ["\t\t\t\t", " "]
- name: replace
args: [" / Free", ""]
- name: replace

View File

@@ -6,7 +6,7 @@
type: semi-private
encoding: UTF-8
links:
- https://ww4.yggtorrent.is/
- https://www.yggtorrent.is/
legacylinks:
- https://yggtorrent.is/
- https://yggtorrent.com/
@@ -14,11 +14,12 @@
- https://ww1.yggtorrent.is/
- https://ww2.yggtorrent.is/
- https://ww3.yggtorrent.is/
- https://ww4.yggtorrent.is/
caps:
categorymappings:
- {id: 2145, cat: TV, desc: "Film/Vidéo"}
- {id: 2178, cat: TV/Anime, desc: "Film/Vidéo : Animation"}
- {id: 2178, cat: Movies, desc: "Film/Vidéo : Animation"} # changed to movies, see #3553
- {id: 2179, cat: TV/Anime, desc: "Film/Vidéo : Animation Série"}
- {id: 2180, cat: TV, desc: "Film/Vidéo : Concert"}
- {id: 2181, cat: TV, desc: "Film/Vidéo : Documentaire"}
@@ -128,8 +129,8 @@
search:
paths:
- path: "/engine/search?category={{ .Config.category }}&name={{ .Keywords }}&description=&file=&uploader=&sub_category=&do=search"
- path: "/engine/search?category={{ .Config.category }}&name={{ .Keywords }}&description=&file=&uploader=&sub_category=&do=search&page=50"
- path: "/engine/search?category={{ .Config.category }}&name={{ .Keywords }}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date"
- path: "/engine/search?category={{ .Config.category }}&name={{ .Keywords }}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&page=50"
rows:
selector: "table.table > tbody > tr"

View File

@@ -22,7 +22,7 @@
path: /login
method: form
inputs:
username: "{{ .Config.username }}"
username_email: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: "on"
error:
@@ -54,13 +54,13 @@
- name: split
args: ["|", 0]
size:
selector: td:nth-child(5)
selector: td:nth-child(4)
seeders:
selector: td:nth-child(6)
selector: td:nth-child(5)
leechers:
selector: td:nth-child(7)
selector: td:nth-child(6)
grabs:
selector: td:nth-child(8)
selector: td:nth-child(7)
date:
selector: td:nth-child(3)
filters:

View File

@@ -63,7 +63,7 @@ namespace Jackett.Common.Indexers.Abstract
if (!string.IsNullOrEmpty(query.ImdbID))
{
queryCollection.Add("imdbid", "browse");
queryCollection.Add("imdbid", query.ImdbID);
}
if (searchString != null)
{

View File

@@ -575,6 +575,11 @@ namespace Jackett.Common.Indexers
{
throw new Exception("Request to " + response.Request.Url + " failed (Error " + response.Status + ") - The tracker seems to be down.");
}
if (response.Status == System.Net.HttpStatusCode.Forbidden && response.Content.Contains("<span data-translate=\"complete_sec_check\">Please complete the security check to access</span>"))
{
throw new Exception("Request to " + response.Request.Url + " failed (Error " + response.Status + ") - The page is protected by an Cloudflare reCaptcha. The page is in aggressive DDoS mitigation mode or your IP might be blacklisted (e.g. in case of shared VPN IPs). There's no easy way of making it usable with Jackett.");
}
}
protected async Task FollowIfRedirect(WebClientStringResult response, string referrer = null, string overrideRedirectUrl = null, string overrideCookies = null, bool accumulateCookies = false)

View File

@@ -164,7 +164,7 @@ namespace Jackett.Common.Indexers
var grabs = qRow.Find("td:nth-child(9) > a").Get(0).FirstChild.ToString();
release.Grabs = ParseUtil.CoerceInt(grabs);
release.DownloadVolumeFactor = 0; // ratioless
release.DownloadVolumeFactor = 1;
release.UploadVolumeFactor = 1;
releases.Add(release);

View File

@@ -0,0 +1,246 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils;
using Jackett.Common.Utils.Clients;
using Newtonsoft.Json.Linq;
using NLog;
using System.Text.RegularExpressions;
using AngleSharp.Parser.Html;
namespace Jackett.Common.Indexers
{
class HorribleSubs : BaseWebIndexer
{
private string ApiEndpoint { get { return SiteLink + "api.php"; } }
public HorribleSubs(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
: base(name: "Horrible Subs",
description: "HorribleSubs &#8211; So bad yet so good",
link: "https://horriblesubs.info/",
caps: new TorznabCapabilities(),
configService: configService,
client: wc,
logger: l,
p: ps,
configData: new ConfigurationData())
{
Encoding = Encoding.UTF8;
Language = "en-us";
Type = "public";
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
configData.LoadValuesFromJson(configJson);
var releases = await PerformQuery(new TorznabQuery());
await ConfigureIfOK(string.Empty, releases.Count() > 0, () =>
{
throw new Exception("Could not find releases from this URL");
});
return IndexerConfigurationStatus.Completed;
}
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
return await PerformQuery(query, 0);
}
private async Task<IEnumerable<ReleaseInfo>> PerformLatestQuery(TorznabQuery query, int attempts)
{
var ResultParser = new HtmlParser();
var releases = new List<ReleaseInfo>();
var searchString = query.GetQueryString();
var queryCollection = new NameValueCollection();
queryCollection.Add("method", "getlatest");
var searchUrl = ApiEndpoint + "?" + queryCollection.GetQueryString();
var response = await RequestStringWithCookiesAndRetry(searchUrl, string.Empty);
try
{
if (response.Content.Contains("Nothing was found"))
{
return releases.ToArray();
}
var dom = ResultParser.Parse(response.Content);
var latestresults = dom.QuerySelectorAll("ul > li > a");
foreach (var row in latestresults)
{
var href = SiteLink + row.Attributes["href"].Value.Substring(1);
var showrels = await GetRelease(href);
releases.AddRange(showrels);
}
}
catch (Exception ex)
{
OnParseError(response.Content, ex);
}
return releases;
}
private async Task<IEnumerable<ReleaseInfo>> GetRelease(string ResultURL)
{
var releases = new List<ReleaseInfo>();
var ResultParser = new HtmlParser();
try
{
var episodeno = ResultURL.Substring(ResultURL.LastIndexOf("#") + 1); // = 71
ResultURL = ResultURL.Replace("#" + episodeno, ""); // = https://horriblesubs.info/shows/boruto-naruto-next-generations
var showPageResponse = await RequestStringWithCookiesAndRetry(ResultURL, string.Empty);
await FollowIfRedirect(showPageResponse);
Match match = Regex.Match(showPageResponse.Content, "(var hs_showid = )([0-9]*)(;)", RegexOptions.IgnoreCase);
if (match.Success == false)
{
return releases;
}
int ShowID = int.Parse(match.Groups[2].Value);
string showAPIURL = ApiEndpoint + "?method=getshows&type=show&showid=" + ShowID; //https://horriblesubs.info/api.php?method=getshows&type=show&showid=869
var showAPIResponse = await RequestStringWithCookiesAndRetry(showAPIURL, string.Empty);
var showAPIdom = ResultParser.Parse(showAPIResponse.Content);
var releaserows = showAPIdom.QuerySelectorAll("div.rls-info-container");
foreach (var releaserow in releaserows)
{
string dateStr = releaserow.QuerySelector(".rls-date").TextContent.Trim();
string title = releaserow.FirstChild.TextContent;
title = title.Replace("SD720p1080p", "");
title = title.Replace(dateStr, "");
if (title.Contains(episodeno) == false)
{
continue;
}
DateTime releasedate;
if (dateStr == "Today")
{
releasedate = DateTime.Today;
}
else if (dateStr == "Yesterday")
{
releasedate = DateTime.Today.AddDays(-1);
}
else
{
releasedate = DateTime.SpecifyKind(DateTime.ParseExact(dateStr, "MM/dd/yy", CultureInfo.InvariantCulture), DateTimeKind.Utc).ToLocalTime();
}
var p480 = releaserow.QuerySelector(".link-480p");
if (p480 != null)
{
var release = new ReleaseInfo();
release.Title = string.Format("{0} [480p]", title);
release.PublishDate = releasedate;
release.Link = new Uri(p480.QuerySelector(".hs-torrent-link > a").GetAttribute("href"));
release.MagnetUri = new Uri(p480.QuerySelector(".hs-magnet-link > a").GetAttribute("href"));
release.Files = 1;
releases.Add(release);
}
var p720 = releaserow.QuerySelector(".link-720p");
if (p720 != null)
{
var release = new ReleaseInfo();
release.Title = string.Format("{0} [720p]", title);
release.PublishDate = releasedate;
release.Link = new Uri(p720.QuerySelector(".hs-torrent-link > a").GetAttribute("href"));
release.MagnetUri = new Uri(p720.QuerySelector(".hs-magnet-link > a").GetAttribute("href"));
release.Files = 1;
releases.Add(release);
}
var p1080 = releaserow.QuerySelector(".link-1080p");
if (p1080 != null)
{
var release = new ReleaseInfo();
release.Title = string.Format("{0} [1080p]", title);
release.PublishDate = releasedate;
release.Link = new Uri(p1080.QuerySelector(".hs-torrent-link > a").GetAttribute("href"));
release.MagnetUri = new Uri(p1080.QuerySelector(".hs-magnet-link > a").GetAttribute("href"));
release.Files = 1;
releases.Add(release);
}
}
}
catch (Exception ex)
{
OnParseError("", ex);
}
return releases;
}
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query, int attempts)
{
var ResultParser = new HtmlParser();
var releases = new List<ReleaseInfo>();
var searchString = query.GetQueryString();
var queryCollection = new NameValueCollection();
if (string.IsNullOrWhiteSpace(searchString))
{
return await PerformLatestQuery(query, attempts);
}
else
{
queryCollection.Add("method", "search");
searchString = searchString.Replace("'", ""); // ignore ' (e.g. search for america's Next Top Model)
queryCollection.Add("value", searchString);
}
var searchUrl = ApiEndpoint + "?" + queryCollection.GetQueryString();
var response = await RequestStringWithCookiesAndRetry(searchUrl, string.Empty);
try
{
if (response.Content.Contains("Nothing was found"))
{
return releases.ToArray();
}
var dom = ResultParser.Parse(response.Content);
var showlinks = dom.QuerySelectorAll("ul > li > a");
foreach (var showlink in showlinks)
{
var href = SiteLink + showlink.Attributes["href"].Value.Substring(1); // = https://horriblesubs.info/shows/boruto-naruto-next-generations#71
var showrels = await GetRelease(href);
releases.AddRange(showrels);
}
}
catch (Exception ex)
{
OnParseError(response.Content, ex);
}
return releases;
}
}
}

View File

@@ -42,30 +42,41 @@ namespace Jackett.Common.Indexers
Language = "en-us";
Type = "private";
AddCategoryMapping(32, TorznabCatType.TVAnime);
AddCategoryMapping(31, TorznabCatType.TVOTHER);
AddCategoryMapping(47, TorznabCatType.TVSD);
AddCategoryMapping(8, TorznabCatType.TVHD);
AddCategoryMapping(48, TorznabCatType.TVHD);
AddCategoryMapping(9, TorznabCatType.TVSD);
AddCategoryMapping(4, TorznabCatType.TVHD);
AddCategoryMapping(6, TorznabCatType.TVSD);
AddCategoryMapping(22, TorznabCatType.Books);
AddCategoryMapping(41, TorznabCatType.BooksComics);
AddCategoryMapping(23, TorznabCatType.PC);
AddCategoryMapping(16, TorznabCatType.MoviesHD);
AddCategoryMapping(17, TorznabCatType.MoviesSD);
AddCategoryMapping(14, TorznabCatType.MoviesSD);
AddCategoryMapping(34, TorznabCatType.MoviesForeign);
AddCategoryMapping(18, TorznabCatType.MoviesForeign);
AddCategoryMapping(33, TorznabCatType.MoviesForeign);
AddCategoryMapping(34, TorznabCatType.Audio);
AddCategoryMapping(37, TorznabCatType.AudioLossless);
AddCategoryMapping(35, TorznabCatType.AudioAudiobook);
AddCategoryMapping(36, TorznabCatType.AudioMP3);
AddCategoryMapping(3, TorznabCatType.Other, "Nuked");
AddCategoryMapping(32, TorznabCatType.TVAnime, "Anime");
AddCategoryMapping(23, TorznabCatType.PC, "Apps");
AddCategoryMapping(35, TorznabCatType.AudioAudiobook, "Audiobooks");
AddCategoryMapping(31, TorznabCatType.TV, "Childrens/Cartoons");
AddCategoryMapping(54, TorznabCatType.TVDocumentary, "Documentary - HD");
AddCategoryMapping(41, TorznabCatType.BooksComics, "Comics");
AddCategoryMapping(25, TorznabCatType.PCGames, "Games");
AddCategoryMapping(29, TorznabCatType.ConsoleXbox, "Games Xbox");
AddCategoryMapping(27, TorznabCatType.PCGames, "Games-PC Rips");
AddCategoryMapping(28, TorznabCatType.ConsolePS4, "Games-PSx");
AddCategoryMapping(49, TorznabCatType.PCPhoneOther, "Mobile");
AddCategoryMapping(59, TorznabCatType.MoviesUHD, "Movies-4k");
AddCategoryMapping(60, TorznabCatType.MoviesForeign, "Non-English 4k Movies");
AddCategoryMapping(16, TorznabCatType.MoviesHD, "Movies HD");
AddCategoryMapping(18, TorznabCatType.MoviesForeign, "Movies HD Non-English");
AddCategoryMapping(17, TorznabCatType.MoviesSD, "TS/CAM/PPV");
AddCategoryMapping(34, TorznabCatType.MoviesForeign, "Movies Low Def Non-English");
AddCategoryMapping(14, TorznabCatType.MoviesSD, "Movies-SD");
AddCategoryMapping(33, TorznabCatType.MoviesForeign, "Movies SD Non-English");
AddCategoryMapping(30, TorznabCatType.AudioOther, "Music");
AddCategoryMapping(37, TorznabCatType.AudioLossless, "FLAC");
AddCategoryMapping(36, TorznabCatType.AudioMP3, "MP3");
AddCategoryMapping(39, TorznabCatType.AudioOther, "Music Other");
AddCategoryMapping(38, TorznabCatType.AudioVideo, "Music Video");
AddCategoryMapping(45, TorznabCatType.Other, "Other");
AddCategoryMapping(7, TorznabCatType.TVSport, "Sports Tv");
AddCategoryMapping(44, TorznabCatType.TVSport, "Sports Fitness-Instructional");
AddCategoryMapping(58, TorznabCatType.TVSport, "Olympics");
AddCategoryMapping(47, TorznabCatType.TVSD, "TV - 480p");
AddCategoryMapping(8, TorznabCatType.TVHD, "TV - High Definition");
AddCategoryMapping(48, TorznabCatType.TVSD, "TV - Standard Definition - x264");
AddCategoryMapping(9, TorznabCatType.TVSD, "TV - Standard Definition - XviD");
AddCategoryMapping(4, TorznabCatType.TVHD, "TV Season Packs - HD");
AddCategoryMapping(6, TorznabCatType.TVSD, "TV Season Packs - SD");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)

View File

@@ -69,6 +69,8 @@ namespace Jackett.Common.Indexers
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query, int attempts)
{
query = query.Clone();
var originalSearchTerm = query.SearchTerm;
if (query.SearchTerm == null)
{

View File

@@ -28,16 +28,36 @@ namespace Jackett.Common.Indexers
class NewpctRelease : ReleaseInfo
{
public string SerieName;
public ReleaseType NewpctReleaseType;
public string SeriesName;
public int? Season;
public int? Episode;
public int? EpisodeTo;
public NewpctRelease()
{
}
public NewpctRelease(NewpctRelease copyFrom):
base(copyFrom)
{
NewpctReleaseType = copyFrom.NewpctReleaseType;
SeriesName = copyFrom.SeriesName;
Season = copyFrom.Season;
Episode = copyFrom.Episode;
EpisodeTo = copyFrom.EpisodeTo;
}
public override object Clone()
{
return new NewpctRelease(this);
}
}
private static Uri SiteLinkUri = new Uri("http://www.tvsinpagar.com/");
private ReleaseInfo _mostRecentRelease;
private NewpctRelease _mostRecentRelease;
private Regex _searchStringRegex = new Regex(@"(.+?)S0?(\d+)(E0?(\d+))?$", RegexOptions.IgnoreCase);
private Regex _titleListRegex = new Regex(@"Serie(.+?)(Temporada(.+?)(\d+)(.+?))?Capitulos?(.+?)(\d+)((.+?)(\d+))?(.+?)-(.+?)Calidad(.*)", RegexOptions.IgnoreCase);
private Regex _titleListRegex = new Regex(@"Serie( *Descargar)?(.+?)(Temporada(.+?)(\d+)(.+?))?Capitulos?(.+?)(\d+)((.+?)(\d+))?(.+?)-(.+?)Calidad(.*)", RegexOptions.IgnoreCase);
private Regex _titleClassicRegex = new Regex(@"(\[[^\]]*\])?\[Cap\.(\d{1,2})(\d{2})([_-](\d{1,2})(\d{2}))?\]", RegexOptions.IgnoreCase);
private Regex _titleClassicTvQualityRegex = new Regex(@"\[([^\]]*HDTV[^\]]*)", RegexOptions.IgnoreCase);
@@ -45,6 +65,9 @@ namespace Jackett.Common.Indexers
private int _maxEpisodesListPages = 100;
private int[] _allTvCategories = TorznabCatType.TV.SubCategories.Select(c => c.ID).ToArray();
private DateTime _dailyNow;
private int _dailyResultIdx;
private string _dailyUrl = "/ultimas-descargas/pg/{0}";
private string[] _seriesLetterUrls = new string[] { "/series/letter/{0}", "/series-hd/letter/{0}" };
private string[] _seriesVOLetterUrls = new string[] { "/series-vo/letter/{0}" };
@@ -110,6 +133,13 @@ namespace Jackett.Common.Indexers
{
var releases = new List<ReleaseInfo>();
lock (cache)
{
CleanCache();
}
_dailyNow = DateTime.Now;
_dailyResultIdx = 0;
bool rssMode = string.IsNullOrEmpty(query.SanitizedSearchTerm);
if (rssMode)
@@ -130,7 +160,7 @@ namespace Jackett.Common.Indexers
bool recentFound = _mostRecentRelease != null &&
items.Any(r => r.Title == _mostRecentRelease.Title && r.Link.AbsoluteUri == _mostRecentRelease.Link.AbsoluteUri);
if (pg == 1)
_mostRecentRelease = (ReleaseInfo)items.First().Clone();
_mostRecentRelease = (NewpctRelease)items.First().Clone();
if (recentFound)
break;
@@ -153,7 +183,7 @@ namespace Jackett.Common.Indexers
private async Task<IEnumerable<ReleaseInfo>> TvSearch(TorznabQuery query)
{
var newpctReleases = new List<ReleaseInfo>();
List<ReleaseInfo> newpctReleases = null;
string seriesName = query.SanitizedSearchTerm;
int? season = query.Season > 0 ? (int?)query.Season : null;
@@ -174,22 +204,17 @@ namespace Jackett.Common.Indexers
}
//Try to reuse cache
bool cacheFound = false;
lock (cache)
{
CleanCache();
var cachedResult = cache.FirstOrDefault(i => i.Query == seriesName.ToLower());
if (cachedResult != null && cachedResult.Results != null)
{
cacheFound = true;
newpctReleases = cachedResult.Results.Where(r => (r as NewpctRelease) != null).ToList();
if (!newpctReleases.Any() && cachedResult.Results.Any())
cacheFound = false;
}
if (cachedResult != null)
newpctReleases = cachedResult.Results.Select(r => (ReleaseInfo)r.Clone()).ToList();
}
if (!cacheFound)
if (newpctReleases == null)
{
newpctReleases = new List<ReleaseInfo>();
//Search series url
foreach (Uri seriesListUrl in SeriesListUris(seriesName))
{
@@ -288,7 +313,11 @@ namespace Jackett.Common.Indexers
foreach (var row in rows)
{
var anchor = row.QuerySelector("a");
var title = anchor.TextContent.Replace("\t", "").Trim();
var title = Regex.Replace(anchor.TextContent, @"\s+", " ").Trim();
var title2 = Regex.Replace(anchor.GetAttribute("title"), @"\s+", " ").Trim();
if (title2.Length >= title.Length)
title = title2;
var detailsUrl = anchor.GetAttribute("href");
var span = row.QuerySelector("span");
@@ -298,16 +327,17 @@ namespace Jackett.Common.Indexers
var div = row.QuerySelector("div");
var language = div.ChildNodes[1].TextContent.Trim();
_dailyResultIdx++;
NewpctRelease newpctRelease;
if (releaseType == ReleaseType.TV)
newpctRelease = GetReleaseFromData(releaseType,
string.Format("Serie {0} - {1} Calidad [{2}]", title, language, quality),
detailsUrl, quality, language, ReleaseInfo.GetBytes(sizeText), DateTime.Now);
detailsUrl, quality, language, ReleaseInfo.GetBytes(sizeText), _dailyNow - TimeSpan.FromMilliseconds(_dailyResultIdx));
else
newpctRelease = GetReleaseFromData(releaseType,
string.Format("{0} [{1}][{2}]", title, quality, language),
detailsUrl, quality, language, ReleaseInfo.GetBytes(sizeText), DateTime.Now);
detailsUrl, quality, language, ReleaseInfo.GetBytes(sizeText), _dailyNow - TimeSpan.FromMilliseconds(_dailyResultIdx));
releases.Add(newpctRelease);
}
@@ -391,6 +421,7 @@ namespace Jackett.Common.Indexers
NewpctRelease GetReleaseFromData(ReleaseType releaseType, string title, string detailsUrl, string quality, string language, long size, DateTime publishDate)
{
NewpctRelease result = new NewpctRelease();
result.NewpctReleaseType = releaseType;
//Sanitize
title = title.Replace("\t", "").Replace("\x2013", "-");
@@ -398,30 +429,30 @@ namespace Jackett.Common.Indexers
Match match = _titleListRegex.Match(title);
if (match.Success)
{
result.SerieName = match.Groups[1].Value.Trim(' ', '-');
result.Season = int.Parse(match.Groups[4].Success ? match.Groups[4].Value.Trim() : "1");
result.Episode = int.Parse(match.Groups[7].Value.Trim().PadLeft(2, '0'));
result.EpisodeTo = match.Groups[10].Success ? (int?)int.Parse(match.Groups[10].Value.Trim()) : null;
string audioQuality = match.Groups[12].Value.Trim(' ', '[', ']');
quality = match.Groups[13].Value.Trim(' ', '[', ']');
result.SeriesName = match.Groups[2].Value.Trim(' ', '-');
result.Season = int.Parse(match.Groups[5].Success ? match.Groups[5].Value.Trim() : "1");
result.Episode = int.Parse(match.Groups[8].Value.Trim().PadLeft(2, '0'));
result.EpisodeTo = match.Groups[11].Success ? (int?)int.Parse(match.Groups[11].Value.Trim()) : null;
string audioQuality = match.Groups[13].Value.Trim(' ', '[', ']');
quality = match.Groups[14].Value.Trim(' ', '[', ']');
string seasonText = result.Season.ToString();
string episodeText = seasonText + result.Episode.ToString().PadLeft(2, '0');
string episodeToText = result.EpisodeTo.HasValue ? "_" + seasonText + result.EpisodeTo.ToString().PadLeft(2, '0') : "";
result.Title = string.Format("{0} - Temporada {1} [{2}][Cap.{3}{4}][{5}]",
result.SerieName, seasonText, quality, episodeText, episodeToText, audioQuality);
result.SeriesName, seasonText, quality, episodeText, episodeToText, audioQuality);
}
else
{
Match matchClassic = _titleClassicRegex.Match(title);
if (matchClassic.Success)
{
result.Season = matchClassic.Groups[2].Success ? (int?)int.Parse(matchClassic.Groups[2].Value) : null;
result.Episode = matchClassic.Groups[3].Success ? (int?)int.Parse(matchClassic.Groups[3].Value) : null;
result.EpisodeTo = matchClassic.Groups[6].Success ? (int?)int.Parse(matchClassic.Groups[6].Value) : null;
if (matchClassic.Groups[1].Success)
quality = matchClassic.Groups[1].Value;
result.Season = matchClassic.Groups[3].Success ? (int?)int.Parse(matchClassic.Groups[3].Value) : null;
result.Episode = matchClassic.Groups[4].Success ? (int?)int.Parse(matchClassic.Groups[4].Value) : null;
result.EpisodeTo = matchClassic.Groups[7].Success ? (int?)int.Parse(matchClassic.Groups[7].Value) : null;
if (matchClassic.Groups[2].Success)
quality = matchClassic.Groups[2].Value;
}
result.Title = title;
@@ -454,27 +485,30 @@ namespace Jackett.Common.Indexers
private string FixedTitle(NewpctRelease release, string quality)
{
if (String.IsNullOrEmpty(release.SerieName))
if (String.IsNullOrEmpty(release.SeriesName))
{
release.SerieName = release.Title;
release.SeriesName = release.Title;
if (release.Title.Contains("-"))
{
release.SerieName = release.Title.Substring(0, release.Title.IndexOf('-') - 1);
release.SeriesName = release.Title.Substring(0, release.Title.IndexOf('-') - 1);
}
}
if (String.IsNullOrEmpty(quality))
{
quality = "HDTV";
}
var seasonAndEpisode = "S" + release.Season.ToString().PadLeft(2, '0');
seasonAndEpisode += "E" + release.Episode.ToString().PadLeft(2, '0');
if (release.EpisodeTo != release.Episode && release.EpisodeTo != null && release.EpisodeTo != 0)
{
seasonAndEpisode += "-" + release.EpisodeTo.ToString().PadLeft(2, '0');
}
var titleParts = new List<string>();
titleParts.Add(release.SerieName);
titleParts.Add(seasonAndEpisode);
titleParts.Add(release.SeriesName);
if (release.NewpctReleaseType == ReleaseType.TV)
{
var seasonAndEpisode = "S" + release.Season.ToString().PadLeft(2, '0');
seasonAndEpisode += "E" + release.Episode.ToString().PadLeft(2, '0');
if (release.EpisodeTo != release.Episode && release.EpisodeTo != null && release.EpisodeTo != 0)
{
seasonAndEpisode += "-" + release.EpisodeTo.ToString().PadLeft(2, '0');
}
titleParts.Add(seasonAndEpisode);
}
titleParts.Add(quality.Replace("[", "").Replace("]", ""));
if (release.Title.ToLower().Contains("esp") || release.Title.ToLower().Contains("cast"))
{

View File

@@ -321,7 +321,7 @@ namespace Jackett.Common.Indexers
if (torrentRowList.Count == 0)
{
// No results found
Output("\nNo result found for your query, please try another search term ...\n", "info");
Output("\nNo result found for your query, please try another search term or change the theme you're currently using on the site as this is an unsupported solution...\n", "info");
// No result found for this query
break;
@@ -678,9 +678,23 @@ namespace Jackett.Common.Indexers
/// <returns>JQuery Object</returns>
private CQ FindTorrentRows()
{
// Return all occurencis of torrents found
//return _fDom["#content > table > tr"];
return _fDom["# base_content > table.mainouter > tbody > tr > td.outer > div.article > table > tbody > tr:not(:first)"];
var defaultTheme = new[] { "/templates/1/", "/templates/2/", "/templates/3/", "/templates/4/", "/templates/5/", "/templates/6/", "/templates/11/", "/templates/12/" };
var oldV2 = new[] { "/templates/7/", "/templates/8/", "/templates/9/", "/templates/10/", "/templates/14/" };
if (defaultTheme.Any(_fDom.Document.Body.InnerHTML.Contains))
{
// Return all occurencis of torrents found
// $('#base_content2 > div.article > table > tbody:not(:first) > tr')
return _fDom["# base_content2 > div.article > table > tbody:not(:first) > tr"];
}
if (oldV2.Any(_fDom.Document.Body.InnerHTML.Contains))
{
// Return all occurencis of torrents found
// $('#base_content > table.mainouter > tbody > tr > td.outer > div.article > table > tbody')
return _fDom["# base_content > table.mainouter > tbody > tr > td.outer > div.article > table > tbody > tr:not(:first)"];
}
return _fDom;
}
/// <summary>

View File

@@ -309,6 +309,13 @@ namespace Jackett.Common.Indexers
}
var results = await RequestStringWithCookiesAndRetry(searchUrl);
if (results.IsRedirect)
{
// re-login
await ApplyConfiguration(null);
results = await RequestStringWithCookiesAndRetry(searchUrl);
}
try
{
CQ dom = results.Content;

View File

@@ -18,7 +18,7 @@ namespace Jackett.Common.Indexers
{
public class SpeedCD : BaseWebIndexer
{
private string LoginUrl { get { return SiteLink + "take.login.php"; } }
private string LoginUrl { get { return SiteLink + "takelogin.php"; } }
private string SearchUrl { get { return SiteLink + "browse.php"; } }
private new ConfigurationDataBasicLogin configData
@@ -147,18 +147,19 @@ namespace Jackett.Common.Indexers
CQ torrentData = row.OuterHTML;
CQ cells = row.Cq().Find("td");
string title = torrentData.Find("a[class='torrent']").First().Text().Trim();
Uri link = new Uri(SiteLink + torrentData.Find("img[class='icos save']").First().Parent().Attr("href").Trim());
Uri guid = new Uri(SiteLink + torrentData.Find("a[class='torrent']").First().Attr("href").Trim().TrimStart('/'));
string title = torrentData.Find("td[class='lft'] > div > a").First().Text().Trim();
Uri link = new Uri(SiteLink + torrentData.Find("img[title='Download']").First().Parent().Attr("href").Trim());
Uri guid = link;
long size = ReleaseInfo.GetBytes(cells.Elements.ElementAt(4).Cq().Text());
int seeders = ParseUtil.CoerceInt(cells.Elements.ElementAt(5).Cq().Text());
int leechers = ParseUtil.CoerceInt(cells.Elements.ElementAt(6).Cq().Text());
int grabs = ParseUtil.CoerceInt(cells.Elements.ElementAt(5).Cq().Text());
int seeders = ParseUtil.CoerceInt(cells.Elements.ElementAt(6).Cq().Text());
int leechers = ParseUtil.CoerceInt(cells.Elements.ElementAt(7).Cq().Text());
string pubDateStr = torrentData.Find("span[class^='elapsedDate']").First().Attr("title").Trim().Replace(" at", "");
DateTime publishDate = DateTime.ParseExact(pubDateStr, "dddd, MMMM d, yyyy h:mmtt", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime();
long category = 0;
string cat = torrentData.Find("a[class='cat']").First().Attr("id").Trim();
string cat = torrentData.Find("img[class^='Tcat']").First().Parent().Attr("href").Trim().Remove(0, 5);
long.TryParse(cat, out category);
var release = new ReleaseInfo();
@@ -168,6 +169,7 @@ namespace Jackett.Common.Indexers
release.Link = link;
release.PublishDate = publishDate;
release.Size = size;
release.Grabs = grabs;
release.Seeders = seeders;
release.Peers = seeders + leechers;
release.MinimumRatio = 1;

View File

@@ -37,6 +37,10 @@ namespace Jackett.Common.Indexers
"https://www.torrentday.ru/",
"https://www.td.af/",
"https://torrentday.it/",
"https://td.findnemo.net",
"https://td.getcrazy.me",
"https://td.venom.global",
"https://td.workisboring.net",
};
private new ConfigurationDataRecaptchaLogin configData
@@ -54,7 +58,7 @@ namespace Jackett.Common.Indexers
client: wc,
logger: l,
p: ps,
configData: new ConfigurationDataRecaptchaLogin())
configData: new ConfigurationDataRecaptchaLogin("Make sure you get the cookies from the same torrent day domain as configured above."))
{
wc.EmulateBrowser = false;
Encoding = Encoding.UTF8;
@@ -121,7 +125,9 @@ namespace Jackett.Common.Indexers
loginPage = await RequestStringWithCookies(loginPage.RedirectingTo, string.Empty);
CQ cq = loginPage.Content;
var result = this.configData;
result.CookieHeader.Value = loginPage.Cookies;
//result.CookieHeader.Value = loginPage.Cookies;
UpdateCookieHeader(loginPage.Cookies); // update cookies instead of replacing them, see #3717
result.Captcha.SiteKey = cq.Find(".g-recaptcha").Attr("data-sitekey");
result.Captcha.Version = "2";
return result;

View File

@@ -52,40 +52,35 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(2, TorznabCatType.PC, "Apps / Windows");
AddCategoryMapping(13, TorznabCatType.PC, "Apps / Linux");
AddCategoryMapping(4, TorznabCatType.PCMac, "Apps / Mac");
AddCategoryMapping(4, TorznabCatType.PCMac, "Apps / MacOS");
AddCategoryMapping(6, TorznabCatType.PC, "Apps / Misc");
AddCategoryMapping(12, TorznabCatType.PCGames, "Spiele / PC");
AddCategoryMapping(8, TorznabCatType.ConsolePSP, "Spiele / PSX/PSP");
AddCategoryMapping(7, TorznabCatType.ConsoleWii, "Spiele / Wii");
AddCategoryMapping(32, TorznabCatType.ConsoleXbox, "Spiele / XBOX");
AddCategoryMapping(41, TorznabCatType.ConsoleOther, "Spiele / Misc");
AddCategoryMapping(50, TorznabCatType.PCGames, "Spiele / Windows");
AddCategoryMapping(51, TorznabCatType.PCGames, "Spiele / MacOS");
AddCategoryMapping(52, TorznabCatType.PCGames, "Spiele / Linux");
AddCategoryMapping(8, TorznabCatType.ConsoleOther, "Spiele / Playstation");
AddCategoryMapping(7, TorznabCatType.ConsoleOther, "Spiele / Nintendo");
AddCategoryMapping(32, TorznabCatType.ConsoleOther, "Spiele / XBOX");
AddCategoryMapping(22, TorznabCatType.Movies3D, "Filme / 3D");
AddCategoryMapping(3, TorznabCatType.MoviesBluRay, "Filme / BluRay");
AddCategoryMapping(11, TorznabCatType.MoviesOther, "Filme / REMUX");
AddCategoryMapping(42, TorznabCatType.MoviesUHD, "Filme / 2160p");
AddCategoryMapping(9, TorznabCatType.MoviesHD, "Filme / 1080p");
AddCategoryMapping(20, TorznabCatType.MoviesHD, "Filme / 720p");
AddCategoryMapping(21, TorznabCatType.MoviesDVD, "Filme / DVD");
AddCategoryMapping(10, TorznabCatType.MoviesSD, "Filme / SD");
AddCategoryMapping(31, TorznabCatType.MoviesOther, "Filme / Anime");
AddCategoryMapping(43, TorznabCatType.TVUHD, "TV / Serien/UHD");
AddCategoryMapping(16, TorznabCatType.TVHD, "TV / Serien/HD");
AddCategoryMapping(15, TorznabCatType.TVSD, "TV / Serien/SD");
AddCategoryMapping(44, TorznabCatType.TVUHD, "TV / Packs/UHD");
AddCategoryMapping(23, TorznabCatType.TVHD, "TV / Packs/HD");
AddCategoryMapping(27, TorznabCatType.TVSD, "TV / Packs/SD");
AddCategoryMapping(28, TorznabCatType.TVDocumentary, "TV / Dokus/SD");
AddCategoryMapping(29, TorznabCatType.TVDocumentary, "TV / Dokus/HD");
AddCategoryMapping(30, TorznabCatType.TVSport, "TV / Sport");
AddCategoryMapping(40, TorznabCatType.TVAnime, "TV / Anime");
AddCategoryMapping(43, TorznabCatType.TVUHD, "Serien / 2160p");
AddCategoryMapping(53, TorznabCatType.TVHD, "Serien / 1080p");
AddCategoryMapping(54, TorznabCatType.TVHD, "Serien / 720p");
AddCategoryMapping(15, TorznabCatType.TVSD, "Serien / SD");
AddCategoryMapping(30, TorznabCatType.TVSport, "Serien / Sport");
AddCategoryMapping(24, TorznabCatType.AudioLossless, "Audio / FLAC");
AddCategoryMapping(25, TorznabCatType.AudioMP3, "Audio / MP3");
AddCategoryMapping(44, TorznabCatType.TVUHD, "Serienpacks / 2160p");
AddCategoryMapping(55, TorznabCatType.TVHD, "Serienpacks / 1080p");
AddCategoryMapping(56, TorznabCatType.TVHD, "Serienpacks / 720p");
AddCategoryMapping(27, TorznabCatType.TVSD, "Serienpacks / SD");
AddCategoryMapping(24, TorznabCatType.AudioLossless, "Audio / Musik / FLAC");
AddCategoryMapping(25, TorznabCatType.AudioMP3, "Audio / Musik / MP3");
AddCategoryMapping(35, TorznabCatType.AudioOther, "Audio / Other");
AddCategoryMapping(26, TorznabCatType.Audio, "Audio / Packs");
AddCategoryMapping(18, TorznabCatType.AudioAudiobook, "Audio / aBooks");
AddCategoryMapping(33, TorznabCatType.AudioVideo, "Audio / Videos");
@@ -93,7 +88,8 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(5, TorznabCatType.PCPhoneOther, "Misc / Mobile");
AddCategoryMapping(39, TorznabCatType.Other, "Misc / Bildung");
AddCategoryMapping(36, TorznabCatType.TVFOREIGN, "Englisch / TV");
AddCategoryMapping(36, TorznabCatType.TVFOREIGN, "Englisch / Serien");
AddCategoryMapping(57, TorznabCatType.TVFOREIGN, "Englisch / Serienpacks");
AddCategoryMapping(37, TorznabCatType.MoviesForeign, "Englisch / Filme");
AddCategoryMapping(47, TorznabCatType.Books, "Englisch / eBooks");
AddCategoryMapping(48, TorznabCatType.Other, "Englisch / Bildung");

View File

@@ -1470,7 +1470,7 @@ namespace Jackett.Common.Indexers
{
{ "login_username", configData.Username.Value },
{ "login_password", configData.Password.Value },
{ "login", "entry" }
{ "login", "Login" }
};
if (!string.IsNullOrWhiteSpace(cap_sid))
@@ -1483,9 +1483,10 @@ namespace Jackett.Common.Indexers
}
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, CookieHeader, true, null, LoginUrl, true);
await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("class=\"logged-in-as-uname\""), () =>
await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("id=\"logged-in-username\""), () =>
{
var errorMessage = result.Content;
logger.Debug(result.Content);
var errorMessage = "Unknown error message, please report";
var LoginResultParser = new HtmlParser();
var LoginResultDocument = LoginResultParser.Parse(result.Content);
var errormsg = LoginResultDocument.QuerySelector("h4[class=\"warnColor1 tCenter mrg_16\"]");
@@ -1521,7 +1522,7 @@ namespace Jackett.Common.Indexers
var searchUrl = SearchUrl + "?" + queryCollection.GetQueryString();
var results = await RequestStringWithCookies(searchUrl);
if (!results.Content.Contains("class=\"logged-in-as-uname\""))
if (!results.Content.Contains("id=\"logged-in-username\""))
{
// re login
await ApplyConfiguration(null);

View File

@@ -1,187 +0,0 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils;
using Jackett.Common.Utils.Clients;
using Newtonsoft.Json.Linq;
using NLog;
namespace Jackett.Common.Indexers
{
public class Yify : BaseWebIndexer
{
public override string[] LegacySiteLinks { get; protected set; } = new string[] {
"https://yts.me/",
"https://yts.pe/",
};
private string ApiEndpoint { get { return SiteLink + "api/v2/list_movies.json"; } }
private new ConfigurationData configData
{
get { return (ConfigurationData)base.configData; }
set { base.configData = value; }
}
public Yify(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
: base(name: "YIFY",
description: "YIFY is a Public torrent site specialising in HD movies of small size",
link: "https://yifymovie.co/",
caps: new TorznabCapabilities(),
configService: configService,
client: wc,
logger: l,
p: ps,
configData: new ConfigurationData())
{
Encoding = Encoding.GetEncoding("windows-1252");
Language = "en-us";
Type = "public";
TorznabCaps.SupportsImdbSearch = true;
webclient.requestDelay = 2.5; // 0.5 requests per second (2 causes problems)
AddCategoryMapping(1, TorznabCatType.MoviesHD, "Movies/x264/720");
AddCategoryMapping(2, TorznabCatType.MoviesHD, "Movies/x264/1080");
AddCategoryMapping(3, TorznabCatType.MoviesUHD, "Movies/x264/2160");
AddCategoryMapping(4, TorznabCatType.Movies3D, "Movies/x264/3D");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
configData.LoadValuesFromJson(configJson);
var releases = await PerformQuery(new TorznabQuery());
await ConfigureIfOK(string.Empty, releases.Count() > 0, () =>
{
throw new Exception("Could not find releases from this URL");
});
return IndexerConfigurationStatus.Completed;
}
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
return await PerformQuery(query, 0);
}
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query, int attempts)
{
var releases = new List<ReleaseInfo>();
var searchString = query.GetQueryString();
var queryCollection = new NameValueCollection();
if (query.ImdbID != null)
{
queryCollection.Add("query_term", query.ImdbID);
}
else if (!string.IsNullOrWhiteSpace(searchString))
{
searchString = searchString.Replace("'", ""); // ignore ' (e.g. search for america's Next Top Model)
queryCollection.Add("query_term", searchString);
}
var searchUrl = ApiEndpoint + "?" + queryCollection.GetQueryString();
var response = await RequestStringWithCookiesAndRetry(searchUrl, string.Empty);
try
{
var jsonContent = JObject.Parse(response.Content);
string result = jsonContent.Value<string>("status");
if (result != "ok") // query was not successful
{
return releases.ToArray();
}
var data_items = jsonContent.Value<JToken>("data");
int movie_count = data_items.Value<int>("movie_count");
if (movie_count < 1) // no results found in query
{
return releases.ToArray();
}
foreach (var movie_item in data_items.Value<JToken>("movies"))
{
var torrents = movie_item.Value<JArray>("torrents");
if (torrents == null)
continue;
foreach (var torrent_info in torrents)
{
var release = new ReleaseInfo();
// Append the quality to the title because thats how radarr seems to be determining the quality?
// All releases are BRRips, see issue #2200
release.Title = movie_item.Value<string>("title_long") + " " + torrent_info.Value<string>("quality") + " BRRip";
var imdb = movie_item.Value<string>("imdb_code");
release.Imdb = ParseUtil.GetImdbID(imdb);
// API does not provide magnet link, so, construct it
string magnet_uri = "magnet:?xt=urn:btih:" + torrent_info.Value<string>("hash") +
"&dn=" + movie_item.Value<string>("slug") +
"&tr=udp://open.demonii.com:1337/announce" +
"&tr=udp://tracker.openbittorrent.com:80" +
"&tr=udp://tracker.coppersurfer.tk:6969" +
"&tr=udp://glotorrents.pw:6969/announce" +
"&tr=udp://tracker.opentrackr.org:1337/announce" +
"&tr=udp://torrent.gresille.org:80/announce" +
"&tr=udp://p4p.arenabg.com:1337" +
"&tr=udp://tracker.leechers-paradise.org:6969";
release.MagnetUri = new Uri(magnet_uri);
release.InfoHash = torrent_info.Value<string>("hash");
var dateStr = torrent_info.Value<long>("date_uploaded_unix");
var dateTime = DateTimeUtil.UnixTimestampToDateTime(dateStr);
release.PublishDate = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc).ToLocalTime();
release.Link = new Uri(torrent_info.Value<string>("url"));
release.Seeders = torrent_info.Value<int>("seeds");
release.Peers = torrent_info.Value<int>("peers") + release.Seeders;
release.Size = torrent_info.Value<long>("size_bytes");
release.DownloadVolumeFactor = 0;
release.UploadVolumeFactor = 1;
release.Comments = new Uri(movie_item.Value<string>("url"));
release.BannerUrl = new Uri(movie_item.Value<string>("medium_cover_image"));
release.Guid = release.Link;
// API doesn't provide Categories, resolve via quality
release.Category = MapTrackerCatToNewznab("1"); // default
if (torrent_info.Value<string>("quality") == "720p")
{
release.Category = MapTrackerCatToNewznab("1");
}
if (torrent_info.Value<string>("quality") == "1080p")
{
release.Category = MapTrackerCatToNewznab("2");
}
if (torrent_info.Value<string>("quality") == "2160p")
{
release.Category = MapTrackerCatToNewznab("3");
}
if (torrent_info.Value<string>("quality") == "3D")
{
release.Category = MapTrackerCatToNewznab("4");
}
releases.Add(release);
}
}
}
catch (Exception ex)
{
OnParseError(response.Content, ex);
}
return releases;
}
}
}

View File

@@ -16,14 +16,14 @@
<PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
<PackageReference Include="MimeMapping" Version="1.0.1.12" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
<PackageReference Include="NLog" Version="4.5.8" />
<PackageReference Include="NLog" Version="4.5.9" />
<PackageReference Include="SharpZipLib" Version="1.0.0" />
<PackageReference Include="YamlDotNet" Version="5.0.1" />
</ItemGroup>
<!-- Conditionally obtain references for the .NET Full framework target -->
<ItemGroup Condition="'$(TargetFramework)' != 'netstandard2.0'">
<PackageReference Include="CsQuery" Version="1.3.5-beta5" />
<PackageReference Include="SharpZipLib" Version="0.86.0" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="1.1.2" />
<Reference Include="System.ServiceProcess" />
</ItemGroup>
@@ -31,7 +31,6 @@
<!-- Conditionally obtain references for the .NETStandard target -->
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="CsQuery.NETStandard" Version="1.3.6.1" />
<PackageReference Include="SharpZipLib" Version="1.0.0-alpha2" />
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="4.5.0" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.1.1" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="4.5.0" />

View File

@@ -1,5 +1,4 @@
using CommandLine;
using Jackett.Common.Utils;
using System;
namespace Jackett.Common.Models.Config
@@ -9,55 +8,46 @@ namespace Jackett.Common.Models.Config
[Option('i', "Install", HelpText = "Install Jackett windows service (Must be admin)")]
public bool Install { get; set; }
[Option('r', "ReserveUrls", HelpText = "(Re)Register windows port reservations (Required for listening on all interfaces).")]
[Option('r', "ReserveUrls", HelpText = "(Re)Register windows port reservations (Required for listening on all interfaces).")]
public bool ReserveUrls { get; set; }
[Option('u', "Uninstall", HelpText = "Uninstall Jackett windows service (Must be admin).")]
public bool Uninstall { get; set; }
[Option('l', "Logging", HelpText = "Log all requests/responses to Jackett")]
[Option('l', "Logging", HelpText = "Log all requests/responses to Jackett")]
public bool Logging { get; set; }
[Option('t', "Tracing", HelpText = "Enable tracing")]
public bool Tracing { get; set; }
[Option('c', "UseClient", HelpText = "Override web client selection. [automatic(Default)/libcurl/safecurl/httpclient/httpclient2]")]
[Option('c', "UseClient", HelpText = "Override web client selection. [automatic(Default)/httpclient/httpclient2]")]
public string Client { get; set; }
[Option('j', "ProxyConnection", HelpText = "use proxy - e.g. 127.0.0.1:8888")]
public string ProxyConnection { get; set; }
[Option('s', "Start", HelpText = "Start the Jacket Windows service (Must be admin)")]
[Option('s', "Start", HelpText = "Start the Jacket Windows service (Must be admin)")]
public bool StartService { get; set; }
[Option('k', "Stop", HelpText = "Stop the Jacket Windows service (Must be admin)")]
public bool StopService { get; set; }
[Option('x', "ListenPublic", HelpText = "Listen publicly")]
[Option('x', "ListenPublic", HelpText = "Listen publicly")]
public bool ListenPublic { get; set; }
[Option('z', "ListenPrivate", HelpText = "Only allow local access")]
public bool ListenPrivate { get; set; }
[Option('h', "Help", HelpText = "Show Help")]
public bool ShowHelp { get; set; }
[Option('v', "Version", HelpText = "Show Version")]
public bool ShowVersion { get; set; }
[Option('p', "Port", HelpText = "Web server port")]
public int Port { get; set; }
[Option('m', "MigrateSettings", HelpText = "Migrate settings manually (Must be admin on Windows)")]
public bool MigrateSettings { get; set; }
[Option('f', "SSLFix", HelpText = "[true/false] Linux Libcurl NSS Missing ECC Ciphers workaround (Use if you can't access some trackers) .")]
public bool? SSLFix { get; set; }
[Option('n', "IgnoreSslErrors", HelpText = "[true/false] Ignores invalid SSL certificates")]
public bool? IgnoreSslErrors { get; set; }
[Option('d', "DataFolder", HelpText = "Specify the location of the data folder (Must be admin on Windows) eg. --DataFolder=\"D:\\Your Data\\Jackett\\\". Don't use this on Unix (mono) systems. On Unix just adjust the HOME directory of the user to the datedir or set the XDG_CONFIG_HOME environment variable.")]
[Option('d', "DataFolder", HelpText = "Specify the location of the data folder (Must be admin on Windows) eg. --DataFolder=\"D:\\Your Data\\Jackett\\\". Don't use this on Unix (mono) systems. On Unix just adjust the HOME directory of the user to the datadir or set the XDG_CONFIG_HOME environment variable.")]
public string DataFolder { get; set; }
[Option("NoRestart", HelpText = "Don't restart after update")]
@@ -87,9 +77,6 @@ namespace Jackett.Common.Models.Config
Environment.Exit(1);
}
// SSL Fix
runtimeSettings.DoSSLFix = options.SSLFix;
// Use curl
if (options.Client != null)
runtimeSettings.ClientOverride = options.Client.ToLowerInvariant();

View File

@@ -13,8 +13,6 @@ namespace Jackett.Common.Models.Config
public string ProxyConnection { get; set; }
public bool? DoSSLFix { get; set; }
public bool? IgnoreSslErrors { get; set; }
public string CustomDataFolder { get; set; }

View File

@@ -104,8 +104,7 @@ namespace Jackett.Common.Models.Config
else
{
return new string[] {
"http://127.0.0.1:" + Port + "/",
"http://localhost:" + Port + "/",
"http://127.0.0.1:" + Port + "/"
};
}
}

View File

@@ -45,33 +45,39 @@ namespace Jackett.Common.Models
}
}
public object Clone()
public ReleaseInfo()
{
return new ReleaseInfo()
{
Title = Title,
Guid = Guid,
Link = Link,
Comments = Comments,
PublishDate = PublishDate,
Category = Category,
Size = Size,
Files = Files,
Grabs = Grabs,
Description = Description,
RageID = RageID,
Imdb = Imdb,
TMDb = TMDb,
Seeders = Seeders,
Peers = Peers,
BannerUrl = BannerUrl,
InfoHash = InfoHash,
MagnetUri = MagnetUri,
MinimumRatio = MinimumRatio,
MinimumSeedTime = MinimumSeedTime,
DownloadVolumeFactor = DownloadVolumeFactor,
UploadVolumeFactor = UploadVolumeFactor
};
}
protected ReleaseInfo(ReleaseInfo copyFrom)
{
Title = copyFrom.Title;
Guid = copyFrom.Guid;
Link = copyFrom.Link;
Comments = copyFrom.Comments;
PublishDate = copyFrom.PublishDate;
Category = copyFrom.Category;
Size = copyFrom.Size;
Files = copyFrom.Files;
Grabs = copyFrom.Grabs;
Description = copyFrom.Description;
RageID = copyFrom.RageID;
Imdb = copyFrom.Imdb;
TMDb = copyFrom.TMDb;
Seeders = copyFrom.Seeders;
Peers = copyFrom.Peers;
BannerUrl = copyFrom.BannerUrl;
InfoHash = copyFrom.InfoHash;
MagnetUri = copyFrom.MagnetUri;
MinimumRatio = copyFrom.MinimumRatio;
MinimumSeedTime = copyFrom.MinimumSeedTime;
DownloadVolumeFactor = copyFrom.DownloadVolumeFactor;
UploadVolumeFactor = copyFrom.UploadVolumeFactor;
}
public virtual object Clone()
{
return new ReleaseInfo(this);
}
// ex: " 3.5 gb "

View File

@@ -49,12 +49,12 @@ namespace Jackett.Common.Plumbing
return BuildServerConfig(ctx);
}).As<ServerConfig>().SingleInstance();
builder.RegisterType<HttpWebClient>();
// Register the best web client for the platform or the override
switch (_runtimeSettings.ClientOverride)
{
case "httpclientnetcore":
// do nothing, registered by the netcore app
RegisterWebClient<HttpWebClientNetCore>(builder);
break;
case "httpclient":
RegisterWebClient<HttpWebClient>(builder);

View File

@@ -19,12 +19,6 @@ namespace Jackett.Server
Environment.Exit(1);
}
if (runtimeSettings.DoSSLFix != null)
{
logger.Error("SSLFix has been deprecated, please remove it from your start arguments");
Environment.Exit(1);
}
if (runtimeSettings.LogRequests)
{
logger.Info("Logging enabled.");
@@ -159,5 +153,32 @@ namespace Jackett.Server
}
}
}
public static void CheckEnvironmentalVariables(Logger logger)
{
//Check the users environmental variables to ensure they aren't using Mono legacy TLS
var enumerator = Environment.GetEnvironmentVariables().GetEnumerator();
while (enumerator.MoveNext())
{
if (enumerator.Key.ToString().Equals("MONO_TLS_PROVIDER", StringComparison.OrdinalIgnoreCase))
{
logger.Info("MONO_TLS_PROVIDER is present with a value of: " + enumerator.Value.ToString());
if (enumerator.Value.ToString().IndexOf("legacy", StringComparison.OrdinalIgnoreCase) >= 0)
{
logger.Error("The MONO_TLS_PROVIDER=legacy environment variable is not supported, please remove it.");
Environment.Exit(1);
}
}
else
{
if (enumerator.Key.ToString().IndexOf("MONO_", StringComparison.OrdinalIgnoreCase) >= 0)
{
logger.Info($"Environment variable {enumerator.Key} is present");
}
}
}
}
}
}

View File

@@ -25,15 +25,15 @@
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.3.0" />
<PackageReference Include="AutoMapper" Version="7.0.1" />
<PackageReference Include="CommandLineParser" Version="2.3.0" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.1" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.2" />
<PackageReference Include="Microsoft.AspNetCore.ResponseCompression" Version="2.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Rewrite" Version="2.1.1" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.1.1" />
<PackageReference Include="NLog" Version="4.5.8" />
<PackageReference Include="NLog" Version="4.5.9" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.6.0" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="4.5.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.5.0" />
@@ -53,6 +53,9 @@
<Content Include="..\..\Upstart.config" Visible="false">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\install_service_macos" Visible="false">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>

View File

@@ -47,7 +47,6 @@ namespace Jackett.Server
{
if (string.IsNullOrEmpty(options.Client))
{
//TODO: Remove libcurl once off owin
bool runningOnDotNetCore = RuntimeInformation.FrameworkDescription.IndexOf("Core", StringComparison.OrdinalIgnoreCase) >= 0;
if (runningOnDotNetCore)
@@ -83,6 +82,7 @@ namespace Jackett.Server
}
}
Initialisation.CheckEnvironmentalVariables(logger);
Initialisation.ProcessSettings(Settings, logger);
ISerializeService serializeService = new SerializeService();
@@ -124,7 +124,7 @@ namespace Jackett.Server
ServerConfig serverConfig = configurationService.BuildServerConfig(Settings);
Int32.TryParse(serverConfig.Port.ToString(), out Int32 configPort);
string[] url = serverConfig.GetListenAddresses(serverConfig.AllowExternal).Take(1).ToArray(); //Kestrel doesn't need 127.0.0.1 and localhost to be registered, remove once off OWIN
string[] url = serverConfig.GetListenAddresses(serverConfig.AllowExternal);
isWebHostRestart = false;

View File

@@ -3,7 +3,6 @@ using Autofac.Extensions.DependencyInjection;
using Jackett.Common.Models.Config;
using Jackett.Common.Plumbing;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils.Clients;
using Jackett.Server.Middleware;
using Jackett.Server.Services;
using Microsoft.AspNetCore.Authentication.Cookies;
@@ -84,8 +83,6 @@ namespace Jackett.Server
builder.RegisterType<ServerService>().As<IServerService>();
builder.RegisterType<ProtectionService>().As<IProtectionService>();
builder.RegisterType<ServiceConfigService>().As<IServiceConfigService>();
if (runtimeSettings.ClientOverride == "httpclientnetcore")
builder.RegisterType<HttpWebClientNetCore>().As<WebClient>();
IContainer container = builder.Build();
Helper.ApplicationContainer = container;

View File

@@ -22,13 +22,13 @@
<ItemGroup>
<PackageReference Include="Autofac" Version="4.8.1" />
<PackageReference Include="FluentAssertions" Version="5.4.1" />
<PackageReference Include="FluentAssertions" Version="5.4.2" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="2.1.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
<PackageReference Include="NUnit" Version="3.10.1" />
<PackageReference Include="NUnit.ConsoleRunner" Version="3.8.0" />
<PackageReference Include="NUnit.ConsoleRunner" Version="3.9.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.10.0" />
</ItemGroup>

View File

@@ -87,10 +87,34 @@ namespace Jackett.Updater
{
var proc = Process.GetProcessById(pid);
logger.Info("Killing process " + proc.Id);
proc.Kill();
var exited = proc.WaitForExit(5000);
// try to kill gracefully (on unix) first, see #3692
var exited = false;
if (Environment.OSVersion.Platform == PlatformID.Unix)
{
try
{
var startInfo = new ProcessStartInfo();
startInfo.Arguments = "-15 " + pid;
startInfo.FileName = "kill";
Process.Start(startInfo);
System.Threading.Thread.Sleep(1000); // just sleep, WaitForExit() doesn't seem to work on mono/linux (returns immediantly), https://bugzilla.xamarin.com/show_bug.cgi?id=51742
exited = proc.WaitForExit(2000);
}
catch (Exception e)
{
logger.Error(e, "Error while sending SIGTERM to " + pid.ToString());
}
if (!exited)
logger.Info("Process " + pid.ToString() + " didn't exit within 2 seconds after a SIGTERM");
}
if (!exited)
logger.Info("Process " + pid.ToString() + " didn't exit within 5 seconds");
{
proc.Kill(); // send SIGKILL
}
exited = proc.WaitForExit(5000);
if (!exited)
logger.Info("Process " + pid.ToString() + " didn't exit within 5 seconds after a SIGKILL");
}
catch (ArgumentException)
{
@@ -234,7 +258,6 @@ namespace Jackett.Updater
"Definitions/eotforum.yml",
"Definitions/nexttorrent.yml",
"appsettings.Development.json",
"appsettings.json",
"CurlSharp.dll",
"CurlSharp.pdb",
"Jackett.dll",
@@ -250,6 +273,8 @@ namespace Jackett.Updater
"System.Web.Http.dll",
"System.Web.Http.Owin.dll",
"System.Web.Http.Tracing.dll",
"Definitions/torrentkim.yml",
"Definitions/horriblesubs.yml",
};
foreach (var oldFile in oldFiles)