diff --git a/README.md b/README.md index adadc409e..d98071243 100644 --- a/README.md +++ b/README.md @@ -248,6 +248,7 @@ Prior versions of Jackett are no longer supported. * ABtorrents (ABT + RNS) * AcrossTheTasman [![(invite needed)][inviteneeded]](#) * Aftershock + * AFUN * AGSVPT (Arctic Global Seed Vault) * Aidoru!Online * Aither diff --git a/src/Jackett.Common/Definitions/afun.yml b/src/Jackett.Common/Definitions/afun.yml new file mode 100644 index 000000000..3e1bc4e75 --- /dev/null +++ b/src/Jackett.Common/Definitions/afun.yml @@ -0,0 +1,202 @@ +--- +id: afun +name: AFUN +description: "AFUN is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL" +language: zh-CN +type: private +encoding: UTF-8 +links: + - https://www.ptlover.cc/ + +caps: + categorymappings: + - {id: 407, cat: TV/Sport, desc: "Sports/赛事"} + - {id: 414, cat: TV, desc: "TV Shows/综艺"} + - {id: 408, cat: Audio, desc: "HQ Audio/HQ音频"} + - {id: 409, cat: Other, desc: "Misc/其他"} + - {id: 407, cat: TV/Sport, desc: "TV Sport/体育"} + - {id: 406, cat: Audio/Video, desc: "Music Videos/MV"} + - {id: 403, cat: TV, desc: "TV Talk Shows/脱口秀"} + - {id: 402, cat: TV, desc: "TV Series/电视剧"} + - {id: 405, cat: TV/Anime, desc: "Anime/动画"} + - {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"} + - {id: 401, cat: Movies, desc: "Movies/电影"} + + modes: + search: [q] + tv-search: [q, season, ep, imdbid] + movie-search: [q, imdbid] + music-search: [q] + +settings: + - name: username + type: text + label: Username + - name: password + type: password + label: Password + - name: 2facode + type: text + label: 2FA code + - name: info_2fa + type: info + label: "About 2FA code" + default: "Only fill in the 2FA code box if you have enabled 2FA on the HDBao Web Site. Otherwise just leave it empty." + - name: freeleech + type: checkbox + label: Search freeleech only + default: false + - name: sort + type: select + label: Sort requested from site + default: 4 + options: + 4: created + 7: seeders + 5: size + 1: title + - name: type + type: select + label: Order requested from site + default: desc + options: + desc: desc + asc: asc + - name: info_tpp + type: info + label: Results Per Page + default: For best results, change the Torrents per page: setting to 100 on your account profile. + - name: info_activity + type: info + label: Account Inactivity + default: "Cherish your user account. Inactive accounts would be deleted based on the following rules:
  1. Veteran User or above would never be deleted.
  2. Elite User or above would never be deleted if parked (at User CP).
  3. Parked accounts would be deleted if users have not logged in for more than 400 days in a row.
  4. Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.
" + +login: + path: login.php + method: form + form: form[action="takelogin.php"] + captcha: + type: image + selector: img[alt="CAPTCHA"] + input: imagestring + inputs: + secret: "" + username: "{{ .Config.username }}" + password: "{{ .Config.password }}" + two_step_code: "{{ .Config.2facode }}" + logout: "" + securelogin: "" + ssl: yes + trackerssl: yes + error: + - selector: td.embedded:contains("失败") + test: + path: index.php + selector: a[href="logout.php"] + +search: + paths: + - path: torrents.php + inputs: + $raw: "{{ range .Categories }}cat{{.}}=1&{{end}}" + # searching in description causes HTTP 500 so we will not support doubanid searching + search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" + # 0: include dead, 1: alive, 2: dead + incldead: 0 + # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% + spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}" + # 0: title, 1: description, 3: uploader, 4: imdburl + search_area: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}" + # 0: AND, 2: exact + search_mode: 0 + sort: "{{ .Config.sort }}" + type: "{{ .Config.type }}" + # Support in NexusPHP so bots don't pollute trending searches: + notnewword: 1 + + rows: + selector: table.torrents > tbody > tr:has(a[href^="download.php?id="]) + + fields: + category: + selector: a[href^="?cat="] + attribute: href + filters: + - name: querystring + args: cat + title_default: + selector: a[href^="details.php?id="] + title: + selector: a[title][href^="details.php?id="] + attribute: title + optional: true + default: "{{ .Result.title_default }}" + details: + selector: a[href^="details.php?id="] + attribute: href + download: + selector: a[href^="download.php?id="] + attribute: href + poster: + selector: img[data-src] + attribute: data-src + imdbid: + # site currently only has a badge and rating, the id is not present. just in case a future update. + selector: a[href*="imdb.com/title/tt"] + attribute: href + doubanid: + # site currently only has a badge and rating, the id is not present. just in case a future update. + selector: a[href*="movie.douban.com/subject/"] + attribute: href + date_elapsed: + # time type: time elapsed (default) + selector: td:nth-child(4) > span[title] + attribute: title + optional: true + filters: + - name: append + args: " +08:00" # CST + - name: dateparse + args: "yyyy-MM-dd HH:mm:ss zzz" + date_added: + # time added + selector: td:nth-child(4):not(:has(span)) + optional: true + filters: + - name: append + args: " +08:00" # CST + - name: dateparse + args: "yyyy-MM-ddHH:mm:ss zzz" + date: + text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}" + size: + selector: td:nth-child(5) + seeders: + selector: td:nth-child(6) + leechers: + selector: td:nth-child(7) + grabs: + selector: td:nth-child(8) + 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 + description: + selector: td:nth-child(2) + remove: a, b, font, img, span + minimumratio: + text: 1.0 + minimumseedtime: + # 2 days (as seconds = 2 x 24 x 60 x 60) + text: 172800 +# NexusPHP v1.9.0 2025-02-06