├── .gitignore ├── LICENSE ├── README.md ├── generate.py ├── nas-tools ├── user.sites.bin ├── user.sites.json └── user.sites.pack.json ├── nastools_generate.py ├── old ├── user.sites.dat └── user.sites.old.json ├── package-lock.json ├── package.json ├── sites ├── 2xFree.json ├── 52PT.json ├── ACG.RIP.json ├── EZTV.json ├── IPT.json ├── JPTV.json ├── JoyHD.json ├── MonikaDesign.json ├── NICE.json ├── NYAA(INK).json ├── NYAA(SUKEBEI).json ├── NYAA.json ├── OK.json ├── PTLSP.json ├── PTT.json ├── PT之家.json ├── TTG.json ├── U2.json ├── Ubits.json ├── UltraHD.json ├── exoticaz.json ├── hdvbits.json ├── iHDBits.json ├── ptvicomo.json ├── sharkpt.json ├── u9a9.json ├── 他吹吹风.json ├── 伊甸园.json ├── 兽站.json ├── 冬樱.json ├── 冰淇淋(fangwen2).json ├── 冰淇淋.json ├── 动漫花园.json ├── 北洋园.json ├── 北邮人.json ├── 南洋.json ├── 吐鲁番.json ├── 咖啡.json ├── 壹.json ├── 备胎.json ├── 大青虫.json ├── 天雪(skyey2).json ├── 天雪(skyeysnow).json ├── 奥申.json ├── 好多油.json ├── 学校.json ├── 家园.json ├── 小蚂蚁.json ├── 库非.json ├── 彩虹岛.json ├── 彩虹岛备用域名.json ├── 影.json ├── 憨憨.json ├── 我堡.json ├── 打胶.json ├── 明教.json ├── 星空(影).json ├── 春天.json ├── 朋友.json ├── 朱雀.json ├── 杏坛.json ├── 梓喵.json ├── 海棠.json ├── 海胆.json ├── 漫喵.json ├── 烧包乐园.json ├── 熊猫.json ├── 猪猪.json ├── 猫站.json ├── 瓷器.json ├── 白兔.json ├── 百川.json ├── 皇后.json ├── 红叶.json ├── 红豆饭.json ├── 织梦.json ├── 聆音.json ├── 肉丝.json ├── 自由农场.json ├── 葡萄.json ├── 蜜柑.json ├── 蝴蝶.json ├── 蝶粉.json ├── 观众.json ├── 车.json ├── 铂金学院.json ├── 阿童木.json ├── 飞天拉面.json ├── 馒头(KPCC).json ├── 馒头(XPCC_PORN).json ├── 馒头(XPINFO).json ├── 馒头(XPIO).json ├── 马杀鸡.json ├── 高清天空.json ├── 高清时间.json ├── 高清杜比.json ├── 高清空间.json ├── 高清视界.json ├── 高清视频.json ├── 麒麟.json └── 龙之家.json ├── user.sites.bin ├── user.sites.json ├── user.sites.jsons.txt ├── user.sites.jsons.zip └── user.sites.pack.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/** -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 mantou568 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nas-tools-sites 2 | 3 | # 1、修改站点 4 | 5 | # 2、运行 python3.10 generate.py 6 | -------------------------------------------------------------------------------- /generate.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import base64 4 | from datetime import datetime 5 | from urllib.parse import urlparse 6 | import shutil 7 | from zipfile import ZipFile 8 | 9 | def get_netloc(url): 10 | """ 11 | 传入一个url获取完整的子域名 12 | """ 13 | return urlparse(url).netloc if url else '' 14 | 15 | def merge_json_files(folder_path): 16 | """ 17 | 将指定文件夹下的json文件合并为一个字典 18 | """ 19 | indexers = {} 20 | for filename in os.listdir(folder_path): 21 | if not filename.endswith(".json"): 22 | continue 23 | filepath = os.path.join(folder_path, filename) 24 | try: 25 | with open(filepath, "r", encoding="utf-8") as f: 26 | data = json.load(f) 27 | if not isinstance(data, dict) or not data.get("domain"): 28 | continue 29 | netloc = get_netloc(data["domain"]) 30 | indexers[netloc] = data 31 | except Exception as e: 32 | print(f"Error reading {filename}: {str(e)}") 33 | return indexers 34 | 35 | def save_data_to_json(data, json_path, json_pack_path): 36 | """ 37 | 将数据保存为两个不同格式的json文件 38 | """ 39 | version = datetime.now().strftime("%Y%m%d%H%M") 40 | result = {"version": version, "indexer": data} 41 | 42 | with open(json_path, "w", encoding="utf-8") as f: 43 | json.dump(result, f, ensure_ascii=True, indent=4) 44 | 45 | with open(json_pack_path, "w", encoding="utf-8") as f: 46 | json.dump(result, f, separators=(',', ':'), ensure_ascii=True) 47 | 48 | def save_json_to_dat(json_path, bin_path): 49 | """ 50 | 将json文件转换为base64并保存到dat文件 51 | """ 52 | with open(json_path, "r", encoding="utf-8") as f: 53 | json_data = f.read() 54 | base64_data = base64.b64encode(json_data.encode("utf-8")).decode("utf-8") 55 | 56 | with open(bin_path, "w", encoding="utf-8") as f: 57 | f.write(base64_data) 58 | 59 | def format_json_file(file_path): 60 | """ 61 | 格式化json文件 62 | """ 63 | try: 64 | with open(file_path, "r") as f: 65 | data = json.load(f) 66 | except json.JSONDecodeError as e: 67 | print(f"Error decoding JSON in {file_path}: {e}") 68 | return 69 | 70 | with open(file_path, "w") as f: 71 | json.dump(data, f, indent=4) 72 | 73 | def format_json_files_in_folder(folder_path): 74 | """ 75 | 格式化指定文件夹下的所有json文件 76 | """ 77 | for filename in os.listdir(folder_path): 78 | file_path = os.path.join(folder_path, filename) 79 | if os.path.isfile(file_path) and filename.lower().endswith(".json"): 80 | format_json_file(file_path) 81 | 82 | def create_or_clear_sites_file(sites_dat_path): 83 | """ 84 | 创建或清空文件 85 | """ 86 | mode = "w" if os.path.exists(sites_dat_path) else "x" 87 | with open(sites_dat_path, mode): 88 | pass 89 | 90 | def compress_folder(folder_path, output_zip_name): 91 | """ 92 | 压缩指定文件夹并保存到当前目录下 93 | """ 94 | if os.path.exists(output_zip_name): 95 | os.remove(output_zip_name) 96 | 97 | with ZipFile(output_zip_name, 'w') as zipf: 98 | for root, dirs, files in os.walk(folder_path): 99 | for file in files: 100 | file_path = os.path.join(root, file) 101 | zipf.write(file_path, os.path.relpath(file_path, folder_path)) 102 | 103 | def gather_json_files(input_folder, output_file_path, url_prefix): 104 | if os.path.exists(output_file_path): 105 | os.remove(output_file_path) 106 | 107 | for filename in os.listdir(input_folder): 108 | if not filename.endswith(".json"): 109 | continue 110 | 111 | json_file_path = os.path.join(input_folder, filename) 112 | with open(output_file_path, 'a', encoding='utf-8') as output_file: 113 | output_file.write(f"{url_prefix}/{json_file_path}\n") 114 | 115 | def extract_archive(archive_path, output_folder): 116 | """ 117 | 解压缩指定的压缩包到指定的文件夹 118 | """ 119 | shutil.unpack_archive(archive_path, output_folder) 120 | 121 | if __name__ == "__main__": 122 | # 格式化sites目录下的json文件 123 | format_json_files_in_folder("sites") 124 | 125 | # 创建或清空相关文件 126 | for file_path in ["user.sites.bin", "user.sites.json", "user.sites.pack.json"]: 127 | create_or_clear_sites_file(file_path) 128 | 129 | # 合并json文件并保存为不同格式 130 | indexers = merge_json_files("sites") 131 | save_data_to_json(indexers, "user.sites.json", "user.sites.pack.json") 132 | 133 | # 将json文件转为dat文件 134 | save_json_to_dat("user.sites.pack.json", "user.sites.bin") 135 | 136 | # 将sites目录压缩后保存 137 | compress_folder("sites", "user.sites.jsons.zip") 138 | 139 | # 写入所有的json文件地址到文件中 140 | gather_json_files("sites", "user.sites.jsons.txt", "https://raw.githubusercontent.com/hsuyelin/nas-tools-sites/master") 141 | -------------------------------------------------------------------------------- /nastools_generate.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | from datetime import datetime 4 | import base64 5 | 6 | # 遍历文件夹,将json文件转为字典 7 | def process_json_files(folder_path): 8 | indexers = [] 9 | confs = {} 10 | for filename in os.listdir(folder_path): 11 | if filename.endswith(".json"): 12 | filepath = os.path.join(folder_path, filename) 13 | try: 14 | with open(filepath, "r", encoding="utf-8") as f: 15 | data = json.load(f) 16 | if isinstance(data, dict): 17 | indexer_data = {k: v for k, v in data.items() if k != "conf"} 18 | indexers.append(indexer_data) 19 | if "conf" in data: 20 | domain = data["domain"].split("//")[-1].split("/")[0] 21 | confs[domain] = data["conf"] 22 | else: 23 | print(f"Error: {filename} cannot be converted to a dictionary.") 24 | except Exception as e: 25 | print(f"Error reading {filename}: {str(e)}") 26 | return indexers, confs 27 | 28 | # 将数据保存为json文件 29 | def save_data_to_json(data, json_path, json_pack_path): 30 | version = datetime.now().strftime("%Y%m%d%H%M") 31 | result = { 32 | "version": version, 33 | "indexer": data[0], 34 | "conf": data[1] 35 | } 36 | with open(json_path, "w", encoding="utf-8") as f: 37 | json.dump(result, f, ensure_ascii=True, indent=4) 38 | 39 | with open(json_pack_path, "w", encoding="utf-8") as f: 40 | json.dump(result, f, separators=(',', ':'), ensure_ascii=True) 41 | 42 | # 将json文件转换为base64并保存到dat文件 43 | def save_json_to_dat(json_path, bin_path): 44 | with open(json_path, "r", encoding="utf-8") as f: 45 | json_data = f.read() 46 | base64_data = base64.b64encode(json_data.encode("utf-8")).decode("utf-8") 47 | with open(bin_path, "w", encoding="utf-8") as f: 48 | f.write(base64_data) 49 | 50 | 51 | def format_json_file(file_path): 52 | """ 53 | 格式化json文件 54 | """ 55 | with open(file_path, "r") as f: 56 | try: 57 | data = json.load(f) 58 | except json.JSONDecodeError as e: 59 | print(f"Error decoding JSON in {file_path}: {e}") 60 | return 61 | 62 | with open(file_path, "w") as f: 63 | json.dump(data, f, indent=4) 64 | 65 | def format_json_files_in_folder(folder_path): 66 | """ 67 | 格式化sites目录下的json文件 68 | """ 69 | for filename in os.listdir(folder_path): 70 | file_path = os.path.join(folder_path, filename) 71 | if os.path.isfile(file_path) and filename.lower().endswith(".json"): 72 | format_json_file(file_path) 73 | 74 | def create_or_clear_sites_file(sites_dat_path): 75 | """ 76 | 创建或清空文件 77 | """ 78 | sites_dat_dir = os.path.dirname(sites_dat_path) 79 | if not os.path.exists(sites_dat_dir): 80 | os.makedirs(sites_dat_dir, exist_ok=True) 81 | if os.path.exists(sites_dat_path): 82 | with open(sites_dat_path, "w") as f: 83 | f.truncate(0) 84 | else: 85 | with open(sites_dat_path, "w") as f: 86 | pass 87 | 88 | def convert_base64_to_json(input_file_path, output_file_path): 89 | """ 90 | 旧的json转换方法 91 | """ 92 | with open(input_file_path, 'r') as input_file, open(output_file_path, 'w') as output_file: 93 | line_number = 0 94 | for line in input_file: 95 | line_number += 1 96 | try: 97 | decoded_line = base64.b64decode(line.strip()).decode('utf-8') 98 | json_data = json.loads(decoded_line) 99 | json.dump(json_data, output_file) 100 | output_file.write('\n') 101 | except Exception as e: 102 | print(f"Error on line {line_number}: {str(e)}") 103 | 104 | if __name__ == "__main__": 105 | format_json_files_in_folder("sites") 106 | create_or_clear_sites_file("nas-tools/user.sites.bin") 107 | create_or_clear_sites_file("nas-tools/user.sites.json") 108 | create_or_clear_sites_file("nas-tools/user.sites.pack.json") 109 | indexers, confs = process_json_files("sites") 110 | data = (indexers, confs) 111 | save_data_to_json(data, "nas-tools/user.sites.json", "nas-tools/user.sites.pack.json") 112 | save_json_to_dat("nas-tools/user.sites.pack.json", "nas-tools/user.sites.bin") 113 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "cz-conventional-changelog": "^3.3.0" 4 | }, 5 | "config": { 6 | "commitizen": { 7 | "path": "./node_modules/cz-conventional-changelog" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /sites/ACG.RIP.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "ACG.RIP", 3 | "name": "ACG.RIP", 4 | "domain": "https://acg.rip/", 5 | "encoding": "UTF-8", 6 | "public": true, 7 | "proxy": true, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "?term={keyword}", 12 | "method": "get" 13 | } 14 | ] 15 | }, 16 | "browse": { 17 | "path": "page/{page}", 18 | "start": 1 19 | }, 20 | "torrents": { 21 | "list": { 22 | "selector": "table.table-hover > tr" 23 | }, 24 | "fields": { 25 | "id": { 26 | "selector": "a[href*=\"/t/\"]", 27 | "attribute": "href", 28 | "filters": [ 29 | { 30 | "name": "re_search", 31 | "args": [ 32 | "\\d+", 33 | 0 34 | ] 35 | } 36 | ] 37 | }, 38 | "title": { 39 | "selector": "span.title > a" 40 | }, 41 | "details": { 42 | "selector": "span.title > a", 43 | "attribute": "href" 44 | }, 45 | "download": { 46 | "selector": "td.action > a", 47 | "attribute": "href" 48 | }, 49 | "date_added": { 50 | "selector": "td.date > time", 51 | "attribute": "datetime" 52 | }, 53 | "size": { 54 | "selector": "td.size" 55 | }, 56 | "seeders": { 57 | "selector": "td.peers > div.seed > span" 58 | }, 59 | "leechers": { 60 | "selector": "td.peers > div.leech > span" 61 | }, 62 | "grabs": { 63 | "selector": "td.peers > div.done > span" 64 | }, 65 | "downloadvolumefactor": { 66 | "case": { 67 | "*": 0 68 | } 69 | }, 70 | "uploadvolumefactor": { 71 | "case": { 72 | "*": 1 73 | } 74 | } 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /sites/EZTV.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "EZTV", 3 | "name": "EZTV", 4 | "domain": "https://eztv.re/", 5 | "encoding": "UTF-8", 6 | "public": true, 7 | "proxy": true, 8 | "language": "en", 9 | "search": { 10 | "paths": [ 11 | { 12 | "path": "search/{keyword}", 13 | "method": "get" 14 | } 15 | ] 16 | }, 17 | "browse": { 18 | "path": "page_{page}" 19 | }, 20 | "torrents": { 21 | "list": { 22 | "selector": "table.forum_header_border > tr[name]" 23 | }, 24 | "fields": { 25 | "id": { 26 | "selector": "td:nth-child(2) > a[href*=\"/ep/\"]", 27 | "attribute": "href", 28 | "filters": [ 29 | { 30 | "name": "re_search", 31 | "args": [ 32 | "\\d+", 33 | 0 34 | ] 35 | } 36 | ] 37 | }, 38 | "title": { 39 | "selector": "td:nth-child(2) > a", 40 | "attribute": "title" 41 | }, 42 | "details": { 43 | "selector": "td:nth-child(2) > a", 44 | "attribute": "href" 45 | }, 46 | "download": { 47 | "selector": "td:nth-child(3) > a[href*=\".torrent\"]", 48 | "attribute": "href" 49 | }, 50 | "date_added": { 51 | "selector": "td:nth-child(5)", 52 | "optional": true 53 | }, 54 | "size": { 55 | "selector": "td:nth-child(4)" 56 | }, 57 | "seeders": { 58 | "selector": "td:nth-child(6) > font" 59 | }, 60 | "downloadvolumefactor": { 61 | "case": { 62 | "*": 0 63 | } 64 | }, 65 | "uploadvolumefactor": { 66 | "case": { 67 | "*": 1 68 | } 69 | } 70 | } 71 | } 72 | } -------------------------------------------------------------------------------- /sites/IPT.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "IPT", 3 | "name": "IPT", 4 | "domain": "https://iptorrents.com/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "t?q={keyword}", 11 | "method": "get" 12 | } 13 | ] 14 | }, 15 | "torrents": { 16 | "list": { 17 | "selector": "table[id=\"torrents\"] tr" 18 | }, 19 | "fields": { 20 | "id": { 21 | "selector": "a[href*=\"/t/\"]", 22 | "attribute": "href", 23 | "filters": [ 24 | { 25 | "name": "re_search", 26 | "args": [ 27 | "\\d+", 28 | 0 29 | ] 30 | } 31 | ] 32 | }, 33 | "title": { 34 | "selector": "a[href*=\"/t/\"]", 35 | "contents": 0 36 | }, 37 | "category": { 38 | "selector": "a[href*=\"?\"]", 39 | "attribute": "href", 40 | "filters": [ 41 | { 42 | "name": "replace", 43 | "args": [ 44 | "?", 45 | "" 46 | ] 47 | } 48 | ] 49 | }, 50 | "details": { 51 | "selector": "a[href*=\"/t/\"]", 52 | "attribute": "href" 53 | }, 54 | "download": { 55 | "selector": "a[href*=\"/download.php/\"]", 56 | "attribute": "href", 57 | "filters": [ 58 | { 59 | "name": "lstrip", 60 | "args": [ 61 | "/" 62 | ] 63 | } 64 | ] 65 | }, 66 | "date_elapsed": { 67 | "selector": "td:nth-child(2) > div", 68 | "optional": true 69 | }, 70 | "date_added": { 71 | "selector": "td:nth-child(2) > div", 72 | "optional": true 73 | }, 74 | "date": { 75 | "selector": "td:nth-child(2) > div", 76 | "filters": [ 77 | { 78 | "name": "split", 79 | "args": [ 80 | "|", 81 | 1 82 | ] 83 | }, 84 | { 85 | "name": "date_en_elapsed_parse" 86 | } 87 | ] 88 | }, 89 | "size": { 90 | "selector": "td:nth-child(6)" 91 | }, 92 | "seeders": { 93 | "selector": "td:nth-child(8)" 94 | }, 95 | "leechers": { 96 | "selector": "td:nth-child(9)" 97 | }, 98 | "grabs": { 99 | "selector": "td:nth-child(7)" 100 | }, 101 | "downloadvolumefactor": { 102 | "case": { 103 | "span.free": 0, 104 | "*": 1 105 | } 106 | }, 107 | "uploadvolumefactor": { 108 | "case": { 109 | "*": 1 110 | } 111 | }, 112 | "free_deadline": { 113 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 114 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f" 115 | }, 116 | "minimumratio": { 117 | "text": 1 118 | }, 119 | "minimumseedtime": { 120 | "text": 1209600 121 | } 122 | } 123 | } 124 | } -------------------------------------------------------------------------------- /sites/JPTV.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "JPTV", 3 | "name": "JPTV", 4 | "domain": "https://jptv.club/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents/filter?search={keyword}", 11 | "method": "get" 12 | } 13 | ] 14 | }, 15 | "browse": { 16 | "path": "torrents/filter?page={page}", 17 | "start": 1 18 | }, 19 | "torrents": { 20 | "list": { 21 | "selector": "div.table-responsive > table > tbody > tr" 22 | }, 23 | "fields": { 24 | "id": { 25 | "selector": "a.view-torrent", 26 | "attribute": "href", 27 | "filters": [ 28 | { 29 | "name": "re_search", 30 | "args": [ 31 | "\\d+", 32 | 0 33 | ] 34 | } 35 | ] 36 | }, 37 | "title": { 38 | "selector": "a.view-torrent" 39 | }, 40 | "details": { 41 | "selector": "a.view-torrent", 42 | "attribute": "href" 43 | }, 44 | "download": { 45 | "selector": "a[href*=\"torrents/download/\"]", 46 | "attribute": "href" 47 | }, 48 | "date_elapsed": { 49 | "selector": "td:nth-child(7) > time" 50 | }, 51 | "size": { 52 | "selector": "td:nth-child(8) > span", 53 | "remove": "span" 54 | }, 55 | "seeders": { 56 | "selector": "td:nth-child(9) > a > span" 57 | }, 58 | "leechers": { 59 | "selector": "td:nth-child(10) > a > span" 60 | }, 61 | "grabs": { 62 | "selector": "td:nth-child(11) > a > span", 63 | "filters": [ 64 | { 65 | "name": "re_search", 66 | "args": [ 67 | "\\d+", 68 | 0 69 | ] 70 | } 71 | ] 72 | }, 73 | "downloadvolumefactor": { 74 | "case": { 75 | "*": 1 76 | } 77 | }, 78 | "uploadvolumefactor": { 79 | "case": { 80 | "*": 1 81 | } 82 | } 83 | } 84 | }, 85 | "conf": { 86 | "FREE": [ 87 | "//span/i[@class='fas fa-star text-gold']" 88 | ], 89 | "2XFREE": [], 90 | "HR": [], 91 | "PEER_COUNT": [ 92 | "//span[@class='badge-extra text-green']" 93 | ] 94 | } 95 | } -------------------------------------------------------------------------------- /sites/MonikaDesign.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "MonikaDesign", 3 | "name": "MonikaDesign", 4 | "domain": "https://monikadesign.uk/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "proxy": false, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "torrents?perPage=100&name={keyword}&categories[0]=6&categories[1]=7&categories[2]=5&categories[3]=1&categories[4]=8&categories[5]=2", 12 | "method": "get" 13 | } 14 | ] 15 | }, 16 | "browse": { 17 | "path": "torrents?perPage=100&page={page}", 18 | "start": 1 19 | }, 20 | "torrents": { 21 | "list": { 22 | "selector": "table#torrent-list-table > tbody > tr" 23 | }, 24 | "fields": { 25 | "id": { 26 | "selector": "a.view-torrent.torrent-listings-name", 27 | "attribute": "href", 28 | "filters": [ 29 | { 30 | "name": "re_search", 31 | "args": [ 32 | "\\d+", 33 | 0 34 | ] 35 | } 36 | ] 37 | }, 38 | "title": { 39 | "selector": "a.view-torrent.torrent-listings-name" 40 | }, 41 | "description": { 42 | "selector": "span.view-torrent.torrent-listings-subhead > b" 43 | }, 44 | "details": { 45 | "selector": "a.view-torrent.torrent-listings-name", 46 | "attribute": "href" 47 | }, 48 | "download": { 49 | "selector": "a[href*=\"/torrents/download/\"]", 50 | "attribute": "href" 51 | }, 52 | "date_elapsed": { 53 | "selector": "td.torrent-listings-age > span.badge-extra" 54 | }, 55 | "date": { 56 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 57 | "filters": [ 58 | { 59 | "name": "dateparse", 60 | "args": "%Y-%m-%d %H:%M:%S" 61 | } 62 | ] 63 | }, 64 | "size": { 65 | "selector": "td.torrent-listings-size > span" 66 | }, 67 | "seeders": { 68 | "selector": "td.torrent-listings-seeders > a > span" 69 | }, 70 | "leechers": { 71 | "selector": "td.torrent-listings-leechers > a > span" 72 | }, 73 | "grabs": { 74 | "selector": "td.torrent-listings-completed > a > span" 75 | }, 76 | "downloadvolumefactor": { 77 | "case": { 78 | "span.torrent-listings-freeleech": 0, 79 | "*": 1 80 | } 81 | }, 82 | "uploadvolumefactor": { 83 | "case": { 84 | "*": 1 85 | } 86 | } 87 | } 88 | }, 89 | "conf": { 90 | "FREE": [ 91 | "//span[@class='badge-extra'][contains(@data-original-title,'Free')]" 92 | ], 93 | "2XFREE": [], 94 | "HR": [], 95 | "PEER_COUNT": [ 96 | "//a[@class='badge-extra text-green'][contains(@data-original-title,'\u505a\u79cd')]" 97 | ] 98 | } 99 | } -------------------------------------------------------------------------------- /sites/NICE.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "NICE", 3 | "name": "NICE", 4 | "domain": "https://www.nicept.net/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "title_default": { 41 | "selector": "a[href*=\"details.php?id=\"]" 42 | }, 43 | "title_optional": { 44 | "optional": true, 45 | "selector": "a[title][href*=\"details.php?id=\"]", 46 | "attribute": "title" 47 | }, 48 | "title": { 49 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 50 | }, 51 | "category": { 52 | "selector": "a[href*=\"?cat=\"]", 53 | "attribute": "href", 54 | "filters": [ 55 | { 56 | "name": "replace", 57 | "args": [ 58 | "?", 59 | "" 60 | ] 61 | }, 62 | { 63 | "name": "querystring", 64 | "args": "cat" 65 | } 66 | ] 67 | }, 68 | "details": { 69 | "selector": "a[href*=\"details.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "download": { 73 | "selector": "a[href*=\"download.php?id=\"]", 74 | "attribute": "href" 75 | }, 76 | "poster": { 77 | "text": "" 78 | }, 79 | "imdbid": { 80 | "selector": "div.imdb_100 > a", 81 | "attribute": "href", 82 | "filters": [ 83 | { 84 | "name": "re_search", 85 | "args": [ 86 | "tt\\d+", 87 | 0 88 | ] 89 | } 90 | ] 91 | }, 92 | "date_elapsed": { 93 | "selector": "td:nth-child(4) > span", 94 | "optional": true 95 | }, 96 | "date_added": { 97 | "selector": "td:nth-child(4) > span", 98 | "attribute": "title", 99 | "optional": true 100 | }, 101 | "date": { 102 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 103 | "filters": [ 104 | { 105 | "name": "dateparse", 106 | "args": "%Y-%m-%d %H:%M:%S" 107 | } 108 | ] 109 | }, 110 | "size": { 111 | "selector": "td:nth-child(5)" 112 | }, 113 | "seeders": { 114 | "selector": "td:nth-child(6)" 115 | }, 116 | "leechers": { 117 | "selector": "td:nth-child(7)" 118 | }, 119 | "grabs": { 120 | "selector": "td:nth-child(8)" 121 | }, 122 | "downloadvolumefactor": { 123 | "case": { 124 | "img.pro_free": 0, 125 | "img.pro_free2up": 0, 126 | "img.pro_50pctdown": 0.5, 127 | "img.pro_50pctdown2up": 0.5, 128 | "img.pro_30pctdown": 0.3, 129 | "*": 1 130 | } 131 | }, 132 | "uploadvolumefactor": { 133 | "case": { 134 | "img.pro_50pctdown2up": 2, 135 | "img.pro_free2up": 2, 136 | "img.pro_2up": 2, 137 | "*": 1 138 | } 139 | }, 140 | "free_deadline": { 141 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 142 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 143 | "selector": "img.pro_free,img.pro_free2up", 144 | "attribute": "onmouseover", 145 | "filters": [ 146 | { 147 | "name": "re_search", 148 | "args": [ 149 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 150 | 0 151 | ] 152 | }, 153 | { 154 | "name": "dateparse", 155 | "args": "%Y-%m-%d %H:%M:%S" 156 | } 157 | ] 158 | }, 159 | "description": { 160 | "selector": "td:nth-child(2) > table > tr > td.embedded", 161 | "contents": -1 162 | }, 163 | "labels": { 164 | "selector": "td:nth-child(2) > table > tr > td.embedded > span" 165 | } 166 | } 167 | }, 168 | "conf": { 169 | "FREE": [ 170 | "//h1[@id='top']/b/font[@class='free']" 171 | ], 172 | "2XFREE": [ 173 | "//h1[@id='top']/b/font[@class='twoupfree']" 174 | ], 175 | "HR": [], 176 | "PEER_COUNT": [] 177 | } 178 | } -------------------------------------------------------------------------------- /sites/NYAA(INK).json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "NYAA(INK)", 3 | "name": "NYAA(INK)", 4 | "domain": "https://nyaa.ink/", 5 | "encoding": "UTF-8", 6 | "public": true, 7 | "proxy": true, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "?f=0&c=0_0&q={keyword}", 12 | "method": "get" 13 | } 14 | ] 15 | }, 16 | "browse": { 17 | "path": "?p={page}", 18 | "start": 1 19 | }, 20 | "torrents": { 21 | "list": { 22 | "selector": "table.torrent-list > tbody > tr" 23 | }, 24 | "fields": { 25 | "id": { 26 | "selector": "a[href*=\"/view/\"]", 27 | "attribute": "href", 28 | "filters": [ 29 | { 30 | "name": "re_search", 31 | "args": [ 32 | "\\d+", 33 | 0 34 | ] 35 | } 36 | ] 37 | }, 38 | "title": { 39 | "selector": "td:nth-child(2) > a" 40 | }, 41 | "details": { 42 | "selector": "td:nth-child(2) > a", 43 | "attribute": "href" 44 | }, 45 | "download": { 46 | "selector": "td:nth-child(3) > a[href*=\"/download/\"]", 47 | "attribute": "href" 48 | }, 49 | "date_added": { 50 | "selector": "td:nth-child(5)" 51 | }, 52 | "size": { 53 | "selector": "td:nth-child(4)" 54 | }, 55 | "seeders": { 56 | "selector": "td:nth-child(6)" 57 | }, 58 | "leechers": { 59 | "selector": "td:nth-child(7)" 60 | }, 61 | "grabs": { 62 | "selector": "td:nth-child(8)" 63 | }, 64 | "downloadvolumefactor": { 65 | "case": { 66 | "*": 0 67 | } 68 | }, 69 | "uploadvolumefactor": { 70 | "case": { 71 | "*": 1 72 | } 73 | } 74 | } 75 | } 76 | } -------------------------------------------------------------------------------- /sites/NYAA(SUKEBEI).json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "NYAA(SUKEBEI)", 3 | "name": "NYAA(SUKEBEI)", 4 | "domain": "https://sukebei.nyaa.si/", 5 | "encoding": "UTF-8", 6 | "public": true, 7 | "proxy": true, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "?f=0&c=0_0&q={keyword}", 12 | "method": "get" 13 | } 14 | ] 15 | }, 16 | "browse": { 17 | "path": "?p={page}", 18 | "start": 1 19 | }, 20 | "torrents": { 21 | "list": { 22 | "selector": "table.torrent-list > tbody > tr" 23 | }, 24 | "fields": { 25 | "id": { 26 | "selector": "a[href*=\"/view/\"]", 27 | "attribute": "href", 28 | "filters": [ 29 | { 30 | "name": "re_search", 31 | "args": [ 32 | "\\d+", 33 | 0 34 | ] 35 | } 36 | ] 37 | }, 38 | "title": { 39 | "selector": "td:nth-child(2) > a" 40 | }, 41 | "details": { 42 | "selector": "td:nth-child(2) > a", 43 | "attribute": "href" 44 | }, 45 | "download": { 46 | "selector": "td:nth-child(3) > a[href*=\"/download/\"]", 47 | "attribute": "href" 48 | }, 49 | "date_added": { 50 | "selector": "td:nth-child(5)" 51 | }, 52 | "size": { 53 | "selector": "td:nth-child(4)" 54 | }, 55 | "seeders": { 56 | "selector": "td:nth-child(6)" 57 | }, 58 | "leechers": { 59 | "selector": "td:nth-child(7)" 60 | }, 61 | "grabs": { 62 | "selector": "td:nth-child(8)" 63 | }, 64 | "downloadvolumefactor": { 65 | "case": { 66 | "*": 0 67 | } 68 | }, 69 | "uploadvolumefactor": { 70 | "case": { 71 | "*": 1 72 | } 73 | } 74 | } 75 | } 76 | } -------------------------------------------------------------------------------- /sites/NYAA.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "NYAA", 3 | "name": "NYAA", 4 | "domain": "https://nyaa.si/", 5 | "encoding": "UTF-8", 6 | "public": true, 7 | "proxy": true, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "?f=0&c=0_0&q={keyword}", 12 | "method": "get" 13 | } 14 | ] 15 | }, 16 | "browse": { 17 | "path": "?p={page}", 18 | "start": 1 19 | }, 20 | "torrents": { 21 | "list": { 22 | "selector": "table.torrent-list > tbody > tr" 23 | }, 24 | "fields": { 25 | "id": { 26 | "selector": "a[href*=\"/view/\"]", 27 | "attribute": "href", 28 | "filters": [ 29 | { 30 | "name": "re_search", 31 | "args": [ 32 | "\\d+", 33 | 0 34 | ] 35 | } 36 | ] 37 | }, 38 | "title": { 39 | "selector": "td:nth-child(2) > a" 40 | }, 41 | "details": { 42 | "selector": "td:nth-child(2) > a", 43 | "attribute": "href" 44 | }, 45 | "download": { 46 | "selector": "td:nth-child(3) > a[href*=\"/download/\"]", 47 | "attribute": "href" 48 | }, 49 | "date_added": { 50 | "selector": "td:nth-child(5)" 51 | }, 52 | "size": { 53 | "selector": "td:nth-child(4)" 54 | }, 55 | "seeders": { 56 | "selector": "td:nth-child(6)" 57 | }, 58 | "leechers": { 59 | "selector": "td:nth-child(7)" 60 | }, 61 | "grabs": { 62 | "selector": "td:nth-child(8)" 63 | }, 64 | "downloadvolumefactor": { 65 | "case": { 66 | "*": 0 67 | } 68 | }, 69 | "uploadvolumefactor": { 70 | "case": { 71 | "*": 1 72 | } 73 | } 74 | } 75 | } 76 | } -------------------------------------------------------------------------------- /sites/PT之家.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "pthome", 3 | "name": "\u94c2\u91d1\u5bb6", 4 | "domain": "https://pthome.net/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": 401, 26 | "cat": "Movies", 27 | "desc": "Movies(\u7535\u5f71)" 28 | } 29 | ], 30 | "tv": [ 31 | { 32 | "id": 404, 33 | "cat": "TV/Documentary", 34 | "desc": "Documentaries(\u8bb0\u5f55\u7247)" 35 | }, 36 | { 37 | "id": 405, 38 | "cat": "TV/Anime", 39 | "desc": "Animations(\u52a8\u6f2b)" 40 | }, 41 | { 42 | "id": 402, 43 | "cat": "TV", 44 | "desc": "TV Series(\u7535\u89c6\u5267)" 45 | }, 46 | { 47 | "id": 403, 48 | "cat": "TV/Other", 49 | "desc": "TV Shows(\u7efc\u827a)" 50 | } 51 | ] 52 | }, 53 | "torrents": { 54 | "list": { 55 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 56 | }, 57 | "fields": { 58 | "id": { 59 | "selector": "a[href*=\"details.php?id=\"]", 60 | "attribute": "href", 61 | "filters": [ 62 | { 63 | "name": "re_search", 64 | "args": [ 65 | "\\d+", 66 | 0 67 | ] 68 | } 69 | ] 70 | }, 71 | "category": { 72 | "selector": "a[href*=\"?cat=\"]", 73 | "attribute": "href", 74 | "filters": [ 75 | { 76 | "name": "querystring", 77 | "args": "cat" 78 | } 79 | ] 80 | }, 81 | "title_default": { 82 | "selector": "a[href*=\"details.php?id=\"]" 83 | }, 84 | "title_optional": { 85 | "optional": true, 86 | "selector": "a[title][href*=\"details.php?id=\"]", 87 | "attribute": "title" 88 | }, 89 | "title": { 90 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 91 | }, 92 | "details": { 93 | "selector": "a[href*=\"details.php?id=\"]", 94 | "attribute": "href" 95 | }, 96 | "download": { 97 | "selector": "a[href*=\"download.php?id=\"]", 98 | "attribute": "href" 99 | }, 100 | "size": { 101 | "selector": "td:nth-child(5)" 102 | }, 103 | "grabs": { 104 | "selector": "td:nth-child(8)" 105 | }, 106 | "seeders": { 107 | "selector": "td:nth-child(6)" 108 | }, 109 | "leechers": { 110 | "selector": "td:nth-child(7)" 111 | }, 112 | "date_elapsed": { 113 | "selector": "td:nth-child(4) > span", 114 | "optional": true 115 | }, 116 | "date_added": { 117 | "selector": "td:nth-child(4) > span", 118 | "attribute": "title", 119 | "optional": true 120 | }, 121 | "date": { 122 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 123 | "filters": [ 124 | { 125 | "name": "dateparse", 126 | "args": "%Y-%m-%d %H:%M:%S" 127 | } 128 | ] 129 | }, 130 | "downloadvolumefactor": { 131 | "case": { 132 | "img.pro_free": 0, 133 | "img.pro_free2up": 0, 134 | "img.pro_50pctdown": 0.5, 135 | "img.pro_50pctdown2up": 0.5, 136 | "img.pro_30pctdown": 0.3, 137 | "*": 1 138 | } 139 | }, 140 | "uploadvolumefactor": { 141 | "case": { 142 | "img.pro_50pctdown2up": 2, 143 | "img.pro_free2up": 2, 144 | "img.pro_2up": 2, 145 | "*": 1 146 | } 147 | }, 148 | "free_deadline": { 149 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 150 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 151 | "selector": "td[class=\"embedded\"] > b > span[title]", 152 | "attribute": "title", 153 | "filters": [ 154 | { 155 | "name": "dateparse", 156 | "args": "%Y-%m-%d %H:%M:%S" 157 | } 158 | ] 159 | }, 160 | "description": { 161 | "selector": "table.torrentname > tr > td.embedded > span[style]", 162 | "index": -1 163 | }, 164 | "labels": { 165 | "selector": "table.torrentname > tr > td.embedded > span.tags" 166 | } 167 | } 168 | }, 169 | "conf": { 170 | "FREE": [ 171 | "//h1[@id='top']/b/font[@class='free']" 172 | ], 173 | "2XFREE": [ 174 | "//h1[@id='top']/b/font[@class='twoupfree']" 175 | ], 176 | "HR": [ 177 | "//h1[@id='top']/img[@class='hitandrun']" 178 | ], 179 | "PEER_COUNT": [ 180 | "//div[@id='peercount']/b[1]" 181 | ] 182 | } 183 | } -------------------------------------------------------------------------------- /sites/UltraHD.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "UltraHD", 3 | "name": "UltraHD", 4 | "domain": "https://ultrahd.net/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | } 17 | }, 18 | "torrents": { 19 | "list": { 20 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 21 | }, 22 | "fields": { 23 | "id": { 24 | "selector": "a[href*=\"details.php?id=\"]", 25 | "attribute": "href", 26 | "filters": [ 27 | { 28 | "name": "re_search", 29 | "args": [ 30 | "\\d+", 31 | 0 32 | ] 33 | } 34 | ] 35 | }, 36 | "title_default": { 37 | "selector": "a[href*=\"details.php?id=\"]" 38 | }, 39 | "title_optional": { 40 | "optional": true, 41 | "selector": "a[title][href*=\"details.php?id=\"]", 42 | "attribute": "title" 43 | }, 44 | "title": { 45 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 46 | }, 47 | "category": { 48 | "selector": "a[href*=\"?cat=\"]", 49 | "attribute": "href", 50 | "filters": [ 51 | { 52 | "name": "replace", 53 | "args": [ 54 | "?", 55 | "" 56 | ] 57 | }, 58 | { 59 | "name": "querystring", 60 | "args": "cat" 61 | } 62 | ] 63 | }, 64 | "details": { 65 | "selector": "a[href*=\"details.php?id=\"]", 66 | "attribute": "href" 67 | }, 68 | "download": { 69 | "selector": "a[href*=\"download.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "imdbid": { 73 | "selector": "div.imdb_100 > a", 74 | "attribute": "href", 75 | "filters": [ 76 | { 77 | "name": "re_search", 78 | "args": [ 79 | "tt\\d+", 80 | 0 81 | ] 82 | } 83 | ] 84 | }, 85 | "date_elapsed": { 86 | "selector": "td:nth-child(4) > span", 87 | "optional": true 88 | }, 89 | "date_added": { 90 | "selector": "td:nth-child(4) > span", 91 | "attribute": "title", 92 | "optional": true 93 | }, 94 | "date": { 95 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 96 | "filters": [ 97 | { 98 | "name": "dateparse", 99 | "args": "%Y-%m-%d %H:%M:%S" 100 | } 101 | ] 102 | }, 103 | "size": { 104 | "selector": "td:nth-child(5)" 105 | }, 106 | "seeders": { 107 | "selector": "td:nth-child(6)" 108 | }, 109 | "leechers": { 110 | "selector": "td:nth-child(7)" 111 | }, 112 | "grabs": { 113 | "selector": "td:nth-child(8)" 114 | }, 115 | "downloadvolumefactor": { 116 | "case": { 117 | "img.pro_free": 0, 118 | "img.pro_free2up": 0, 119 | "img.pro_50pctdown": 0.5, 120 | "img.pro_50pctdown2up": 0.5, 121 | "img.pro_30pctdown": 0.3, 122 | "*": 1 123 | } 124 | }, 125 | "uploadvolumefactor": { 126 | "case": { 127 | "img.pro_50pctdown2up": 2, 128 | "img.pro_free2up": 2, 129 | "img.pro_2up": 2, 130 | "*": 1 131 | } 132 | }, 133 | "free_deadline": { 134 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 135 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 136 | "selector": "img.pro_free,img.pro_free2up", 137 | "attribute": "onmouseover", 138 | "filters": [ 139 | { 140 | "name": "re_search", 141 | "args": [ 142 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 143 | 0 144 | ] 145 | }, 146 | { 147 | "name": "dateparse", 148 | "args": "%Y-%m-%d %H:%M:%S" 149 | } 150 | ] 151 | }, 152 | "description": { 153 | "selector": "td:nth-child(2) > table > tr > td.embedded", 154 | "contents": -1 155 | }, 156 | "labels": { 157 | "selector": "td:nth-child(2) > table > tr > td.embedded > span" 158 | }, 159 | "minimumratio": { 160 | "case": { 161 | "img.hitandrun": 3, 162 | "*": 0 163 | } 164 | }, 165 | "minimumseedtime": { 166 | "case": { 167 | "img.hitandrun": 1209600, 168 | "*": 0 169 | } 170 | } 171 | } 172 | } 173 | } -------------------------------------------------------------------------------- /sites/exoticaz.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "exoticaz", 3 | "name": "exoticaz", 4 | "domain": "https://exoticaz.to/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": "Video Clip", 26 | "cat": "AV/Video Clip", 27 | "desc": "Video Clip" 28 | }, 29 | { 30 | "id": "Video Pack", 31 | "cat": "AV/Video Pack", 32 | "desc": "Video Pack" 33 | }, 34 | { 35 | "id": "Siterip Pack", 36 | "cat": "AV/cate_level2_desc", 37 | "desc": "Siterip Pack" 38 | }, 39 | { 40 | "id": "Pornstar Pack", 41 | "cat": "AV/Pornstar Pack", 42 | "desc": "Pornstar Pack" 43 | }, 44 | { 45 | "id": "DVD", 46 | "cat": "AV/DVD", 47 | "desc": "DVD" 48 | }, 49 | { 50 | "id": "BluRay", 51 | "cat": "AV/BluRay", 52 | "desc": "BluRay" 53 | }, 54 | { 55 | "id": "Photo Pack", 56 | "cat": "AV/Photo Pack", 57 | "desc": "Photo Pack" 58 | }, 59 | { 60 | "id": "Books & Magazines", 61 | "cat": "AV/Books", 62 | "desc": "Books & Magazines" 63 | } 64 | ] 65 | }, 66 | "torrents": { 67 | "list": { 68 | "selector": "div.card.mt-2 > div.card-body.p-2 > div.table-responsive > table > tbody > tr:has(i)" 69 | }, 70 | "fields": { 71 | "id": { 72 | "selector": "a[href^=\"https://exoticaz.to/torrent/\"]", 73 | "attribute": "href", 74 | "filters": [ 75 | { 76 | "name": "re_search", 77 | "args": [ 78 | "\\d+", 79 | 0 80 | ] 81 | } 82 | ] 83 | }, 84 | "title_default": { 85 | "selector": "a[href*=\"/torrent/\"]" 86 | }, 87 | "title_optional": { 88 | "optional": true, 89 | "selector": "a[title][href*=\"/torrent/\"]", 90 | "attribute": "title" 91 | }, 92 | "title": { 93 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 94 | }, 95 | "category": { 96 | "selector": "td:nth-child(1) > i.fa.fa-video.category-icon[title]", 97 | "attribute": "title" 98 | }, 99 | "details": { 100 | "selector": "a[href^=\"https://exoticaz.to/torrent/\"]", 101 | "attribute": "href", 102 | "filters": [ 103 | { 104 | "name": "replace", 105 | "args": [ 106 | "https://exoticaz.to/", 107 | "" 108 | ] 109 | } 110 | ] 111 | }, 112 | "download": { 113 | "selector": "a[href^=\"https://exoticaz.to/download/torrent/\"]", 114 | "attribute": "href" 115 | }, 116 | "date": { 117 | "text": "td:nth-child(4)", 118 | "filters": [ 119 | { 120 | "name": "date_en_elapsed_parse" 121 | } 122 | ] 123 | }, 124 | "size": { 125 | "selector": "td:nth-child(5)" 126 | }, 127 | "seeders": { 128 | "selector": "td:nth-child(6)" 129 | }, 130 | "leechers": { 131 | "selector": "td:nth-child(7)" 132 | }, 133 | "grabs": { 134 | "selector": "td:nth-child(8)" 135 | }, 136 | "downloadvolumefactor": { 137 | "case": { 138 | "i.fa.fa-star.text-yellow": 0, 139 | "i.fa.fa-star-half-alt.text-pink": 0.5, 140 | "*": 1 141 | } 142 | }, 143 | "uploadvolumefactor": { 144 | "case": { 145 | "i.fa.fa-gem.text-green": 2, 146 | "*": 1 147 | } 148 | }, 149 | "free_deadline": { 150 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 151 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f" 152 | }, 153 | "minimumratio": { 154 | "text": 1 155 | }, 156 | "minimumseedtime": { 157 | "text": 2073600 158 | } 159 | } 160 | }, 161 | "conf": { 162 | "FREE": [ 163 | "//i[contains(@class, 'fa-star')]" 164 | ], 165 | "2XFREE": [ 166 | "//i[contains(@class, 'fa-star-half')]" 167 | ], 168 | "HR": [], 169 | "PEER_COUNT": [] 170 | } 171 | } -------------------------------------------------------------------------------- /sites/iHDBits.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "iHDBits", 3 | "name": "iHDBits", 4 | "domain": "https://ihdbits.me/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": 401, 26 | "cat": "Movies", 27 | "desc": "Movies/\u7535\u5f71" 28 | } 29 | ], 30 | "tv": [ 31 | { 32 | "id": 404, 33 | "cat": "TV/Documentary", 34 | "desc": "Documentaries/\u7eaa\u5f55\u7247" 35 | }, 36 | { 37 | "id": 405, 38 | "cat": "TV/Anime", 39 | "desc": "Animations/\u52a8\u6f2b" 40 | }, 41 | { 42 | "id": 402, 43 | "cat": "TV", 44 | "desc": "TV Series/\u8fde\u7eed\u5267" 45 | }, 46 | { 47 | "id": 403, 48 | "cat": "TV", 49 | "desc": "TV Shows/\u7efc\u827a" 50 | } 51 | ] 52 | }, 53 | "torrents": { 54 | "list": { 55 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 56 | }, 57 | "fields": { 58 | "id": { 59 | "selector": "a[href*=\"details.php?id=\"]", 60 | "attribute": "href", 61 | "filters": [ 62 | { 63 | "name": "re_search", 64 | "args": [ 65 | "\\d+", 66 | 0 67 | ] 68 | } 69 | ] 70 | }, 71 | "category": { 72 | "selector": "a[href*=\"?cat=\"]", 73 | "attribute": "href", 74 | "filters": [ 75 | { 76 | "name": "querystring", 77 | "args": "cat" 78 | } 79 | ] 80 | }, 81 | "title_default": { 82 | "selector": "a[href*=\"details.php?id=\"]" 83 | }, 84 | "title_optional": { 85 | "optional": true, 86 | "selector": "a[title][href*=\"details.php?id=\"]", 87 | "attribute": "title" 88 | }, 89 | "title": { 90 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 91 | }, 92 | "details": { 93 | "selector": "a[href*=\"details.php?id=\"]", 94 | "attribute": "href" 95 | }, 96 | "poster": { 97 | "selector": "img[data-orig]", 98 | "attribute": "data-orig" 99 | }, 100 | "download": { 101 | "selector": "a[href*=\"download.php?id=\"]", 102 | "attribute": "href" 103 | }, 104 | "size": { 105 | "selector": "td.rowfollow:nth-child(5)" 106 | }, 107 | "grabs": { 108 | "selector": "td.rowfollow:nth-child(8)" 109 | }, 110 | "seeders": { 111 | "selector": "td.rowfollow:nth-child(6)" 112 | }, 113 | "leechers": { 114 | "selector": "td.rowfollow:nth-child(7)" 115 | }, 116 | "date_elapsed": { 117 | "selector": "td.rowfollow:nth-child(4) > span", 118 | "optional": true 119 | }, 120 | "date_added": { 121 | "selector": "td.rowfollow:nth-child(4) > span", 122 | "attribute": "title", 123 | "optional": true 124 | }, 125 | "date": { 126 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 127 | "filters": [ 128 | { 129 | "name": "dateparse", 130 | "args": "%Y-%m-%d %H:%M:%S" 131 | } 132 | ] 133 | }, 134 | "downloadvolumefactor": { 135 | "case": { 136 | "img.pro_free": 0, 137 | "img.pro_free2up": 0, 138 | "img.pro_50pctdown": 0.5, 139 | "img.pro_50pctdown2up": 0.5, 140 | "img.pro_30pctdown": 0.3, 141 | "*": 1 142 | } 143 | }, 144 | "uploadvolumefactor": { 145 | "case": { 146 | "img.pro_50pctdown2up": 2, 147 | "img.pro_free2up": 2, 148 | "img.pro_2up": 2, 149 | "*": 1 150 | } 151 | }, 152 | "free_deadline": { 153 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 154 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 155 | "selector": "div > b > span[title]", 156 | "attribute": "title", 157 | "filters": [ 158 | { 159 | "name": "dateparse", 160 | "args": "%Y-%m-%d %H:%M:%S" 161 | } 162 | ] 163 | }, 164 | "tags": { 165 | "selector": "div > a.torrents-tag" 166 | }, 167 | "subject": { 168 | "selector": "td.embedded:nth-child(2) > div > div:nth-child(2) > span", 169 | "contents": -1 170 | }, 171 | "description": { 172 | "selector": "td:nth-child(2) > table.torrentname > tr > td:nth-child(2)", 173 | "remove": "span,a,img,font,b", 174 | "contents": -1 175 | }, 176 | "labels": { 177 | "selector": "td:nth-child(2) > table.torrentname > tr > td:nth-child(2) > span" 178 | } 179 | } 180 | }, 181 | "conf": { 182 | "FREE": [ 183 | "//h1[@id='top']/b/font[@class='free']" 184 | ], 185 | "2XFREE": [ 186 | "//h1[@id='top']/b/font[@class='twoupfree']" 187 | ], 188 | "HR": [], 189 | "PEER_COUNT": [] 190 | } 191 | } -------------------------------------------------------------------------------- /sites/sharkpt.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "sharkpt", 3 | "name": "\u9ca8\u9c7c", 4 | "domain": "https://sharkpt.net/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": 401, 26 | "cat": "Movies", 27 | "desc": "Movies(\u7535\u5f71)" 28 | } 29 | ], 30 | "tv": [ 31 | { 32 | "id": 404, 33 | "cat": "TV/Documentary", 34 | "desc": "Documentaries(\u8bb0\u5f55\u7247)" 35 | }, 36 | { 37 | "id": 405, 38 | "cat": "TV/Anime", 39 | "desc": "Animations(\u52a8\u6f2b)" 40 | }, 41 | { 42 | "id": 402, 43 | "cat": "TV", 44 | "desc": "TV Series(\u7535\u89c6\u5267)" 45 | }, 46 | { 47 | "id": 403, 48 | "cat": "TV/Other", 49 | "desc": "TV Shows(\u7efc\u827a)" 50 | } 51 | ] 52 | }, 53 | "torrents": { 54 | "list": { 55 | "selector": "div.s-table-body-item > div.torrent-item" 56 | }, 57 | "fields": { 58 | "id": { 59 | "selector": "a[href*=\"details.php?id=\"]", 60 | "attribute": "href", 61 | "filters": [ 62 | { 63 | "name": "re_search", 64 | "args": [ 65 | "\\d+", 66 | 0 67 | ] 68 | } 69 | ] 70 | }, 71 | "title": { 72 | "selector": "div.torrent-title > a" 73 | }, 74 | "details": { 75 | "selector": "div.torrent-title > a", 76 | "attribute": "href" 77 | }, 78 | "download": { 79 | "selector": "shark-icon.torrent-action-download", 80 | "attribute": "onclick", 81 | "filters": [ 82 | { 83 | "name": "re_search", 84 | "args": [ 85 | "download.php\\?id=\\d+", 86 | 0 87 | ] 88 | } 89 | ] 90 | }, 91 | "size": { 92 | "selector": "div.torrent-size" 93 | }, 94 | "grabs": { 95 | "selector": "div.torrent-snatches > a" 96 | }, 97 | "seeders": { 98 | "selector": "div.torrent-seeders > a" 99 | }, 100 | "leechers": { 101 | "selector": "div.torrent-leechers > a" 102 | }, 103 | "date_elapsed": { 104 | "selector": "div.torrent-when > span" 105 | }, 106 | "date_added": { 107 | "selector": "div.torrent-when > span", 108 | "attribute": "title" 109 | }, 110 | "date": { 111 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 112 | "filters": [ 113 | { 114 | "name": "dateparse", 115 | "args": "%Y-%m-%d %H:%M:%S" 116 | } 117 | ] 118 | }, 119 | "downloadvolumefactor": { 120 | "case": { 121 | "font.free": 0, 122 | "font.twoupfree": 0, 123 | "*": 1 124 | } 125 | }, 126 | "uploadvolumefactor": { 127 | "case": { 128 | "font.twoupfree": 2, 129 | "*": 1 130 | } 131 | }, 132 | "free_deadline": { 133 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 134 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 135 | "selector": "div.torrent-tags > font > span", 136 | "attribute": "title", 137 | "filters": [ 138 | { 139 | "name": "dateparse", 140 | "args": "%Y-%m-%d %H:%M:%S" 141 | } 142 | ] 143 | }, 144 | "tags": { 145 | "selector": "div > a.torrents-tag" 146 | }, 147 | "description": { 148 | "selector": "div.torrent-subtitle" 149 | }, 150 | "labels": { 151 | "selector": "div.torrent-tags > span > a.s-tag" 152 | } 153 | } 154 | }, 155 | "price": { 156 | "FREE": [ 157 | "//h1[@id='top']/b/font[@class='free']" 158 | ], 159 | "2XFREE": [ 160 | "//h1[@id='top']/b/font[@class='twoupfree']" 161 | ], 162 | "HR": [ 163 | "//h1[@id='top']/img[@class='hitandrun']" 164 | ], 165 | "PEER_COUNT": [ 166 | "//div[@id='peercount']/b[1]" 167 | ] 168 | }, 169 | "system_type": "" 170 | } -------------------------------------------------------------------------------- /sites/u9a9.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "u9a9", 3 | "name": "u9a9", 4 | "domain": "https://u9a9.de/", 5 | "encoding": "UTF-8", 6 | "public": true, 7 | "proxy": true, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "?type=2&search={keyword}", 12 | "method": "get" 13 | } 14 | ] 15 | }, 16 | "browse": { 17 | "path": "?type=2&p={page}", 18 | "start": 1 19 | }, 20 | "torrents": { 21 | "list": { 22 | "selector": "table.torrent-list > tbody > tr" 23 | }, 24 | "fields": { 25 | "id": { 26 | "selector": "a[href*=\"/view/2/\"]", 27 | "attribute": "href", 28 | "filters": [ 29 | { 30 | "name": "re_search", 31 | "args": [ 32 | "\\d+", 33 | 0 34 | ] 35 | } 36 | ] 37 | }, 38 | "title": { 39 | "selector": "td:nth-child(2) > a" 40 | }, 41 | "details": { 42 | "selector": "td:nth-child(2) > a", 43 | "attribute": "href" 44 | }, 45 | "download": { 46 | "selector": "td:nth-child(3) > a[href*=\"magnet:\"]", 47 | "attribute": "href" 48 | }, 49 | "date_added": { 50 | "selector": "td:nth-child(5)" 51 | }, 52 | "size": { 53 | "selector": "td:nth-child(4)" 54 | }, 55 | "seeders": { 56 | "selector": "td:nth-child(6)" 57 | }, 58 | "leechers": { 59 | "selector": "td:nth-child(7)" 60 | }, 61 | "grabs": { 62 | "selector": "td:nth-child(8)" 63 | }, 64 | "downloadvolumefactor": { 65 | "case": { 66 | "*": 0 67 | } 68 | }, 69 | "uploadvolumefactor": { 70 | "case": { 71 | "*": 1 72 | } 73 | } 74 | } 75 | } 76 | } -------------------------------------------------------------------------------- /sites/他吹吹风.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "TCCF", 3 | "name": "\u4ed6\u5439\u5439\u98ce", 4 | "domain": "https://et8.org/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "title_default": { 41 | "selector": "a[href*=\"details.php?id=\"]" 42 | }, 43 | "title_optional": { 44 | "optional": true, 45 | "selector": "a[title][href*=\"details.php?id=\"]", 46 | "attribute": "title" 47 | }, 48 | "title": { 49 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 50 | }, 51 | "category": { 52 | "selector": "a[href*=\"?cat=\"]", 53 | "attribute": "href", 54 | "filters": [ 55 | { 56 | "name": "replace", 57 | "args": [ 58 | "?", 59 | "" 60 | ] 61 | }, 62 | { 63 | "name": "querystring", 64 | "args": "cat" 65 | } 66 | ] 67 | }, 68 | "details": { 69 | "selector": "a[href*=\"details.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "download": { 73 | "selector": "a[href*=\"download.php?id=\"]", 74 | "attribute": "href" 75 | }, 76 | "imdbid": { 77 | "selector": "div.imdb_100 > a", 78 | "attribute": "href", 79 | "filters": [ 80 | { 81 | "name": "re_search", 82 | "args": [ 83 | "tt\\d+", 84 | 0 85 | ] 86 | } 87 | ] 88 | }, 89 | "date_elapsed": { 90 | "selector": "td:nth-child(4) > span", 91 | "optional": true 92 | }, 93 | "date_added": { 94 | "selector": "td:nth-child(4) > span", 95 | "attribute": "title", 96 | "optional": true 97 | }, 98 | "date": { 99 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 100 | "filters": [ 101 | { 102 | "name": "dateparse", 103 | "args": "%Y-%m-%d %H:%M:%S" 104 | } 105 | ] 106 | }, 107 | "size": { 108 | "selector": "td:nth-child(5)" 109 | }, 110 | "seeders": { 111 | "selector": "td:nth-child(6)" 112 | }, 113 | "leechers": { 114 | "selector": "td:nth-child(7)" 115 | }, 116 | "grabs": { 117 | "selector": "td:nth-child(8)" 118 | }, 119 | "downloadvolumefactor": { 120 | "case": { 121 | "img.pro_free": 0, 122 | "img.pro_free2up": 0, 123 | "img.pro_50pctdown": 0.5, 124 | "img.pro_50pctdown2up": 0.5, 125 | "img.pro_30pctdown": 0.3, 126 | "*": 1 127 | } 128 | }, 129 | "uploadvolumefactor": { 130 | "case": { 131 | "img.pro_50pctdown2up": 2, 132 | "img.pro_free2up": 2, 133 | "img.pro_2up": 2, 134 | "*": 1 135 | } 136 | }, 137 | "free_deadline": { 138 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 139 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 140 | "selector": "img.pro_free,img.pro_free2up", 141 | "attribute": "onmouseover", 142 | "filters": [ 143 | { 144 | "name": "re_search", 145 | "args": [ 146 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 147 | 0 148 | ] 149 | }, 150 | { 151 | "name": "dateparse", 152 | "args": "%Y-%m-%d %H:%M:%S" 153 | } 154 | ] 155 | }, 156 | "description": { 157 | "selector": "td:nth-child(2) > table > tr > td.embedded", 158 | "contents": -1 159 | }, 160 | "labels": { 161 | "selector": "td:nth-child(2) > table > tr > td.embedded > span" 162 | } 163 | } 164 | }, 165 | "conf": { 166 | "FREE": [ 167 | "//h1[@id='top']/b/font[@class='free']" 168 | ], 169 | "2XFREE": [ 170 | "//h1[@id='top']/b/font[@class='twoupfree']" 171 | ], 172 | "HR": [], 173 | "PEER_COUNT": [] 174 | } 175 | } -------------------------------------------------------------------------------- /sites/伊甸园.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "yidianyuan", 3 | "name": "\u4f0a\u7538\u56ed", 4 | "domain": "https://pt.hdbd.us/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "title_default": { 41 | "selector": "a[href*=\"details.php?id=\"]" 42 | }, 43 | "title_optional": { 44 | "optional": true, 45 | "selector": "a[title][href*=\"details.php?id=\"]", 46 | "attribute": "title" 47 | }, 48 | "title": { 49 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 50 | }, 51 | "category": { 52 | "selector": "img[title][src=\"pic/cattrans.gif\"]", 53 | "attribute": "title" 54 | }, 55 | "details": { 56 | "selector": "a[href*=\"details.php?id=\"]", 57 | "attribute": "href" 58 | }, 59 | "download": { 60 | "selector": "a[href*=\"download.php?id=\"]", 61 | "attribute": "href" 62 | }, 63 | "poster": { 64 | "text": "" 65 | }, 66 | "imdbid": { 67 | "selector": "div.imdb_100 > a", 68 | "attribute": "href", 69 | "filters": [ 70 | { 71 | "name": "re_search", 72 | "args": [ 73 | "tt\\d+", 74 | 0 75 | ] 76 | } 77 | ] 78 | }, 79 | "date_elapsed": { 80 | "selector": "td:nth-child(4) > span", 81 | "optional": true 82 | }, 83 | "date_added": { 84 | "selector": "td:nth-child(4) > span", 85 | "attribute": "title", 86 | "optional": true 87 | }, 88 | "date": { 89 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 90 | "filters": [ 91 | { 92 | "name": "dateparse", 93 | "args": "%Y-%m-%d %H:%M:%S" 94 | } 95 | ] 96 | }, 97 | "size": { 98 | "selector": "td:nth-child(5)" 99 | }, 100 | "seeders": { 101 | "selector": "td:nth-child(6)" 102 | }, 103 | "leechers": { 104 | "selector": "td:nth-child(7)" 105 | }, 106 | "grabs": { 107 | "selector": "td:nth-child(8)" 108 | }, 109 | "downloadvolumefactor": { 110 | "case": { 111 | "img.pro_free": 0, 112 | "img.pro_free2up": 0, 113 | "img.pro_50pctdown": 0.5, 114 | "img.pro_50pctdown2up": 0.5, 115 | "img.pro_30pctdown": 0.3, 116 | "*": 1 117 | } 118 | }, 119 | "uploadvolumefactor": { 120 | "case": { 121 | "img.pro_50pctdown2up": 2, 122 | "img.pro_free2up": 2, 123 | "img.pro_2up": 2, 124 | "*": 1 125 | } 126 | }, 127 | "free_deadline": { 128 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 129 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 130 | "selector": "img.pro_free,img.pro_free2up", 131 | "attribute": "onmouseover", 132 | "filters": [ 133 | { 134 | "name": "re_search", 135 | "args": [ 136 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 137 | 0 138 | ] 139 | }, 140 | { 141 | "name": "dateparse", 142 | "args": "%Y-%m-%d %H:%M:%S" 143 | } 144 | ] 145 | }, 146 | "description": { 147 | "selector": "td:nth-child(2) > table > tr > td.embedded:has(\"a[title]\")", 148 | "remove": "span, a, b" 149 | }, 150 | "labels": { 151 | "selector": "td:nth-child(2) > table > tr > td.embedded:has(\"a[title]\") > span" 152 | } 153 | } 154 | } 155 | } -------------------------------------------------------------------------------- /sites/动漫花园.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "dmhy", 3 | "name": "\u52a8\u6f2b\u82b1\u56ed", 4 | "domain": "https://dmhy.org/", 5 | "encoding": "UTF-8", 6 | "public": true, 7 | "proxy": true, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "topics/list?keyword={keyword}", 12 | "method": "get" 13 | } 14 | ] 15 | }, 16 | "browse": { 17 | "path": "topics/list/page/{page}", 18 | "start": 1 19 | }, 20 | "torrents": { 21 | "list": { 22 | "selector": "table.tablesorter > tbody > tr" 23 | }, 24 | "fields": { 25 | "id": { 26 | "selector": "a[href*=\"/topics/list/sort_id/\"]", 27 | "attribute": "href", 28 | "filters": [ 29 | { 30 | "name": "re_search", 31 | "args": [ 32 | "\\d+", 33 | 0 34 | ] 35 | } 36 | ] 37 | }, 38 | "title": { 39 | "selector": "td.title > a" 40 | }, 41 | "details": { 42 | "selector": "td.title > a", 43 | "attribute": "href" 44 | }, 45 | "download": { 46 | "selector": "a.download-arrow.arrow-magnet", 47 | "attribute": "href" 48 | }, 49 | "date_added": { 50 | "selector": "td:nth-child(1) > span", 51 | "optional": true 52 | }, 53 | "date": { 54 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 55 | "filters": [ 56 | { 57 | "name": "dateparse", 58 | "args": "%Y-%m-%d %H:%M:%S" 59 | } 60 | ] 61 | }, 62 | "size": { 63 | "selector": "td:nth-child(5)" 64 | }, 65 | "seeders": { 66 | "selector": "td:nth-child(6)" 67 | }, 68 | "leechers": { 69 | "selector": "td:nth-child(7)" 70 | }, 71 | "grabs": { 72 | "selector": "td:nth-child(8)" 73 | }, 74 | "downloadvolumefactor": { 75 | "case": { 76 | "*": 0 77 | } 78 | }, 79 | "uploadvolumefactor": { 80 | "case": { 81 | "*": 1 82 | } 83 | } 84 | } 85 | } 86 | } -------------------------------------------------------------------------------- /sites/北洋园.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "beibingyang", 3 | "name": "\u5317\u6d0b\u56ed", 4 | "domain": "https://www.tjupt.org/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "-" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": 401, 26 | "cat": "Movies", 27 | "desc": "Movies\u7535\u5f71" 28 | } 29 | ], 30 | "tv": [ 31 | { 32 | "id": 402, 33 | "cat": "TV", 34 | "desc": "TV Series\u5267\u96c6" 35 | }, 36 | { 37 | "id": 403, 38 | "cat": "TV", 39 | "desc": "TV Shows\u7efc\u827a" 40 | }, 41 | { 42 | "id": 405, 43 | "cat": "TV/Anime", 44 | "desc": "Animations\u52a8\u6f2b" 45 | } 46 | ] 47 | }, 48 | "torrents": { 49 | "list": { 50 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 51 | }, 52 | "fields": { 53 | "id": { 54 | "selector": "a[href*=\"details.php?id=\"]", 55 | "attribute": "href", 56 | "filters": [ 57 | { 58 | "name": "re_search", 59 | "args": [ 60 | "\\d+", 61 | 0 62 | ] 63 | } 64 | ] 65 | }, 66 | "category": { 67 | "selector": "a[href*=\"cat=\"]", 68 | "attribute": "href", 69 | "filters": [ 70 | { 71 | "name": "querystring", 72 | "args": "cat" 73 | } 74 | ] 75 | }, 76 | "title_default": { 77 | "selector": "a[href*=\"details.php?id=\"]" 78 | }, 79 | "title_optional": { 80 | "optional": true, 81 | "selector": "a[title][href*=\"details.php?id=\"]", 82 | "attribute": "title" 83 | }, 84 | "title": { 85 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 86 | }, 87 | "details": { 88 | "selector": "a[href*=\"details.php?id=\"]", 89 | "attribute": "href" 90 | }, 91 | "download": { 92 | "selector": "a[href*=\"download.php?id=\"]", 93 | "attribute": "href" 94 | }, 95 | "imdbid": { 96 | "selector": "a[href*=\"imdb.com/title/tt\"]", 97 | "attribute": "href", 98 | "filters": [ 99 | { 100 | "name": "re_search", 101 | "args": [ 102 | "tt\\d+", 103 | 0 104 | ] 105 | } 106 | ] 107 | }, 108 | "date_elapsed": { 109 | "selector": "td:nth-child(4) > span", 110 | "optional": true 111 | }, 112 | "date_added": { 113 | "selector": "td:nth-child(4) > span", 114 | "attribute": "title", 115 | "optional": true 116 | }, 117 | "date": { 118 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 119 | "filters": [ 120 | { 121 | "name": "dateparse", 122 | "args": "%Y-%m-%d %H:%M:%S" 123 | } 124 | ] 125 | }, 126 | "size": { 127 | "selector": "td:nth-child(5)" 128 | }, 129 | "seeders": { 130 | "selector": "td:nth-child(6)" 131 | }, 132 | "leechers": { 133 | "selector": "td:nth-child(7)" 134 | }, 135 | "grabs": { 136 | "selector": "td:nth-child(8)" 137 | }, 138 | "downloadvolumefactor": { 139 | "case": { 140 | "font.free": 0, 141 | "font.twoupfree": 0, 142 | "font.halfdown": 0.5, 143 | "font.twouphalfdown": 0.5, 144 | "font.thirtypercent": 0.3, 145 | "*": 1 146 | } 147 | }, 148 | "uploadvolumefactor": { 149 | "case": { 150 | "font.twouphalfdown": 2, 151 | "font.twoupfree": 2, 152 | "font.twoup": 2, 153 | "*": 1 154 | } 155 | }, 156 | "description": { 157 | "selector": "table.torrentname > tr:nth-child(1) > td:nth-child(2)", 158 | "remove": "a, img, div", 159 | "contents": -1 160 | }, 161 | "labels": { 162 | "selector": "table.torrentname > tr:nth-child(2) > td:nth-child(2) > div#tag > font.tag" 163 | }, 164 | "minimumratio": { 165 | "text": 0.8 166 | } 167 | } 168 | }, 169 | "conf": { 170 | "FREE": [ 171 | "//h1[@id='top']/b/font[@class='free']" 172 | ], 173 | "2XFREE": [ 174 | "//font[@class='twoup'][text()='2X']" 175 | ], 176 | "HR": [ 177 | "//font[@color='red'][text()='Hit&Run']" 178 | ], 179 | "PEER_COUNT": [ 180 | "//div[@id='peercount']/b[1]" 181 | ] 182 | } 183 | } -------------------------------------------------------------------------------- /sites/北邮人.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "beiyouren", 3 | "name": "\u5317\u90ae\u4eba", 4 | "domain": "https://byr.pt/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": 408, 26 | "cat": "Movies", 27 | "desc": "Movies(\u7535\u5f71)" 28 | } 29 | ], 30 | "tv": [ 31 | { 32 | "id": 401, 33 | "cat": "TV", 34 | "desc": "TV Series (\u5267\u96c6)" 35 | }, 36 | { 37 | "id": 404, 38 | "cat": "TV/Anime", 39 | "desc": "Animations(\u52a8\u6f2b)" 40 | }, 41 | { 42 | "id": 405, 43 | "cat": "TV/Shows", 44 | "desc": "TV Show/\u7efc\u827a" 45 | }, 46 | { 47 | "id": 409, 48 | "cat": "TV/Sports", 49 | "desc": "TV Sports/\u4f53\u80b2" 50 | }, 51 | { 52 | "id": 410, 53 | "cat": "TV/Documentary", 54 | "desc": "\u8bb0\u5f55(Documentary)" 55 | } 56 | ] 57 | }, 58 | "torrents": { 59 | "list": { 60 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 61 | }, 62 | "fields": { 63 | "id": { 64 | "selector": "a[href*=\"details.php?id=\"]", 65 | "attribute": "href", 66 | "filters": [ 67 | { 68 | "name": "re_search", 69 | "args": [ 70 | "\\d+", 71 | 0 72 | ] 73 | } 74 | ] 75 | }, 76 | "title": { 77 | "selector": "td:nth-child(3) > table.torrentname > tr > td.embedded > a > b" 78 | }, 79 | "category": { 80 | "selector": "a[href*=\"torrents.php?cat=\"]", 81 | "attribute": "href", 82 | "filters": [ 83 | { 84 | "name": "querystring", 85 | "args": "cat" 86 | } 87 | ] 88 | }, 89 | "details": { 90 | "selector": "a[href*=\"details.php?id=\"]", 91 | "attribute": "href" 92 | }, 93 | "download": { 94 | "selector": "a[href*=\"download.php?id=\"]", 95 | "attribute": "href" 96 | }, 97 | "imdbid": { 98 | "selector": "div.imdb_100 > a", 99 | "attribute": "href", 100 | "filters": [ 101 | { 102 | "name": "re_search", 103 | "args": [ 104 | "tt\\d+", 105 | 0 106 | ] 107 | } 108 | ] 109 | }, 110 | "date": { 111 | "selector": "td.rowfollow:nth-child(5)", 112 | "attribute": "title", 113 | "filters": [ 114 | { 115 | "name": "dateparse", 116 | "args": "%Y-%m-%d span > span > span[title]", 154 | "attribute": "title", 155 | "filters": [ 156 | { 157 | "name": "dateparse", 158 | "args": "%Y-%m-%d%H:%M:%S" 159 | } 160 | ] 161 | }, 162 | "description": { 163 | "selector": "td:nth-child(3) > table.torrentname > tr > td.embedded:nth-child(1)" 164 | }, 165 | "labels": { 166 | "selector": "td.embedded > span.tags" 167 | } 168 | } 169 | }, 170 | "conf": { 171 | "FREE": [ 172 | "//h1[@id='top']/b/font[@class='free']" 173 | ], 174 | "2XFREE": [ 175 | "//h1[@id='top']/b/font[@class='twoupfree']" 176 | ], 177 | "HR": [ 178 | "//h1[@id='top']/img[@class='hitandrun']" 179 | ], 180 | "PEER_COUNT": [ 181 | "//div[@id='peercount']/b[1]" 182 | ] 183 | } 184 | } -------------------------------------------------------------------------------- /sites/南洋.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "nanyang", 3 | "name": "\u5357\u6d0b", 4 | "domain": "https://nanyangpt.com/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > form > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "title_default": { 41 | "selector": "a[href*=\"details.php?id=\"]" 42 | }, 43 | "title_optional": { 44 | "optional": true, 45 | "selector": "a[title][href*=\"details.php?id=\"]", 46 | "attribute": "title" 47 | }, 48 | "title": { 49 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 50 | }, 51 | "category": { 52 | "selector": "a[href*=\"?cat=\"]", 53 | "attribute": "href", 54 | "filters": [ 55 | { 56 | "name": "replace", 57 | "args": [ 58 | "?", 59 | "" 60 | ] 61 | }, 62 | { 63 | "name": "querystring", 64 | "args": "cat" 65 | } 66 | ] 67 | }, 68 | "details": { 69 | "selector": "a[href*=\"details.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "download": { 73 | "selector": "a[href*=\"download.php?id=\"]", 74 | "attribute": "href" 75 | }, 76 | "imdbid": { 77 | "selector": "div.imdb_100 > a", 78 | "attribute": "href", 79 | "filters": [ 80 | { 81 | "name": "re_search", 82 | "args": [ 83 | "tt\\d+", 84 | 0 85 | ] 86 | } 87 | ] 88 | }, 89 | "date_elapsed": { 90 | "selector": "td:nth-child(4) > span", 91 | "optional": true 92 | }, 93 | "date_added": { 94 | "selector": "td:nth-child(4) > span", 95 | "attribute": "title", 96 | "optional": true 97 | }, 98 | "date": { 99 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 100 | "filters": [ 101 | { 102 | "name": "dateparse", 103 | "args": "%Y-%m-%d %H:%M:%S" 104 | } 105 | ] 106 | }, 107 | "size": { 108 | "selector": "td:nth-child(5)" 109 | }, 110 | "seeders": { 111 | "selector": "td:nth-child(6)" 112 | }, 113 | "leechers": { 114 | "selector": "td:nth-child(7)" 115 | }, 116 | "grabs": { 117 | "selector": "td:nth-child(8)" 118 | }, 119 | "downloadvolumefactor": { 120 | "case": { 121 | "img.pro_free": 0, 122 | "img.pro_free2up": 0, 123 | "img.pro_50pctdown": 0.5, 124 | "img.pro_50pctdown2up": 0.5, 125 | "img.pro_30pctdown": 0.3, 126 | "*": 1 127 | } 128 | }, 129 | "uploadvolumefactor": { 130 | "case": { 131 | "img.pro_50pctdown2up": 2, 132 | "img.pro_free2up": 2, 133 | "img.pro_2up": 2, 134 | "*": 1 135 | } 136 | }, 137 | "free_deadline": { 138 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 139 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 140 | "selector": "img.pro_free,img.pro_free2up", 141 | "attribute": "onmouseover", 142 | "filters": [ 143 | { 144 | "name": "re_search", 145 | "args": [ 146 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 147 | 0 148 | ] 149 | }, 150 | { 151 | "name": "dateparse", 152 | "args": "%Y-%m-%d %H:%M:%S" 153 | } 154 | ] 155 | }, 156 | "description": { 157 | "selector": "td:nth-child(2) > table > tr > td.embedded", 158 | "contents": -1 159 | }, 160 | "labels": { 161 | "selector": "td:nth-child(2) > table > tr > td.embedded > span" 162 | } 163 | } 164 | }, 165 | "conf": { 166 | "FREE": [ 167 | "//h1[@id='top']/b/font[@class='free']" 168 | ], 169 | "2XFREE": [], 170 | "HR": [], 171 | "PEER_COUNT": [] 172 | } 173 | } -------------------------------------------------------------------------------- /sites/吐鲁番.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "tulufan", 3 | "name": "\u5410\u9c81\u756a", 4 | "domain": "https://pt.eastgame.org/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "title_default": { 41 | "selector": "a[href*=\"details.php?id=\"]" 42 | }, 43 | "title_optional": { 44 | "optional": true, 45 | "selector": "a[title][href*=\"details.php?id=\"]", 46 | "attribute": "title" 47 | }, 48 | "title": { 49 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 50 | }, 51 | "category": { 52 | "selector": "a[href*=\"?cat=\"]", 53 | "attribute": "href", 54 | "filters": [ 55 | { 56 | "name": "replace", 57 | "args": [ 58 | "?", 59 | "" 60 | ] 61 | }, 62 | { 63 | "name": "querystring", 64 | "args": "cat" 65 | } 66 | ] 67 | }, 68 | "details": { 69 | "selector": "a[href*=\"details.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "download": { 73 | "selector": "a[href*=\"download.php?id=\"]", 74 | "attribute": "href" 75 | }, 76 | "imdbid": { 77 | "selector": "div.imdb_100 > a", 78 | "attribute": "href", 79 | "filters": [ 80 | { 81 | "name": "re_search", 82 | "args": [ 83 | "tt\\d+", 84 | 0 85 | ] 86 | } 87 | ] 88 | }, 89 | "date_elapsed": { 90 | "selector": "td:nth-child(4) > span", 91 | "optional": true 92 | }, 93 | "date_added": { 94 | "selector": "td:nth-child(4) > span", 95 | "attribute": "title", 96 | "optional": true 97 | }, 98 | "date": { 99 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 100 | "filters": [ 101 | { 102 | "name": "dateparse", 103 | "args": "%Y-%m-%d %H:%M:%S" 104 | } 105 | ] 106 | }, 107 | "size": { 108 | "selector": "td:nth-child(5)" 109 | }, 110 | "seeders": { 111 | "selector": "td:nth-child(6)" 112 | }, 113 | "leechers": { 114 | "selector": "td:nth-child(7)" 115 | }, 116 | "grabs": { 117 | "selector": "td:nth-child(8)" 118 | }, 119 | "downloadvolumefactor": { 120 | "case": { 121 | "img.pro_free": 0, 122 | "img.pro_free2up": 0, 123 | "img.pro_50pctdown": 0.5, 124 | "img.pro_50pctdown2up": 0.5, 125 | "img.pro_30pctdown": 0.3, 126 | "*": 1 127 | } 128 | }, 129 | "uploadvolumefactor": { 130 | "case": { 131 | "img.pro_50pctdown2up": 2, 132 | "img.pro_free2up": 2, 133 | "img.pro_2up": 2, 134 | "*": 1 135 | } 136 | }, 137 | "free_deadline": { 138 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 139 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 140 | "selector": "img.pro_free,img.pro_free2up", 141 | "attribute": "onmouseover", 142 | "filters": [ 143 | { 144 | "name": "re_search", 145 | "args": [ 146 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 147 | 0 148 | ] 149 | }, 150 | { 151 | "name": "dateparse", 152 | "args": "%Y-%m-%d %H:%M:%S" 153 | } 154 | ] 155 | }, 156 | "description": { 157 | "selector": "td:nth-child(2) > table > tr > td.embedded", 158 | "contents": -1 159 | }, 160 | "labels": { 161 | "selector": "td:nth-child(2) > table > tr > td.embedded > span" 162 | } 163 | } 164 | }, 165 | "conf": { 166 | "FREE": [ 167 | "//h1[@id='top']/b/font[@class='free']" 168 | ], 169 | "2XFREE": [ 170 | "//h1[@id='top']/b/font[@class='twoupfree']" 171 | ], 172 | "HR": [], 173 | "PEER_COUNT": [ 174 | "//div[@id='peercount']/b[1]" 175 | ] 176 | } 177 | } -------------------------------------------------------------------------------- /sites/咖啡.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "coffee", 3 | "name": "\u5496\u5561", 4 | "domain": "https://ptcafe.club", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": 401, 26 | "cat": "Movies", 27 | "desc": "Movies/\u7535\u5f71" 28 | } 29 | ], 30 | "tv": [ 31 | { 32 | "id": 404, 33 | "cat": "TV/Documentary", 34 | "desc": "Documentaries/\u7eaa\u5f55\u7247" 35 | }, 36 | { 37 | "id": 405, 38 | "cat": "TV/Anime", 39 | "desc": "Animations/\u52a8\u6f2b" 40 | }, 41 | { 42 | "id": 402, 43 | "cat": "TV", 44 | "desc": "TV Series/\u8fde\u7eed\u5267" 45 | }, 46 | { 47 | "id": 403, 48 | "cat": "TV", 49 | "desc": "TV Shows/\u7efc\u827a" 50 | } 51 | ] 52 | }, 53 | "torrents": { 54 | "list": { 55 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 56 | }, 57 | "fields": { 58 | "id": { 59 | "selector": "a[href*=\"details.php?id=\"]", 60 | "attribute": "href", 61 | "filters": [ 62 | { 63 | "name": "re_search", 64 | "args": [ 65 | "\\d+", 66 | 0 67 | ] 68 | } 69 | ] 70 | }, 71 | "category": { 72 | "selector": "a[href*=\"?cat=\"]", 73 | "attribute": "href", 74 | "filters": [ 75 | { 76 | "name": "querystring", 77 | "args": "cat" 78 | } 79 | ] 80 | }, 81 | "title_default": { 82 | "selector": "a[href*=\"details.php?id=\"]" 83 | }, 84 | "title_optional": { 85 | "optional": true, 86 | "selector": "a[title][href*=\"details.php?id=\"]", 87 | "attribute": "title" 88 | }, 89 | "title": { 90 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 91 | }, 92 | "details": { 93 | "selector": "a[href*=\"details.php?id=\"]", 94 | "attribute": "href" 95 | }, 96 | "poster": { 97 | "selector": "img[data-orig]", 98 | "attribute": "data-orig" 99 | }, 100 | "download": { 101 | "selector": "a[href*=\"download.php?id=\"]", 102 | "attribute": "href" 103 | }, 104 | "size": { 105 | "selector": "td.rowfollow:nth-child(5)" 106 | }, 107 | "grabs": { 108 | "selector": "td.rowfollow:nth-child(8)" 109 | }, 110 | "seeders": { 111 | "selector": "td.rowfollow:nth-child(6)" 112 | }, 113 | "leechers": { 114 | "selector": "td.rowfollow:nth-child(7)" 115 | }, 116 | "date_elapsed": { 117 | "selector": "td.rowfollow:nth-child(4) > span", 118 | "optional": true 119 | }, 120 | "date_added": { 121 | "selector": "td.rowfollow:nth-child(4) > span", 122 | "attribute": "title", 123 | "optional": true 124 | }, 125 | "date": { 126 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 127 | "filters": [ 128 | { 129 | "name": "dateparse", 130 | "args": "%Y-%m-%d %H:%M:%S" 131 | } 132 | ] 133 | }, 134 | "downloadvolumefactor": { 135 | "case": { 136 | "img.pro_free": 0, 137 | "img.pro_free2up": 0, 138 | "img.pro_50pctdown": 0.5, 139 | "img.pro_50pctdown2up": 0.5, 140 | "img.pro_30pctdown": 0.3, 141 | "*": 1 142 | } 143 | }, 144 | "uploadvolumefactor": { 145 | "case": { 146 | "img.pro_50pctdown2up": 2, 147 | "img.pro_free2up": 2, 148 | "img.pro_2up": 2, 149 | "*": 1 150 | } 151 | }, 152 | "free_deadline": { 153 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 154 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 155 | "selector": "div > b > span[title]", 156 | "attribute": "title", 157 | "filters": [ 158 | { 159 | "name": "dateparse", 160 | "args": "%Y-%m-%d %H:%M:%S" 161 | } 162 | ] 163 | }, 164 | "tags": { 165 | "selector": "div > a.torrents-tag" 166 | }, 167 | "subject": { 168 | "selector": "td.embedded:nth-child(2) > div > div:nth-child(2) > span", 169 | "contents": -1 170 | }, 171 | "description": { 172 | "selector": "td.embedded", 173 | "remove": "span,a,img,font,b" 174 | }, 175 | "labels": { 176 | "selector": "td.embedded > span[style]" 177 | } 178 | } 179 | }, 180 | "conf": { 181 | "FREE": [ 182 | "//h1[@id='top']/b/font[@class='free']" 183 | ], 184 | "2XFREE": [ 185 | "//h1[@id='top']/b/font[@class='twoupfree']" 186 | ], 187 | "HR": [], 188 | "PEER_COUNT": [ 189 | "//div[@id='peercount']/b[1]" 190 | ] 191 | } 192 | } -------------------------------------------------------------------------------- /sites/天雪(skyey2).json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "skyey2", 3 | "name": "\u5929\u96ea(skyey2)", 4 | "domain": "https://www.skyey2.com/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "proxy": false, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "forum.php?mod=torrents&cat=1&search={keyword}", 12 | "method": "get" 13 | } 14 | ] 15 | }, 16 | "browse": { 17 | "path": "forum.php?mod=torrents&page={page}" 18 | }, 19 | "torrents": { 20 | "list": { 21 | "selector": "table.torrents > tbody > tr:has(\"td.rowfollow\")" 22 | }, 23 | "fields": { 24 | "id": { 25 | "selector": "a[href*=\"/download.php?id=\"]", 26 | "attribute": "href", 27 | "filters": [ 28 | { 29 | "name": "re_search", 30 | "args": [ 31 | "\\d+", 32 | 0 33 | ] 34 | } 35 | ] 36 | }, 37 | "title": { 38 | "selector": "table.torrentname > tbody > tr > td > a[title]", 39 | "attribute": "title" 40 | }, 41 | "details": { 42 | "selector": "table.torrentname > tbody > tr > td > a[title]", 43 | "attribute": "href" 44 | }, 45 | "download": { 46 | "selector": "a[href*=\"/download.php?id=\"]", 47 | "attribute": "href" 48 | }, 49 | "date_added": { 50 | "selector": "td:nth-child(3)" 51 | }, 52 | "date": { 53 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 54 | "filters": [ 55 | { 56 | "name": "dateparse", 57 | "args": "%Y-%m-%d %H:%M:%S" 58 | } 59 | ] 60 | }, 61 | "size": { 62 | "selector": "td:nth-child(4)" 63 | }, 64 | "seeders": { 65 | "selector": "td:nth-child(7)" 66 | }, 67 | "leechers": { 68 | "selector": "td:nth-child(6)" 69 | }, 70 | "grabs": { 71 | "selector": "td:nth-child(5)" 72 | }, 73 | "downloadvolumefactor": { 74 | "case": { 75 | "img.sp_4": 0, 76 | "*": 1 77 | } 78 | }, 79 | "uploadvolumefactor": { 80 | "case": { 81 | "*": 1 82 | } 83 | } 84 | } 85 | }, 86 | "conf": { 87 | "FREE": [ 88 | "//div[@class='pi']/b[contains(text(),'FREE')]" 89 | ], 90 | "2XFREE": [], 91 | "HR": [], 92 | "PEER_COUNT": [] 93 | } 94 | } -------------------------------------------------------------------------------- /sites/天雪(skyeysnow).json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "skyeysnow", 3 | "name": "\u5929\u96ea(skyeysnow)", 4 | "domain": "https://skyeysnow.com/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "proxy": false, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "forum.php?mod=torrents&cat=1&search={keyword}", 12 | "method": "get" 13 | } 14 | ] 15 | }, 16 | "browse": { 17 | "path": "forum.php?mod=torrents&page={page}" 18 | }, 19 | "torrents": { 20 | "list": { 21 | "selector": "table.torrents > tbody > tr:has(\"td.rowfollow\")" 22 | }, 23 | "fields": { 24 | "id": { 25 | "selector": "a[href*=\"/download.php?id=\"]", 26 | "attribute": "href", 27 | "filters": [ 28 | { 29 | "name": "re_search", 30 | "args": [ 31 | "\\d+", 32 | 0 33 | ] 34 | } 35 | ] 36 | }, 37 | "title": { 38 | "selector": "table.torrentname > tbody > tr > td > a[title]", 39 | "attribute": "title" 40 | }, 41 | "details": { 42 | "selector": "table.torrentname > tbody > tr > td > a[title]", 43 | "attribute": "href" 44 | }, 45 | "download": { 46 | "selector": "a[href*=\"/download.php?id=\"]", 47 | "attribute": "href" 48 | }, 49 | "date_added": { 50 | "selector": "td:nth-child(3)" 51 | }, 52 | "date": { 53 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 54 | "filters": [ 55 | { 56 | "name": "dateparse", 57 | "args": "%Y-%m-%d %H:%M:%S" 58 | } 59 | ] 60 | }, 61 | "size": { 62 | "selector": "td:nth-child(4)" 63 | }, 64 | "seeders": { 65 | "selector": "td:nth-child(7)" 66 | }, 67 | "leechers": { 68 | "selector": "td:nth-child(6)" 69 | }, 70 | "grabs": { 71 | "selector": "td:nth-child(5)" 72 | }, 73 | "downloadvolumefactor": { 74 | "case": { 75 | "img.sp_4": 0, 76 | "*": 1 77 | } 78 | }, 79 | "uploadvolumefactor": { 80 | "case": { 81 | "*": 1 82 | } 83 | } 84 | } 85 | }, 86 | "conf": { 87 | "FREE": [ 88 | "//div[@class='pi']/b[contains(text(),'FREE')]" 89 | ], 90 | "2XFREE": [], 91 | "HR": [], 92 | "PEER_COUNT": [] 93 | } 94 | } -------------------------------------------------------------------------------- /sites/好多油.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "haoduoyou", 3 | "name": "\u597d\u591a\u6cb9", 4 | "domain": "https://pt.hdupt.com/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "title_default": { 41 | "selector": "a[href*=\"details.php?id=\"]" 42 | }, 43 | "title_optional": { 44 | "optional": true, 45 | "selector": "a[title][href*=\"details.php?id=\"]", 46 | "attribute": "title" 47 | }, 48 | "title": { 49 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 50 | }, 51 | "category": { 52 | "selector": "a[href*=\"?cat=\"]", 53 | "attribute": "href", 54 | "filters": [ 55 | { 56 | "name": "replace", 57 | "args": [ 58 | "?", 59 | "" 60 | ] 61 | }, 62 | { 63 | "name": "querystring", 64 | "args": "cat" 65 | } 66 | ] 67 | }, 68 | "details": { 69 | "selector": "a[href*=\"details.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "download": { 73 | "selector": "a[href*=\"download.php?id=\"]", 74 | "attribute": "href" 75 | }, 76 | "imdbid": { 77 | "selector": "div.imdb_100 > a", 78 | "attribute": "href", 79 | "filters": [ 80 | { 81 | "name": "re_search", 82 | "args": [ 83 | "tt\\d+", 84 | 0 85 | ] 86 | } 87 | ] 88 | }, 89 | "date_elapsed": { 90 | "selector": "td:nth-child(4) > span", 91 | "optional": true 92 | }, 93 | "date_added": { 94 | "selector": "td:nth-child(4) > span", 95 | "attribute": "title", 96 | "optional": true 97 | }, 98 | "date": { 99 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 100 | "filters": [ 101 | { 102 | "name": "dateparse", 103 | "args": "%Y-%m-%d %H:%M:%S" 104 | } 105 | ] 106 | }, 107 | "size": { 108 | "selector": "td:nth-child(5)" 109 | }, 110 | "seeders": { 111 | "selector": "td:nth-child(6)" 112 | }, 113 | "leechers": { 114 | "selector": "td:nth-child(7)" 115 | }, 116 | "grabs": { 117 | "selector": "td:nth-child(8)" 118 | }, 119 | "downloadvolumefactor": { 120 | "case": { 121 | "img.pro_free": 0, 122 | "img.pro_free2up": 0, 123 | "img.pro_50pctdown": 0.5, 124 | "img.pro_50pctdown2up": 0.5, 125 | "img.pro_30pctdown": 0.3, 126 | "*": 1 127 | } 128 | }, 129 | "uploadvolumefactor": { 130 | "case": { 131 | "img.pro_50pctdown2up": 2, 132 | "img.pro_free2up": 2, 133 | "img.pro_2up": 2, 134 | "*": 1 135 | } 136 | }, 137 | "free_deadline": { 138 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 139 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 140 | "selector": "img.pro_free,img.pro_free2up", 141 | "attribute": "onmouseover", 142 | "filters": [ 143 | { 144 | "name": "re_search", 145 | "args": [ 146 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 147 | 0 148 | ] 149 | }, 150 | { 151 | "name": "dateparse", 152 | "args": "%Y-%m-%d %H:%M:%S" 153 | } 154 | ] 155 | }, 156 | "description": { 157 | "selector": "td:nth-child(2) > table > tr > td.embedded", 158 | "contents": -1 159 | }, 160 | "labels": { 161 | "selector": "td:nth-child(2) > table > tr > td.embedded > span" 162 | } 163 | } 164 | }, 165 | "conf": { 166 | "FREE": [ 167 | "//h1[@id='top']/b/font[@class='free']" 168 | ], 169 | "2XFREE": [ 170 | "//h1[@id='top']/b/font[@class='twoupfree']" 171 | ], 172 | "HR": [], 173 | "PEER_COUNT": [] 174 | } 175 | } -------------------------------------------------------------------------------- /sites/憨憨.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "hanhan", 3 | "name": "\u61a8\u61a8", 4 | "encoding": "UTF-8", 5 | "public": false, 6 | "proxy": false, 7 | "domain": "https://hhanclub.top/", 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "torrents.php", 12 | "method": "get" 13 | } 14 | ], 15 | "params": { 16 | "search": "{keyword}", 17 | "search_area": 0 18 | }, 19 | "batch": { 20 | "delimiter": " ", 21 | "space_replace": "_" 22 | } 23 | }, 24 | "batch": { 25 | "delimiter": " ", 26 | "space_replace": "_" 27 | }, 28 | "browse": {}, 29 | "torrents": { 30 | "list": { 31 | "selector": "div.torrent-table-sub-info" 32 | }, 33 | "fields": { 34 | "id": { 35 | "selector": "a[href*=\"details.php?id=\"]", 36 | "attribute": "href", 37 | "filters": [ 38 | { 39 | "name": "re_search", 40 | "args": [ 41 | "\\d+", 42 | 0 43 | ] 44 | } 45 | ] 46 | }, 47 | "category": { 48 | "selector": "a[href*=\"?cat[]=\"]", 49 | "attribute": "href", 50 | "filters": [ 51 | { 52 | "name": "querystring", 53 | "args": "cat" 54 | } 55 | ] 56 | }, 57 | "title_default": { 58 | "selector": "a[href*=\"details.php?id=\"]" 59 | }, 60 | "title_optional": { 61 | "optional": true, 62 | "selector": "a[title][href*=\"details.php?id=\"]", 63 | "attribute": "title" 64 | }, 65 | "title": { 66 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 67 | }, 68 | "details": { 69 | "selector": "a[href*=\"details.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "download": { 73 | "selector": "a[href*=\"download.php?id=\"]", 74 | "attribute": "href" 75 | }, 76 | "size": { 77 | "selector": "div.torrent-info-text-size" 78 | }, 79 | "seeders": { 80 | "selector": "div.torrent-info-text-seeders > a[href*=\"#seeders\"]" 81 | }, 82 | "leechers": { 83 | "selector": "div.torrent-info-text-leechers > a[href*=\"#leechers\"]" 84 | }, 85 | "grabs": { 86 | "selector": "div.torrent-info-text-finished" 87 | }, 88 | "date_elapsed": { 89 | "selector": "div.torrent-info-text-added > span", 90 | "optional": true 91 | }, 92 | "date_added": { 93 | "selector": "div.torrent-info-text-added > span", 94 | "attribute": "title", 95 | "optional": true 96 | }, 97 | "date": { 98 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 99 | "filters": [ 100 | { 101 | "name": "dateparse", 102 | "args": "%Y-%m-%d %H:%M:%S" 103 | } 104 | ] 105 | }, 106 | "downloadvolumefactor": { 107 | "case": { 108 | "span.promotion-tag-free": 0, 109 | "span.promotion-tag-free2up": 0, 110 | "span.promotion-tag-50pctdown": 0.5, 111 | "span.promotion-tag-50pctdown2up": 0.5, 112 | "span.promotion-tag-30pctdown": 0.3, 113 | "*": 1 114 | } 115 | }, 116 | "uploadvolumefactor": { 117 | "case": { 118 | "span.promotion-tag-50pctdown2up": 2, 119 | "span.promotion-tag-free2up": 2, 120 | "span.promotion-tag-2up": 2, 121 | "*": 1 122 | } 123 | }, 124 | "description": { 125 | "selector": "div.torrent-info-text-small_name" 126 | }, 127 | "labels": { 128 | "selector": "a[href*=\"?tag_id\"] > span.tag" 129 | } 130 | } 131 | }, 132 | "category": { 133 | "movie": [ 134 | { 135 | "id": 401, 136 | "cat": "Movies", 137 | "desc": "Movies/\u7535\u5f71" 138 | }, 139 | { 140 | "id": 405, 141 | "cat": "Anime", 142 | "desc": "Animations/\u52a8\u6f2b" 143 | } 144 | ], 145 | "tv": [ 146 | { 147 | "id": 404, 148 | "cat": "TV/Documentary", 149 | "desc": "Documentaries/\u7eaa\u5f55\u7247" 150 | }, 151 | { 152 | "id": 405, 153 | "cat": "Anime", 154 | "desc": "Animations/\u52a8\u6f2b" 155 | }, 156 | { 157 | "id": 402, 158 | "cat": "TV", 159 | "desc": "TV Series/\u8fde\u7eed\u5267" 160 | }, 161 | { 162 | "id": 403, 163 | "cat": "TV", 164 | "desc": "TV Shows/\u7efc\u827a" 165 | } 166 | ] 167 | }, 168 | "conf": { 169 | "FREE": [ 170 | "//span[@class='promotion-tag promotion-tag-free']" 171 | ], 172 | "2XFREE": [ 173 | "//span[@class='promotion-tag promotion-tag-2xfree']" 174 | ], 175 | "HR": [ 176 | "//span[contains(text(), 'H&R')]" 177 | ], 178 | "PEER_COUNT": [ 179 | "//div[@id='seeder-count']" 180 | ] 181 | } 182 | } -------------------------------------------------------------------------------- /sites/明教.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "mingjiao", 3 | "name": "\u660e\u6559", 4 | "domain": "https://hdpt.xyz/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "category": { 41 | "selector": "a[href*=\"?cat=\"]", 42 | "attribute": "href", 43 | "filters": [ 44 | { 45 | "name": "querystring", 46 | "args": "cat" 47 | } 48 | ] 49 | }, 50 | "title_default": { 51 | "selector": "a[href*=\"details.php?id=\"]" 52 | }, 53 | "title_optional": { 54 | "optional": true, 55 | "selector": "a[title][href*=\"details.php?id=\"]", 56 | "attribute": "title" 57 | }, 58 | "title": { 59 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 60 | }, 61 | "details": { 62 | "selector": "a[href*=\"details.php?id=\"]", 63 | "attribute": "href" 64 | }, 65 | "poster": { 66 | "selector": "img[data-orig]", 67 | "attribute": "data-orig" 68 | }, 69 | "download": { 70 | "selector": "a[href*=\"download.php?id=\"]", 71 | "attribute": "href" 72 | }, 73 | "size": { 74 | "selector": "td.rowfollow:nth-child(5)" 75 | }, 76 | "grabs": { 77 | "selector": "td.rowfollow:nth-child(8)" 78 | }, 79 | "seeders": { 80 | "selector": "td.rowfollow:nth-child(6)" 81 | }, 82 | "leechers": { 83 | "selector": "td.rowfollow:nth-child(7)" 84 | }, 85 | "date_elapsed": { 86 | "selector": "td.rowfollow:nth-child(4) > span", 87 | "optional": true 88 | }, 89 | "date_added": { 90 | "selector": "td.rowfollow:nth-child(4) > span", 91 | "attribute": "title", 92 | "optional": true 93 | }, 94 | "date": { 95 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 96 | "filters": [ 97 | { 98 | "name": "dateparse", 99 | "args": "%Y-%m-%d %H:%M:%S" 100 | } 101 | ] 102 | }, 103 | "downloadvolumefactor": { 104 | "case": { 105 | "img.pro_free": 0, 106 | "img.pro_free2up": 0, 107 | "img.pro_50pctdown": 0.5, 108 | "img.pro_50pctdown2up": 0.5, 109 | "img.pro_30pctdown": 0.3, 110 | "*": 1 111 | } 112 | }, 113 | "uploadvolumefactor": { 114 | "case": { 115 | "img.pro_50pctdown2up": 2, 116 | "img.pro_free2up": 2, 117 | "img.pro_2up": 2, 118 | "*": 1 119 | } 120 | }, 121 | "free_deadline": { 122 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 123 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 124 | "selector": "div > b > span[title]", 125 | "attribute": "title", 126 | "filters": [ 127 | { 128 | "name": "dateparse", 129 | "args": "%Y-%m-%d %H:%M:%S" 130 | } 131 | ] 132 | }, 133 | "tags": { 134 | "selector": "div > a.torrents-tag" 135 | }, 136 | "subject": { 137 | "selector": "td.embedded:nth-child(2) > div > div[style] > span", 138 | "contents": -1 139 | }, 140 | "description": { 141 | "selector": "td:nth-child(2) > table.torrentname > tr > td:nth-child(2)", 142 | "remove": "span,a,img,font,b", 143 | "contents": -1 144 | }, 145 | "labels": { 146 | "selector": "td:nth-child(2) > table.torrentname > tr > td:nth-child(2) > span" 147 | } 148 | } 149 | }, 150 | "conf": { 151 | "FREE": [ 152 | "//h1[@id='top']/b/font[@class='free']" 153 | ], 154 | "2XFREE": [ 155 | "//h1[@id='top']/b/font[@class='twoupfree']" 156 | ], 157 | "HR": [], 158 | "PEER_COUNT": [ 159 | "//div[@id='peercount']/b[1]" 160 | ] 161 | } 162 | } -------------------------------------------------------------------------------- /sites/朱雀.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "zhuque", 3 | "name": "\u6731\u96c0", 4 | "domain": "https://zhuque.in/", 5 | "encoding": "UTF-8", 6 | "parser": "TNodeSpider", 7 | "public": false, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "torrent/search", 12 | "method": "chrome", 13 | "params": { 14 | "keyword": "//input[@id=\"form_item_keyword\"]", 15 | "submit": "//form//button[@type=\"submit\"]" 16 | } 17 | } 18 | ] 19 | }, 20 | "conf": { 21 | "RENDER": true, 22 | "FREE": [ 23 | "//span[@class='text-download'][contains(text(),'0x')]" 24 | ], 25 | "2XFREE": [ 26 | "" 27 | ], 28 | "HR": [], 29 | "PEER_COUNT": [ 30 | "//div[@class='ant-form-item-control-input-content']/span[contains(text(),'\u6b63\u5728\u505a\u79cd: )]" 31 | ] 32 | } 33 | } -------------------------------------------------------------------------------- /sites/海棠.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "haitang", 3 | "name": "\u6d77\u68e0", 4 | "domain": "https://www.htpt.cc/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "title_default": { 41 | "selector": "a[href*=\"details.php?id=\"]" 42 | }, 43 | "title_optional": { 44 | "optional": true, 45 | "selector": "a[title][href*=\"details.php?id=\"]", 46 | "attribute": "title" 47 | }, 48 | "title": { 49 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 50 | }, 51 | "category": { 52 | "selector": "a[href*=\"?cat=\"]", 53 | "attribute": "href", 54 | "filters": [ 55 | { 56 | "name": "replace", 57 | "args": [ 58 | "?", 59 | "" 60 | ] 61 | }, 62 | { 63 | "name": "querystring", 64 | "args": "cat" 65 | } 66 | ] 67 | }, 68 | "details": { 69 | "selector": "a[href*=\"details.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "download": { 73 | "selector": "a[href*=\"download.php?id=\"]", 74 | "attribute": "href" 75 | }, 76 | "imdbid": { 77 | "selector": "div.imdb_100 > a", 78 | "attribute": "href", 79 | "filters": [ 80 | { 81 | "name": "re_search", 82 | "args": [ 83 | "tt\\d+", 84 | 0 85 | ] 86 | } 87 | ] 88 | }, 89 | "date_elapsed": { 90 | "selector": "td:nth-child(4) > span", 91 | "optional": true 92 | }, 93 | "date_added": { 94 | "selector": "td:nth-child(4) > span", 95 | "attribute": "title", 96 | "optional": true 97 | }, 98 | "date": { 99 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 100 | "filters": [ 101 | { 102 | "name": "dateparse", 103 | "args": "%Y-%m-%d %H:%M:%S" 104 | } 105 | ] 106 | }, 107 | "size": { 108 | "selector": "td:nth-child(5)" 109 | }, 110 | "seeders": { 111 | "selector": "td:nth-child(6)" 112 | }, 113 | "leechers": { 114 | "selector": "td:nth-child(7)" 115 | }, 116 | "grabs": { 117 | "selector": "td:nth-child(8)" 118 | }, 119 | "downloadvolumefactor": { 120 | "case": { 121 | "img.pro_free": 0, 122 | "img.pro_free2up": 0, 123 | "img.pro_50pctdown": 0.5, 124 | "img.pro_50pctdown2up": 0.5, 125 | "img.pro_30pctdown": 0.3, 126 | "*": 1 127 | } 128 | }, 129 | "uploadvolumefactor": { 130 | "case": { 131 | "img.pro_50pctdown2up": 2, 132 | "img.pro_free2up": 2, 133 | "img.pro_2up": 2, 134 | "*": 1 135 | } 136 | }, 137 | "free_deadline": { 138 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 139 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 140 | "selector": "img.pro_free,img.pro_free2up", 141 | "attribute": "onmouseover", 142 | "filters": [ 143 | { 144 | "name": "re_search", 145 | "args": [ 146 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 147 | 0 148 | ] 149 | }, 150 | { 151 | "name": "dateparse", 152 | "args": "%Y-%m-%d %H:%M:%S" 153 | } 154 | ] 155 | }, 156 | "description": { 157 | "selector": "td:nth-child(2) > table > tr > td.embedded", 158 | "contents": -1 159 | }, 160 | "labels": { 161 | "selector": "td:nth-child(2) > table > tr > td.embedded > span" 162 | } 163 | } 164 | }, 165 | "conf": { 166 | "FREE": [ 167 | "//h1[@id='top']/b/font[@class='free']" 168 | ], 169 | "2XFREE": [], 170 | "HR": [], 171 | "PEER_COUNT": [ 172 | "//div[@id='peercount']/b[1]" 173 | ] 174 | } 175 | } -------------------------------------------------------------------------------- /sites/漫喵.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "comicat", 3 | "name": "\u6f2b\u55b5", 4 | "domain": "https://www.comicat.org", 5 | "encoding": "UTF-8", 6 | "public": true, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "search.php?keyword={keyword}&page={page}", 11 | "method": "get" 12 | } 13 | ] 14 | }, 15 | "torrents": { 16 | "list": { 17 | "selector": "#data_list tr" 18 | }, 19 | "fields": { 20 | "id": { 21 | "selector": "td:nth-of-type(3) a", 22 | "attribute": "href", 23 | "fitlers": [ 24 | { 25 | "name": "re_search", 26 | "args": [ 27 | "show-(\\w+).html", 28 | 0 29 | ] 30 | } 31 | ] 32 | }, 33 | "title": { 34 | "selector": "td:nth-of-type(3) a" 35 | }, 36 | "download": { 37 | "selector": "td:nth-of-type(3) a", 38 | "attribute": "href", 39 | "filters": [ 40 | { 41 | "name": "split", 42 | "args": [ 43 | "-", 44 | 1 45 | ] 46 | }, 47 | { 48 | "name": "split", 49 | "args": [ 50 | ".", 51 | 0 52 | ] 53 | }, 54 | { 55 | "name": "appendleft", 56 | "args": "magnet:?xt=urn:btih:" 57 | } 58 | ] 59 | }, 60 | "labels": { 61 | "selector": "td:nth-of-type(8) a" 62 | }, 63 | "size": { 64 | "selector": "td:nth-of-type(4)" 65 | }, 66 | "seeders": { 67 | "selector": "td:nth-of-type(5) span" 68 | }, 69 | "leechers": { 70 | "selector": "td:nth-of-type(6) span" 71 | }, 72 | "date_added": { 73 | "selector": "td:nth-of-type(1)" 74 | } 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /sites/烧包乐园.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "shaobaoleyuan", 3 | "name": "\u70e7\u5305\u4e50\u56ed", 4 | "domain": "https://ptsbao.club/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": 401, 26 | "cat": "Movies", 27 | "desc": "Movies(\u7535\u5f71)" 28 | } 29 | ], 30 | "tv": [ 31 | { 32 | "id": 402, 33 | "cat": "TV", 34 | "desc": "TV Series(\u7535\u89c6\u5267)" 35 | }, 36 | { 37 | "id": 403, 38 | "cat": "TV/Other", 39 | "desc": "TV Shows(\u7535\u89c6\u8282\u76ee)" 40 | }, 41 | { 42 | "id": 405, 43 | "cat": "TV/Anime", 44 | "desc": "Animations(\u52a8\u6f2b)" 45 | }, 46 | { 47 | "id": 404, 48 | "cat": "TV/Documentary", 49 | "desc": "Documentaries(\u8bb0\u5f55\u7247)" 50 | } 51 | ] 52 | }, 53 | "torrents": { 54 | "list": { 55 | "selector": "table.torrents tr:has(\"table.torrentname\")" 56 | }, 57 | "fields": { 58 | "id": { 59 | "selector": "a[href*=\"details.php?id=\"]", 60 | "attribute": "href", 61 | "filters": [ 62 | { 63 | "name": "re_search", 64 | "args": [ 65 | "\\d+", 66 | 0 67 | ] 68 | } 69 | ] 70 | }, 71 | "category": { 72 | "selector": "a[href*=\"torrents.php?cat=\"]", 73 | "attribute": "href", 74 | "filters": [ 75 | { 76 | "name": "querystring", 77 | "args": "cat" 78 | } 79 | ] 80 | }, 81 | "title_default": { 82 | "selector": "a[href*=\"details.php?id=\"]" 83 | }, 84 | "title_optional": { 85 | "optional": true, 86 | "selector": "a[title][href*=\"details.php?id=\"]", 87 | "attribute": "title" 88 | }, 89 | "title": { 90 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 91 | }, 92 | "details": { 93 | "selector": "a[href*=\"details.php?id=\"]", 94 | "attribute": "href" 95 | }, 96 | "download": { 97 | "selector": "a[href*=\"download.php?id=\"]", 98 | "attribute": "href" 99 | }, 100 | "size": { 101 | "selector": "td:nth-child(6)" 102 | }, 103 | "grabs": { 104 | "selector": "td:nth-child(9)" 105 | }, 106 | "seeders": { 107 | "selector": "td:nth-child(7)" 108 | }, 109 | "leechers": { 110 | "selector": "td:nth-child(8)" 111 | }, 112 | "date_elapsed": { 113 | "selector": "td:nth-child(5) > span", 114 | "optional": true 115 | }, 116 | "date_added": { 117 | "selector": "td:nth-child(5) > span", 118 | "attribute": "title", 119 | "optional": true 120 | }, 121 | "date": { 122 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 123 | "filters": [ 124 | { 125 | "name": "dateparse", 126 | "args": "%Y-%m-%d %H:%M:%S" 127 | } 128 | ] 129 | }, 130 | "downloadvolumefactor": { 131 | "case": { 132 | "img.pro_free": 0, 133 | "img.pro_free2up": 0, 134 | "img.pro_50pctdown": 0.5, 135 | "img.pro_50pctdown2up": 0.5, 136 | "img.pro_30pctdown": 0.3, 137 | "*": 1 138 | } 139 | }, 140 | "uploadvolumefactor": { 141 | "case": { 142 | "img.pro_50pctdown2up": 2, 143 | "img.pro_free2up": 2, 144 | "img.pro_2up": 2, 145 | "*": 1 146 | } 147 | }, 148 | "free_deadline": { 149 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 150 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 151 | "selector": "td[class=\"embedded\"] > font > span[title]", 152 | "attribute": "title", 153 | "filters": [ 154 | { 155 | "name": "dateparse", 156 | "args": "%Y-%m-%d %H:%M:%S" 157 | } 158 | ] 159 | }, 160 | "description": { 161 | "selector": "table.torrentname > td", 162 | "contents": -1 163 | }, 164 | "labels": { 165 | "selector": "table.torrentname > td > span" 166 | } 167 | } 168 | }, 169 | "conf": { 170 | "FREE": [ 171 | "//h1[@id='top']/b/font[@class='free']" 172 | ], 173 | "2XFREE": [ 174 | "//h1[@id='top']/b/font[@class='twoupfree']" 175 | ], 176 | "HR": [], 177 | "PEER_COUNT": [ 178 | "//div[@id='peercount']/b[1]" 179 | ] 180 | } 181 | } -------------------------------------------------------------------------------- /sites/猫站.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "maozhan", 3 | "name": "\u732b\u7ad9", 4 | "domain": "https://pterclub.com/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}", 16 | "search_area": 0 17 | }, 18 | "batch": { 19 | "delimiter": " ", 20 | "space_replace": "_" 21 | } 22 | }, 23 | "batch": { 24 | "delimiter": " ", 25 | "space_replace": "_" 26 | }, 27 | "browse": {}, 28 | "torrents": { 29 | "list": { 30 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 31 | }, 32 | "fields": { 33 | "id": { 34 | "selector": "a[href*=\"details.php?id=\"]", 35 | "attribute": "href", 36 | "filters": [ 37 | { 38 | "name": "re_search", 39 | "args": [ 40 | "\\d+", 41 | 0 42 | ] 43 | } 44 | ] 45 | }, 46 | "category": { 47 | "selector": "a[href*=\"?cat=\"]", 48 | "attribute": "href", 49 | "filters": [ 50 | { 51 | "name": "querystring", 52 | "args": "cat" 53 | } 54 | ] 55 | }, 56 | "title": { 57 | "selector": "td:nth-child(2) > div > div:nth-child(1) > a > b" 58 | }, 59 | "details": { 60 | "selector": "a[href*=\"details.php?id=\"]", 61 | "attribute": "href" 62 | }, 63 | "poster": { 64 | "selector": "img[data-orig]", 65 | "attribute": "data-orig" 66 | }, 67 | "download": { 68 | "selector": "a[href*=\"download.php?id=\"]", 69 | "attribute": "href" 70 | }, 71 | "size": { 72 | "selector": "td.rowfollow:nth-child(5)" 73 | }, 74 | "grabs": { 75 | "selector": "td.rowfollow:nth-child(8)" 76 | }, 77 | "seeders": { 78 | "selector": "td.rowfollow:nth-child(6)" 79 | }, 80 | "leechers": { 81 | "selector": "td.rowfollow:nth-child(7)" 82 | }, 83 | "date_elapsed": { 84 | "selector": "td.rowfollow:nth-child(4) > span", 85 | "optional": true 86 | }, 87 | "date_added": { 88 | "selector": "td.rowfollow:nth-child(4) > span", 89 | "attribute": "title", 90 | "optional": true 91 | }, 92 | "date": { 93 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 94 | "filters": [ 95 | { 96 | "name": "dateparse", 97 | "args": "%Y-%m-%d %H:%M:%S" 98 | } 99 | ] 100 | }, 101 | "downloadvolumefactor": { 102 | "case": { 103 | "img.pro_free": 0, 104 | "img.pro_free2up": 0, 105 | "img.pro_50pctdown": 0.5, 106 | "img.pro_50pctdown2up": 0.5, 107 | "img.pro_30pctdown": 0.3, 108 | "*": 1 109 | } 110 | }, 111 | "uploadvolumefactor": { 112 | "case": { 113 | "img.pro_50pctdown2up": 2, 114 | "img.pro_free2up": 2, 115 | "img.pro_2up": 2, 116 | "*": 1 117 | } 118 | }, 119 | "free_deadline": { 120 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 121 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 122 | "selector": "div > b > span[title]", 123 | "attribute": "title", 124 | "filters": [ 125 | { 126 | "name": "dateparse", 127 | "args": "%Y-%m-%d %H:%M:%S" 128 | } 129 | ] 130 | }, 131 | "description": { 132 | "selector": "td:nth-child(2) > div > div:nth-child(2) > span" 133 | }, 134 | "labels": { 135 | "selector": "td:nth-child(2) > div > div:nth-child(2) > a.torrents-tag" 136 | } 137 | } 138 | }, 139 | "category": { 140 | "movie": [ 141 | { 142 | "id": 401, 143 | "cat": "Movies", 144 | "desc": "\u7535\u5f71 (Movie)" 145 | }, 146 | { 147 | "id": 403, 148 | "cat": "Anime", 149 | "desc": "\u52a8\u6f2b (Anime)" 150 | }, 151 | { 152 | "id": 402, 153 | "cat": "Documentary", 154 | "desc": "\u7eaa\u5f55\u7247 (Documentary)" 155 | } 156 | ], 157 | "tv": [ 158 | { 159 | "id": 404, 160 | "cat": "TV", 161 | "desc": "\u7535\u89c6\u5267 (TV Play)" 162 | }, 163 | { 164 | "id": 403, 165 | "cat": "Anime", 166 | "desc": "\u52a8\u6f2b (Anime)" 167 | }, 168 | { 169 | "id": 405, 170 | "cat": "TV", 171 | "desc": "\u7efc\u827a (TV Show)" 172 | }, 173 | { 174 | "id": 402, 175 | "cat": "Documentary", 176 | "desc": "\u7eaa\u5f55\u7247 (Documentary)" 177 | } 178 | ] 179 | }, 180 | "conf": { 181 | "FREE": [ 182 | "//h1[@id='top']/b/font[@class='free']" 183 | ], 184 | "2XFREE": [ 185 | "//h1[@id='top']/b/font[@class='twoupfree']" 186 | ], 187 | "HR": [], 188 | "PEER_COUNT": [ 189 | "(//td[@align='left' and @class='rowfollow' and @valign='top']/b[1])[3]" 190 | ] 191 | } 192 | } -------------------------------------------------------------------------------- /sites/白兔.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "baitu", 3 | "name": "\u767d\u5154", 4 | "domain": "https://club.hares.top/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "title_default": { 41 | "selector": "a[href*=\"details.php?id=\"]" 42 | }, 43 | "title_optional": { 44 | "optional": true, 45 | "selector": "a[title][href*=\"details.php?id=\"]", 46 | "attribute": "title" 47 | }, 48 | "title": { 49 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 50 | }, 51 | "category": { 52 | "selector": "a[href*=\"?cat=\"]", 53 | "attribute": "href", 54 | "filters": [ 55 | { 56 | "name": "replace", 57 | "args": [ 58 | "?", 59 | "" 60 | ] 61 | }, 62 | { 63 | "name": "querystring", 64 | "args": "cat" 65 | } 66 | ] 67 | }, 68 | "details": { 69 | "selector": "a[href*=\"details.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "download": { 73 | "selector": "a[href*=\"download.php?id=\"]", 74 | "attribute": "href" 75 | }, 76 | "date_elapsed": { 77 | "selector": "td:nth-child(4) > span", 78 | "optional": true 79 | }, 80 | "date_added": { 81 | "selector": "td:nth-child(4) > span", 82 | "attribute": "title", 83 | "optional": true 84 | }, 85 | "date": { 86 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 87 | "filters": [ 88 | { 89 | "name": "dateparse", 90 | "args": "%Y-%m-%d %H:%M:%S" 91 | } 92 | ] 93 | }, 94 | "size": { 95 | "selector": "td:nth-child(5)" 96 | }, 97 | "seeders": { 98 | "selector": "td:nth-child(6)" 99 | }, 100 | "leechers": { 101 | "selector": "td:nth-child(7)" 102 | }, 103 | "grabs": { 104 | "selector": "td:nth-child(8)" 105 | }, 106 | "downloadvolumefactor": { 107 | "case": { 108 | "img.pro_free": 0, 109 | "img.pro_free2up": 0, 110 | "img.pro_50pctdown": 0.5, 111 | "img.pro_50pctdown2up": 0.5, 112 | "img.pro_30pctdown": 0.3, 113 | "*": 1 114 | } 115 | }, 116 | "uploadvolumefactor": { 117 | "case": { 118 | "img.pro_50pctdown2up": 2, 119 | "img.pro_free2up": 2, 120 | "img.pro_2up": 2, 121 | "*": 1 122 | } 123 | }, 124 | "free_deadline": { 125 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 126 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 127 | "selector": "img.pro_free,img.pro_free2up,img.pro_50pctdown,img.pro_50pctdown2up,img.pro_30pctdown", 128 | "attribute": "data-d", 129 | "filters": [ 130 | { 131 | "name": "re_search", 132 | "args": [ 133 | "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}", 134 | 0 135 | ] 136 | }, 137 | { 138 | "name": "dateparse", 139 | "args": "%Y-%m-%d %H:%M:%S" 140 | } 141 | ] 142 | }, 143 | "description": { 144 | "selector": "div.layui-torrents-Subject > div.left > p.layui-elip.layui-torrents-descr-width" 145 | }, 146 | "labels": { 147 | "selector": "div.layui-torrents-Subject > div.left > p.layui-elip.layui-torrents-descr-width > span" 148 | } 149 | } 150 | }, 151 | "conf": { 152 | "FREE": [ 153 | "//b[@class='free'][text()='\u514d\u8d39']" 154 | ], 155 | "2XFREE": [ 156 | "//b[@class='twoupfree'][text()='2X\u514d\u8d39']" 157 | ], 158 | "HR": [], 159 | "PEER_COUNT": [] 160 | } 161 | } -------------------------------------------------------------------------------- /sites/百川.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "baichuan", 3 | "name": "\u767e\u5ddd", 4 | "domain": "https://www.hitpt.com/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "title_default": { 41 | "selector": "a[href*=\"details.php?id=\"]" 42 | }, 43 | "title_optional": { 44 | "optional": true, 45 | "selector": "a[title][href*=\"details.php?id=\"]", 46 | "attribute": "title" 47 | }, 48 | "title": { 49 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 50 | }, 51 | "category": { 52 | "selector": "a[href*=\"?cat=\"]", 53 | "attribute": "href", 54 | "filters": [ 55 | { 56 | "name": "replace", 57 | "args": [ 58 | "?", 59 | "" 60 | ] 61 | }, 62 | { 63 | "name": "querystring", 64 | "args": "cat" 65 | } 66 | ] 67 | }, 68 | "details": { 69 | "selector": "a[href*=\"details.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "download": { 73 | "selector": "a[href*=\"download.php?id=\"]", 74 | "attribute": "href" 75 | }, 76 | "imdbid": { 77 | "selector": "div.imdb_100 > a", 78 | "attribute": "href", 79 | "filters": [ 80 | { 81 | "name": "re_search", 82 | "args": [ 83 | "tt\\d+", 84 | 0 85 | ] 86 | } 87 | ] 88 | }, 89 | "date_elapsed": { 90 | "selector": "td:nth-child(4) > span", 91 | "optional": true 92 | }, 93 | "date_added": { 94 | "selector": "td:nth-child(4) > span", 95 | "attribute": "title", 96 | "optional": true 97 | }, 98 | "date": { 99 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 100 | "filters": [ 101 | { 102 | "name": "dateparse", 103 | "args": "%Y-%m-%d %H:%M:%S" 104 | } 105 | ] 106 | }, 107 | "size": { 108 | "selector": "td:nth-child(5)" 109 | }, 110 | "seeders": { 111 | "selector": "td:nth-child(6)" 112 | }, 113 | "leechers": { 114 | "selector": "td:nth-child(7)" 115 | }, 116 | "grabs": { 117 | "selector": "td:nth-child(8)" 118 | }, 119 | "downloadvolumefactor": { 120 | "case": { 121 | "img.pro_free": 0, 122 | "img.pro_free2up": 0, 123 | "img.pro_50pctdown": 0.5, 124 | "img.pro_50pctdown2up": 0.5, 125 | "img.pro_30pctdown": 0.3, 126 | "*": 1 127 | } 128 | }, 129 | "uploadvolumefactor": { 130 | "case": { 131 | "img.pro_50pctdown2up": 2, 132 | "img.pro_free2up": 2, 133 | "img.pro_2up": 2, 134 | "*": 1 135 | } 136 | }, 137 | "free_deadline": { 138 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 139 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 140 | "selector": "img.pro_free,img.pro_free2up", 141 | "attribute": "onmouseover", 142 | "filters": [ 143 | { 144 | "name": "re_search", 145 | "args": [ 146 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 147 | 0 148 | ] 149 | }, 150 | { 151 | "name": "dateparse", 152 | "args": "%Y-%m-%d %H:%M:%S" 153 | } 154 | ] 155 | }, 156 | "description": { 157 | "selector": "td:nth-child(2) > table > tr > td.embedded", 158 | "contents": -1 159 | }, 160 | "labels": { 161 | "selector": "td:nth-child(2) > table > tr > td.embedded > span" 162 | } 163 | } 164 | } 165 | } -------------------------------------------------------------------------------- /sites/皇后.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "queen", 3 | "name": "\u7687\u540e", 4 | "domain": "https://open.cd/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "batch": { 23 | "delimiter": " ", 24 | "space_replace": "_" 25 | }, 26 | "browse": {}, 27 | "torrents": { 28 | "list": { 29 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 30 | }, 31 | "fields": { 32 | "id": { 33 | "selector": "a[href*=\"details.php?id=\"]", 34 | "attribute": "href", 35 | "filters": [ 36 | { 37 | "name": "re_search", 38 | "args": [ 39 | "\\d+", 40 | 0 41 | ] 42 | } 43 | ] 44 | }, 45 | "category": { 46 | "selector": "a[href*=\"?cat=\"]", 47 | "attribute": "href", 48 | "filters": [ 49 | { 50 | "name": "querystring", 51 | "args": "cat" 52 | } 53 | ] 54 | }, 55 | "title_default": { 56 | "selector": "a[href*=\"details.php?id=\"]" 57 | }, 58 | "title_optional": { 59 | "optional": true, 60 | "selector": "a[title][href*=\"details.php?id=\"]", 61 | "attribute": "title" 62 | }, 63 | "title": { 64 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 65 | }, 66 | "details": { 67 | "selector": "a[href*=\"details.php?id=\"]", 68 | "attribute": "href" 69 | }, 70 | "download": { 71 | "selector": "a[href*=\"download.php?id=\"]", 72 | "attribute": "href" 73 | }, 74 | "size": { 75 | "selector": "td:nth-child(7)" 76 | }, 77 | "grabs": { 78 | "selector": "td:nth-child(10)" 79 | }, 80 | "seeders": { 81 | "selector": "td:nth-child(8)" 82 | }, 83 | "leechers": { 84 | "selector": "td:nth-child(9)" 85 | }, 86 | "date_elapsed": { 87 | "selector": "td:nth-child(6) > span", 88 | "optional": true 89 | }, 90 | "date_added": { 91 | "selector": "td:nth-child(6) > span", 92 | "attribute": "title", 93 | "optional": true 94 | }, 95 | "date": { 96 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 97 | "filters": [ 98 | { 99 | "name": "dateparse", 100 | "args": "%Y-%m-%d %H:%M:%S" 101 | } 102 | ] 103 | }, 104 | "downloadvolumefactor": { 105 | "case": { 106 | "img.pro_free": 0, 107 | "img.pro_free2up": 0, 108 | "img.pro_50pctdown": 0.5, 109 | "img.pro_50pctdown2up": 0.5, 110 | "img.pro_30pctdown": 0.3, 111 | "*": 1 112 | } 113 | }, 114 | "uploadvolumefactor": { 115 | "case": { 116 | "img.pro_50pctdown2up": 2, 117 | "img.pro_free2up": 2, 118 | "img.pro_2up": 2, 119 | "*": 1 120 | } 121 | }, 122 | "free_deadline": { 123 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 124 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 125 | "selector": "td[class=\"embedded\"] > b > span[title]", 126 | "attribute": "title", 127 | "filters": [ 128 | { 129 | "name": "dateparse", 130 | "args": "%Y-%m-%d %H:%M:%S" 131 | } 132 | ] 133 | }, 134 | "description": { 135 | "selector": "table.torrentname > tr > td.embedded > font", 136 | "index": -1 137 | }, 138 | "labels": { 139 | "selector": "table.torrentname > tr > td.embedded > i > a" 140 | } 141 | } 142 | }, 143 | "category": {}, 144 | "conf": { 145 | "FREE": [ 146 | "//div[@class='title']/img[@class='pro_free']" 147 | ], 148 | "2XFREE": [ 149 | "//div[@class='title']/img[@class='pro_free2up']" 150 | ], 151 | "HR": [], 152 | "PEER_COUNT": [] 153 | } 154 | } -------------------------------------------------------------------------------- /sites/红豆饭.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "hdfans", 3 | "name": "\u7ea2\u8c46\u996d", 4 | "domain": "https://hdfans.org/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": 401, 26 | "cat": "Movies", 27 | "desc": "Movies/\u7535\u5f71" 28 | } 29 | ], 30 | "tv": [ 31 | { 32 | "id": 402, 33 | "cat": "TV", 34 | "desc": "TV Series/\u7535\u89c6\u5267" 35 | }, 36 | { 37 | "id": 403, 38 | "cat": "TV/Documentary", 39 | "desc": "Documentaries/\u7eaa\u5f55\u7247" 40 | }, 41 | { 42 | "id": 416, 43 | "cat": "TV", 44 | "desc": "TV Shows/\u7efc\u827a" 45 | }, 46 | { 47 | "id": 417, 48 | "cat": "TV/Anime", 49 | "desc": "Animations/\u52a8\u6f2b" 50 | } 51 | ] 52 | }, 53 | "torrents": { 54 | "list": { 55 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 56 | }, 57 | "fields": { 58 | "id": { 59 | "selector": "a[href*=\"details.php?id=\"]", 60 | "attribute": "href", 61 | "filters": [ 62 | { 63 | "name": "re_search", 64 | "args": [ 65 | "\\d+", 66 | 0 67 | ] 68 | } 69 | ] 70 | }, 71 | "category": { 72 | "selector": "a[href*=\"?cat=\"]", 73 | "attribute": "href", 74 | "filters": [ 75 | { 76 | "name": "querystring", 77 | "args": "cat" 78 | } 79 | ] 80 | }, 81 | "title_default": { 82 | "selector": "a[href*=\"details.php?id=\"]" 83 | }, 84 | "title_optional": { 85 | "optional": true, 86 | "selector": "a[title][href*=\"details.php?id=\"]", 87 | "attribute": "title" 88 | }, 89 | "title": { 90 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 91 | }, 92 | "details": { 93 | "selector": "a[href*=\"details.php?id=\"]", 94 | "attribute": "href" 95 | }, 96 | "download": { 97 | "selector": "a[href*=\"download.php?id=\"]", 98 | "attribute": "href" 99 | }, 100 | "size": { 101 | "selector": "td:nth-child(5)" 102 | }, 103 | "grabs": { 104 | "selector": "td:nth-child(8)" 105 | }, 106 | "seeders": { 107 | "selector": "td:nth-child(6)" 108 | }, 109 | "leechers": { 110 | "selector": "td:nth-child(7)" 111 | }, 112 | "date_elapsed": { 113 | "selector": "td:nth-child(4) > span", 114 | "optional": true 115 | }, 116 | "date_added": { 117 | "selector": "td:nth-child(4) > span", 118 | "attribute": "title", 119 | "optional": true 120 | }, 121 | "date": { 122 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 123 | "filters": [ 124 | { 125 | "name": "dateparse", 126 | "args": "%Y-%m-%d %H:%M:%S" 127 | } 128 | ] 129 | }, 130 | "downloadvolumefactor": { 131 | "case": { 132 | "img.pro_free": 0, 133 | "img.pro_free2up": 0, 134 | "img.pro_50pctdown": 0.5, 135 | "img.pro_50pctdown2up": 0.5, 136 | "img.pro_30pctdown": 0.3, 137 | "*": 1 138 | } 139 | }, 140 | "uploadvolumefactor": { 141 | "case": { 142 | "img.pro_50pctdown2up": 2, 143 | "img.pro_free2up": 2, 144 | "img.pro_2up": 2, 145 | "*": 1 146 | } 147 | }, 148 | "free_deadline": { 149 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 150 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 151 | "selector": "td[class=\"embedded\"] > font > span[title]", 152 | "attribute": "title", 153 | "filters": [ 154 | { 155 | "name": "dateparse", 156 | "args": "%Y-%m-%d %H:%M:%S" 157 | } 158 | ] 159 | }, 160 | "description": { 161 | "selector": "table.torrentname > tr > td:nth-child(1)", 162 | "remove": "a,img,span,b,br", 163 | "contents": -1 164 | }, 165 | "labels": { 166 | "selector": "table.torrentname > tr > td:nth-child(1) > span" 167 | } 168 | } 169 | }, 170 | "conf": { 171 | "FREE": [ 172 | "//h1[@id='top']/b/font[@class='free']" 173 | ], 174 | "2XFREE": [ 175 | "//h1[@id='top']/b/font[@class='twoupfree']" 176 | ], 177 | "HR": [], 178 | "PEER_COUNT": [ 179 | "//div[@id='peercount']/b[1]" 180 | ] 181 | }, 182 | "system_type": "" 183 | } -------------------------------------------------------------------------------- /sites/自由农场.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "ziyounongchang", 3 | "name": "\u81ea\u7531\u519c\u573a", 4 | "domain": "https://pt.0ff.cc/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "category": { 41 | "selector": "a[href*=\"?cat=\"]", 42 | "attribute": "href", 43 | "filters": [ 44 | { 45 | "name": "querystring", 46 | "args": "cat" 47 | } 48 | ] 49 | }, 50 | "title_default": { 51 | "selector": "a[href*=\"details.php?id=\"]" 52 | }, 53 | "title_optional": { 54 | "optional": true, 55 | "selector": "a[title][href*=\"details.php?id=\"]", 56 | "attribute": "title" 57 | }, 58 | "title": { 59 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 60 | }, 61 | "details": { 62 | "selector": "a[href*=\"details.php?id=\"]", 63 | "attribute": "href" 64 | }, 65 | "poster": { 66 | "selector": "img[data-orig]", 67 | "attribute": "data-orig" 68 | }, 69 | "download": { 70 | "selector": "a[href*=\"download.php?id=\"]", 71 | "attribute": "href" 72 | }, 73 | "size": { 74 | "selector": "td.rowfollow:nth-child(5)" 75 | }, 76 | "grabs": { 77 | "selector": "td.rowfollow:nth-child(8)" 78 | }, 79 | "seeders": { 80 | "selector": "td.rowfollow:nth-child(6)" 81 | }, 82 | "leechers": { 83 | "selector": "td.rowfollow:nth-child(7)" 84 | }, 85 | "date_elapsed": { 86 | "selector": "td.rowfollow:nth-child(4) > span", 87 | "optional": true 88 | }, 89 | "date_added": { 90 | "selector": "td.rowfollow:nth-child(4) > span", 91 | "attribute": "title", 92 | "optional": true 93 | }, 94 | "date": { 95 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 96 | "filters": [ 97 | { 98 | "name": "dateparse", 99 | "args": "%Y-%m-%d %H:%M:%S" 100 | } 101 | ] 102 | }, 103 | "downloadvolumefactor": { 104 | "case": { 105 | "img.pro_free": 0, 106 | "img.pro_free2up": 0, 107 | "img.pro_50pctdown": 0.5, 108 | "img.pro_50pctdown2up": 0.5, 109 | "img.pro_30pctdown": 0.3, 110 | "*": 1 111 | } 112 | }, 113 | "uploadvolumefactor": { 114 | "case": { 115 | "img.pro_50pctdown2up": 2, 116 | "img.pro_free2up": 2, 117 | "img.pro_2up": 2, 118 | "*": 1 119 | } 120 | }, 121 | "free_deadline": { 122 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 123 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 124 | "selector": "div > b > span[title]", 125 | "attribute": "title", 126 | "filters": [ 127 | { 128 | "name": "dateparse", 129 | "args": "%Y-%m-%d %H:%M:%S" 130 | } 131 | ] 132 | }, 133 | "tags": { 134 | "selector": "div > a.torrents-tag" 135 | }, 136 | "subject": { 137 | "selector": "td.embedded:nth-child(2) > div > div[style] > span", 138 | "contents": -1 139 | }, 140 | "description": { 141 | "selector": "td:nth-child(2) > table.torrentname > tr > td:nth-child(2)", 142 | "remove": "span,a,img,font,b", 143 | "contents": -1 144 | }, 145 | "labels": { 146 | "selector": "td:nth-child(2) > table.torrentname > tr > td:nth-child(2) > span" 147 | } 148 | } 149 | }, 150 | "conf": { 151 | "FREE": [ 152 | "//h1[@id='top']/b/font[@class='free']" 153 | ], 154 | "2XFREE": [ 155 | "//h1[@id='top']/b/font[@class='twoupfree']" 156 | ], 157 | "HR": [ 158 | "//h1[@id='top']/img[@class='hitandrun']" 159 | ], 160 | "PEER_COUNT": [ 161 | "//div[@id='peercount']/b[1]" 162 | ] 163 | } 164 | } -------------------------------------------------------------------------------- /sites/蜜柑.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "mikanani", 3 | "name": "\u871c\u67d1", 4 | "domain": "https://mikanime.tv/", 5 | "encoding": "UTF-8", 6 | "public": true, 7 | "proxy": true, 8 | "search": { 9 | "paths": [ 10 | { 11 | "path": "Home/Search?searchstr={keyword}", 12 | "method": "get" 13 | } 14 | ] 15 | }, 16 | "browse": { 17 | "path": "Home/Classic/{page}", 18 | "start": 1 19 | }, 20 | "torrents": { 21 | "list": { 22 | "selector": "div.central-container > table > tbody > tr.js-search-results-row" 23 | }, 24 | "fields": { 25 | "id": { 26 | "selector": "tr.js-search-results-row", 27 | "attribute": "data-itemindex" 28 | }, 29 | "title": { 30 | "selector": "td:nth-child(1) > a.magnet-link-wrap" 31 | }, 32 | "details": { 33 | "selector": "td:nth-child(1) > a.magnet-link-wrap", 34 | "attribute": "href" 35 | }, 36 | "download": { 37 | "selector": "td:nth-child(1) > a.js-magnet.magnet-link", 38 | "attribute": "data-clipboard-text" 39 | }, 40 | "date_added": { 41 | "selector": "td:nth-child(3)" 42 | }, 43 | "size": { 44 | "selector": "td:nth-child(2)" 45 | }, 46 | "downloadvolumefactor": { 47 | "case": { 48 | "*": 0 49 | } 50 | }, 51 | "uploadvolumefactor": { 52 | "case": { 53 | "*": 1 54 | } 55 | } 56 | } 57 | } 58 | } -------------------------------------------------------------------------------- /sites/蝴蝶.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "butterfly", 3 | "name": "\u8774\u8776", 4 | "domain": "https://hudbt.hust.edu.cn/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}", 16 | "search_area": 4 17 | }, 18 | "batch": { 19 | "delimiter": " ", 20 | "space_replace": "_" 21 | } 22 | }, 23 | "batch": { 24 | "delimiter": " ", 25 | "space_replace": "_" 26 | }, 27 | "browse": {}, 28 | "torrents": { 29 | "list": { 30 | "selector": "table#torrents > tbody > tr" 31 | }, 32 | "fields": { 33 | "id": { 34 | "selector": "a[href*=\"details.php?id=\"]", 35 | "attribute": "href", 36 | "filters": [ 37 | { 38 | "name": "re_search", 39 | "args": [ 40 | "\\d+", 41 | 0 42 | ] 43 | } 44 | ] 45 | }, 46 | "title_default": { 47 | "selector": "a[href*=\"details.php?id=\"]" 48 | }, 49 | "title_optional": { 50 | "optional": true, 51 | "selector": "a[title][href*=\"details.php?id=\"]", 52 | "attribute": "title" 53 | }, 54 | "title": { 55 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 56 | }, 57 | "category": { 58 | "selector": "a[href*=\"?cat=\"]", 59 | "attribute": "href", 60 | "filters": [ 61 | { 62 | "name": "replace", 63 | "args": [ 64 | "?", 65 | "" 66 | ] 67 | }, 68 | { 69 | "name": "querystring", 70 | "args": "cat" 71 | } 72 | ] 73 | }, 74 | "details": { 75 | "selector": "a[href*=\"details.php?id=\"]", 76 | "attribute": "href" 77 | }, 78 | "download": { 79 | "selector": "a[href*=\"download.php?id=\"]", 80 | "attribute": "href" 81 | }, 82 | "date_added": { 83 | "selector": "td:nth-child(4)" 84 | }, 85 | "date": { 86 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 87 | "filters": [ 88 | { 89 | "name": "dateparse", 90 | "args": "%Y-%m-%d %H:%M:%S" 91 | } 92 | ] 93 | }, 94 | "size": { 95 | "selector": "td:nth-child(5)" 96 | }, 97 | "seeders": { 98 | "selector": "td:nth-child(6)" 99 | }, 100 | "leechers": { 101 | "selector": "td:nth-child(7)" 102 | }, 103 | "grabs": { 104 | "selector": "td:nth-child(8)" 105 | }, 106 | "downloadvolumefactor": { 107 | "case": { 108 | "img.free": 0, 109 | "img.twoupfree": 0, 110 | "img.thirtypercent": 0.3, 111 | "img.fiftypercent": 0.5, 112 | "*": 1 113 | } 114 | }, 115 | "uploadvolumefactor": { 116 | "case": { 117 | "img.twoupfree": 2, 118 | "*": 1 119 | } 120 | }, 121 | "free_deadline": { 122 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 123 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 124 | "selector": "img.pro_free,img.pro_free2up", 125 | "attribute": "onmouseover", 126 | "filters": [ 127 | { 128 | "name": "re_search", 129 | "args": [ 130 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 131 | 0 132 | ] 133 | }, 134 | { 135 | "name": "dateparse", 136 | "args": "%Y-%m-%d %H:%M:%S" 137 | } 138 | ] 139 | }, 140 | "description": { 141 | "selector": "td:nth-child(2) > div > div > div:nth-child(2) > h3", 142 | "attribute": "title" 143 | } 144 | } 145 | }, 146 | "category": {} 147 | } -------------------------------------------------------------------------------- /sites/车.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "car", 3 | "name": "\u8f66", 4 | "domain": "https://carpt.net/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": 401, 26 | "cat": "Movies", 27 | "desc": "Movies/\u7535\u5f71" 28 | } 29 | ], 30 | "tv": [ 31 | { 32 | "id": 402, 33 | "cat": "TV", 34 | "desc": "TV Series/\u8fde\u7eed\u5267" 35 | }, 36 | { 37 | "id": 403, 38 | "cat": "TV/Anime", 39 | "desc": "Animations/\u52a8\u6f2b" 40 | }, 41 | { 42 | "id": 404, 43 | "cat": "TV/Documentary", 44 | "desc": "Documentaries/\u7eaa\u5f55\u7247" 45 | }, 46 | { 47 | "id": 405, 48 | "cat": "TV", 49 | "desc": "TV Shows/\u7efc\u827a" 50 | } 51 | ] 52 | }, 53 | "torrents": { 54 | "list": { 55 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 56 | }, 57 | "fields": { 58 | "id": { 59 | "selector": "a[href*=\"details.php?id=\"]", 60 | "attribute": "href", 61 | "filters": [ 62 | { 63 | "name": "re_search", 64 | "args": [ 65 | "\\d+", 66 | 0 67 | ] 68 | } 69 | ] 70 | }, 71 | "category": { 72 | "selector": "a[href*=\"?cat=\"]", 73 | "attribute": "href", 74 | "filters": [ 75 | { 76 | "name": "querystring", 77 | "args": "cat" 78 | } 79 | ] 80 | }, 81 | "title_default": { 82 | "selector": "a[href*=\"details.php?id=\"]" 83 | }, 84 | "title_optional": { 85 | "optional": true, 86 | "selector": "a[title][href*=\"details.php?id=\"]", 87 | "attribute": "title" 88 | }, 89 | "title": { 90 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 91 | }, 92 | "details": { 93 | "selector": "a[href*=\"details.php?id=\"]", 94 | "attribute": "href" 95 | }, 96 | "download": { 97 | "selector": "a[href*=\"download.php?id=\"]", 98 | "attribute": "href" 99 | }, 100 | "size": { 101 | "selector": "td:nth-child(5)" 102 | }, 103 | "grabs": { 104 | "selector": "td:nth-child(8)" 105 | }, 106 | "seeders": { 107 | "selector": "td:nth-child(6)" 108 | }, 109 | "leechers": { 110 | "selector": "td:nth-child(7)" 111 | }, 112 | "date_elapsed": { 113 | "selector": "td:nth-child(4) > span", 114 | "optional": true 115 | }, 116 | "date_added": { 117 | "selector": "td:nth-child(4) > span", 118 | "attribute": "title", 119 | "optional": true 120 | }, 121 | "date": { 122 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 123 | "filters": [ 124 | { 125 | "name": "dateparse", 126 | "args": "%Y-%m-%d %H:%M:%S" 127 | } 128 | ] 129 | }, 130 | "downloadvolumefactor": { 131 | "case": { 132 | "img.pro_free": 0, 133 | "img.pro_free2up": 0, 134 | "img.pro_50pctdown": 0.5, 135 | "img.pro_50pctdown2up": 0.5, 136 | "img.pro_30pctdown": 0.3, 137 | "*": 1 138 | } 139 | }, 140 | "uploadvolumefactor": { 141 | "case": { 142 | "img.pro_50pctdown2up": 2, 143 | "img.pro_free2up": 2, 144 | "img.pro_2up": 2, 145 | "*": 1 146 | } 147 | }, 148 | "free_deadline": { 149 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 150 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 151 | "selector": "td[class=\"embedded\"] > b > span[title]", 152 | "attribute": "title", 153 | "filters": [ 154 | { 155 | "name": "dateparse", 156 | "args": "%Y-%m-%d %H:%M:%S" 157 | } 158 | ] 159 | }, 160 | "description": { 161 | "selector": "td:nth-child(2) > table.torrentname > tr > td:nth-child(1)", 162 | "remove": "span,a,img,font,b", 163 | "contents": -1 164 | }, 165 | "labels": { 166 | "selector": "td:nth-child(2) > table.torrentname > tr > td:nth-child(1) > span" 167 | } 168 | } 169 | }, 170 | "conf": { 171 | "FREE": [ 172 | "//h1[@id='top']/b/font[@class='free']" 173 | ], 174 | "2XFREE": [ 175 | "//h1[@id='top']/b/font[@class='twoupfree']" 176 | ], 177 | "HR": [ 178 | "//h1[@id='top']/img[@class='hitandrun']" 179 | ], 180 | "PEER_COUNT": [ 181 | "//div[@id='peercount']/b[1]" 182 | ] 183 | } 184 | } -------------------------------------------------------------------------------- /sites/铂金学院.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "bojinxueyuan", 3 | "name": "\u94c2\u91d1\u5b66\u9662", 4 | "domain": "https://ptchina.org/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "category": { 23 | "movie": [ 24 | { 25 | "id": 401, 26 | "cat": "Movies", 27 | "desc": "Movies/\u7535\u5f71" 28 | } 29 | ], 30 | "tv": [ 31 | { 32 | "id": 402, 33 | "cat": "TV", 34 | "desc": "TV Series/\u7535\u89c6\u5267" 35 | }, 36 | { 37 | "id": 404, 38 | "cat": "TV/Documentary", 39 | "desc": "Documentaries/\u7eaa\u5f55\u7247" 40 | } 41 | ] 42 | }, 43 | "torrents": { 44 | "list": { 45 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 46 | }, 47 | "fields": { 48 | "id": { 49 | "selector": "a[href*=\"details.php?id=\"]", 50 | "attribute": "href", 51 | "filters": [ 52 | { 53 | "name": "re_search", 54 | "args": [ 55 | "\\d+", 56 | 0 57 | ] 58 | } 59 | ] 60 | }, 61 | "category": { 62 | "selector": "a[href*=\"?cat=\"]", 63 | "attribute": "href", 64 | "filters": [ 65 | { 66 | "name": "querystring", 67 | "args": "cat" 68 | } 69 | ] 70 | }, 71 | "title_default": { 72 | "selector": "a[href*=\"details.php?id=\"]" 73 | }, 74 | "title_optional": { 75 | "optional": true, 76 | "selector": "a[title][href*=\"details.php?id=\"]", 77 | "attribute": "title" 78 | }, 79 | "title": { 80 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 81 | }, 82 | "details": { 83 | "selector": "a[href*=\"details.php?id=\"]", 84 | "attribute": "href" 85 | }, 86 | "poster": { 87 | "selector": "img[data-orig]", 88 | "attribute": "data-orig" 89 | }, 90 | "download": { 91 | "selector": "a[href*=\"download.php?id=\"]", 92 | "attribute": "href" 93 | }, 94 | "size": { 95 | "selector": "td.rowfollow:nth-child(5)" 96 | }, 97 | "grabs": { 98 | "selector": "td.rowfollow:nth-child(8)" 99 | }, 100 | "seeders": { 101 | "selector": "td.rowfollow:nth-child(6)" 102 | }, 103 | "leechers": { 104 | "selector": "td.rowfollow:nth-child(7)" 105 | }, 106 | "date_elapsed": { 107 | "selector": "td.rowfollow:nth-child(4) > span", 108 | "optional": true 109 | }, 110 | "date_added": { 111 | "selector": "td.rowfollow:nth-child(4) > span", 112 | "attribute": "title", 113 | "optional": true 114 | }, 115 | "date": { 116 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 117 | "filters": [ 118 | { 119 | "name": "dateparse", 120 | "args": "%Y-%m-%d %H:%M:%S" 121 | } 122 | ] 123 | }, 124 | "downloadvolumefactor": { 125 | "case": { 126 | "img.pro_free": 0, 127 | "img.pro_free2up": 0, 128 | "img.pro_50pctdown": 0.5, 129 | "img.pro_50pctdown2up": 0.5, 130 | "img.pro_30pctdown": 0.3, 131 | "*": 1 132 | } 133 | }, 134 | "uploadvolumefactor": { 135 | "case": { 136 | "img.pro_50pctdown2up": 2, 137 | "img.pro_free2up": 2, 138 | "img.pro_2up": 2, 139 | "*": 1 140 | } 141 | }, 142 | "free_deadline": { 143 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 144 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 145 | "selector": "div > b > span[title]", 146 | "attribute": "title", 147 | "filters": [ 148 | { 149 | "name": "dateparse", 150 | "args": "%Y-%m-%d %H:%M:%S" 151 | } 152 | ] 153 | }, 154 | "tags": { 155 | "selector": "div > a.torrents-tag" 156 | }, 157 | "subject": { 158 | "selector": "td.embedded:nth-child(2) > div > div[style] > span", 159 | "contents": -1 160 | }, 161 | "description": { 162 | "selector": "td:nth-child(2) > table.torrentname > tr > td:nth-child(1)", 163 | "remove": "span,a,img,font,b", 164 | "contents": -1 165 | }, 166 | "labels": { 167 | "selector": "td:nth-child(2) > table.torrentname > tr > td:nth-child(1) > span" 168 | } 169 | } 170 | }, 171 | "conf": { 172 | "FREE": [ 173 | "//h1[@id='top']/b/b/font[@class='free']" 174 | ], 175 | "2XFREE": [ 176 | "//h1[@id='top']/b/b/font[@class='twoupfree']" 177 | ], 178 | "HR": [], 179 | "PEER_COUNT": [] 180 | } 181 | } -------------------------------------------------------------------------------- /sites/飞天拉面.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "feitianlamian", 3 | "name": "\u98de\u5929\u62c9\u9762", 4 | "builtin": true, 5 | "domain": "https://fsm.name/", 6 | "search": { 7 | "paths": [ 8 | { 9 | "path": "Torrents", 10 | "method": "get" 11 | } 12 | ], 13 | "params": { 14 | "keyword": "{keyword}" 15 | }, 16 | "batch": { 17 | "delimiter": " ", 18 | "space_replace": "_" 19 | } 20 | }, 21 | "batch": { 22 | "delimiter": " ", 23 | "space_replace": "_" 24 | }, 25 | "parser": null, 26 | "render": null, 27 | "browse": {}, 28 | "torrents": { 29 | "list": { 30 | "selector": "div.table-responsive > table.table-bordered > tbody > tr" 31 | }, 32 | "fields": { 33 | "id": { 34 | "selector": "a[href*=\"details?tid=\"]", 35 | "attribute": "href", 36 | "filters": [ 37 | { 38 | "name": "re_search", 39 | "args": [ 40 | "\\d+", 41 | 0 42 | ] 43 | } 44 | ] 45 | }, 46 | "category": { 47 | "selector": "a[href*=\"?cat=\"]", 48 | "attribute": "href", 49 | "filters": [ 50 | { 51 | "name": "querystring", 52 | "args": "cat" 53 | } 54 | ] 55 | }, 56 | "title_default": { 57 | "selector": "td:nth-child(3) > div> a" 58 | }, 59 | "title_optional": { 60 | "optional": true, 61 | "selector": "td:nth-child(3) > div> a", 62 | "attribute": "title" 63 | }, 64 | "title": { 65 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'][0:80] }}{% else %}{{ fields['title_default'][0:80] }}{% endif %}" 66 | }, 67 | "details": { 68 | "selector": "a[href*=\"details?tid=\"]", 69 | "attribute": "href" 70 | }, 71 | "download": { 72 | "selector": "a[href*=\"download\"]", 73 | "attribute": "href" 74 | }, 75 | "size": { 76 | "selector": "td:nth-child(6)" 77 | }, 78 | "grabs": { 79 | "selector": "td:nth-child(9)" 80 | }, 81 | "seeders": { 82 | "selector": "td:nth-child(7)" 83 | }, 84 | "leechers": { 85 | "selector": "td:nth-child(8)" 86 | }, 87 | "date_added": { 88 | "selector": "td:nth-child(5)" 89 | }, 90 | "date": { 91 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 92 | "filters": [ 93 | { 94 | "name": "dateparse", 95 | "args": "%Y-%m-%d %H:%M:%S" 96 | } 97 | ] 98 | }, 99 | "downloadvolumefactor": { 100 | "case": { 101 | "img.pro_free": 0, 102 | "img.pro_free2up": 0, 103 | "img.pro_50pctdown": 0.5, 104 | "img.pro_50pctdown2up": 0.5, 105 | "img.pro_30pctdown": 0.3, 106 | "*": 1 107 | } 108 | }, 109 | "uploadvolumefactor": { 110 | "case": { 111 | "img.pro_50pctdown2up": 2, 112 | "img.pro_free2up": 2, 113 | "img.pro_2up": 2, 114 | "*": 1 115 | } 116 | }, 117 | "free_deadline": { 118 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 119 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 120 | "selector": "td[class=\"embedded\"] > b > span[title]", 121 | "attribute": "title", 122 | "filters": [ 123 | { 124 | "name": "dateparse", 125 | "args": "%Y-%m-%d %H:%M:%S" 126 | } 127 | ] 128 | }, 129 | "description": { 130 | "selector": "div> a", 131 | "index": -1 132 | }, 133 | "labels": { 134 | "selector": "div > div.tags > a" 135 | }, 136 | "minimumratio": { 137 | "text": 1 138 | }, 139 | "minimumseedtime": { 140 | "text": 90000 141 | } 142 | } 143 | }, 144 | "conf": { 145 | "FREE": [ 146 | "//span[@class='badge bg-primary']" 147 | ], 148 | "2XFREE": [], 149 | "HR": [], 150 | "PEER_COUNT": [] 151 | } 152 | } -------------------------------------------------------------------------------- /sites/龙之家.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "longzhijia", 3 | "name": "\u9f99\u4e4b\u5bb6", 4 | "domain": "https://www.dragonhd.xyz/", 5 | "encoding": "UTF-8", 6 | "public": false, 7 | "search": { 8 | "paths": [ 9 | { 10 | "path": "torrents.php", 11 | "method": "get" 12 | } 13 | ], 14 | "params": { 15 | "search": "{keyword}" 16 | }, 17 | "batch": { 18 | "delimiter": " ", 19 | "space_replace": "_" 20 | } 21 | }, 22 | "torrents": { 23 | "list": { 24 | "selector": "table.torrents > tr:has(\"table.torrentname\")" 25 | }, 26 | "fields": { 27 | "id": { 28 | "selector": "a[href*=\"details.php?id=\"]", 29 | "attribute": "href", 30 | "filters": [ 31 | { 32 | "name": "re_search", 33 | "args": [ 34 | "\\d+", 35 | 0 36 | ] 37 | } 38 | ] 39 | }, 40 | "title_default": { 41 | "selector": "a[href*=\"details.php?id=\"]" 42 | }, 43 | "title_optional": { 44 | "optional": true, 45 | "selector": "a[title][href*=\"details.php?id=\"]", 46 | "attribute": "title" 47 | }, 48 | "title": { 49 | "text": "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 50 | }, 51 | "category": { 52 | "selector": "a[href*=\"?cat=\"]", 53 | "attribute": "href", 54 | "filters": [ 55 | { 56 | "name": "replace", 57 | "args": [ 58 | "?", 59 | "" 60 | ] 61 | }, 62 | { 63 | "name": "querystring", 64 | "args": "cat" 65 | } 66 | ] 67 | }, 68 | "details": { 69 | "selector": "a[href*=\"details.php?id=\"]", 70 | "attribute": "href" 71 | }, 72 | "download": { 73 | "selector": "a[href*=\"download.php?id=\"]", 74 | "attribute": "href" 75 | }, 76 | "imdbid": { 77 | "selector": "div.imdb_100 > a", 78 | "attribute": "href", 79 | "filters": [ 80 | { 81 | "name": "re_search", 82 | "args": [ 83 | "tt\\d+", 84 | 0 85 | ] 86 | } 87 | ] 88 | }, 89 | "date_elapsed": { 90 | "selector": "td:nth-child(4) > span", 91 | "optional": true 92 | }, 93 | "date_added": { 94 | "selector": "td:nth-child(4) > span", 95 | "attribute": "title", 96 | "optional": true 97 | }, 98 | "date": { 99 | "text": "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}", 100 | "filters": [ 101 | { 102 | "name": "dateparse", 103 | "args": "%Y-%m-%d %H:%M:%S" 104 | } 105 | ] 106 | }, 107 | "size": { 108 | "selector": "td:nth-child(5)" 109 | }, 110 | "seeders": { 111 | "selector": "td:nth-child(6)" 112 | }, 113 | "leechers": { 114 | "selector": "td:nth-child(7)" 115 | }, 116 | "grabs": { 117 | "selector": "td:nth-child(8)" 118 | }, 119 | "downloadvolumefactor": { 120 | "case": { 121 | "img.pro_free": 0, 122 | "img.pro_free2up": 0, 123 | "img.pro_50pctdown": 0.5, 124 | "img.pro_50pctdown2up": 0.5, 125 | "img.pro_30pctdown": 0.3, 126 | "*": 1 127 | } 128 | }, 129 | "uploadvolumefactor": { 130 | "case": { 131 | "img.pro_50pctdown2up": 2, 132 | "img.pro_free2up": 2, 133 | "img.pro_2up": 2, 134 | "*": 1 135 | } 136 | }, 137 | "free_deadline": { 138 | "default_value": "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}", 139 | "default_value_format": "%Y-%m-%d %H:%M:%S.%f", 140 | "selector": "img.pro_free,img.pro_free2up", 141 | "attribute": "onmouseover", 142 | "filters": [ 143 | { 144 | "name": "re_search", 145 | "args": [ 146 | "\\d+-\\d+-\\d+ \\d+:\\d+:\\d+", 147 | 0 148 | ] 149 | }, 150 | { 151 | "name": "dateparse", 152 | "args": "%Y-%m-%d %H:%M:%S" 153 | } 154 | ] 155 | }, 156 | "description": { 157 | "selector": "td:nth-child(2) > table > tr > td.embedded", 158 | "contents": -1 159 | }, 160 | "labels": { 161 | "selector": "td:nth-child(2) > table > tr > td.embedded > span" 162 | } 163 | } 164 | } 165 | } -------------------------------------------------------------------------------- /user.sites.jsons.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuyelin/nas-tools-sites/9b75ec2ecf544e33b0840c8f677a54253e684679/user.sites.jsons.zip --------------------------------------------------------------------------------