From c040cf3a3afab85756e39f146a2fe39300ea2dc9 Mon Sep 17 00:00:00 2001 From: Garfield69 Date: Fri, 22 Dec 2017 06:23:11 +1300 Subject: [PATCH 1/8] downloadville: sitelink should be base only --- src/Jackett.Common/Definitions/downloadville.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Jackett.Common/Definitions/downloadville.yml b/src/Jackett.Common/Definitions/downloadville.yml index f353f58cf..d7ae5f3cd 100644 --- a/src/Jackett.Common/Definitions/downloadville.yml +++ b/src/Jackett.Common/Definitions/downloadville.yml @@ -6,6 +6,8 @@ type: private encoding: UTF-8 links: + - https://downloadville.net/ + legacylinks: - https://downloadville.net/tracker/ caps: @@ -128,7 +130,7 @@ "4" : "Argent & Or (Both)" login: - path: index.php?page=login + path: tracker/index.php?page=login method: post form: form[action="index.php?page=login"] inputs: @@ -139,12 +141,12 @@ message: selector: form[action="index.php?page=login&returnto=index.php"] table tr:nth-of-type(2) td span test: - path: index.php + path: tracker/index.php select: a[href="logout.php"] download: before: - path: "thanks.php" + path: tracker/thanks.php method: "post" inputs: infohash: "{{ .DownloadUri.Query.id }}" @@ -154,7 +156,7 @@ search: paths: - - path: index.php + - path: tracker/index.php inputs: page: "torrents" search: "{{ .Keywords }}" From e923be03cc520661a15fa9d7a796b317656c0e7f Mon Sep 17 00:00:00 2001 From: Garfield69 Date: Fri, 22 Dec 2017 06:25:15 +1300 Subject: [PATCH 2/8] sktorrent: sitelink should be base only --- src/Jackett.Common/Definitions/sktorrent.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Jackett.Common/Definitions/sktorrent.yml b/src/Jackett.Common/Definitions/sktorrent.yml index 3834b8825..48fc167bd 100644 --- a/src/Jackett.Common/Definitions/sktorrent.yml +++ b/src/Jackett.Common/Definitions/sktorrent.yml @@ -6,6 +6,8 @@ type: semi-private encoding: windows-1250 links: + - http://sktorrent.eu/ + legacylinks: - http://sktorrent.eu/torrent/ caps: @@ -46,7 +48,7 @@ movie-search: [q] login: - path: /torrent/login.php + path: torrent/login.php method: form form: form[action^="login.php?returnto=index.php"] inputs: @@ -55,11 +57,11 @@ error: - selector: font:contains("Incorrect") test: - path: /torrent/index.php + path: torrent/index.php search: paths: - - path: /torrent/torrents.php + - path: torrent/torrents.php inputs: search: "{{ .Keywords }}" category: "{{range .Categories}}{{.}};{{end}}" From dd8ecd13806c9330268c0a7e6e576df15d6d2e18 Mon Sep 17 00:00:00 2001 From: Garfield69 Date: Fri, 22 Dec 2017 06:26:24 +1300 Subject: [PATCH 3/8] torrentbd: sitelink should be base only --- src/Jackett.Common/Definitions/torrentbd.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Jackett.Common/Definitions/torrentbd.yml b/src/Jackett.Common/Definitions/torrentbd.yml index 8053a7ac8..8119f460a 100644 --- a/src/Jackett.Common/Definitions/torrentbd.yml +++ b/src/Jackett.Common/Definitions/torrentbd.yml @@ -6,6 +6,8 @@ type: private encoding: UTF-8 links: + - http://www.torrentbd.com/ + legacylinks: - http://www.torrentbd.com/torrent caps: @@ -80,7 +82,7 @@ tv-search: [q, season, ep] login: - path: account-login.php + path: torrent/account-login.php method: form form: form[action="account-login.php"] inputs: @@ -89,11 +91,11 @@ error: - selector: div.myFrame:has(div.myF-caption > font.error) test: - path: torrents-search.php + path: torrent/torrents-search.php selector: div.myB-content:contains("Ratio:") ratio: - path: torrents-search.php + path: torrent/torrents-search.php selector: div.myB-content:contains("Ratio:") filters: - name: regexp @@ -101,7 +103,7 @@ search: paths: - - path: torrents-search.php + - path: torrent/torrents-search.php inputs: $raw: "{{range .Categories}}c{{.}}=1&{{end}}" search: "{{ .Query.Keywords }}" From cf9677ec38092a724016afbb8d6bd47ddbd3f9b0 Mon Sep 17 00:00:00 2001 From: Garfield69 Date: Sat, 23 Dec 2017 18:02:37 +1300 Subject: [PATCH 4/8] kickasstorrent: katcr have updated their search engine #2280 however, their ddos protection still breaks jackett for now --- .../Definitions/kickasstorrent.yml | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Jackett.Common/Definitions/kickasstorrent.yml b/src/Jackett.Common/Definitions/kickasstorrent.yml index 4632bfd90..b66f6c014 100644 --- a/src/Jackett.Common/Definitions/kickasstorrent.yml +++ b/src/Jackett.Common/Definitions/kickasstorrent.yml @@ -91,19 +91,20 @@ search: paths: - - path: "/new/{{if .Keywords}}search-torrents.php?{{range .Categories }}c{{.}}=1&{{end}}search={{.Keywords}}{{else}}{{end}}" + - path: "{{ if .Keywords }}usearch/torrents-search.php?{{range .Categories }}c{{.}}=1&{{end}}q={{.Keywords}}{{else}}torrents/top-100-latest-uploads.html{{end}}" rows: - selector: table.ttable_headinner > tbody > tr[class^="t-row"] - filters: - - name: andmatch + selector: table[class="table table--bordered table--striped table--hover torrents_table sortable] > tbody > tr fields: - download: - selector: a[data-download] - attribute: href title: - selector: a.cellMainLink + selector: a.torrents_table__torrent_title b + details: + selector: a.torrents_table__torrent_title b + attribute: href + download: + selector: a[href^="magnet:?xt="] + attribute: href category: - selector: span[id^="cat_"] + selector: span.torrents_table__upload_info case: ":has(a:contains(\"Anime\")):contains(\"English Translated\")": 118 ":has(a:contains(\"Anime\")):contains(\"Other\")": 133 @@ -177,20 +178,19 @@ ":has(a:contains(\"XXX\")):contains(\"Videos\")": 119 ":has(a:contains(\"XXX\")):contains(\"XXX Games\")": 126 "*": 0 # some older torrents's don't have a category - details: - selector: a.cellMainLink - attribute: href size: - selector: td:nth-child(2) + selector: td[data-title="Size"] + files: + selector: td[data-title="Files"] date: - selector: td:nth-child(3) + selector: td[data-title="Age"] filters: - name: dateparse - args: "02-01-2006 15:04:05 -07:00" + args: "2006-01-02 15:04:05" seeders: - selector: td:nth-child(4) + selector: td[data-title="Seed"] leechers: - selector: td:nth-child(5) + selector: td[data-title="Leech"] downloadvolumefactor: text: "0" uploadvolumefactor: From 2e8196b753d0cb7324bf2641fb5a2c098e9bb309 Mon Sep 17 00:00:00 2001 From: Garfield69 Date: Sat, 23 Dec 2017 18:08:47 +1300 Subject: [PATCH 5/8] kickasstorrent: oops #2280 --- src/Jackett.Common/Definitions/kickasstorrent.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Jackett.Common/Definitions/kickasstorrent.yml b/src/Jackett.Common/Definitions/kickasstorrent.yml index b66f6c014..e2c906656 100644 --- a/src/Jackett.Common/Definitions/kickasstorrent.yml +++ b/src/Jackett.Common/Definitions/kickasstorrent.yml @@ -93,7 +93,7 @@ paths: - path: "{{ if .Keywords }}usearch/torrents-search.php?{{range .Categories }}c{{.}}=1&{{end}}q={{.Keywords}}{{else}}torrents/top-100-latest-uploads.html{{end}}" rows: - selector: table[class="table table--bordered table--striped table--hover torrents_table sortable] > tbody > tr + selector: table[class="table table--bordered table--striped table--hover torrents_table sortable"] > tbody > tr fields: title: selector: a.torrents_table__torrent_title b From 68cbd6e6bed2959fd5469912e557585e4078cecb Mon Sep 17 00:00:00 2001 From: DarkSupremo Date: Tue, 26 Dec 2017 02:02:43 -0200 Subject: [PATCH 6/8] Fix to BJ-Share and Speed-Share (#2321) * Fixed anime search on BJShare, removing the season from search and changing the output from "Anime SXXEXX" to "Anime EXX". Season had to be removed because the season numbering on anime is all wrong in this tracker. * - Changed to change title based on search for category of every row in bj-share, instead of category of search - Fixed title parse on B2S-Share and Speed-Share to animes (series not changed) from "Anime SXXEXX" to "Anime EXX" * - Added anime title change on empty search as well - BJ-Share * B2S-Share: Removed episode from search and added andmatch (episode search do not work with translated series name), changed title to return 'original name SXXEXX' instead of 'translated name SXXEXX (original name)', because Sonarr was not recognizing the serie (it will only apply to series and movies, animes does not have translated name) * added few comments to the code * Fixed year being added after season/episode, it will be added now between series name and season/episode (animes not included), eg: Serie 2017 S05E06 * Small bugfixes in regex --- .../Definitions/speed-share.yml | 23 +++++++++++++++---- src/Jackett.Common/Indexers/BJShare.cs | 20 ++++++++++++---- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/Jackett.Common/Definitions/speed-share.yml b/src/Jackett.Common/Definitions/speed-share.yml index e6a414d3b..c8b67e7a2 100644 --- a/src/Jackett.Common/Definitions/speed-share.yml +++ b/src/Jackett.Common/Definitions/speed-share.yml @@ -220,6 +220,11 @@ ,a[href^="torrents.php?cat=228"] ,a[href^="torrents.php?cat=191"] attribute: href + year: + selector: td.label > div:contains("Lançamento:") + filters: + - name: replace + args: ["Lançamento:", ""] title_anime: selector: a[href^="torrents-details.php?id="] filters: @@ -227,6 +232,9 @@ args: ["(Ep[\\.]?[ ]?)|([S]\\d\\d[Ee])", "E"] title_normal: selector: a[href^="torrents-details.php?id="] + filters: + - name: re_replace + args: ["^(.*?) - ((S(\\d{1,2}))?E(\\d{1,3}))", "$1 {{.Result.year}} $2"] title: text: "{{if .Result.is_anime }}{{ .Result.title_anime }}{{else}}{{ .Result.title_normal }}{{end}}" filters: @@ -234,11 +242,16 @@ args: ["^(\\[XXX]\\s)", ""] - name: replace args: [" - NOVO!", ""] - title|append: - selector: td.label > div:contains("Lançamento:") - filters: - - name: replace - args: ["Lançamento:", ""] + - name: re_replace + args: ["(\\d{2})ª a (\\d{2})ª Temporada", "S$1-$2"] + - name: re_replace + args: ["(\\d{1})ª a (\\d{1})ª Temporada", "S0$1-0$2"] + - name: re_replace + args: ["(\\d{1})ª a (\\d{2})ª Temporada", "S0$1-$2"] + - name: re_replace + args: ["(\\d{2})ª Temporada", "S$1"] + - name: re_replace + args: ["(\\d{1})ª Temporada", "S0$1"] title|append: optional: true selector: td.label > div:contains("Qualidade:") diff --git a/src/Jackett.Common/Indexers/BJShare.cs b/src/Jackett.Common/Indexers/BJShare.cs index cad341a04..c3e6e098f 100644 --- a/src/Jackett.Common/Indexers/BJShare.cs +++ b/src/Jackett.Common/Indexers/BJShare.cs @@ -238,20 +238,22 @@ Encoding = Encoding.UTF8; ICollection Category = null; string YearStr = null; Nullable YearPublishDate = null; + string CategoryStr = ""; if (Row.ClassList.Contains("group") || Row.ClassList.Contains("torrent")) // group/ungrouped headers { var qCatLink = Row.QuerySelector("a[href^=\"/torrents.php?filter_cat\"]"); - string CategoryStr = qCatLink.GetAttribute("href").Split('=')[1].Split('&')[0]; + CategoryStr = qCatLink.GetAttribute("href").Split('=')[1].Split('&')[0]; Category = MapTrackerCatToNewznab(CategoryStr); + + YearStr = qDetailsLink.NextSibling.TextContent.Trim().TrimStart('[').TrimEnd(']'); + YearPublishDate = DateTime.SpecifyKind(DateTime.ParseExact(YearStr, "yyyy", CultureInfo.InvariantCulture), DateTimeKind.Unspecified); // if result is an anime, convert title from SXXEXX to EXX if (CategoryStr == "14") { Title = Regex.Replace(Title, @"(Ep[\.]?[ ]?)|([S]\d\d[Ee])", "E"); } - YearStr = qDetailsLink.NextSibling.TextContent.Trim().TrimStart('[').TrimEnd(']'); - YearPublishDate = DateTime.SpecifyKind(DateTime.ParseExact(YearStr, "yyyy", CultureInfo.InvariantCulture), DateTimeKind.Unspecified); if (Row.ClassList.Contains("group")) // group headers { @@ -278,7 +280,11 @@ Encoding = Encoding.UTF8; if (Row.ClassList.Contains("group_torrent")) // torrents belonging to a group { release.Description = qDetailsLink.TextContent; - release.Title = GroupTitle + " " + GroupYearStr; + + string cleanTitle = Regex.Replace(GroupTitle, @" - S?(?\d{1,2})?E?(?\d{1,4})?", ""); + string seasonEp = Regex.Replace(GroupTitle, @"^(.*?) - (S?(\d{1,2})?E?(\d{1,4})?)?", "$2"); + release.Title = CategoryStr == "14" ? GroupTitle : cleanTitle + " " + GroupYearStr + " " + seasonEp; + release.PublishDate = GroupPublishDate.Value; release.Category = GroupCategory; } @@ -286,7 +292,11 @@ Encoding = Encoding.UTF8; { var qDescription = Row.QuerySelector("div.torrent_info"); release.Description = qDescription.TextContent; - release.Title = Title + " " + YearStr; + + string cleanTitle = Regex.Replace(Title, @" - ((S(\d{1,2}))?E(\d{1,4}))", ""); + string seasonEp = Regex.Replace(Title, @"^(.*?) - ((S(\d{1,2}))?E(\d{1,4}))", "$2"); + release.Title = CategoryStr == "14" ? Title : cleanTitle + " " + YearStr + " " + seasonEp; + release.PublishDate = YearPublishDate.Value; release.Category = Category; } From 44dbdf2f10bbe6421308eaf891e15cdef062e5d5 Mon Sep 17 00:00:00 2001 From: Garfield69 Date: Wed, 27 Dec 2017 20:43:23 +1300 Subject: [PATCH 7/8] limetorrents: make downloadlink optionally itorrent or magnet --- src/Jackett.Common/Definitions/limetorrents.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Jackett.Common/Definitions/limetorrents.yml b/src/Jackett.Common/Definitions/limetorrents.yml index 923f2f27b..72c87a997 100644 --- a/src/Jackett.Common/Definitions/limetorrents.yml +++ b/src/Jackett.Common/Definitions/limetorrents.yml @@ -22,10 +22,18 @@ search: [q] tv-search: [q, season, ep] - settings: [] + settings: + - name: downloadlink + type: select + label: Download link + default: "magnet:" + options: + "http://itorrents.org/" : "iTorrents.org" + "magnet:": "magnet" download: - selector: a.csprite_dltorrent[href^="magnet:?xt"] + # the .torrent url is on the on the details page + selector: a.csprite_dltorrent[href^="{{ .Config.downloadlink }}"] search: paths: From 95adced183f8a99181d448e30a4b13396fc59361 Mon Sep 17 00:00:00 2001 From: Andrey Dorokhov Date: Wed, 27 Dec 2017 19:45:01 +0300 Subject: [PATCH 8/8] Fix a link to appveyor build status (#2330) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ca958d948..7aaa81a23 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![GitHub issues](https://img.shields.io/github/issues/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/pulls) [![Bountysource](https://img.shields.io/bountysource/team/jackett/activity.svg?style=flat-square)](https://www.bountysource.com/teams/jackett) -[![Build status](https://ci.appveyor.com/api/projects/status/gaybh5mvyx418nsp/branch/master?svg=true)](https://ci.appveyor.com/project/camjac251/jackett) +[![Build status](https://ci.appveyor.com/api/projects/status/gaybh5mvyx418nsp/branch/master?svg=true)](https://ci.appveyor.com/project/Jackett/jackett) [![Github Releases](https://img.shields.io/github/downloads/Jackett/Jackett/total.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/releases/latest) [![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/jackett.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/jackett/) [![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60&style=flat-square)](https://discord.gg/J865QuA)