├── README.md └── sites ├── rarbg.yml ├── acg.yml ├── mikanani.yml ├── tjupt.yml ├── ptsbao.yml ├── filelist.yml ├── hares.yml ├── lemonhd.yml ├── pthome.yml ├── beitai.yml ├── springsunday.yml ├── keepfrds.yml ├── chdbits.yml ├── btschool.yml ├── hddolby.yml ├── audiences.yml ├── hdfans.yml ├── hhan.yml ├── ourbits.yml ├── hdatmos.yml ├── pterclub.yml ├── hdchina.yml ├── hdarea.yml ├── putao.yml ├── totheglory.yml ├── hdsky.yml ├── iptorrents.yml ├── mteam.yml └── hdhome.yml /README.md: -------------------------------------------------------------------------------- 1 | # movie-bot-conf 2 | 自用学习,请勿打扰 3 | 如果你有站点适配文件想要分享给大家,可以提PR合并 4 | -------------------------------------------------------------------------------- /sites/rarbg.yml: -------------------------------------------------------------------------------- 1 | id: rarbg 2 | name: RARBG 3 | domain: https://rarbg.to 4 | encoding: UTF-8 5 | parser: RARBG 6 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/rarbg.yml 7 | 8 | #订阅时搜索的值: cn_name/en_name/imdb_id 9 | sub_search_value_type: 10 | - imdb_id 11 | user_params: 12 | cookie: 13 | enable: false 14 | traffic_management: 15 | enable: false 16 | category_mappings: 17 | - { id: 4, cate_level1: Movie, cate_level2: "XXX (18+)", cate_level2_desc: "XXX (18+)" } 18 | - { id: 17, cate_level1: Movie, cate_level2: "Movies/x264", cate_level2_desc: "Movies/x264" } 19 | - { id: 44, cate_level1: Movie, cate_level2: "Movies/x264/1080", cate_level2_desc: "Movies/x264/1080" } 20 | - { id: 45, cate_level1: Movie, cate_level2: "Movies/x264/720", cate_level2_desc: "Movies/x264/720" } 21 | - { id: 47, cate_level1: Movie, cate_level2: "Movies/x264/3D", cate_level2_desc: "Movies/x264/3D" } 22 | - { id: 50, cate_level1: Movie, cate_level2: "Movies/x264/4k", cate_level2_desc: "Movies/x264/4k" } 23 | - { id: 51, cate_level1: Movie, cate_level2: "Movies/x265/4k", cate_level2_desc: "Movies/x265/4k" } 24 | - { id: 52, cate_level1: Movie, cate_level2: "Movs/x265/4k/HDR", cate_level2_desc: "Movs/x265/4k/HDR" } 25 | - { id: 42, cate_level1: Movie, cate_level2: "Movies/Full BD", cate_level2_desc: "Movies/Full BD" } 26 | - { id: 46, cate_level1: Movie, cate_level2: "Movies/BD Remux", cate_level2_desc: "Movies/BD Remux" } 27 | - { id: 54, cate_level1: Movie, cate_level2: "Movies/x265/1080", cate_level2_desc: "Movies/x265/1080" } 28 | - { id: 18, cate_level1: TV, cate_level2: "TV Episodes", cate_level2_desc: "TV Episodes" } 29 | - { id: 41, cate_level1: TV, cate_level2: "TV HD Episodes", cate_level2_desc: "TV HD Episodes" } 30 | - { id: 49, cate_level1: TV, cate_level2: "TV UHD Episodes", cate_level2_desc: "TV UHD Episodes" } 31 | - { id: 49, cate_level1: TV, cate_level2: "Movies/TV-UHD-episodes", cate_level2_desc: "Movies/TV-UHD-episodes" } 32 | - { id: 23, cate_level1: Music, cate_level2: "Music/MP3", cate_level2_desc: "Music/MP3" } 33 | - { id: 25, cate_level1: Music, cate_level2: "Music/FLAC", cate_level2_desc: "Music/FLAC" } 34 | - { id: 27, cate_level1: Game, cate_level2: "Games/PC ISO", cate_level2_desc: "Games/PC ISO" } 35 | - { id: 28, cate_level1: Game, cate_level2: "Games/PC RIP", cate_level2_desc: "Games/PC RIP" } 36 | - { id: 33, cate_level1: Other, cate_level2: "Software/PC ISO", cate_level2_desc: "Software/PC ISO" } 37 | - { id: 53, cate_level1: Game, cate_level2: "Games/PS4", cate_level2_desc: "Games/PS4" } -------------------------------------------------------------------------------- /sites/acg.yml: -------------------------------------------------------------------------------- 1 | id: acgrip 2 | name: acg 3 | domain: https://acg.rip 4 | encoding: UTF-8 5 | config_url: https://gh-proxy.com//https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/acg.yml 6 | 7 | login: 8 | required: false 9 | test: 10 | selector: a[id="user-logout"] 11 | 12 | category_mappings: 13 | - { id: 1, cate_level1: Anime, cate_level2: TV/Anime, cate_level2_desc: "Anime(動畫)" } 14 | 15 | userinfo: 16 | constant: true 17 | fields: 18 | uid: 0 19 | user_group: '' 20 | username: 'acg' 21 | share_ratio: '' 22 | uploaded: 0 23 | downloaded: 0 24 | seeding: 0 25 | leeching: 0 26 | vip_group: 0 27 | list: 28 | path: /1 29 | list: 30 | selector: div.container > table.table.table-hover.table-condensed.post-index > tr 31 | fields: 32 | id: 33 | selector: td.title > span > a[href^="/t/"] 34 | attribute: href 35 | filters: 36 | - name: re_search 37 | args: [ '\d+', 0 ] 38 | category: 39 | default_value: 1 40 | details: 41 | selector: td.title > span > a[href^="/t/"] 42 | attribute: href 43 | download: 44 | selector: td.action > a[href^="/t/"] 45 | attribute: href 46 | size: 47 | selector: td.size 48 | grabs: 49 | default_value: 99 50 | seeders: 51 | default_value: 99 52 | leechers: 53 | default_value: 99 54 | downloadvolumefactor: 55 | default_value: 0 56 | uploadvolumefactor: 57 | default_value: 1 58 | free_deadline: 59 | default_value: "{{max_time}}" 60 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 61 | description: 62 | selector: td.title > span > a[href^="/t/"] 63 | title: 64 | text: "{{ fields['description'] }}" 65 | search: 66 | paths: 67 | - path: / 68 | categories: [ 1 ] 69 | query: 70 | term: "{{query.keyword}}" 71 | 72 | torrents: 73 | list: 74 | selector: div.container > table.table.table-hover.table-condensed.post-index > tr 75 | fields: 76 | id: 77 | selector: td.title > span > a[href^="/t/"] 78 | attribute: href 79 | filters: 80 | - name: re_search 81 | args: [ '\d+', 0 ] 82 | category: 83 | default_value: 1 84 | details: 85 | selector: td.title > span > a[href^="/t/"] 86 | attribute: href 87 | download: 88 | selector: td.action > a[href^="/t/"] 89 | attribute: href 90 | size: 91 | selector: td.size 92 | grabs: 93 | default_value: 99 94 | seeders: 95 | default_value: 99 96 | leechers: 97 | default_value: 99 98 | downloadvolumefactor: 99 | default_value: 0 100 | uploadvolumefactor: 101 | default_value: 1 102 | free_deadline: 103 | default_value: "{{max_time}}" 104 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 105 | description: 106 | selector: td.title > span > a[href^="/t/"] 107 | title: 108 | text: "{{ fields['description'] }}" 109 | -------------------------------------------------------------------------------- /sites/mikanani.yml: -------------------------------------------------------------------------------- 1 | id: mikanani 2 | name: 蜜柑 3 | domain: https://mikanani.me 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/mikanani.yml 6 | login: 7 | #不需要登陆,也可以使用,设置为false不做登陆验证 8 | required: false 9 | test: 10 | selector: a[id="user-logout"] 11 | 12 | category_mappings: 13 | #蜜柑计划站点全都是动漫,并且站点没有分类,所以设定一个默认的动漫分类即可 14 | - { id: 1, cate_level1: Anime, cate_level2: TV/Anime, cate_level2_desc: "Anime(動畫)" } 15 | 16 | userinfo: 17 | #常量模式,这个站点不需要用户信息,所以直接定义静态的值 18 | constant: true 19 | #常量模式,fields就是一个标准json 20 | fields: 21 | uid: 0 22 | user_group: '' 23 | username: 'mikanani' 24 | share_ratio: '' 25 | uploaded: 0 26 | downloaded: 0 27 | seeding: 0 28 | leeching: 0 29 | vip_group: 0 30 | #列表功能配置 31 | list: 32 | path: /Home/Classic 33 | list: 34 | selector: table.table > tbody > tr 35 | fields: 36 | id: 37 | selector: a[href^="/Download/"] 38 | attribute: href 39 | filters: 40 | - name: re_search 41 | args: [ '/Download/\d+/([^"]+).torrent', 1 ] 42 | category: 43 | # 没有分类,所以默认category_mappings中定义的 44 | default_value: 1 45 | details: 46 | selector: a[href^="/Home/Episode"] 47 | attribute: href 48 | download: 49 | selector: a[href^="/Download/"] 50 | attribute: href 51 | size: 52 | selector: td:nth-child(4) 53 | grabs: 54 | # bt站没有,提供默认值,保证过滤器可用 55 | default_value: 99 56 | seeders: 57 | # bt站没有,提供默认值,保证过滤器可用 58 | default_value: 99 59 | leechers: 60 | # bt站没有,提供默认值,保证过滤器可用 61 | default_value: 99 62 | date: 63 | selector: td:nth-child(1) 64 | filters: 65 | - name: dateparse 66 | args: ["%Y/%m/%d %H:%M", "%Y-%m-%d %H:%M"] 67 | downloadvolumefactor: 68 | # bt站没有,提供默认值为下载免费,保证过滤器可用 69 | default_value: 0 70 | uploadvolumefactor: 71 | # bt站没有,提供默认值,保证过滤器可用 72 | default_value: 1 73 | free_deadline: 74 | # bt站没有,提供默认值永久免费 75 | default_value: "{{max_time}}" 76 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 77 | description: 78 | selector: a[href^="/Home/Episode"] 79 | title: 80 | text: "{{ fields['description'] }}" 81 | #搜索功能配置 82 | search: 83 | paths: 84 | - path: /Home/Search 85 | #上面随便设定的分类编号为0,这里填0,就可以再搜索动漫分类时,搜索这个站点,这个地址 86 | categories: [ 1 ] 87 | query: 88 | #搜索页只需要一个关键字参数 89 | searchstr: "{{query.keyword}}" 90 | 91 | torrents: 92 | list: 93 | selector: table.table > tbody > tr.js-search-results-row 94 | fields: 95 | id: 96 | selector: a[href^="/Download/"] 97 | attribute: href 98 | filters: 99 | - name: re_search 100 | args: [ '/Download/\d+/([^"]+).torrent', 1 ] 101 | category: 102 | # 没有分类,所以默认category_mappings中定义的 103 | default_value: 1 104 | details: 105 | selector: a[href^="/Home/Episode"] 106 | attribute: href 107 | download: 108 | selector: a[href^="/Download/"] 109 | attribute: href 110 | size: 111 | selector: td:nth-child(2) 112 | grabs: 113 | # bt站没有,提供默认值,保证过滤器可用 114 | default_value: 99 115 | seeders: 116 | # bt站没有,提供默认值,保证过滤器可用 117 | default_value: 99 118 | leechers: 119 | # bt站没有,提供默认值,保证过滤器可用 120 | default_value: 99 121 | date: 122 | selector: td:nth-child(3) 123 | filters: 124 | - name: dateparse 125 | args: ["%Y/%m/%d %H:%M", "%Y-%m-%d %H:%M"] 126 | downloadvolumefactor: 127 | # bt站没有,提供默认值为下载免费,保证过滤器可用 128 | default_value: 0 129 | uploadvolumefactor: 130 | # bt站没有,提供默认值,保证过滤器可用 131 | default_value: 1 132 | free_deadline: 133 | # bt站没有,提供默认值永久免费 134 | default_value: "{{max_time}}" 135 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 136 | description: 137 | selector: a[href^="/Home/Episode"] 138 | title: 139 | text: "{{ fields['description'] }}" 140 | -------------------------------------------------------------------------------- /sites/tjupt.yml: -------------------------------------------------------------------------------- 1 | id: tjupt 2 | name: 北洋园 3 | domain: https://tjupt.org/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/tjupt.yml 6 | 7 | login: 8 | test: 9 | selector: a[href^="userdetails.php"] 10 | 11 | category_mappings: 12 | - {id: 401, cate_level1: Movie, cate_level2: 电影, cate_level2_desc: "电影"} 13 | - {id: 402, cate_level1: TV, cate_level2: 剧集, cate_level2_desc: "剧集"} 14 | - {id: 403, cate_level1: TV, cate_level2: 综艺, cate_level2_desc: "综艺"} 15 | - {id: 404, cate_level1: Other, cate_level2: 资料, cate_level2_desc: "资料"} 16 | - {id: 405, cate_level1: Anime, cate_level2: 动漫, cate_level2_desc: "动漫"} 17 | - {id: 406, cate_level1: Music, cate_level2: 音乐, cate_level2_desc: "音乐"} 18 | - {id: 407, cate_level1: TV, cate_level2: 体育, cate_level2_desc: "体育"} 19 | - {id: 408, cate_level1: Other, cate_level2: 软件, cate_level2_desc: "软件"} 20 | - {id: 409, cate_level1: Game, cate_level2: 游戏, cate_level2_desc: "游戏"} 21 | - {id: 411, cate_level1: Documentary, cate_level2: 纪录片, cate_level2_desc: "纪录片"} 22 | - {id: 412, cate_level1: Movie, cate_level2: 移动视频, cate_level2_desc: "移动视频"} 23 | - {id: 410, cate_level1: Other, cate_level2: 其他, cate_level2_desc: "其他"} 24 | 25 | userinfo: 26 | path: https://tjupt.org/rules.php 27 | item: 28 | selector: table[id="info_block"] 29 | fields: 30 | uid: 31 | default_value: 0 32 | selector: a[href^="userdetails.php?id="] 33 | attribute: href 34 | filters: 35 | - name: re_search 36 | args: [ '\d+', 0 ] 37 | user_group: 38 | default_value: '' 39 | selector: a[href^="userdetails.php?id="] 40 | attribute: class 41 | username: 42 | default_value: '未知用户名' 43 | selector: a[href^="userdetails.php?id="] 44 | share_ratio: 45 | text: 0 46 | uploaded: 47 | default_value: 0 48 | selector: font[class="color_uploaded"] 49 | method: next_sibling 50 | filters: 51 | - name: replace 52 | args: [ '无限','inf' ] 53 | downloaded: 54 | default_value: 0 55 | selector: font[class="color_downloaded"] 56 | method: next_sibling 57 | filters: 58 | - name: replace 59 | args: [ '无限','inf' ] 60 | seeding: 61 | default_value: 0 62 | selector: img[alt="Torrents seeding"] 63 | method: next_sibling 64 | leeching: 65 | default_value: 0 66 | selector: img[alt="Torrents leeching"] 67 | method: next_sibling 68 | vip_group: 69 | case: 70 | a[class^="VIP"]: true 71 | "*": false 72 | search: 73 | paths: 74 | - path: torrents.php 75 | method: get 76 | query: 77 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 78 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 79 | # 0 incldead, 1 active, 2 dead 80 | incldead: 1 81 | # 0 all, 1 normal, 2 popular, 3 classic, 4 recomended, 5 0day, 6 imdb top 250 82 | picktype: 0 83 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 84 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 85 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 86 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 87 | # 0 AND, 1 OR, 2 exact 88 | search_mode: 0 89 | sort: "{{ query.sort }}" 90 | type: "{{ query.type }}" 91 | page: "{{ query.page }}" 92 | 93 | torrents: 94 | list: 95 | selector: table.torrents > tr:has(table.torrentname) 96 | fields: 97 | id: 98 | selector: a[href^="details.php?id="] 99 | attribute: href 100 | filters: 101 | - name: re_search 102 | args: [ '\d+', 0 ] 103 | category: 104 | selector: a[href*="cat="] 105 | attribute: href 106 | filters: 107 | - name: querystring 108 | args: cat 109 | title_default: 110 | selector: a[href^="details.php?id="] 111 | title_optional: 112 | optional: true 113 | selector: a[title][href^="details.php?id="] 114 | attribute: title 115 | title: 116 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 117 | details: 118 | selector: a[href^="details.php?id="] 119 | attribute: href 120 | download: 121 | selector: a[href^="download.php?id="] 122 | attribute: href 123 | imdbid: 124 | selector: a[href*="imdb.com/title/tt"] 125 | attribute: href 126 | filters: 127 | - name: re_search 128 | args: [ 'tt\d+',0 ] 129 | date_elapsed: 130 | # time type: time elapsed (default) 131 | selector: td:nth-child(4) > span[title] 132 | attribute: title 133 | optional: true 134 | date_added: 135 | # time added 136 | selector: td:nth-child(4):not(:has(span)) 137 | optional: true 138 | date: 139 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 140 | filters: 141 | - name: dateparse 142 | args: "%Y-%m-%d %H:%M:%S" 143 | size: 144 | selector: td:nth-child(5) 145 | seeders: 146 | selector: td:nth-child(6) 147 | leechers: 148 | selector: td:nth-child(7) 149 | grabs: 150 | selector: td:nth-child(8) 151 | downloadvolumefactor: 152 | case: 153 | font.free: 0 154 | font.twoupfree: 0 155 | font.halfdown: 0.5 156 | font.twouphalfdown: 0.5 157 | font.thirtypercent: 0.3 158 | "*": 1 159 | uploadvolumefactor: 160 | case: 161 | font.twouphalfdown: 2 162 | font.twoupfree: 2 163 | font.twoup: 2 164 | "*": 1 165 | description: 166 | selector: td:nth-child(2) 167 | remove: a, img, div 168 | minimumratio: 169 | text: 0.8 170 | -------------------------------------------------------------------------------- /sites/ptsbao.yml: -------------------------------------------------------------------------------- 1 | id: ptsbao 2 | name: 烧包 3 | domain: https://ptsbao.club/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/ptsbao.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: "电影", cate_level2_desc: "电影" } 13 | - { id: 402, cate_level1: TV, cate_level2: "剧集", cate_level2_desc: "剧集" } 14 | - { id: 403, cate_level1: TV, cate_level2: "综艺", cate_level2_desc: "综艺" } 15 | - { id: 405, cate_level1: Anime, cate_level2: "动漫", cate_level2_desc: "动漫" } 16 | - { id: 414, cate_level1: Music, cate_level2: "音乐", cate_level2_desc: "音乐" } 17 | - { id: 404, cate_level1: Documentary, cate_level2: "纪录片", cate_level2_desc: "纪录片" } 18 | - { id: 423, cate_level1: Other, cate_level2: "原创", cate_level2_desc: "原创" } 19 | - { id: 409, cate_level1: Other, cate_level2: "其他", cate_level2_desc: "其他" } 20 | - { id: 424, cate_level1: Other, cate_level2: "限制", cate_level2_desc: "限制" } 21 | 22 | userinfo: 23 | path: https://ptsbao.club/rules.php 24 | item: 25 | selector: table[id="info_block"] 26 | fields: 27 | uid: 28 | default_value: 0 29 | selector: a[href^="userdetails.php?id="] 30 | attribute: href 31 | filters: 32 | - name: re_search 33 | args: [ '\d+', 0 ] 34 | user_group: 35 | default_value: '' 36 | selector: a[href^="userdetails.php?id="] 37 | attribute: class 38 | username: 39 | default_value: '未知用户名' 40 | selector: a[href^="userdetails.php?id="] 41 | share_ratio: 42 | default_value: '' 43 | selector: font[class="color_ratio"] 44 | method: next_sibling 45 | filters: 46 | - name: replace 47 | args: [ '无限','inf' ] 48 | uploaded: 49 | default_value: 0 50 | selector: font[class="color_uploaded"] 51 | method: next_sibling 52 | filters: 53 | - name: replace 54 | args: [ '无限','inf' ] 55 | downloaded: 56 | default_value: 0 57 | selector: font[class="color_downloaded"] 58 | method: next_sibling 59 | filters: 60 | - name: replace 61 | args: [ '无限','inf' ] 62 | seeding: 63 | default_value: 0 64 | selector: img[alt="Torrents seeding"] 65 | method: next_sibling 66 | leeching: 67 | default_value: 0 68 | selector: img[alt="Torrents leeching"] 69 | method: next_sibling 70 | vip_group: 71 | case: 72 | a[class^="VIP"]: true 73 | "*": false 74 | search: 75 | paths: 76 | - path: torrents.php 77 | method: get 78 | query: 79 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 80 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 81 | # 0 incldead, 1 active, 2 dead 82 | incldead: 1 83 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 84 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 85 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 86 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 87 | # 0 AND, 1 OR, 2 exact 88 | search_mode: 0 89 | sort: "{{ query.sort }}" 90 | type: "{{ query.type }}" 91 | page: "{{ query.page }}" 92 | 93 | torrents: 94 | list: 95 | selector: table.torrents > tbody > tr:has(table.torrentname) 96 | fields: 97 | id: 98 | selector: a[href^="details.php?id="] 99 | attribute: href 100 | filters: 101 | - name: re_search 102 | args: [ '\d+', 0 ] 103 | category: 104 | selector: a[href^="torrents.php?cat="] 105 | attribute: href 106 | filters: 107 | - name: querystring 108 | args: cat 109 | title_default: 110 | selector: a[href^="details.php?id="] 111 | title_optional: 112 | optional: true 113 | selector: a[title][href^="details.php?id="] 114 | attribute: title 115 | title: 116 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 117 | details: 118 | selector: a[href^="details.php?id="] 119 | attribute: href 120 | download: 121 | selector: a[href^="download.php?id="] 122 | attribute: href 123 | size: 124 | selector: td:nth-child(6) 125 | grabs: 126 | selector: td:nth-child(9) 127 | seeders: 128 | selector: td:nth-child(7) 129 | leechers: 130 | selector: td:nth-child(8) 131 | date_elapsed: 132 | # time type: time elapsed (default) 133 | selector: td:nth-child(5) > span[title] 134 | attribute: title 135 | optional: true 136 | date_added: 137 | # time added 138 | selector: td:nth-child(5):not(:has(span)) 139 | optional: true 140 | date: 141 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 142 | filters: 143 | - name: dateparse 144 | args: "%Y-%m-%d %H:%M:%S" 145 | downloadvolumefactor: 146 | case: 147 | img.pro_free: 0 148 | img.pro_free2up: 0 149 | img.pro_50pctdown: 0.5 150 | img.pro_50pctdown2up: 0.5 151 | img.pro_30pctdown: 0.3 152 | "*": 1 153 | uploadvolumefactor: 154 | case: 155 | img.pro_50pctdown2up: 2 156 | img.pro_free2up: 2 157 | img.pro_2up: 2 158 | "*": 1 159 | free_deadline: 160 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 161 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 162 | selector: td:nth-child(2) > table > tr > td:nth-child(1) > font > b > span[title] 163 | attribute: title 164 | filters: 165 | - name: dateparse 166 | args: "%Y-%m-%d %H:%M:%S" 167 | description: 168 | selector: table.torrentname > td 169 | contents: -1 -------------------------------------------------------------------------------- /sites/filelist.yml: -------------------------------------------------------------------------------- 1 | id: filelist 2 | name: filelist 3 | domain: https://filelist.io/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/filelist.yml 6 | 7 | sub_search_value_type: 8 | - imdb_id 9 | login: 10 | test: 11 | selector: a[href^="/index.php"] 12 | 13 | category_mappings: 14 | - { id: 24, cate_level1: Anime, cate_level2: "Anime" , cate_level2_desc: "Anime" } 15 | - { id: 11, cate_level1: Music, cate_level2: "Music/Audio" , cate_level2_desc: "Audio" } 16 | - { id: 15, cate_level1: Anime, cate_level2: "Anime" , cate_level2_desc: "Desene" } 17 | - { id: 18, cate_level1: Other, cate_level2: "Other" , cate_level2_desc: "Diverse" } 18 | - { id: 16, cate_level1: Documentary, cate_level2: "Documentary" , cate_level2_desc: "Docs" } 19 | - { id: 25, cate_level1: Movie, cate_level2: "Movie/3D" , cate_level2_desc: "Filme 3D" } 20 | - { id: 6, cate_level1: Movie, cate_level2: "Movie/4k" , cate_level2_desc: "Filme 4K" } 21 | - { id: 26, cate_level1: Movie, cate_level2: "Movie/4k/Blu-Ray" , cate_level2_desc: "Filme 4K Blu-Ray" } 22 | - { id: 20, cate_level1: Movie, cate_level2: "Movie/Bl-Ray" , cate_level2_desc: "Filme Blu-Ray" } 23 | - { id: 2, cate_level1: Movie, cate_level2: "Movie/DVD" , cate_level2_desc: "Filme DVD" } 24 | - { id: 3, cate_level1: Movie, cate_level2: "Movie/DVD-RO" , cate_level2_desc: "Filme DVD-RO" } 25 | - { id: 4, cate_level1: Movie, cate_level2: "Movie/HD" , cate_level2_desc: "Filme HD" } 26 | - { id: 19, cate_level1: Movie, cate_level2: "Movie/HD-R0" , cate_level2_desc: "Filme HD-RO" } 27 | - { id: 1, cate_level1: Movie, cate_level2: "Movie/SD" , cate_level2_desc: "Filme SD" } 28 | - { id: 5, cate_level1: Music, cate_level2: "Music/FLAC" , cate_level2_desc: "FLAC" } 29 | - { id: 10, cate_level1: Game, cate_level2: "Game" , cate_level2_desc: "Jocuri Console" } 30 | - { id: 9, cate_level1: Game, cate_level2: "Game/PC" , cate_level2_desc: "Jocuri PC" } 31 | - { id: 17, cate_level1: Other, cate_level2: "Other" , cate_level2_desc: " Linux" } 32 | - { id: 22, cate_level1: Other, cate_level2: "Other" , cate_level2_desc: "Mobile" } 33 | - { id: 8, cate_level1: Other, cate_level2: "Other" , cate_level2_desc: "Programe" } 34 | - { id: 27, cate_level1: Movie, cate_level2: "Movie/4k" , cate_level2_desc: "Seriale 4K" } 35 | - { id: 21, cate_level1: Movie, cate_level2: "Movie/HD" , cate_level2_desc: "Seriale HD" } 36 | - { id: 23, cate_level1: Movie, cate_level2: "Movie/SD" , cate_level2_desc: "Seriale SD" } 37 | - { id: 13, cate_level1: TV, cate_level2: "TV/Sport" , cate_level2_desc: "Sport" } 38 | - { id: 12, cate_level1: Video, cate_level2: "Video" , cate_level2_desc: "Videoclip" } 39 | - { id: 7, cate_level1: AV, cate_level2: "XXX" , cate_level2_desc: "XXX" } 40 | 41 | userinfo: 42 | path: https://filelist.io/browse.php 43 | item: 44 | selector: div.statusbar 45 | fields: 46 | uid: 47 | default_value: 0 48 | selector: a[href^="/userdetails.php?id="] 49 | attribute: href 50 | filters: 51 | - name: re_search 52 | args: [ '\d+', 0 ] 53 | user_group: 54 | selector: div[style="padding:1px;"] > font 55 | username: 56 | default_value: '未知用户名' 57 | selector: a[href^="/userdetails.php?id="] > span 58 | uploaded: 59 | default_value: 0 60 | selector: span:has(> img[src="/styles/images/uploaded.png"]) 61 | remove: font 62 | filters: 63 | - name: replace 64 | args: [':',''] 65 | downloaded: 66 | default_value: 0 67 | selector: span:has(> img[src="/styles/images/downloaded.png"]) 68 | remove: font 69 | filters: 70 | - name: replace 71 | args: [ ':','' ] 72 | share_ratio: 73 | default_value: 'inf' 74 | selector: span:has(> img[src="/styles/images/ratio.png"]) 75 | remove: font 76 | filters: 77 | - name: replace 78 | args: [ ':','' ] 79 | - name: replace 80 | args: [ '---','inf' ] 81 | seeding: 82 | text: 0 83 | leeching: 84 | text: 0 85 | vip_group: 86 | case: 87 | a[class^="VIP"]: true 88 | "*": false 89 | search: 90 | paths: 91 | - path: browse.php 92 | method: get 93 | query: 94 | searchin: "{% if query.imdb_id %}3{% else %}1{%endif%}" 95 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 96 | incldead: 0 97 | sort: "{{ query.sort }}" 98 | page: "{{ query.page }}" 99 | 100 | torrents: 101 | list: 102 | selector: div.visitedlinks > div.torrentrow 103 | fields: 104 | id: 105 | selector: a[href^="details.php?id="] 106 | attribute: href 107 | filters: 108 | - name: re_search 109 | args: [ '\d+', 0 ] 110 | title: 111 | selector: a[href^="details.php?id="] 112 | attribute: title 113 | poster: 114 | selector: span[data-toggle="tooltip"] 115 | attribute: title 116 | filters: 117 | - name: re_search 118 | args: ["", 1] 119 | category: 120 | selector: a[href^="browse.php?cat="] 121 | attribute: href 122 | filters: 123 | - name: querystring 124 | args: cat 125 | details: 126 | selector: a[href^="details.php?id="] 127 | attribute: href 128 | download: 129 | selector: a[href^="download.php?id="] 130 | attribute: href 131 | date: 132 | selector: div:nth-child(6) 133 | filters: 134 | - name: dateparse 135 | args: "%H:%M:%S%d/%m/%Y" 136 | size: 137 | selector: div:nth-child(7) 138 | seeders: 139 | selector: div:nth-child(9) 140 | leechers: 141 | selector: div:nth-child(10) 142 | grabs: 143 | selector: div:nth-child(8) > span > font 144 | contents: 0 145 | downloadvolumefactor: 146 | case: 147 | img[alt="FreeLeech"]: 0 148 | "*": 1 149 | uploadvolumefactor: 150 | case: 151 | img[alt="DoubleUp"]: 2 152 | "*": 1 153 | free_deadline: 154 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 155 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 156 | minimumratio: 157 | text: 1 158 | minimumseedtime: 159 | text: 172800 -------------------------------------------------------------------------------- /sites/hares.yml: -------------------------------------------------------------------------------- 1 | id: hares 2 | name: 白兔 3 | domain: https://club.hares.top/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/hares.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="index.html"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies | 电影" } 13 | - { id: 402, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series | 电视剧" } 14 | - { id: 403, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Shows | 综艺" } 15 | - { id: 404, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries | 纪录片" } 16 | - { id: 405, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations | 动漫" } 17 | - { id: 406, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "Music Videos | 音乐视频" } 18 | - { id: 407, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports | 体育" } 19 | - { id: 409, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "Concert | 演唱会" } 20 | - { id: 416, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "Show LIVE | 现场LIVE" } 21 | - { id: 415, cate_level1: Other, cate_level2: Other,cate_level2_ desc: "Others | 其他" } 22 | 23 | userinfo: 24 | path: https://club.hares.top/index.php 25 | item: 26 | selector: body 27 | fields: 28 | uid: 29 | default_value: 0 30 | selector: a[href^="userdetails.php?id="] 31 | attribute: href 32 | filters: 33 | - name: re_search 34 | args: [ '\d+', 0 ] 35 | user_group: 36 | default_value: 'User' 37 | selector: li > i[title="等级"] + span 38 | username: 39 | default_value: '未知用户名' 40 | selector: a[href^="userdetails.php"]:has(> img) 41 | share_ratio: 42 | default_value: 0 43 | selector: li > i[title="分享率"] + span 44 | filters: 45 | - name: replace 46 | args: [ '无限','inf' ] 47 | - name: replace 48 | args: [ '---','inf' ] 49 | uploaded: 50 | default_value: 0 51 | selector: li > i[title="上传量"] + span 52 | filters: 53 | - name: replace 54 | args: [ '无限','inf' ] 55 | downloaded: 56 | default_value: 0 57 | selector: li > i[title="下载量"] + span 58 | filters: 59 | - name: replace 60 | args: [ '无限','inf' ] 61 | seeding: 62 | default_value: 0 63 | selector: li > i[title="做种中"] + span 64 | leeching: 65 | default_value: 0 66 | selector: li > i[title="下载中"] + span 67 | # method: next_sibling 68 | vip_group: 69 | case: 70 | a[class^="VIP"]: true 71 | "*": false 72 | search: 73 | paths: 74 | - path: torrents.php 75 | method: get 76 | query: 77 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 78 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 79 | # 0 incldead, 1 active, 2 dead 80 | incldead: 1 81 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 82 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 83 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 84 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 85 | # 0 AND, 1 OR, 2 exact 86 | search_mode: 0 87 | sort: "{{ query.sort }}" 88 | type: "{{ query.type }}" 89 | page: "{{ query.page }}" 90 | 91 | torrents: 92 | list: 93 | selector: table.torrents > tr 94 | fields: 95 | id: 96 | selector: a[href^="details.php?id="] 97 | attribute: href 98 | filters: 99 | - name: re_search 100 | args: [ '\d+', 0 ] 101 | title_default: 102 | selector: a[href^="details.php?id="] 103 | title_optional: 104 | optional: true 105 | selector: a[title][href^="details.php?id="] 106 | attribute: title 107 | title: 108 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 109 | category: 110 | selector: a[href^="?cat="] 111 | attribute: href 112 | filters: 113 | - name: replace 114 | args: [ "?", "" ] 115 | - name: querystring 116 | args: cat 117 | details: 118 | selector: a[href^="details.php?id="] 119 | attribute: href 120 | download: 121 | selector: a[href^="download.php?id="] 122 | attribute: href 123 | date_elapsed: 124 | # 站点设置,已去时间 (默认) 125 | selector: td:nth-child(4) > span[title] 126 | attribute: title 127 | optional: true 128 | date_added: 129 | # 站点设置,实际时间 130 | selector: td:nth-child(4):not(:has(span)) 131 | optional: true 132 | date: 133 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 134 | filters: 135 | - name: dateparse 136 | args: "%Y-%m-%d %H:%M:%S" 137 | size: 138 | selector: td:nth-child(5) 139 | seeders: 140 | selector: td:nth-child(6) 141 | leechers: 142 | selector: td:nth-child(7) 143 | grabs: 144 | selector: td:nth-child(8) 145 | downloadvolumefactor: 146 | case: 147 | img.pro_free: 0 148 | img.pro_free2up: 0 149 | img.pro_50pctdown: 0.5 150 | img.pro_50pctdown2up: 0.5 151 | img.pro_30pctdown: 0.3 152 | "*": 1 153 | uploadvolumefactor: 154 | case: 155 | img.pro_50pctdown2up: 2 156 | img.pro_free2up: 2 157 | img.pro_2up: 2 158 | "*": 1 159 | free_deadline: 160 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 161 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 162 | selector: img.pro_free,img.pro_free2up,img.pro_50pctdown,img.pro_50pctdown2up,img.pro_30pctdown 163 | attribute: data-d 164 | filters: 165 | - name: re_search 166 | args: [ '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}',0 ] 167 | - name: dateparse 168 | args: "%Y-%m-%d %H:%M:%S" 169 | description: 170 | selector: div.layui-torrents-Subject > div.left > p.layui-elip.layui-torrents-descr-width 171 | -------------------------------------------------------------------------------- /sites/lemonhd.yml: -------------------------------------------------------------------------------- 1 | id: lemonhd 2 | name: 柠檬 3 | domain: https://lemonhd.org/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/lemonhd.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "电影 Movie" } 13 | - { id: 402, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series(电视剧)" } 14 | - { id: 403, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Shows(综艺)" } 15 | - { id: 404, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries(纪录片)" } 16 | - { id: 405, cate_level1: Anime, cate_level2: TV/Anime, cate_level2_desc: "Animations(动画片)" } 17 | - { id: 406, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "Music Videos(MV)" } 18 | - { id: 408, cate_level1: Music, cate_level2: Audio, cate_level2_desc: "HQ Audio(音乐)" } 19 | - { id: 500, cate_level1: Music, cate_level2: Audio, cate_level2_desc: "Music(无损)" } 20 | - { id: 409, cate_level1: Other, cate_level2: Other, cate_level2_desc: "Video Portray(写真视频)" } 21 | # 搜索时id映射 22 | category_id_mapping: 23 | - { id: movie, mapping: 401 } 24 | - { id: tv, mapping: [ 402,403 ] } 25 | - { id: doc, mapping: [ 404 ] } 26 | - { id: animate, mapping: 405 } 27 | - { id: mv, mapping: 406 } 28 | - { id: music, mapping: [ 408,500 ] } 29 | - { id: other, mapping: 409 } 30 | userinfo: 31 | path: https://lemonhd.org/rules.php 32 | item: 33 | selector: table[id="info_block"] > tr > td > table > tr > td > table 34 | fields: 35 | uid: 36 | default_value: 0 37 | selector: a[href^="userdetails.php?id="] 38 | attribute: href 39 | filters: 40 | - name: re_search 41 | args: [ '\d+', 0 ] 42 | user_group: 43 | default_value: '' 44 | selector: a[href^="userdetails.php?id="] 45 | attribute: class 46 | username: 47 | default_value: '未知用户名' 48 | selector: a[href^="userdetails.php?id="] 49 | share_ratio: 50 | default_value: '' 51 | selectors: td 52 | index: 4 53 | filters: 54 | - name: replace 55 | args: [ '无限','inf' ] 56 | uploaded: 57 | default_value: 0 58 | selectors: td 59 | index: 6 60 | filters: 61 | - name: replace 62 | args: [ '无限','inf' ] 63 | downloaded: 64 | default_value: 0 65 | selectors: td 66 | index: 22 67 | filters: 68 | - name: replace 69 | args: [ '无限','inf' ] 70 | seeding: 71 | default_value: 0 72 | selectors: td 73 | index: 8 74 | leeching: 75 | default_value: 0 76 | electors: td 77 | index: 24 78 | vip_group: 79 | case: 80 | a[class^="VIP"]: true 81 | "*": false 82 | search: 83 | paths: 84 | - path: torrents.php 85 | categories: [ "!", 406, 408, 500 ] 86 | method: get 87 | - path: torrents_music.php 88 | categories: [ 408, 500 ] 89 | method: get 90 | - path: torrents_mv.php 91 | categories: [ 406 ] 92 | method: get 93 | query: 94 | $raw: "{% for c in query.cates %}cat_{{c}}=1&{% endfor %}" 95 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 96 | # 2 搜免费 全部则留空 97 | spstate: "{% if query.free %}2{% endif %}" 98 | # imdb 搜imdbid name 标题、副标题 99 | search_area: "{% if query.imdb_id %}imdb{% else %}name{%endif%}" 100 | suggest: 0 101 | stype: s 102 | column: "{{ query.sort }}" 103 | sort: "{{ query.type }}" 104 | page: "{{ query.page }}" 105 | 106 | torrents: 107 | list: 108 | selector: table.torrents > tr:has(b) 109 | fields: 110 | id: 111 | selector: a[href^="details_"] 112 | attribute: href 113 | filters: 114 | - name: re_search 115 | args: [ '\d+', 0 ] 116 | free_deadline: 117 | selector: 'div[style^="padding-left"] > span[title]' 118 | attribute: title 119 | filters: 120 | - name: dateparse 121 | args: "%Y-%m-%d %H:%M:%S" 122 | category: 123 | selector: img[class^="cat_"] 124 | attribute: class 125 | filters: 126 | - name: replace 127 | args: [ "cat_","" ] 128 | title_default: 129 | selector: a[href^="details_"] > b 130 | title_optional: 131 | optional: true 132 | selector: a[title][href^="details_"] 133 | attribute: title 134 | title: 135 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 136 | details: 137 | selector: a[href^="details_"] 138 | attribute: href 139 | download: 140 | selector: a[href^="download.php?"] 141 | attribute: href 142 | imdbid: 143 | selector: a[href*="imdb.com/title/tt"] 144 | attribute: href 145 | filters: 146 | - name: re_search 147 | args: [ 'tt\d+',0 ] 148 | date_elapsed: 149 | # time type: time elapsed (default) 150 | selector: td:nth-last-child(7) > span[title] 151 | attribute: title 152 | optional: true 153 | date_added: 154 | # time added 155 | selector: td:nth-last-child(7) 156 | optional: true 157 | date: 158 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 159 | filters: 160 | - name: dateparse 161 | args: "%Y-%m-%d %H:%M:%S" 162 | size: 163 | selector: td:nth-last-child(6) 164 | seeders: 165 | selector: td:nth-last-child(5) 166 | leechers: 167 | selector: td:nth-last-child(4) 168 | grabs: 169 | selector: td:nth-last-child(3) 170 | downloadvolumefactor: 171 | case: 172 | 'div[style^="padding-left"] > span[title]': 0 173 | "*": 1 174 | uploadvolumefactor: 175 | case: 176 | "*": 1 177 | subject: 178 | selectors: td:nth-child(3) > div 179 | index: 1 180 | tags: 181 | selectors: td:nth-child(3) > span.tag 182 | description: 183 | text: "{% if fields['tags']%}{{ fields['subject']+' '+fields['tags']|join(' ') }}{% else %}{{ fields['subject'] }}{% endif %}" 184 | 185 | -------------------------------------------------------------------------------- /sites/pthome.yml: -------------------------------------------------------------------------------- 1 | id: pthome 2 | name: 铂金家 3 | domain: https://pthome.net/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/pthome.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: "电影", cate_level2_desc: "电影" } 13 | - { id: 404, cate_level1: Documentary, cate_level2: "纪录片", cate_level2_desc: "纪录片" } 14 | - { id: 405, cate_level1: Anime, cate_level2: "动漫", cate_level2_desc: "动漫" } 15 | - { id: 402, cate_level1: TV, cate_level2: "电视剧", cate_level2_desc: "电视剧" } 16 | - { id: 403, cate_level1: TV, cate_level2: "综艺", cate_level2_desc: "综艺" } 17 | - { id: 407, cate_level1: TV, cate_level2: "体育", cate_level2_desc: "体育" } 18 | - { id: 408, cate_level1: Music, cate_level2: "音乐", cate_level2_desc: "音乐" } 19 | - { id: 410, cate_level1: Music, cate_level2: "游戏", cate_level2_desc: "游戏" } 20 | - { id: 411, cate_level1: Other, cate_level2: "软件", cate_level2_desc: "软件" } 21 | - { id: 412, cate_level1: Other, cate_level2: "学习", cate_level2_desc: "学习" } 22 | - { id: 409, cate_level1: Other, cate_level2: "其他", cate_level2_desc: "其他" } 23 | - { id: 507, cate_level1: Music, cate_level2: "有声书", cate_level2_desc: "有声书" } 24 | - { id: 508, cate_level1: Other, cate_level2: "电子书", cate_level2_desc: "电子书" } 25 | 26 | userinfo: 27 | path: https://pthome.net/rules.php 28 | item: 29 | selector: table[id="info_block"] 30 | fields: 31 | uid: 32 | default_value: 0 33 | selector: a[href^="userdetails.php?id="] 34 | attribute: href 35 | filters: 36 | - name: re_search 37 | args: [ '\d+', 0 ] 38 | user_group: 39 | default_value: '' 40 | selector: a[href^="userdetails.php?id="] 41 | attribute: class 42 | username: 43 | default_value: '未知用户名' 44 | selector: a[href^="userdetails.php?id="] 45 | share_ratio: 46 | default_value: '' 47 | selector: font[class="color_ratio"] 48 | method: next_sibling 49 | filters: 50 | - name: replace 51 | args: [ '无限','inf' ] 52 | uploaded: 53 | default_value: 0 54 | selector: font[class="color_uploaded"] 55 | method: next_sibling 56 | filters: 57 | - name: replace 58 | args: [ '无限','inf' ] 59 | downloaded: 60 | default_value: 0 61 | selector: font[class="color_downloaded"] 62 | method: next_sibling 63 | filters: 64 | - name: replace 65 | args: [ '无限','inf' ] 66 | seeding: 67 | default_value: 0 68 | selector: img[alt="Torrents seeding"] 69 | method: next_sibling 70 | leeching: 71 | default_value: 0 72 | selector: img[alt="Torrents leeching"] 73 | method: next_sibling 74 | vip_group: 75 | case: 76 | a[class^="VIP"]: true 77 | "*": false 78 | search: 79 | paths: 80 | - path: torrents.php 81 | method: get 82 | query: 83 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 84 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 85 | # 0 incldead, 1 active, 2 dead 86 | incldead: 1 87 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 88 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 89 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 90 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 91 | # 0 AND, 1 OR, 2 exact 92 | search_mode: 0 93 | sort: "{{ query.sort }}" 94 | type: "{{ query.type }}" 95 | page: "{{ query.page }}" 96 | 97 | torrents: 98 | list: 99 | selector: table.torrents > tr:has(table.torrentname) 100 | fields: 101 | id: 102 | selector: a[href^="details.php?id="] 103 | attribute: href 104 | filters: 105 | - name: re_search 106 | args: [ '\d+', 0 ] 107 | category: 108 | selector: a[href^="?cat="] 109 | attribute: href 110 | filters: 111 | - name: querystring 112 | args: cat 113 | title_default: 114 | selector: a[href^="details.php?id="] 115 | title_optional: 116 | optional: true 117 | selector: a[title][href^="details.php?id="] 118 | attribute: title 119 | title: 120 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 121 | details: 122 | selector: a[href^="details.php?id="] 123 | attribute: href 124 | download: 125 | selector: a[href^="download.php?id="] 126 | attribute: href 127 | size: 128 | selector: td:nth-child(5) 129 | grabs: 130 | selector: td:nth-child(8) 131 | seeders: 132 | selector: td:nth-child(6) 133 | leechers: 134 | selector: td:nth-child(7) 135 | date_elapsed: 136 | # time type: time elapsed (default) 137 | selector: td:nth-child(4) > span[title] 138 | attribute: title 139 | optional: true 140 | date_added: 141 | # time added 142 | selector: td:nth-child(4):not(:has(span)) 143 | optional: true 144 | date: 145 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 146 | filters: 147 | - name: dateparse 148 | args: "%Y-%m-%d %H:%M:%S" 149 | downloadvolumefactor: 150 | case: 151 | img.pro_free: 0 152 | img.pro_free2up: 0 153 | img.pro_50pctdown: 0.5 154 | img.pro_50pctdown2up: 0.5 155 | img.pro_30pctdown: 0.3 156 | "*": 1 157 | uploadvolumefactor: 158 | case: 159 | img.pro_50pctdown2up: 2 160 | img.pro_free2up: 2 161 | img.pro_2up: 2 162 | "*": 1 163 | free_deadline: 164 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 165 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 166 | selector: 'td[class="embedded"] > b > span[title]' 167 | attribute: title 168 | filters: 169 | - name: dateparse 170 | args: "%Y-%m-%d %H:%M:%S" 171 | description: 172 | selectors: table.torrentname > tr > td.embedded > span 173 | index: -1 -------------------------------------------------------------------------------- /sites/beitai.yml: -------------------------------------------------------------------------------- 1 | id: beitai 2 | name: 备胎 3 | domain: https://www.beitai.pt/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/beitai.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/电影" } 13 | - { id: 404, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/纪录片" } 14 | - { id: 405, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/动漫" } 15 | - { id: 402, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/剧集" } 16 | - { id: 403, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Shows/综艺" } 17 | - { id: 406, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MusicVideo/音乐MV" } 18 | - { id: 407, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports/运体" } 19 | - { id: 409, cate_level1: Other, cate_level2: Other, cate_level2_desc: "Misc/其他" } 20 | - { id: 408, cate_level1: Music, cate_level2: Audio,cate_level2_ desc: "HQ Audio/无损音乐" } 21 | 22 | userinfo: 23 | path: https://www.beitai.pt/index.php 24 | item: 25 | selector: table[id="info_block"] 26 | fields: 27 | uid: 28 | default_value: 0 29 | selector: a[href^="userdetails.php?id="] 30 | attribute: href 31 | filters: 32 | - name: re_search 33 | args: [ '\d+', 0 ] 34 | user_group: 35 | default_value: '' 36 | selector: a[href^="userdetails.php?id="] 37 | attribute: class 38 | username: 39 | default_value: '未知用户名' 40 | selector: a[href^="userdetails.php?id="] 41 | share_ratio: 42 | default_value: '' 43 | selector: font[class="color_ratio"] 44 | method: next_sibling 45 | filters: 46 | - name: replace 47 | args: [ '无限','inf' ] 48 | uploaded: 49 | default_value: 0 50 | selector: font[class="color_uploaded"] 51 | method: next_sibling 52 | filters: 53 | - name: replace 54 | args: [ '无限','inf' ] 55 | downloaded: 56 | default_value: 0 57 | selector: font[class="color_downloaded"] 58 | method: next_sibling 59 | filters: 60 | - name: replace 61 | args: [ '无限','inf' ] 62 | seeding: 63 | default_value: 0 64 | selector: img[alt="Torrents seeding"] 65 | method: next_sibling 66 | leeching: 67 | default_value: 0 68 | selector: img[alt="Torrents leeching"] 69 | method: next_sibling 70 | vip_group: 71 | case: 72 | a[class^="VIP"]: true 73 | "*": false 74 | search: 75 | paths: 76 | - path: torrents.php 77 | method: get 78 | query: 79 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 80 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 81 | # 0 incldead, 1 active, 2 dead 82 | incldead: 1 83 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 84 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 85 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 86 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 87 | # 0 AND, 1 OR, 2 exact 88 | search_mode: 0 89 | sort: "{{ query.sort }}" 90 | type: "{{ query.type }}" 91 | page: "{{ query.page }}" 92 | 93 | torrents: 94 | list: 95 | selector: table.torrents > tr:has(table.torrentname) 96 | fields: 97 | id: 98 | selector: a[href^="details.php?id="] 99 | attribute: href 100 | filters: 101 | - name: re_search 102 | args: [ '\d+', 0 ] 103 | title_default: 104 | selector: a[href^="details.php?id="] 105 | title_optional: 106 | optional: true 107 | selector: a[title][href^="details.php?id="] 108 | attribute: title 109 | title: 110 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 111 | category: 112 | selector: a[href^="?cat="] 113 | attribute: href 114 | filters: 115 | - name: replace 116 | args: [ "?", "" ] 117 | - name: querystring 118 | args: cat 119 | details: 120 | selector: a[href^="details.php?id="] 121 | attribute: href 122 | download: 123 | selector: a[href^="download.php?id="] 124 | attribute: href 125 | imdbid: 126 | selector: div.imdb_100 > a 127 | attribute: href 128 | filters: 129 | - name: re_search 130 | args: [ 'tt\d+',0 ] 131 | date_elapsed: 132 | # 站点设置,已去时间 (默认) 133 | selector: td:nth-child(4) > span[title] 134 | attribute: title 135 | optional: true 136 | date_added: 137 | # 站点设置,实际时间 138 | selector: td:nth-child(4):not(:has(span)) 139 | optional: true 140 | date: 141 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 142 | filters: 143 | - name: dateparse 144 | args: "%Y-%m-%d %H:%M:%S" 145 | size: 146 | selector: td:nth-child(5) 147 | seeders: 148 | selector: td:nth-child(6) 149 | leechers: 150 | selector: td:nth-child(7) 151 | grabs: 152 | selector: td:nth-child(8) 153 | downloadvolumefactor: 154 | case: 155 | img.pro_free: 0 156 | img.pro_free2up: 0 157 | img.pro_50pctdown: 0.5 158 | img.pro_50pctdown2up: 0.5 159 | img.pro_30pctdown: 0.3 160 | "*": 1 161 | uploadvolumefactor: 162 | case: 163 | img.pro_50pctdown2up: 2 164 | img.pro_free2up: 2 165 | img.pro_2up: 2 166 | "*": 1 167 | free_deadline: 168 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 169 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 170 | selector: img.pro_free,img.pro_free2up 171 | attribute: onmouseover 172 | filters: 173 | - name: re_search 174 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 175 | - name: dateparse 176 | args: "%Y-%m-%d %H:%M:%S" 177 | description: 178 | selector: td:nth-child(2) > table > tr > td.embedded 179 | contents: -1 -------------------------------------------------------------------------------- /sites/springsunday.yml: -------------------------------------------------------------------------------- 1 | id: ssd 2 | name: 不可说 3 | domain: https://springsunday.net/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/springsunday.yml 6 | 7 | 8 | login: 9 | test: 10 | selector: a[href^="logout.php"] 11 | 12 | category_mappings: 13 | - { id: 501, cate_level1: Movie, cate_level2 Movies, cate_level2_desc: "Movies(电影)" } 14 | - { id: 502, cate_level1: TV, cate_level2 TV, cate_level2_desc: "TV Series(剧集)" } 15 | - { id: 503, cate_level1: Documentary, cate_level2 TV/Documentary, cate_level2_desc: "Docs(纪录)" } 16 | - { id: 504, cate_level1: Anime, cate_level2 TV/Anime, cate_level2_desc: "Animations(动画)" } 17 | - { id: 505, cate_level1: TV, cate_level2 TV, cate_level2_desc: "TV Shows(综艺)" } 18 | - { id: 506, cate_level1: TV, cate_level2 TV/Sport, cate_level2_desc: "Sports(体育)" } 19 | - { id: 507, cate_level1: Music, cate_level2 Audio/Video, cate_level2_desc: "MV(音乐视频)" } 20 | - { id: 508, cate_level1: Music, cate_level2 Audio, cate_level2_desc: "Music(音乐)" } 21 | - { id: 509, cate_level1: Other, cate_level2 Other, cate_level2_desc: "Others(其他)" } 22 | 23 | userinfo: 24 | path: https://springsunday.net/rules.php 25 | item: 26 | selector: div[id="info_block"] 27 | fields: 28 | uid: 29 | default_value: 0 30 | selector: a[href^="userdetails.php?id="] 31 | attribute: href 32 | filters: 33 | - name: re_search 34 | args: [ '\d+', 0 ] 35 | user_group: 36 | default_value: '' 37 | selector: a[href^="userdetails.php?id="] 38 | attribute: class 39 | username: 40 | default_value: '未知用户名' 41 | selector: a[href^="userdetails.php?id="] 42 | share_ratio: 43 | default_value: '' 44 | selector: font[class="color_ratio"] 45 | method: next_sibling 46 | filters: 47 | - name: replace 48 | args: [ '无限','inf' ] 49 | uploaded: 50 | default_value: 0 51 | selector: font[class="color_uploaded"] 52 | method: next_sibling 53 | filters: 54 | - name: replace 55 | args: [ '无限','inf' ] 56 | downloaded: 57 | default_value: 0 58 | selector: font[class="color_downloaded"] 59 | method: next_sibling 60 | filters: 61 | - name: replace 62 | args: [ '无限','inf' ] 63 | seeding: 64 | default_value: 0 65 | selector: img[alt="Torrents seeding"] 66 | method: next_sibling 67 | leeching: 68 | default_value: 0 69 | selector: img[alt="Torrents leeching"] 70 | method: next_sibling 71 | vip_group: 72 | case: 73 | a[class^="VIP"]: true 74 | "*": false 75 | search: 76 | paths: 77 | - path: torrents.php 78 | method: get 79 | query: 80 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 81 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 82 | # 0 incldead, 1 active, 2 dead 83 | incldead: 1 84 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 85 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 86 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 87 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 88 | # 0 AND, 1 OR, 2 exact 89 | search_mode: 0 90 | # 0 all, 1 popular, 2 classic, 3 recomended, 4 2+3 91 | pick: 0 92 | sort: "{{ query.sort }}" 93 | type: "{{ query.type }}" 94 | page: "{{ query.page }}" 95 | 96 | torrents: 97 | list: 98 | selector: table.torrents > tr:has(table.torrentname) 99 | fields: 100 | id: 101 | selector: a[href^="details.php?id="] 102 | attribute: href 103 | filters: 104 | - name: re_search 105 | args: [ '\d+', 0 ] 106 | category: 107 | selector: a[href^="?cat="] 108 | attribute: href 109 | filters: 110 | - name: querystring 111 | args: cat 112 | title_default: 113 | selector: a[href^="details.php?id="] 114 | title_optional: 115 | optional: true 116 | selector: a[title][href^="details.php?id="] 117 | attribute: title 118 | title: 119 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 120 | details: 121 | selector: a[href^="details.php?id="] 122 | attribute: href 123 | download: 124 | selector: a[href^="download.php?id="] 125 | attribute: href 126 | imdbid: 127 | selector: a[href*="imdb.com/title/tt"] 128 | attribute: href 129 | filters: 130 | - name: re_search 131 | args: [ 'tt\d+',0 ] 132 | date_elapsed: 133 | # time type: time elapsed (default) 134 | selector: td.rowfollow:nth-last-child(6) > span[title] 135 | attribute: title 136 | optional: true 137 | date_added: 138 | # time added 139 | selector: td.rowfollow:nth-last-child(6):not(:has(span)) 140 | optional: true 141 | date: 142 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 143 | filters: 144 | - name: dateparse 145 | args: "%Y-%m-%d %H:%M:%S" 146 | size: 147 | selector: td.rowfollow:nth-last-child(5) 148 | seeders: 149 | selector: td.rowfollow:nth-last-child(4) 150 | leechers: 151 | selector: td.rowfollow:nth-last-child(3) 152 | grabs: 153 | selector: td.rowfollow:nth-last-child(2) 154 | downloadvolumefactor: 155 | case: 156 | img.pro_free: 0 157 | img.pro_free2up: 0 158 | img.pro_50pctdown: 0.5 159 | img.pro_50pctdown2up: 0.5 160 | img.pro_30pctdown: 0.3 161 | "*": 1 162 | uploadvolumefactor: 163 | case: 164 | img.pro_50pctdown2up: 2 165 | img.pro_free2up: 2 166 | img.pro_2up: 2 167 | "*": 1 168 | free_deadline: 169 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 170 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 171 | selector: img.pro_free,img.pro_free2up 172 | attribute: onmouseover 173 | filters: 174 | - name: re_search 175 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 176 | - name: dateparse 177 | args: "%Y-%m-%d %H:%M:%S" 178 | description: 179 | selector: table.torrentname > tr > td 180 | remove: a, b, img, span 181 | contents: -1 182 | -------------------------------------------------------------------------------- /sites/keepfrds.yml: -------------------------------------------------------------------------------- 1 | id: keepfrds 2 | name: 朋友 3 | domain: https://pt.keepfrds.com/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/keepfrds.yml 6 | 7 | login: 8 | test: 9 | selector: a[onclick="document.getElementById('logout').submit();"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: "电影", cate_level2_desc: "电影" } 13 | - { id: 301, cate_level1: Movie, cate_level2: "电影(合集)", cate_level2_desc: "电影(合集)" } 14 | - { id: 404, cate_level1: Documentary, cate_level2: "纪录片", cate_level2_desc: "纪录片" } 15 | - { id: 304, cate_level1: Documentary, cate_level2: "纪录片(合集)", cate_level2_desc: "纪录片(合集)" } 16 | - { id: 405, cate_level1: Anime, cate_level2: "动漫", cate_level2_desc: "动漫" } 17 | - { id: 305, cate_level1: Anime, cate_level2: "动漫(合集)", cate_level2_desc: "动漫(合集)" } 18 | - { id: 402, cate_level1: TV, cate_level2: "剧集", cate_level2_desc: "剧集" } 19 | - { id: 302, cate_level1: TV, cate_level2: "剧集(合集)", cate_level2_desc: "剧集(合集)" } 20 | - { id: 403, cate_level1: TV, cate_level2: "综艺", cate_level2_desc: "综艺" } 21 | - { id: 303, cate_level1: TV, cate_level2: "综艺(合集)", cate_level2_desc: "综艺(合集)" } 22 | - { id: 407, cate_level1: TV, cate_level2: "体育", cate_level2_desc: "体育" } 23 | - { id: 307, cate_level1: TV, cate_level2: "体育(合集)", cate_level2_desc: "体育(合集)" } 24 | - { id: 406, cate_level1: Music, cate_level2: "音乐录影带", cate_level2_desc: "音乐录影带" } 25 | - { id: 306, cate_level1: Music, cate_level2: "音乐录影带(合集)", cate_level2_desc: "音乐录影带(合集)" } 26 | - { id: 408, cate_level1: Music, cate_level2: "音乐", cate_level2_desc: "音乐" } 27 | - { id: 308, cate_level1: Music, cate_level2: "音乐(合集)", cate_level2_desc: "音乐(合集)" } 28 | - { id: 409, cate_level1: Other, cate_level2: "其他", cate_level2_desc: "其他" } 29 | - { id: 309, cate_level1: Other, cate_level2: "其他(合集)", cate_level2_desc: "其他(合集)" } 30 | - { id: 300, cate_level1: Other, cate_level2: "回收站", cate_level2_desc: "回收站" } 31 | 32 | userinfo: 33 | path: https://pt.keepfrds.com/rules.php 34 | item: 35 | selector: table[id="info_block"] 36 | fields: 37 | uid: 38 | default_value: 0 39 | selector: a[href^="userdetails.php?id="] 40 | attribute: href 41 | filters: 42 | - name: re_search 43 | args: [ '\d+', 0 ] 44 | user_group: 45 | default_value: '' 46 | selector: a[href^="userdetails.php?id="] 47 | attribute: class 48 | username: 49 | default_value: '未知用户名' 50 | selector: a[href^="userdetails.php?id="] 51 | share_ratio: 52 | default_value: '' 53 | selector: font[class="color_ratio"] 54 | method: next_sibling 55 | filters: 56 | - name: replace 57 | args: [ '无限','inf' ] 58 | uploaded: 59 | default_value: 0 60 | selector: font[class="color_uploaded"] 61 | method: next_sibling 62 | filters: 63 | - name: replace 64 | args: [ '无限','inf' ] 65 | downloaded: 66 | default_value: 0 67 | selector: font[class="color_downloaded"] 68 | method: next_sibling 69 | filters: 70 | - name: replace 71 | args: [ '无限','inf' ] 72 | seeding: 73 | default_value: 0 74 | selector: img[alt="Torrents seeding"] 75 | method: next_sibling 76 | leeching: 77 | default_value: 0 78 | selector: img[alt="Torrents leeching"] 79 | method: next_sibling 80 | vip_group: 81 | case: 82 | a[class^="VIP"]: true 83 | "*": false 84 | search: 85 | paths: 86 | - path: torrents.php 87 | method: get 88 | query: 89 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 90 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 91 | # 0 incldead, 1 active, 2 dead 92 | incldead: 1 93 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 94 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 95 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 96 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 97 | # 0 AND, 1 OR, 2 exact 98 | search_mode: 0 99 | sort: "{{ query.sort }}" 100 | type: "{{ query.type }}" 101 | page: "{{ query.page }}" 102 | 103 | torrents: 104 | list: 105 | selector: table.torrents > tr:has(table.torrentname) 106 | fields: 107 | id: 108 | selector: a[href^="details.php?id="] 109 | attribute: href 110 | filters: 111 | - name: re_search 112 | args: [ '\d+', 0 ] 113 | category: 114 | selector: a[href^="?cat="] 115 | attribute: href 116 | filters: 117 | - name: querystring 118 | args: cat 119 | details: 120 | selector: a[href^="details.php?id="] 121 | attribute: href 122 | download: 123 | selector: a[href^="download.php?id="] 124 | attribute: href 125 | size: 126 | selector: td:nth-child(5) 127 | grabs: 128 | selector: td:nth-child(8) 129 | seeders: 130 | selector: td:nth-child(6) 131 | leechers: 132 | selector: td:nth-child(7) 133 | date_elapsed: 134 | # time type: time elapsed (default) 135 | selector: td:nth-child(4) > span[title] 136 | attribute: title 137 | optional: true 138 | date_added: 139 | # time added 140 | selector: td:nth-child(4):not(:has(span)) 141 | optional: true 142 | date: 143 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 144 | filters: 145 | - name: dateparse 146 | args: "%Y-%m-%d %H:%M:%S" 147 | downloadvolumefactor: 148 | case: 149 | img.pro_free: 0 150 | img.pro_free2up: 0 151 | img.pro_50pctdown: 0.5 152 | img.pro_50pctdown2up: 0.5 153 | img.pro_30pctdown: 0.3 154 | "*": 1 155 | uploadvolumefactor: 156 | case: 157 | img.pro_50pctdown2up: 2 158 | img.pro_free2up: 2 159 | img.pro_2up: 2 160 | "*": 1 161 | free_deadline: 162 | selector: img.pro_free,img.pro_free2up 163 | attribute: onmouseover 164 | filters: 165 | - name: re_search 166 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 167 | - name: dateparse 168 | args: "%Y-%m-%d %H:%M:%S" 169 | description: 170 | selector: a[title][href^="details.php?id="] 171 | attribute: title 172 | title: 173 | selector: table.torrentname > tr > td 174 | remove: a,b -------------------------------------------------------------------------------- /sites/chdbits.yml: -------------------------------------------------------------------------------- 1 | id: chdbits 2 | name: 彩虹岛 3 | domain: https://chdbits.co/ 4 | encoding: UTF-8 5 | config_url: https://gh-proxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/chdbits.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies" } 13 | - { id: 404, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries" } 14 | - { id: 405, cate_level1: Anime, cate_level2: TV/Anime, cate_level2_desc: "Animations" } 15 | - { id: 402, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series" } 16 | - { id: 403, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Shows" } 17 | - { id: 406, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "Music Videos" } 18 | - { id: 407, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports" } 19 | - { id: 409, cate_level1: Other, cate_level2: Other, cate_level2_desc: "Misc" } 20 | - { id: 408, cate_level1: Music, cate_level2: Audio, cate_level2_desc: "HQ Audio" } 21 | userinfo: 22 | path: https://chdbits.co//rules.php 23 | item: 24 | selector: table[id="info_block"] 25 | fields: 26 | uid: 27 | default_value: 0 28 | selector: a[href^="userdetails.php?id="] 29 | attribute: href 30 | filters: 31 | - name: re_search 32 | args: [ '\d+', 0 ] 33 | user_group: 34 | default_value: '' 35 | selector: a[href^="userdetails.php?id="] 36 | attribute: class 37 | username: 38 | default_value: '未知用户名' 39 | selector: a[href^="userdetails.php?id="] 40 | share_ratio: 41 | default_value: '' 42 | selector: font[class="color_ratio"] 43 | method: next_sibling 44 | filters: 45 | - name: replace 46 | args: [ '无限','inf' ] 47 | uploaded: 48 | default_value: 0 49 | selector: font[class="color_uploaded"] 50 | method: next_sibling 51 | filters: 52 | - name: replace 53 | args: [ '无限','inf' ] 54 | downloaded: 55 | default_value: 0 56 | selector: font[class="color_downloaded"] 57 | method: next_sibling 58 | filters: 59 | - name: replace 60 | args: [ '无限','inf' ] 61 | seeding: 62 | default_value: 0 63 | selector: img[alt="Torrents seeding"] 64 | method: next_sibling 65 | leeching: 66 | default_value: 0 67 | selector: img[alt="Torrents leeching"] 68 | method: next_sibling 69 | vip_group: 70 | case: 71 | a[class^="VIP"]: true 72 | "*": false 73 | search: 74 | paths: 75 | - path: torrents.php 76 | method: get 77 | query: 78 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 79 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 80 | # 0 incldead, 1 active, 2 dead 81 | incldead: 1 82 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 83 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 84 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 85 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 86 | # 0 AND, 1 OR, 2 exact 87 | search_mode: 0 88 | sort: "{{ query.sort }}" 89 | type: "{{ query.type }}" 90 | page: "{{ query.page }}" 91 | 92 | torrents: 93 | list: 94 | selector: table.torrents > tr:has(table.torrentname) 95 | fields: 96 | id: 97 | selector: a[href^="details.php?id="] 98 | attribute: href 99 | filters: 100 | - name: re_search 101 | args: [ '\d+', 0 ] 102 | category: 103 | selector: a[href^="?cat="] 104 | attribute: href 105 | filters: 106 | - name: querystring 107 | args: cat 108 | title_default: 109 | selector: a[href^="details.php?id="] 110 | title_optional: 111 | optional: true 112 | selector: a[title][href^="details.php?id="] 113 | attribute: title 114 | title: 115 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 116 | details: 117 | selector: a[href^="details.php?id="] 118 | attribute: href 119 | download: 120 | selector: a[href^="download.php?id="] 121 | attribute: href 122 | size: 123 | selector: td:nth-child(5) 124 | grabs: 125 | selector: td:nth-child(8) 126 | seeders: 127 | selector: td:nth-child(6) 128 | leechers: 129 | selector: td:nth-child(7) 130 | date_elapsed: 131 | # time type: time elapsed (default) 132 | selector: td:nth-child(4) > span[title] 133 | attribute: title 134 | optional: true 135 | date_added: 136 | # time added 137 | selector: td:nth-child(4):not(:has(span)) 138 | optional: true 139 | date: 140 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 141 | filters: 142 | - name: dateparse 143 | args: "%Y-%m-%d %H:%M:%S" 144 | downloadvolumefactor: 145 | case: 146 | img.pro_free: 0 147 | img.pro_free2up: 0 148 | img.pro_50pctdown: 0.5 149 | img.pro_50pctdown2up: 0.5 150 | img.pro_30pctdown: 0.3 151 | "*": 1 152 | uploadvolumefactor: 153 | case: 154 | img.pro_50pctdown2up: 2 155 | img.pro_free2up: 2 156 | img.pro_2up: 2 157 | "*": 1 158 | free_deadline: 159 | default_value: "{% if fields['downloadvolumefactor']!=1 %}{{max_time}}{% endif%}" 160 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 161 | selector: 'td.embedded > span[title]' 162 | attribute: title 163 | filters: 164 | - name: dateparse 165 | args: "%Y-%m-%d %H:%M:%S" 166 | hr_days: 167 | defualt_value: 0 168 | selector: div.circle > div.circle-text 169 | filters: 170 | - name: re_search 171 | args: [ '\d',0 ] 172 | minimumratio: 173 | text: "{% if fields[ 'hr_days' ] %}999999{% else %}0{% endif %}" 174 | minimumseedtime: 175 | text: "{% if fields[ 'hr_days' ] %}{{ (fields[ 'hr_days' ]|int)*86400 }}{% else %}0{% endif %}" 176 | tags: 177 | selector: font.subtitle > div 178 | subject: 179 | selector: font.subtitle 180 | remove: div 181 | description: 182 | text: "{% if fields['tags']%}{{ fields['subject']+' '+fields['tags'] }}{% else %}{{ fields['subject'] }}{% endif %}" 183 | -------------------------------------------------------------------------------- /sites/btschool.yml: -------------------------------------------------------------------------------- 1 | id: btschool 2 | name: 学校 3 | domain: https://pt.btschool.club/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/btschool.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 405, cate_level1: Movie, cate_level2: "Movies/电影", cate_level2_desc: "Movies/电影" } 13 | - { id: 406, cate_level1: TV, cate_level2: "连续剧/TV-Series", cate_level2_desc: "连续剧/TV-Series" } 14 | - { id: 407, cate_level1: Anime, cate_level2: "动漫/Animation", cate_level2_desc: "动漫/Animation" } 15 | - { id: 408, cate_level1: Documentary, cate_level2: "纪录片/Documentary", cate_level2_desc: "纪录片/Documentary" } 16 | - { id: 412, cate_level1: TV, cate_level2: "综艺/TV-Show", cate_level2_desc: "综艺/TV-Show" } 17 | - { id: 404, cate_level1: Other, cate_level2: "软件/Software", cate_level2_desc: "软件/Software" } 18 | - { id: 402, cate_level1: Other, cate_level2: "资料/Education", cate_level2_desc: "资料/Education" } 19 | - { id: 411, cate_level1: Game, cate_level2: "游戏/Game", cate_level2_desc: "游戏/Game" } 20 | - { id: 409, cate_level1: Music, cate_level2: "音乐/Music", cate_level2_desc: "音乐/Music" } 21 | - { id: 410, cate_level1: TV, cate_level2: "体育/Sports", cate_level2_desc: "体育/Sports" } 22 | - { id: 415, cate_level1: Other, cate_level2: "其他/Other", cate_level2_desc: "其他/Other" } 23 | 24 | userinfo: 25 | path: https://pt.btschool.club/rules.php 26 | item: 27 | selector: table[id="info_block"] 28 | fields: 29 | uid: 30 | default_value: 0 31 | selector: a[href^="userdetails.php?id="] 32 | attribute: href 33 | filters: 34 | - name: re_search 35 | args: [ '\d+', 0 ] 36 | user_group: 37 | default_value: '' 38 | selector: a[href^="userdetails.php?id="] 39 | attribute: class 40 | username: 41 | default_value: '未知用户名' 42 | selector: a[href^="userdetails.php?id="] 43 | share_ratio: 44 | default_value: '' 45 | selector: font[class="color_ratio"] 46 | method: next_sibling 47 | filters: 48 | - name: replace 49 | args: [ '无限','inf' ] 50 | uploaded: 51 | default_value: 0 52 | selector: font[class="color_uploaded"] 53 | method: next_sibling 54 | filters: 55 | - name: replace 56 | args: [ '无限','inf' ] 57 | downloaded: 58 | default_value: 0 59 | selector: font[class="color_downloaded"] 60 | method: next_sibling 61 | filters: 62 | - name: replace 63 | args: [ '无限','inf' ] 64 | seeding: 65 | default_value: 0 66 | selector: img[alt="Torrents seeding"] 67 | method: next_sibling 68 | leeching: 69 | default_value: 0 70 | selector: img[alt="Torrents leeching"] 71 | method: next_sibling 72 | vip_group: 73 | case: 74 | a[class^="VIP"]: true 75 | "*": false 76 | search: 77 | paths: 78 | - path: torrents.php 79 | method: get 80 | query: 81 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 82 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 83 | # 0 incldead, 1 active, 2 dead 84 | incldead: 1 85 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 86 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 87 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 88 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 89 | # 0 AND, 1 OR, 2 exact 90 | search_mode: 0 91 | sort: "{{ query.sort }}" 92 | type: "{{ query.type }}" 93 | page: "{{ query.page }}" 94 | 95 | torrents: 96 | list: 97 | selector: table.torrents > tr:has(table.torrentname) 98 | fields: 99 | id: 100 | selector: a[href^="details.php?id="] 101 | attribute: href 102 | filters: 103 | - name: re_search 104 | args: [ '\d+', 0 ] 105 | title_default: 106 | selector: a[href^="details.php?id="] 107 | title_optional: 108 | optional: true 109 | selector: a[title][href^="details.php?id="] 110 | attribute: title 111 | title: 112 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 113 | category: 114 | selector: a[href^="?cat="] 115 | attribute: href 116 | filters: 117 | - name: replace 118 | args: [ "?", "" ] 119 | - name: querystring 120 | args: cat 121 | details: 122 | selector: a[href^="details.php?id="] 123 | attribute: href 124 | download: 125 | selector: a[href^="download.php?id="] 126 | attribute: href 127 | imdbid: 128 | selector: div.imdb_100 > a 129 | attribute: href 130 | filters: 131 | - name: re_search 132 | args: [ 'tt\d+',0 ] 133 | date_elapsed: 134 | # 站点设置,已去时间 (默认) 135 | selector: td:nth-child(4) > span[title] 136 | attribute: title 137 | optional: true 138 | date_added: 139 | # 站点设置,实际时间 140 | selector: td:nth-child(4):not(:has(span)) 141 | optional: true 142 | date: 143 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 144 | filters: 145 | - name: dateparse 146 | args: "%Y-%m-%d %H:%M:%S" 147 | size: 148 | selector: td:nth-child(5) 149 | seeders: 150 | selector: td:nth-child(6) 151 | leechers: 152 | selector: td:nth-child(7) 153 | grabs: 154 | selector: td:nth-child(8) 155 | downloadvolumefactor: 156 | case: 157 | img.pro_free: 0 158 | img.pro_free2up: 0 159 | img.pro_50pctdown: 0.5 160 | img.pro_50pctdown2up: 0.5 161 | img.pro_30pctdown: 0.3 162 | "*": 1 163 | uploadvolumefactor: 164 | case: 165 | img.pro_50pctdown2up: 2 166 | img.pro_free2up: 2 167 | img.pro_2up: 2 168 | "*": 1 169 | free_deadline: 170 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 171 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 172 | selector: img.pro_free,img.pro_free2up 173 | attribute: onmouseover 174 | filters: 175 | - name: re_search 176 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 177 | - name: dateparse 178 | args: "%Y-%m-%d %H:%M:%S" 179 | description: 180 | selector: table.torrentname > tr > td.embedded 181 | contents: -1 182 | minimumratio: 183 | text: 1 184 | minimumseedtime: 185 | #做种21小时 186 | text: 75600 -------------------------------------------------------------------------------- /sites/hddolby.yml: -------------------------------------------------------------------------------- 1 | id: hddolby 2 | name: 高清杜比 3 | domain: https://www.hddolby.com/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/hddolby.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/电影" } 13 | - { id: 402, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/剧集" } 14 | - { id: 404, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/纪录片" } 15 | - { id: 405, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/动漫" } 16 | - { id: 403, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Shows/综艺" } 17 | - { id: 406, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MusicVideo/音乐MV" } 18 | - { id: 407, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports/运体" } 19 | - { id: 408, cate_level1: Music, cate_level2: Audio,cate_level2_ desc: "HQ Audio/无损音乐" } 20 | - { id: 410, cate_level1: Game, cate_level2: Other, cate_level2_desc: "Game/游戏" } 21 | - { id: 411, cate_level1: Other, cate_level2: Study, cate_level2_desc: "Other/学习" } 22 | - { id: 409, cate_level1: Other, cate_level2: Other, cate_level2_desc: "Misc/其他" } 23 | 24 | userinfo: 25 | path: https://www.hddolby.com/index.php 26 | item: 27 | selector: table[id="info_block"] 28 | fields: 29 | uid: 30 | default_value: 0 31 | selector: a[href^="userdetails.php?id="] 32 | attribute: href 33 | filters: 34 | - name: re_search 35 | args: [ '\d+', 0 ] 36 | user_group: 37 | default_value: '' 38 | selector: a[href^="userdetails.php?id="] 39 | attribute: class 40 | username: 41 | default_value: '未知用户名' 42 | selector: a[href^="userdetails.php?id="] 43 | share_ratio: 44 | default_value: '' 45 | selector: font[class="color_ratio"] 46 | method: next_sibling 47 | filters: 48 | - name: replace 49 | args: [ '无限','inf' ] 50 | uploaded: 51 | default_value: 0 52 | selector: font[class="color_uploaded"] 53 | method: next_sibling 54 | filters: 55 | - name: replace 56 | args: [ '无限','inf' ] 57 | downloaded: 58 | default_value: 0 59 | selector: font[class="color_downloaded"] 60 | method: next_sibling 61 | filters: 62 | - name: replace 63 | args: [ '无限','inf' ] 64 | seeding: 65 | default_value: 0 66 | selector: img[alt="Torrents seeding"] 67 | method: next_sibling 68 | leeching: 69 | default_value: 0 70 | selector: img[alt="Torrents leeching"] 71 | method: next_sibling 72 | vip_group: 73 | case: 74 | a[class^="VIP"]: true 75 | "*": false 76 | search: 77 | paths: 78 | - path: torrents.php 79 | method: get 80 | query: 81 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 82 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 83 | # 0 incldead, 1 active, 2 dead 84 | incldead: 1 85 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 86 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 87 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 88 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 89 | # 0 AND, 1 OR, 2 exact 90 | search_mode: 0 91 | sort: "{{ query.sort }}" 92 | type: "{{ query.type }}" 93 | page: "{{ query.page }}" 94 | 95 | torrents: 96 | list: 97 | selector: table.torrents > tr:has(table.torrentname) 98 | fields: 99 | id: 100 | selector: a[href^="details.php?id="] 101 | attribute: href 102 | filters: 103 | - name: re_search 104 | args: [ '\d+', 0 ] 105 | title_default: 106 | selector: a[href^="details.php?id="] 107 | title_optional: 108 | optional: true 109 | selector: a[title][href^="details.php?id="] 110 | attribute: title 111 | title: 112 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 113 | category: 114 | selector: a[href^="?cat="] 115 | attribute: href 116 | filters: 117 | - name: replace 118 | args: [ "?", "" ] 119 | - name: querystring 120 | args: cat 121 | details: 122 | selector: a[href^="details.php?id="] 123 | attribute: href 124 | download: 125 | selector: a[href^="download.php?id="] 126 | attribute: href 127 | imdbid: 128 | selector: div.imdb_100 > a 129 | attribute: href 130 | filters: 131 | - name: re_search 132 | args: [ 'tt\d+',0 ] 133 | date_elapsed: 134 | # 站点设置,已去时间 (默认) 135 | selector: td:nth-child(4) > span[title] 136 | attribute: title 137 | optional: true 138 | date_added: 139 | # 站点设置,实际时间 140 | selector: td:nth-child(4):not(:has(span)) 141 | optional: true 142 | date: 143 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 144 | filters: 145 | - name: dateparse 146 | args: "%Y-%m-%d %H:%M:%S" 147 | size: 148 | selector: td:nth-child(5) 149 | seeders: 150 | selector: td:nth-child(6) 151 | leechers: 152 | selector: td:nth-child(7) 153 | grabs: 154 | selector: td:nth-child(8) 155 | downloadvolumefactor: 156 | case: 157 | img.pro_free: 0 158 | img.pro_free2up: 0 159 | img.pro_50pctdown: 0.5 160 | img.pro_50pctdown2up: 0.5 161 | img.pro_30pctdown: 0.3 162 | "*": 1 163 | uploadvolumefactor: 164 | case: 165 | img.pro_50pctdown2up: 2 166 | img.pro_free2up: 2 167 | img.pro_2up: 2 168 | "*": 1 169 | free_deadline: 170 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 171 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 172 | selector: img.pro_free,img.pro_free2up 173 | attribute: onmouseover 174 | filters: 175 | - name: re_search 176 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 177 | - name: dateparse 178 | args: "%Y-%m-%d %H:%M:%S" 179 | description: 180 | selector: td:nth-child(2) > table > tr > td.embedded 181 | contents: -1 182 | minimumratio: 183 | case: 184 | img.hitandrun: 1 185 | "*": 0 186 | minimumseedtime: 187 | case: 188 | img.hitandrun: 86400 189 | "*": 0 -------------------------------------------------------------------------------- /sites/audiences.yml: -------------------------------------------------------------------------------- 1 | id: audiences 2 | name: 观众 3 | domain: https://audiences.me/ 4 | encoding: UTF-8 5 | config_url: https://gh-proxy.com//https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/audiences.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: 电影, cate_level2_desc: "电影" } 13 | - { id: 402, cate_level1: TV, cate_level2: 剧集, cate_level2_desc: "剧集" } 14 | - { id: 403, cate_level1: TV, cate_level2: 综艺, cate_level2_desc: "综艺" } 15 | - { id: 408, cate_level1: Music, cate_level2: 音乐,cate_level2_ desc: "音乐" } 16 | - { id: 404, cate_level1: Music, cate_level2: 有声书, cate_level2_desc: "有声书" } 17 | - { id: 405, cate_level1: Other , cate_level2: 电子书, cate_level2_desc: "电子书" } 18 | - { id: 407, cate_level1: TV, cate_level2: 体育, cate_level2_desc: "体育" } 19 | - { id: 410, cate_level1: Game, cate_level2: 游戏, cate_level2_desc: "游戏" } 20 | - { id: 411, cate_level1: Other, cate_level2: 软件, cate_level2_desc: "软件" } 21 | - { id: 412, cate_level1: Other, cate_level2: 学习, cate_level2_desc: "学习" } 22 | - { id: 409, cate_level1: Other, cate_level2: 其他, cate_level2_desc: "其他" } 23 | 24 | userinfo: 25 | path: https://audiences.me/index.php 26 | item: 27 | selector: table[id="info_block"] 28 | fields: 29 | uid: 30 | default_value: 0 31 | selector: a[href^="userdetails.php?id="] 32 | attribute: href 33 | filters: 34 | - name: re_search 35 | args: [ '\d+', 0 ] 36 | user_group: 37 | default_value: '' 38 | selector: a[href^="userdetails.php?id="] 39 | attribute: class 40 | username: 41 | default_value: '未知用户名' 42 | selector: a[href^="userdetails.php?id="] 43 | share_ratio: 44 | default_value: '' 45 | selector: font[class="color_ratio"] 46 | method: next_sibling 47 | filters: 48 | - name: replace 49 | args: [ '无限','inf' ] 50 | uploaded: 51 | default_value: 0 52 | selector: font[class="color_uploaded"] 53 | method: next_sibling 54 | filters: 55 | - name: replace 56 | args: [ '无限','inf' ] 57 | downloaded: 58 | default_value: 0 59 | selector: font[class="color_downloaded"] 60 | method: next_sibling 61 | filters: 62 | - name: replace 63 | args: [ '无限','inf' ] 64 | seeding: 65 | default_value: 0 66 | selector: img[alt="Torrents seeding"] 67 | method: next_sibling 68 | leeching: 69 | default_value: 0 70 | selector: img[alt="Torrents leeching"] 71 | method: next_sibling 72 | vip_group: 73 | case: 74 | a[class^="VIP"]: true 75 | "*": false 76 | search: 77 | paths: 78 | - path: torrents.php 79 | method: get 80 | query: 81 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 82 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 83 | # 0 incldead, 1 active, 2 dead 84 | incldead: 1 85 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 86 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 87 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 88 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 89 | # 0 AND, 1 OR, 2 exact 90 | search_mode: 0 91 | sort: "{{ query.sort }}" 92 | type: "{{ query.type }}" 93 | page: "{{ query.page }}" 94 | 95 | torrents: 96 | list: 97 | selector: table.torrents > tr:has(table.torrentname) 98 | fields: 99 | id: 100 | selector: a[href^="details.php?id="] 101 | attribute: href 102 | filters: 103 | - name: re_search 104 | args: [ '\d+', 0 ] 105 | title_default: 106 | selector: a[href^="details.php?id="] 107 | title_optional: 108 | optional: true 109 | selector: a[title][href^="details.php?id="] 110 | attribute: title 111 | title: 112 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 113 | category: 114 | selector: a[href^="?cat="] 115 | attribute: href 116 | filters: 117 | - name: replace 118 | args: [ "?", "" ] 119 | - name: querystring 120 | args: cat 121 | details: 122 | selector: a[href^="details.php?id="] 123 | attribute: href 124 | download: 125 | selector: a[href^="download.php?id="] 126 | attribute: href 127 | imdbid: 128 | selector: div.imdb_100 > a 129 | attribute: href 130 | filters: 131 | - name: re_search 132 | args: [ 'tt\d+',0 ] 133 | date_elapsed: 134 | # 站点设置,已去时间 (默认) 135 | selector: td:nth-child(4) > span[title] 136 | attribute: title 137 | optional: true 138 | date_added: 139 | # 站点设置,实际时间 140 | selector: td:nth-child(4):not(:has(span)) 141 | optional: true 142 | date: 143 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 144 | filters: 145 | - name: dateparse 146 | args: "%Y-%m-%d %H:%M:%S" 147 | size: 148 | selector: td:nth-child(5) 149 | seeders: 150 | selector: td:nth-child(6) 151 | leechers: 152 | selector: td:nth-child(7) 153 | grabs: 154 | selector: td:nth-child(8) 155 | downloadvolumefactor: 156 | case: 157 | img.pro_free: 0 158 | img.pro_free2up: 0 159 | img.pro_50pctdown: 0.5 160 | img.pro_50pctdown2up: 0.5 161 | img.pro_30pctdown: 0.3 162 | "*": 1 163 | uploadvolumefactor: 164 | case: 165 | img.pro_50pctdown2up: 2 166 | img.pro_free2up: 2 167 | img.pro_2up: 2 168 | "*": 1 169 | free_deadline: 170 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 171 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 172 | selector: img.pro_free,img.pro_free2up 173 | attribute: onmouseover 174 | filters: 175 | - name: re_search 176 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 177 | - name: dateparse 178 | args: "%Y-%m-%d %H:%M:%S" 179 | subject: 180 | selector: td.embedded 181 | contents: -1 182 | tags: 183 | selectors: td.embedded > span.tags 184 | description: 185 | text: "{% if fields['tags']%}{{ fields['subject']+' '+fields['tags']|join(' ') }}{% else %}{{ fields['subject'] }}{% endif %}" 186 | minimumratio: 187 | case: 188 | img.hitandrun: 1 189 | "*": 0 190 | minimumseedtime: 191 | case: 192 | img.hitandrun: 172800 193 | "*": 0 194 | -------------------------------------------------------------------------------- /sites/hdfans.yml: -------------------------------------------------------------------------------- 1 | id: hdfans 2 | name: 红豆饭 3 | domain: https://hdfans.org/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/hdfans.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: "Movies/电影", cate_level2_desc: "Movies/电影" } 13 | - { id: 402, cate_level1: TV, cate_level2: "TV Series/电视剧", cate_level2_desc: "TV Series/电视剧" } 14 | - { id: 403, cate_level1: Documentary, cate_level2: "Documentaries/纪录片", cate_level2_desc: "Documentaries/纪录片" } 15 | - { id: 406, cate_level1: Music, cate_level2: "Music/音乐", cate_level2_desc: "Music/音乐" } 16 | - { id: 416, cate_level1: TV, cate_level2: "TV Shows/综艺", cate_level2_desc: "TV Shows/综艺" } 17 | - { id: 417, cate_level1: Anime, cate_level2: "Animations/动漫、动画", cate_level2_desc: "Animations/动漫、动画" } 18 | - { id: 407, cate_level1: Music, cate_level2: "Music Videos/音乐视频", cate_level2_desc: "Music Videos/音乐视频" } 19 | - { id: 404, cate_level1: Other, cate_level2: "Education/教育", cate_level2_desc: "Education/教育" } 20 | - { id: 405, cate_level1: Music, cate_level2: "Audio Books/有声读物", cate_level2_desc: "Audio Books/有声读物" } 21 | - { id: 409, cate_level1: TV, cate_level2: "Drama/戏剧", cate_level2_desc: "Drama/戏剧" } 22 | - { id: 418, cate_level1: TV, cate_level2: "Sports/体育", cate_level2_desc: "Sports/体育" } 23 | - { id: 419, cate_level1: Other, cate_level2: "Software/软件", cate_level2_desc: "Software/软件" } 24 | - { id: 421, cate_level1: Game, cate_level2: "Games/游戏", cate_level2_desc: "Games/游戏" } 25 | - { id: 423, cate_level1: Other, cate_level2: "E-Books/电子书", cate_level2_desc: "E-Books/电子书" } 26 | - { id: 410, cate_level1: Other, cate_level2: "Others/其他", cate_level2_desc: "Others/其他" } 27 | 28 | userinfo: 29 | path: https://hdfans.org/rules.php 30 | item: 31 | selector: table[id="info_block"] 32 | fields: 33 | uid: 34 | default_value: 0 35 | selector: a[href^="https://hdfans.org/userdetails.php?id="] 36 | attribute: href 37 | filters: 38 | - name: re_search 39 | args: [ '\d+', 0 ] 40 | user_group: 41 | default_value: '' 42 | selector: a[href^="https://hdfans.org/userdetails.php?id="] 43 | attribute: class 44 | username: 45 | default_value: '未知用户名' 46 | selector: a[href^="https://hdfans.org/userdetails.php?id="] 47 | share_ratio: 48 | default_value: '' 49 | selector: font[class="color_ratio"] 50 | method: next_sibling 51 | filters: 52 | - name: replace 53 | args: [ '无限','inf' ] 54 | uploaded: 55 | default_value: 0 56 | selector: font[class="color_uploaded"] 57 | method: next_sibling 58 | filters: 59 | - name: replace 60 | args: [ '无限','inf' ] 61 | downloaded: 62 | default_value: 0 63 | selector: font[class="color_downloaded"] 64 | method: next_sibling 65 | filters: 66 | - name: replace 67 | args: [ '无限','inf' ] 68 | seeding: 69 | default_value: 0 70 | selector: img[alt="Torrents seeding"] 71 | method: next_sibling 72 | leeching: 73 | default_value: 0 74 | selector: img[alt="Torrents leeching"] 75 | method: next_sibling 76 | vip_group: 77 | case: 78 | a[class^="VIP"]: true 79 | "*": false 80 | search: 81 | paths: 82 | - path: torrents.php 83 | method: get 84 | query: 85 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 86 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 87 | # 0 incldead, 1 active, 2 dead 88 | incldead: 1 89 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 90 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 91 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 92 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 93 | # 0 AND, 1 OR, 2 exact 94 | search_mode: 0 95 | sort: "{{ query.sort }}" 96 | type: "{{ query.type }}" 97 | page: "{{ query.page }}" 98 | 99 | torrents: 100 | list: 101 | selector: table.torrents > tr:has(table.torrentname) 102 | fields: 103 | id: 104 | selector: a[href^="details.php?id="] 105 | attribute: href 106 | filters: 107 | - name: re_search 108 | args: [ '\d+', 0 ] 109 | category: 110 | selector: a[href^="?cat="] 111 | attribute: href 112 | filters: 113 | - name: querystring 114 | args: cat 115 | title_default: 116 | selector: a[href^="details.php?id="] 117 | title_optional: 118 | optional: true 119 | selector: a[title][href^="details.php?id="] 120 | attribute: title 121 | title: 122 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 123 | details: 124 | selector: a[href^="details.php?id="] 125 | attribute: href 126 | download: 127 | selector: a[href^="download.php?id="] 128 | attribute: href 129 | size: 130 | selector: td:nth-child(5) 131 | grabs: 132 | selector: td:nth-child(8) 133 | seeders: 134 | selector: td:nth-child(6) 135 | leechers: 136 | selector: td:nth-child(7) 137 | date_elapsed: 138 | # time type: time elapsed (default) 139 | selector: td:nth-child(4) > span[title] 140 | attribute: title 141 | optional: true 142 | date_added: 143 | # time added 144 | selector: td:nth-child(4):not(:has(span)) 145 | optional: true 146 | date: 147 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 148 | filters: 149 | - name: dateparse 150 | args: "%Y-%m-%d %H:%M:%S" 151 | downloadvolumefactor: 152 | case: 153 | img.pro_free: 0 154 | img.pro_free2up: 0 155 | img.pro_50pctdown: 0.5 156 | img.pro_50pctdown2up: 0.5 157 | img.pro_30pctdown: 0.3 158 | "*": 1 159 | uploadvolumefactor: 160 | case: 161 | img.pro_50pctdown2up: 2 162 | img.pro_free2up: 2 163 | img.pro_2up: 2 164 | "*": 1 165 | free_deadline: 166 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 167 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 168 | selector: 'td[class="embedded"] > font > span[title]' 169 | attribute: title 170 | filters: 171 | - name: dateparse 172 | args: "%Y-%m-%d %H:%M:%S" 173 | description: 174 | selector: td:nth-child(2) > table > tr > td.embedded 175 | remove: div,font 176 | contents: -1 -------------------------------------------------------------------------------- /sites/hhan.yml: -------------------------------------------------------------------------------- 1 | id: hhan 2 | name: 憨憨 3 | domain: https://hhanclub.top/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/hhan.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="getrss.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: Movies,cate_level2_ desc: "电影" } 13 | - { id: 402, cate_level1: TV, cate_level2: TV, cate_level2_desc: "电视剧" } 14 | - { id: 403, cate_level1: TV, cate_level2: TV, cate_level2_desc: "综艺" } 15 | - { id: 404, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "纪录片" } 16 | - { id: 405, cate_level1: Anime, cate_level2: TV/Anime, cate_level2_desc: "动漫" } 17 | - { id: 406, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MV" } 18 | - { id: 407, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports" } 19 | - { id: 408, cate_level1: Music, cate_level2: Audio, cate_level2_desc: "HQ Audio" } 20 | - { id: 409, cate_level1: Other, cate_level2: Other, cate_level2_desc: "Misc" } 21 | 22 | userinfo: 23 | path: https://hhanclub.top/index.php 24 | item: 25 | selector: table[id="info_block"] 26 | fields: 27 | uid: 28 | default_value: 0 29 | selector: a[href^="https://hhanclub.top/userdetails.php?id="] 30 | attribute: href 31 | filters: 32 | - name: re_search 33 | args: [ '\d+', 0 ] 34 | user_group: 35 | default_value: '' 36 | selector: a[href^="https://hhanclub.top/userdetails.php?id="] 37 | attribute: class 38 | username: 39 | default_value: '未知用户名' 40 | selector: a[href^="https://hhanclub.top/userdetails.php?id="] 41 | share_ratio: 42 | default_value: '' 43 | selector: font[class="color_ratio"] 44 | method: next_sibling 45 | filters: 46 | - name: replace 47 | args: [ '无限','inf' ] 48 | uploaded: 49 | default_value: 0 50 | selector: font[class="color_uploaded"] 51 | method: next_sibling 52 | filters: 53 | - name: replace 54 | args: [ '无限','inf' ] 55 | downloaded: 56 | default_value: 0 57 | selector: font[class="color_downloaded"] 58 | method: next_sibling 59 | filters: 60 | - name: replace 61 | args: [ '无限','inf' ] 62 | seeding: 63 | default_value: 0 64 | selector: img[alt="Torrents seeding"] 65 | method: next_sibling 66 | leeching: 67 | default_value: 0 68 | selector: img[alt="Torrents leeching"] 69 | method: next_sibling 70 | vip_group: 71 | case: 72 | a[class^="VIP"]: true 73 | "*": false 74 | search: 75 | paths: 76 | - path: torrents.php 77 | method: get 78 | query: 79 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 80 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 81 | # 0 incldead, 1 active, 2 dead 82 | incldead: 1 83 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 84 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 85 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 86 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 87 | # 0 AND, 1 OR, 2 exact 88 | search_mode: 0 89 | sort: "{{ query.sort }}" 90 | type: "{{ query.type }}" 91 | page: "{{ query.page }}" 92 | 93 | torrents: 94 | list: 95 | selector: table.torrents > tr:has(table.torrentname) 96 | fields: 97 | id: 98 | selector: a[href^="details.php?id="] 99 | attribute: href 100 | filters: 101 | - name: re_search 102 | args: [ '\d+', 0 ] 103 | title_default: 104 | selector: a[href^="details.php?id="] 105 | title_optional: 106 | optional: true 107 | selector: a[title][href^="details.php?id="] 108 | attribute: title 109 | title: 110 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 111 | category: 112 | selector: a[href^="?cat="] 113 | attribute: href 114 | filters: 115 | - name: replace 116 | args: [ "?", "" ] 117 | - name: querystring 118 | args: cat 119 | details: 120 | selector: a[href^="details.php?id="] 121 | attribute: href 122 | download: 123 | selector: a[href^="download.php?id="] 124 | attribute: href 125 | imdbid: 126 | selector: div.imdb_100 > a 127 | attribute: href 128 | filters: 129 | - name: re_search 130 | args: [ 'tt\d+',0 ] 131 | date_elapsed: 132 | # 站点设置,已去时间 (默认) 133 | selector: td:nth-child(4) > span[title] 134 | attribute: title 135 | optional: true 136 | date_added: 137 | # 站点设置,实际时间 138 | selector: td:nth-child(4):not(:has(span)) 139 | optional: true 140 | date: 141 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 142 | filters: 143 | - name: dateparse 144 | args: "%Y-%m-%d %H:%M:%S" 145 | size: 146 | selector: td:nth-child(5) 147 | seeders: 148 | selector: td:nth-child(6) 149 | leechers: 150 | selector: td:nth-child(7) 151 | grabs: 152 | selector: td:nth-child(8) 153 | downloadvolumefactor: 154 | case: 155 | img.pro_free: 0 156 | img.pro_free2up: 0 157 | img.pro_50pctdown: 0.5 158 | img.pro_50pctdown2up: 0.5 159 | img.pro_30pctdown: 0.3 160 | "*": 1 161 | uploadvolumefactor: 162 | case: 163 | img.pro_50pctdown2up: 2 164 | img.pro_free2up: 2 165 | img.pro_2up: 2 166 | "*": 1 167 | free_deadline: 168 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 169 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 170 | selector: img.pro_free,img.pro_free2up 171 | attribute: onmouseover 172 | filters: 173 | - name: re_search 174 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 175 | - name: dateparse 176 | args: "%Y-%m-%d %H:%M:%S" 177 | tags: 178 | selectors: td:nth-child(2) > table > tr > td.embedded > span 179 | subject_tmp: 180 | selector: td:nth-child(2) > table > tr > td.embedded 181 | remove: div,b,a 182 | subject: 183 | selector: td:nth-child(2) > table > tr > td.embedded 184 | contents: -1 185 | description: 186 | text: "{% if fields['tags']%}{{ fields['subject']+' '+fields['tags']|join(' ') }}{% else %}{{ fields['subject'] }}{% endif %}" 187 | minimumratio: 188 | case: 189 | img.hitandrun: 1 190 | "*": 0 191 | minimumseedtime: 192 | case: 193 | img.hitandrun: 259200 194 | "*": 0 -------------------------------------------------------------------------------- /sites/ourbits.yml: -------------------------------------------------------------------------------- 1 | id: ourbits 2 | name: 我堡 3 | domain: https://ourbits.club/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/ourbits.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: "Movies", cate_level2_desc: "Movies" } 13 | - { id: 402, cate_level1: Movie, cate_level2: "Movies-3D", cate_level2_desc: "Movies-3D" } 14 | - { id: 419, cate_level1: Music, cate_level2: "Concert", cate_level2_desc: "Concert" } 15 | - { id: 412, cate_level1: TV, cate_level2: "TV-Episode", cate_level2_desc: "TV-Episode" } 16 | - { id: 405, cate_level1: TV, cate_level2: "TV-Pack", cate_level2_desc: "TV-Pack" } 17 | - { id: 413, cate_level1: TV, cate_level2: "TV-Show", cate_level2_desc: "TV-Show" } 18 | - { id: 410, cate_level1: Documentary, cate_level2: "Documentary", cate_level2_desc: "Documentary" } 19 | - { id: 411, cate_level1: Anime, cate_level2: "Animation", cate_level2_desc: "Animation" } 20 | - { id: 415, cate_level1: TV, cate_level2: "Sports", cate_level2_desc: "Sports" } 21 | - { id: 414, cate_level1: Music, cate_level2: "Music-Video", cate_level2_desc: "Music-Video" } 22 | - { id: 414, cate_level1: Music, cate_level2: "Music-Video", cate_level2_desc: "Music-Video" } 23 | - { id: 416, cate_level1: Music, cate_level2: "Music", cate_level2_desc: "Music" } 24 | userinfo: 25 | path: https://ourbits.club/rules.php 26 | item: 27 | selector: table[id="info_block"] 28 | fields: 29 | uid: 30 | default_value: 0 31 | selector: a[href^="userdetails.php?id="] 32 | attribute: href 33 | filters: 34 | - name: re_search 35 | args: [ '\d+', 0 ] 36 | user_group: 37 | default_value: '' 38 | selector: a[href^="userdetails.php?id="] 39 | attribute: class 40 | username: 41 | default_value: '未知用户名' 42 | selector: a[href^="userdetails.php?id="] 43 | share_ratio: 44 | default_value: '' 45 | selector: span[class="color_ratio"] 46 | method: next_sibling 47 | filters: 48 | - name: replace 49 | args: [ '无限','inf' ] 50 | uploaded: 51 | default_value: 0 52 | selector: font[class="color_uploaded"] 53 | method: next_sibling 54 | filters: 55 | - name: replace 56 | args: [ '无限','inf' ] 57 | downloaded: 58 | default_value: 0 59 | selector: font[class="color_downloaded"] 60 | method: next_sibling 61 | filters: 62 | - name: replace 63 | args: [ '无限','inf' ] 64 | seeding: 65 | default_value: 0 66 | selector: img[alt="Torrents seeding"] 67 | method: next_sibling 68 | leeching: 69 | default_value: 0 70 | selector: img[alt="Torrents leeching"] 71 | method: next_sibling 72 | vip_group: 73 | case: 74 | a[class^="VIP"]: true 75 | "*": false 76 | search: 77 | paths: 78 | - path: torrents.php 79 | method: get 80 | query: 81 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 82 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 83 | # 0 incldead, 1 active, 2 dead 84 | incldead: 1 85 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 86 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 87 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 88 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 89 | # 0 AND, 1 OR, 2 exact 90 | search_mode: 0 91 | sort: "{{ query.sort }}" 92 | type: "{{ query.type }}" 93 | page: "{{ query.page }}" 94 | 95 | torrents: 96 | list: 97 | selector: table.torrents > tr:has(table.torrentname) 98 | fields: 99 | id: 100 | selector: a[href^="details.php?id="] 101 | attribute: href 102 | filters: 103 | - name: re_search 104 | args: [ '\d+', 0 ] 105 | category: 106 | selector: a[href^="?cat="] 107 | attribute: href 108 | filters: 109 | - name: querystring 110 | args: cat 111 | title_default: 112 | selector: a[href^="details.php?id="] 113 | title_optional: 114 | optional: true 115 | selector: a[title][href^="details.php?id="] 116 | attribute: title 117 | title: 118 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 119 | details: 120 | selector: a[href^="details.php?id="] 121 | attribute: href 122 | download: 123 | selector: a[href^="download.php?id="] 124 | attribute: href 125 | size: 126 | selectors: td:nth-child(5) 127 | index: 1 128 | grabs: 129 | selector: td:nth-child(8) 130 | seeders: 131 | selector: td:nth-child(6) 132 | leechers: 133 | selector: td:nth-child(7) 134 | date_elapsed: 135 | # time type: time elapsed (default) 136 | selector: td:nth-child(4) > span[title] 137 | attribute: title 138 | optional: true 139 | date_added: 140 | # time added 141 | selector: td:nth-child(4):not(:has(span)) 142 | optional: true 143 | date: 144 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 145 | filters: 146 | - name: dateparse 147 | args: "%Y-%m-%d %H:%M:%S" 148 | downloadvolumefactor: 149 | case: 150 | img.pro_free: 0 151 | img.pro_free2up: 0 152 | img.pro_50pctdown: 0.5 153 | img.pro_50pctdown2up: 0.5 154 | img.pro_30pctdown: 0.3 155 | "*": 1 156 | uploadvolumefactor: 157 | case: 158 | img.pro_50pctdown2up: 2 159 | img.pro_free2up: 2 160 | img.pro_2up: 2 161 | "*": 1 162 | free_deadline: 163 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 164 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 165 | selector: 'td[class="embedded"] > b > span[title]' 166 | attribute: title 167 | filters: 168 | - name: dateparse 169 | args: "%Y-%m-%d %H:%M:%S" 170 | tags: 171 | selector: table.torrentname > tr > td.embedded > div:has(a) 172 | tmp_subject: 173 | selector: table.torrentname > tr > td.embedded 174 | remove: div, a 175 | subject: 176 | selector: table.torrentname > tr > td.embedded 177 | contents: -1 178 | description: 179 | text: "{% if fields['tags']%}{{ fields['subject']+' '+fields['tags'] }}{% else %}{{ fields['subject'] }}{% endif %}" 180 | minimumratio: 181 | case: 182 | img.hitandrun: 1 183 | "*": 0 184 | minimumseedtime: 185 | case: 186 | img.hitandrun: 172800 187 | "*": 0 -------------------------------------------------------------------------------- /sites/hdatmos.yml: -------------------------------------------------------------------------------- 1 | id: hdatmos 2 | name: 阿童木 3 | domain: https://hdatmos.club/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/hdatmos.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/电影" } 13 | - { id: 404, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/纪录片" } 14 | - { id: 405, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/动漫" } 15 | - { id: 402, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/剧集" } 16 | - { id: 406, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MusicVideo/MV演唱会" } 17 | - { id: 407, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports/体育" } 18 | - { id: 408, cate_level1: Music, cate_level2: Audio,cate_level2_ desc: "HQ Audio/音乐" } 19 | - { id: 410, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/洗版区电影"} 20 | - { id: 411, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/洗版区纪录片"} 21 | - { id: 412, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/洗版区剧集"} 22 | - { id: 413, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/洗版区动漫" } 23 | - { id: 414, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MusicVideo/洗版区MV演唱会" } 24 | - { id: 415, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports/洗版区体育" } 25 | - { id: 416, cate_level1: Music, cate_level2: Audio,cate_level2_ desc: "HQ Audio/洗版区音乐" } 26 | 27 | userinfo: 28 | path: https://hdatmos.club/index.php 29 | item: 30 | selector: table[id="info_block"] 31 | fields: 32 | uid: 33 | default_value: 0 34 | selector: a[href^="https://hdatmos.club/userdetails.php?id="] 35 | attribute: href 36 | filters: 37 | - name: re_search 38 | args: [ '\d+', 0 ] 39 | user_group: 40 | default_value: '' 41 | selector: a[href^="https://hdatmos.club/userdetails.php?id="] 42 | attribute: class 43 | username: 44 | default_value: '未知用户名' 45 | selector: a[href^="https://hdatmos.club/userdetails.php?id="] 46 | share_ratio: 47 | default_value: '' 48 | selector: font[class="color_ratio"] 49 | method: next_sibling 50 | filters: 51 | - name: replace 52 | args: [ '无限','inf' ] 53 | uploaded: 54 | default_value: 0 55 | selector: font[class="color_uploaded"] 56 | method: next_sibling 57 | filters: 58 | - name: replace 59 | args: [ '无限','inf' ] 60 | downloaded: 61 | default_value: 0 62 | selector: font[class="color_downloaded"] 63 | method: next_sibling 64 | filters: 65 | - name: replace 66 | args: [ '无限','inf' ] 67 | seeding: 68 | default_value: 0 69 | selector: img[alt="Torrents seeding"] 70 | method: next_sibling 71 | leeching: 72 | default_value: 0 73 | selector: img[alt="Torrents leeching"] 74 | method: next_sibling 75 | vip_group: 76 | case: 77 | a[class^="VIP"]: true 78 | "*": false 79 | search: 80 | paths: 81 | - path: torrents.php 82 | method: get 83 | query: 84 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 85 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 86 | # 0 incldead, 1 active, 2 dead 87 | incldead: 1 88 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 89 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 90 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 91 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 92 | # 0 AND, 1 OR, 2 exact 93 | search_mode: 0 94 | sort: "{{ query.sort }}" 95 | type: "{{ query.type }}" 96 | page: "{{ query.page }}" 97 | 98 | torrents: 99 | list: 100 | selector: table.torrents > tr:has(table.torrentname) 101 | fields: 102 | id: 103 | selector: a[href^="details.php?id="] 104 | attribute: href 105 | filters: 106 | - name: re_search 107 | args: [ '\d+', 0 ] 108 | title_default: 109 | selector: a[href^="details.php?id="] 110 | title_optional: 111 | optional: true 112 | selector: a[title][href^="details.php?id="] 113 | attribute: title 114 | title: 115 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 116 | category: 117 | selector: a[href^="?cat="] 118 | attribute: href 119 | filters: 120 | - name: replace 121 | args: [ "?", "" ] 122 | - name: querystring 123 | args: cat 124 | details: 125 | selector: a[href^="details.php?id="] 126 | attribute: href 127 | download: 128 | selector: a[href^="download.php?id="] 129 | attribute: href 130 | imdbid: 131 | selector: div.imdb_100 > a 132 | attribute: href 133 | filters: 134 | - name: re_search 135 | args: [ 'tt\d+',0 ] 136 | date_elapsed: 137 | # 站点设置,已去时间 (默认) 138 | selector: td:nth-child(4) > span[title] 139 | attribute: title 140 | optional: true 141 | date_added: 142 | # 站点设置,实际时间 143 | selector: td:nth-child(4):not(:has(span)) 144 | optional: true 145 | date: 146 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 147 | filters: 148 | - name: dateparse 149 | args: "%Y-%m-%d %H:%M:%S" 150 | size: 151 | selector: td:nth-child(5) 152 | seeders: 153 | selector: td:nth-child(6) 154 | leechers: 155 | selector: td:nth-child(7) 156 | grabs: 157 | selector: td:nth-child(8) 158 | downloadvolumefactor: 159 | case: 160 | font.free: 0 161 | font.twoupfree: 0 162 | font.halfdown: 0.5 163 | font.twouphalfdown: 0.5 164 | font.thirtypercent: 0.3 165 | "*": 1 166 | uploadvolumefactor: 167 | case: 168 | font.twoup: 2 169 | font.twoupfree: 2 170 | font.twouphalfdown: 2 171 | "*": 1 172 | free_deadline: 173 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 174 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 175 | selector: font.free,font.twoupfree,font.halfdown,font.twouphalfdown 176 | attribute: onmouseover 177 | filters: 178 | - name: re_search 179 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 180 | - name: dateparse 181 | args: "%Y-%m-%d %H:%M:%S" 182 | description: 183 | selector: td:nth-child(2) > table > tr > td.embedded 184 | contents: -1 -------------------------------------------------------------------------------- /sites/pterclub.yml: -------------------------------------------------------------------------------- 1 | id: pterclub 2 | name: 猫站 3 | domain: https://pterclub.com/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/pterclub.yml 6 | 7 | login: 8 | test: 9 | selector: a[data-url="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: "Movies/电影", cate_level2_desc: "Movies/电影" } 13 | - { id: 404, cate_level1: TV, cate_level2: "电视剧 (TV Series)", cate_level2_desc: "电视剧 (TV Series)" } 14 | - { id: 403, cate_level1: Anime, cate_level2: "动漫 (Anime)", cate_level2_desc: "动漫 (Anime)" } 15 | - { id: 405, cate_level1: TV, cate_level2: "综艺 (TV Show)", cate_level2_desc: "综艺 (TV Show)" } 16 | - { id: 413, cate_level1: Music, cate_level2: "音乐短片 (MV)", cate_level2_desc: "音乐短片 (MV)" } 17 | - { id: 406, cate_level1: Music, cate_level2: "音乐 (Music)", cate_level2_desc: "音乐 (Music)" } 18 | - { id: 418, cate_level1: Music, cate_level2: "舞台演出(Stage Performance)", cate_level2_desc: "舞台演出(Stage Performance)" } 19 | - { id: 402, cate_level1: Documentary, cate_level2: "纪录片 (Documentary)", cate_level2_desc: "纪录片 (Documentary)" } 20 | - { id: 407, cate_level1: TV, cate_level2: "体育 (Sport)", cate_level2_desc: "体育 (Sport)" } 21 | - { id: 408, cate_level1: Other, cate_level2: "电子书 (Ebook)", cate_level2_desc: "电子书 (Ebook)" } 22 | - { id: 409, cate_level1: Game, cate_level2: "游戏 (Game)", cate_level2_desc: "游戏 (Game)" } 23 | - { id: 410, cate_level1: Other, cate_level2: "软件 (Software)", cate_level2_desc: "软件 (Software)" } 24 | - { id: 411, cate_level1: Other, cate_level2: "学习 (Study)", cate_level2_desc: "学习 (Study)" } 25 | - { id: 412, cate_level1: Other, cate_level2: "其它 (Other)", cate_level2_desc: "其它 (Other)" } 26 | 27 | userinfo: 28 | path: https://pterclub.com/index.php 29 | item: 30 | selector: table[id="info_block"] 31 | fields: 32 | uid: 33 | default_value: 0 34 | selector: a[href^="userdetails.php?id="] 35 | attribute: href 36 | filters: 37 | - name: re_search 38 | args: [ '\d+', 0 ] 39 | user_group: 40 | default_value: '' 41 | selector: a[href^="userdetails.php?id="] 42 | attribute: class 43 | username: 44 | default_value: '未知用户名' 45 | selector: a[href^="userdetails.php?id="] 46 | share_ratio: 47 | default_value: '' 48 | selector: font[class="color_ratio"] 49 | method: next_sibling 50 | filters: 51 | - name: replace 52 | args: [ '无限','inf' ] 53 | uploaded: 54 | default_value: 0 55 | selector: font[class="color_uploaded"] 56 | method: next_sibling 57 | filters: 58 | - name: replace 59 | args: [ '无限','inf' ] 60 | downloaded: 61 | default_value: 0 62 | selector: font[class="color_downloaded"] 63 | method: next_sibling 64 | filters: 65 | - name: replace 66 | args: [ '无限','inf' ] 67 | seeding: 68 | default_value: 0 69 | selector: img[alt="Torrents seeding"] 70 | method: next_sibling 71 | leeching: 72 | default_value: 0 73 | selector: img[alt="Torrents leeching"] 74 | method: next_sibling 75 | vip_group: 76 | case: 77 | a[class^="VIP"]: true 78 | "*": false 79 | search: 80 | paths: 81 | - path: torrents.php 82 | method: get 83 | query: 84 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 85 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 86 | # 0 incldead, 1 active, 2 dead 87 | incldead: 1 88 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 89 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 90 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 91 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 92 | # 0 AND, 1 OR, 2 exact 93 | search_mode: 0 94 | sort: "{{ query.sort }}" 95 | type: "{{ query.type }}" 96 | page: "{{ query.page }}" 97 | 98 | torrents: 99 | list: 100 | selector: table.torrents > tr:has(table.torrentname) 101 | fields: 102 | id: 103 | selector: a[href^="details.php?id="] 104 | attribute: href 105 | filters: 106 | - name: re_search 107 | args: [ '\d+', 0 ] 108 | category: 109 | selector: a[href^="?cat="] 110 | attribute: href 111 | filters: 112 | - name: querystring 113 | args: cat 114 | title_default: 115 | selector: a[href^="details.php?id="] 116 | title_optional: 117 | optional: true 118 | selector: a[title][href^="details.php?id="] 119 | attribute: title 120 | title: 121 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 122 | details: 123 | selector: a[href^="details.php?id="] 124 | attribute: href 125 | poster: 126 | selector: img[data-orig] 127 | attribute: data-orig 128 | download: 129 | selector: a[href^="download.php?id="] 130 | attribute: href 131 | size: 132 | selector: td.rowfollow:nth-child(5) 133 | grabs: 134 | selector: td.rowfollow:nth-child(8) 135 | seeders: 136 | selector: td.rowfollow:nth-child(6) 137 | leechers: 138 | selector: td.rowfollow:nth-child(7) 139 | date_elapsed: 140 | # time type: time elapsed (default) 141 | selector: td.rowfollow:nth-child(4) > span[title] 142 | attribute: title 143 | optional: true 144 | date_added: 145 | # time added 146 | selector: td.rowfollow:nth-child(4):not(:has(span)) 147 | optional: true 148 | date: 149 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 150 | filters: 151 | - name: dateparse 152 | args: "%Y-%m-%d %H:%M:%S" 153 | downloadvolumefactor: 154 | case: 155 | img.pro_free: 0 156 | img.pro_free2up: 0 157 | img.pro_50pctdown: 0.5 158 | img.pro_50pctdown2up: 0.5 159 | img.pro_30pctdown: 0.3 160 | "*": 1 161 | uploadvolumefactor: 162 | case: 163 | img.pro_50pctdown2up: 2 164 | img.pro_free2up: 2 165 | img.pro_2up: 2 166 | "*": 1 167 | free_deadline: 168 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 169 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 170 | selector: 'div > b > span[title]' 171 | attribute: title 172 | filters: 173 | - name: dateparse 174 | args: "%Y-%m-%d %H:%M:%S" 175 | tags: 176 | selectors: div > a.torrents-tag 177 | subject: 178 | selector: td.embedded:nth-child(2) > div > div[style] > span 179 | contents: -1 180 | description: 181 | text: "{% if fields['tags']%}{{ fields['subject']+' '+fields['tags']|join(' ') }}{% else %}{{ fields['subject'] }}{% endif %}" -------------------------------------------------------------------------------- /sites/hdchina.yml: -------------------------------------------------------------------------------- 1 | id: hdchina 2 | name: 瓷器 3 | domain: https://hdchina.org/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/hdchina.yml 6 | 7 | login: 8 | test: 9 | selector: a[href^="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 20, cate_level1: Movie, cate_level2: Movies/BluRay, cate_level2_desc "原盘(Full BD)" } 13 | - { id: 17, cate_level1: Movie, cate_level2: Movies/HD, cate_level2_desc "电影Movie(1080p)" } 14 | - { id: 16, cate_level1: Movie, cate_level2: Movies/HD, cate_level2_desc "电影Movie(1080i)" } 15 | - { id: 9, cate_level1: Movie, cate_level2: Movies/HD, cate_level2_desc "电影Movie(720p)" } 16 | - { id: 13, cate_level1: TV, cate_level2: TV, cate_level2_desc "欧美剧(EU/US TV series)" } 17 | - { id: 25, cate_level1: TV, cate_level2: TV, cate_level2_desc "中港台剧集(Chinese TV series)" } 18 | - { id: 26, cate_level1: TV, cate_level2: TV, cate_level2_desc "韩剧(Kor Drama)" } 19 | - { id: 24, cate_level1: TV, cate_level2: TV, cate_level2_desc "日剧(Jpn Drama)" } 20 | - { id: 21, cate_level1: TV, cate_level2: TV, cate_level2_desc "欧美剧集包(EU/US TV series pack)" } 21 | - { id: 22, cate_level1: TV, cate_level2: TV, cate_level2_desc "中港台剧集包(Chinese TV series pack)" } 22 | - { id: 23, cate_level1: TV, cate_level2: TV, cate_level2_desc "日韩剧集包(JPN/KOR drama pack)" } 23 | - { id: 27, cate_level1: Movie, cate_level2: Movies/SD, cate_level2_desc "iPad视频(iPad Video)" } 24 | - { id: 5, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc "纪录片(Documentary)" } 25 | - { id: 15, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc "体育节目(Sports)" } 26 | - { id: 14, cate_level1: Anime, cate_level2: TV/Anime, cate_level2_desc "动画片(Animation)" } 27 | - { id: 401, cate_level1: TV, cate_level2: TV, cate_level2_desc "综艺(TV Shows)" } 28 | - { id: 402, cate_level1: Music, cate_level2: Audio, cate_level2_desc "演唱会(Vocal Concert)" } 29 | - { id: 406, cate_level1: Music, cate_level2: Audio, cate_level2_desc "MV(Music Video)" } 30 | - { id: 408, cate_level1: Music, cate_level2: Audio, cate_level2_desc "音乐(Music)" } 31 | - { id: 19, cate_level1: Music, cate_level2: Audio, cate_level2_desc "补充音轨(Audio Track)" } 32 | - { id: 405, cate_level1: Music, cate_level2: Audio, cate_level2_desc "戏剧(Drama)" } 33 | - { id: 404, cate_level1: Other, cate_level2: Books, cate_level2_desc "书籍(Book)" } 34 | - { id: 409, cate_level1: Other, cate_level2: Other, cate_level2_desc "其他(Other)" } 35 | - { id: 410, cate_level1: Movie, cate_level2: Movies/HD, cate_level2_desc "4K UltraHD" } 36 | - { id: 411, cate_level1: TV, cate_level2: TV, cate_level2_desc "旅游(Travel)" } 37 | - { id: 412, cate_level1: TV, cate_level2: TV, cate_level2_desc "饮食(Food)" } 38 | 39 | userinfo: 40 | path: https://hdchina.org/rules.php 41 | item: 42 | selector: div.userinfo 43 | fields: 44 | uid: 45 | default_value: 0 46 | selector: a[href^="userdetails.php?id="] 47 | attribute: href 48 | filters: 49 | - name: re_search 50 | args: [ '\d+', 0 ] 51 | user_group: 52 | default_value: '' 53 | selector: a[href^="userdetails.php?id="] 54 | attribute: class 55 | seeding: 56 | default_value: 0 57 | selector: i[title="当前做种"] 58 | method: next_sibling 59 | leeching: 60 | default_value: 0 61 | selector: i[title="当前下载"] 62 | method: next_sibling 63 | filters: 64 | - name: replace 65 | args: [ ")","" ] 66 | username: 67 | default_value: '未知用户名' 68 | selector: a[href^="userdetails.php?id="] 69 | share_ratio: 70 | default_value: '' 71 | selectors: p 72 | index: -1 73 | filters: 74 | - name: re_search 75 | args: [ '分享率:([^\s上]+)',1 ] 76 | - name: replace 77 | args: [ '无限','inf' ] 78 | uploaded: 79 | default_value: 0 80 | selectors: p 81 | index: -1 82 | filters: 83 | - name: re_search 84 | args: [ '上传量:([\d\.]+\s*(?:TB|GB|MB|KB))',1 ] 85 | - name: replace 86 | args: [ '无限','inf' ] 87 | downloaded: 88 | default_value: 0 89 | selectors: p 90 | index: -1 91 | filters: 92 | - name: re_search 93 | args: [ '下载量:\s*([\d\.]+\s*(?:TB|GB|MB|KB))',1 ] 94 | - name: replace 95 | args: [ '无限','inf' ] 96 | vip_group: 97 | case: 98 | a[class^="VIP"]: true 99 | "*": false 100 | search: 101 | paths: 102 | - path: torrents.php 103 | method: get 104 | query: 105 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 106 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 107 | # 0 incldead, 1 active, 2 dead 108 | incldead: 1 109 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 110 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 111 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 112 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 113 | # 0 AND, 1 OR, 2 exact 114 | search_mode: 0 115 | sort: "{{ query.sort }}" 116 | type: "{{ query.type }}" 117 | page: "{{ query.page }}" 118 | pre_handler: hdchina_freesession_check_handler 119 | result_filter: hdchina_free_ajax_filter 120 | 121 | 122 | torrents: 123 | list: 124 | selector: table.torrent_list > tr:has(td.t_name) 125 | fields: 126 | id: 127 | selector: a[href^="details.php?id="] 128 | attribute: href 129 | filters: 130 | - name: re_search 131 | args: [ '\d+', 0 ] 132 | title: 133 | selector: a[title][href^="details.php?id="] 134 | description: 135 | selector: table.tbname > tr > td > h4 136 | category: 137 | selector: a[href^="?cat="] 138 | attribute: href 139 | filters: 140 | - name: querystring 141 | args: cat 142 | details: 143 | selector: a[href^="details.php?id="] 144 | attribute: href 145 | download: 146 | selector: a[href^="download.php?hash="] 147 | attribute: href 148 | size: 149 | selector: td.t_size 150 | grabs: 151 | selector: td.t_completed 152 | seeders: 153 | selector: td.t_torrents 154 | leechers: 155 | selector: td.t_leech 156 | date: 157 | selector: td.t_time > span[title] 158 | attribute: title 159 | filters: 160 | - name: dateparse 161 | args: "%Y-%m-%d %H:%M:%S" 162 | free_deadline: 163 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 164 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 165 | selector: img.pro_free,img.pro_free2up 166 | attribute: onmouseover 167 | filters: 168 | - name: re_search 169 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 170 | - name: dateparse 171 | args: "%Y-%m-%d %H:%M:%S" 172 | csrf: 173 | selector: meta[name="x-csrf"] 174 | attribute: content 175 | -------------------------------------------------------------------------------- /sites/hdarea.yml: -------------------------------------------------------------------------------- 1 | id: HDarea 2 | name: 高清视界 3 | domain: https://www.hdarea.co/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/hdarea.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 300, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movie UHD-4K" } 13 | - { id: 401, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies Blu-ray" } 14 | - { id: 415, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies REMUX" } 15 | - { id: 416, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies 3D" } 16 | - { id: 410, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies 1080p" } 17 | - { id: 411, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies 720p" } 18 | - { id: 414, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies DVD" } 19 | - { id: 412, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies WEB-DL" } 20 | - { id: 413, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies HDTV" } 21 | - { id: 417, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies iPad" } 22 | - { id: 404, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/纪录片" } 23 | - { id: 405, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/动漫" } 24 | - { id: 402, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/剧集" } 25 | - { id: 403, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Shows/综艺" } 26 | - { id: 406, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MusicVideo/Music Videos" } 27 | - { id: 407, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports/体育" } 28 | - { id: 409, cate_level1: Other, cate_level2: Other, cate_level2_desc: "Misc/其他" } 29 | - { id: 408, cate_level1: Music, cate_level2: Audio,cate_level2_ desc: "HQ Audio/无损音乐" } 30 | 31 | userinfo: 32 | path: https://www.hdarea.co/index.php 33 | item: 34 | selector: table[id="info_block"] 35 | fields: 36 | uid: 37 | default_value: 0 38 | selector: a[href^="userdetails.php?id="] 39 | attribute: href 40 | filters: 41 | - name: re_search 42 | args: [ '\d+', 0 ] 43 | user_group: 44 | default_value: '' 45 | selector: a[href^="userdetails.php?id="] 46 | attribute: class 47 | username: 48 | default_value: '未知用户名' 49 | selector: a[href^="userdetails.php?id="] 50 | share_ratio: 51 | default_value: '' 52 | selector: font[class="color_ratio"] 53 | method: next_sibling 54 | filters: 55 | - name: replace 56 | args: [ '无限','inf' ] 57 | uploaded: 58 | default_value: 0 59 | selector: font[class="color_uploaded"] 60 | method: next_sibling 61 | filters: 62 | - name: replace 63 | args: [ '无限','inf' ] 64 | downloaded: 65 | default_value: 0 66 | selector: font[class="color_downloaded"] 67 | method: next_sibling 68 | filters: 69 | - name: replace 70 | args: [ '无限','inf' ] 71 | seeding: 72 | default_value: 0 73 | selector: img[alt="Torrents seeding"] 74 | method: next_sibling 75 | leeching: 76 | default_value: 0 77 | selector: img[alt="Torrents leeching"] 78 | method: next_sibling 79 | vip_group: 80 | case: 81 | a[class^="VIP"]: true 82 | "*": false 83 | search: 84 | paths: 85 | - path: torrents.php 86 | method: get 87 | query: 88 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 89 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 90 | # 0 incldead, 1 active, 2 dead 91 | incldead: 1 92 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 93 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 94 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 95 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 96 | # 0 AND, 1 OR, 2 exact 97 | search_mode: 0 98 | sort: "{{ query.sort }}" 99 | type: "{{ query.type }}" 100 | page: "{{ query.page }}" 101 | 102 | torrents: 103 | list: 104 | selector: table.torrents > tr:has(table.torrentname) 105 | fields: 106 | id: 107 | selector: a[href^="details.php?id="] 108 | attribute: href 109 | filters: 110 | - name: re_search 111 | args: [ '\d+', 0 ] 112 | title_default: 113 | selector: a[href^="details.php?id="] 114 | title_optional: 115 | optional: true 116 | selector: a[title][href^="details.php?id="] 117 | attribute: title 118 | title: 119 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 120 | category: 121 | selector: a[href^="?cat="] 122 | attribute: href 123 | filters: 124 | - name: replace 125 | args: [ "?", "" ] 126 | - name: querystring 127 | args: cat 128 | details: 129 | selector: a[href^="details.php?id="] 130 | attribute: href 131 | download: 132 | selector: a[href^="download.php?id="] 133 | attribute: href 134 | imdbid: 135 | selector: div.imdb_100 > a 136 | attribute: href 137 | filters: 138 | - name: re_search 139 | args: [ 'tt\d+',0 ] 140 | date_elapsed: 141 | # 站点设置,已去时间 (默认) 142 | selector: td:nth-child(4) > span[title] 143 | attribute: title 144 | optional: true 145 | date_added: 146 | # 站点设置,实际时间 147 | selector: td:nth-child(4):not(:has(span)) 148 | optional: true 149 | date: 150 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 151 | filters: 152 | - name: dateparse 153 | args: "%Y-%m-%d %H:%M:%S" 154 | size: 155 | selector: td:nth-child(5) 156 | seeders: 157 | selector: td:nth-child(6) 158 | leechers: 159 | selector: td:nth-child(7) 160 | grabs: 161 | selector: td:nth-child(8) 162 | downloadvolumefactor: 163 | case: 164 | img.pro_free: 0 165 | img.pro_free2up: 0 166 | img.pro_50pctdown: 0.5 167 | img.pro_50pctdown2up: 0.5 168 | img.pro_30pctdown: 0.3 169 | "*": 1 170 | uploadvolumefactor: 171 | case: 172 | img.pro_50pctdown2up: 2 173 | img.pro_free2up: 2 174 | img.pro_2up: 2 175 | "*": 1 176 | free_deadline: 177 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 178 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 179 | selector: img.pro_free,img.pro_free2up 180 | attribute: onmouseover 181 | filters: 182 | - name: re_search 183 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 184 | - name: dateparse 185 | args: "%Y-%m-%d %H:%M:%S" 186 | description: 187 | selector: td:nth-child(2) > table > tr > td.embedded 188 | contents: -1 -------------------------------------------------------------------------------- /sites/putao.yml: -------------------------------------------------------------------------------- 1 | id: putao 2 | name: 葡萄 3 | domain: https://pt.sjtu.edu.cn/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/putao.yml 6 | 7 | login: 8 | test: 9 | selector: 'a[href^="logout.php"]' 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: "华语电影 ", cate_level2_desc: "华语电影" } 13 | - { id: 402, cate_level1: Movie, cate_level2: "欧美电影 ", cate_level2_desc: "欧美电影" } 14 | - { id: 403, cate_level1: Movie, cate_level2: "亚洲电影 ", cate_level2_desc: "亚洲电影" } 15 | - { id: 406 , cate_level1: Documentary, cate_level2: "纪录片 ", cate_level2_desc: "纪录片" } 16 | - { id: 407 , cate_level1: TV, cate_level2: "港台电视剧", cate_level2_desc: "港台电视剧" } 17 | - { id: 408 , cate_level1: TV, cate_level2: "亚洲电视剧", cate_level2_desc: "亚洲电视剧" } 18 | - { id: 409 , cate_level1: TV, cate_level2: "大陆电视剧", cate_level2_desc: "大陆电视剧" } 19 | - { id: 410 , cate_level1: TV, cate_level2: "欧美电视剧", cate_level2_desc: "欧美电视剧" } 20 | - { id: 411 , cate_level1: TV, cate_level2: "大陆综艺节目", cate_level2_desc: "大陆综艺节目" } 21 | - { id: 412 , cate_level1: TV, cate_level2: "港台综艺节目", cate_level2_desc: "港台综艺节目" } 22 | - { id: 413 , cate_level1: TV, cate_level2: "欧美综艺节目", cate_level2_desc: "欧美综艺节目" } 23 | - { id: 414 , cate_level1: TV, cate_level2: "日韩综艺节目", cate_level2_desc: "日韩综艺节目" } 24 | - { id: 420 , cate_level1: Music, cate_level2: "华语音乐", cate_level2_desc: "华语音乐" } 25 | - { id: 421 , cate_level1: Music, cate_level2: "日韩音乐", cate_level2_desc: "日韩音乐" } 26 | - { id: 422 , cate_level1: Music, cate_level2: "欧美音乐", cate_level2_desc: "欧美音乐" } 27 | - { id: 423 , cate_level1: Music, cate_level2: "原声音乐", cate_level2_desc: "原声音乐" } 28 | - { id: 425 , cate_level1: Music, cate_level2: "古典音乐", cate_level2_desc: "古典音乐" } 29 | - { id: 426 , cate_level1: Music, cate_level2: "mp3合辑", cate_level2_desc: "mp3合辑" } 30 | - { id: 429 , cate_level1: Game, cate_level2: "游戏", cate_level2_desc: "游戏" } 31 | - { id: 431 , cate_level1: Anime, cate_level2: "动漫", cate_level2_desc: "动漫" } 32 | - { id: 432 , cate_level1: TV, cate_level2: "体育", cate_level2_desc: "体育" } 33 | - { id: 434 , cate_level1: Other, cate_level2: "软件", cate_level2_desc: "软件" } 34 | - { id: 435 , cate_level1: Other, cate_level2: "学习", cate_level2_desc: "学习" } 35 | - { id: 440 , cate_level1: Other, cate_level2: "mac", cate_level2_desc: "mac" } 36 | - { id: 451 , cate_level1: Other, cate_level2: "校园原创", cate_level2_desc: "校园原创" } 37 | - { id: 450 , cate_level1: Other, cate_level2: "其他", cate_level2_desc: "其他" } 38 | 39 | userinfo: 40 | path: https://pt.sjtu.edu.cn//rules.php 41 | item: 42 | selector: table[id="userbar"] 43 | fields: 44 | uid: 45 | default_value: 0 46 | selector: a[href^="userdetails.php?id="] 47 | attribute: href 48 | filters: 49 | - name: re_search 50 | args: [ '\d+', 0 ] 51 | user_group: 52 | default_value: '' 53 | selector: a[href^="userdetails.php?id="] 54 | attribute: class 55 | username: 56 | default_value: '未知用户名' 57 | selector: a[href^="userdetails.php?id="] 58 | share_ratio: 59 | default_value: '' 60 | selector: img.star[alt="Torrents seeding"] 61 | method: next_sibling 62 | filters: 63 | - name: replace 64 | args: [ '无限','inf' ] 65 | uploaded: 66 | default_value: 0 67 | selector: img.arrowup[alt="Torrents seeding"] 68 | method: next_sibling 69 | filters: 70 | - name: replace 71 | args: [ '无限','inf' ] 72 | downloaded: 73 | default_value: 0 74 | selector: img.arrowdown[alt="Torrents seeding"] 75 | method: next_sibling 76 | filters: 77 | - name: replace 78 | args: [ '无限','inf' ] 79 | seeding: 80 | default_value: 0 81 | selector: li[id="peersStatus"] > li > span > img.arrowup[alt="Torrents seeding"] 82 | method: next_sibling 83 | leeching: 84 | default_value: 0 85 | selector: li[id="peersStatus"] > li > span > img.arrowdown[alt="Torrents leeching"] 86 | method: next_sibling 87 | vip_group: 88 | case: 89 | a[class^="VIP"]: true 90 | "*": false 91 | search: 92 | paths: 93 | - path: torrents.php 94 | method: get 95 | query: 96 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 97 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 98 | # 0 incldead, 1 active, 2 dead 99 | incldead: 1 100 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 101 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 102 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 103 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 104 | # 0 AND, 1 OR, 2 exact 105 | search_mode: 0 106 | sort: "{{ query.sort }}" 107 | type: "{{ query.type }}" 108 | page: "{{ query.page }}" 109 | 110 | torrents: 111 | list: 112 | selector: table.torrents > tr:has(table.torrentname) 113 | fields: 114 | id: 115 | selector: a[href^="details.php?id="] 116 | attribute: href 117 | filters: 118 | - name: re_search 119 | args: [ '\d+', 0 ] 120 | category: 121 | selector: a[href^="?cat="] 122 | attribute: href 123 | filters: 124 | - name: querystring 125 | args: cat 126 | title_default: 127 | selector: a[href^="details.php?id="] 128 | title_optional: 129 | optional: true 130 | selector: a[title][href^="details.php?id="] 131 | attribute: title 132 | title: 133 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 134 | details: 135 | selector: a[href^="details.php?id="] 136 | attribute: href 137 | download: 138 | selector: a[href^="download.php?id="] 139 | attribute: href 140 | size: 141 | selector: td:nth-child(5) 142 | grabs: 143 | selector: td:nth-child(8) 144 | seeders: 145 | selector: td:nth-child(6) 146 | leechers: 147 | selector: td:nth-child(7) 148 | date_elapsed: 149 | # time type: time elapsed (default) 150 | selector: td:nth-child(4) > span[title] 151 | attribute: title 152 | optional: true 153 | date_added: 154 | # time added 155 | selector: td:nth-child(4):not(:has(span)) 156 | optional: true 157 | date: 158 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 159 | filters: 160 | - name: dateparse 161 | args: "%Y-%m-%d %H:%M:%S" 162 | downloadvolumefactor: 163 | case: 164 | img.pro_free: 0 165 | img.pro_free2up: 0 166 | img.pro_50pctdown: 0.5 167 | img.pro_50pctdown2up: 0.5 168 | img.pro_30pctdown: 0.3 169 | "*": 1 170 | uploadvolumefactor: 171 | case: 172 | img.pro_50pctdown2up: 2 173 | img.pro_free2up: 2 174 | img.pro_2up: 2 175 | "*": 1 176 | free_deadline: 177 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 178 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 179 | selector: 'font[style][title]' 180 | attribute: title 181 | filters: 182 | - name: dateparse 183 | args: "%Y-%m-%d %H:%M:%S" 184 | description: 185 | selector: table.torrentname > tr > td.embedded 186 | contents: -1 -------------------------------------------------------------------------------- /sites/totheglory.yml: -------------------------------------------------------------------------------- 1 | id: ttg 2 | name: 听听歌 3 | domain: https://totheglory.im/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/totheglory.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="/logout.php"] 10 | 11 | category_mappings: 12 | - { id: "电影DVDRip", cate_level1: Movie,cate_level2: "电影DVDRip", cate_level2_desc: "电影DVDRip" } 13 | - { id: "电影720p", cate_level1: Movie,cate_level2: "电影720p", cate_level2_desc: "电影720p" } 14 | - { id: "电影1080i/p", cate_level1: Movie,cate_level2: "电影1080i/p", cate_level2_desc: "电影1080i/p" } 15 | - { id: "BluRay原盘", cate_level1: Movie,cate_level2: "BluRay原盘", cate_level2_desc: "BluRay原盘" } 16 | - { id: "影视2160p", cate_level1: "*",cate_level2: "影视2160p", cate_level2_desc: "影视2160p" } 17 | - { id: "UHD原盘", cate_level1: Movie,cate_level2: "UHD原盘", cate_level2_desc: "UHD原盘" } 18 | - { id: "纪录片720p", cate_level1: Documentary,cate_level2: "纪录片720p", cate_level2_desc: "纪录片720p" } 19 | - { id: "纪录片1080i/p", cate_level1: Documentary,cate_level2: "纪录片1080i/p", cate_level2_desc: "纪录片1080i/p" } 20 | - { id: "纪录片BluRay原盘", cate_level1: Documentary,cate_level2: "纪录片BluRay原盘", cate_level2_desc: "纪录片BluRay原盘" } 21 | - { id: "欧美剧720p", cate_level1: TV,cate_level2: "欧美剧720p", cate_level2_desc: "欧美剧720p" } 22 | - { id: "欧美剧1080i/p", cate_level1: TV,cate_level2: "欧美剧1080i/p", cate_level2_desc: "欧美剧1080i/p" } 23 | - { id: "高清日剧", cate_level1: TV,cate_level2: "高清日剧", cate_level2_desc: "高清日剧" } 24 | - { id: "大陆港台剧720p", cate_level1: TV,cate_level2: "大陆港台剧720p", cate_level2_desc: "大陆港台剧720p" } 25 | - { id: "高清韩剧", cate_level1: TV,cate_level2: "高清韩剧", cate_level2_desc: "高清韩剧" } 26 | - { id: "大陆港台剧1080i/p", cate_level1: TV,cate_level2: "大陆港台剧1080i/p", cate_level2_desc: "大陆港台剧1080i/p" } 27 | - { id: "欧美剧包", cate_level1: TV,cate_level2: "欧美剧包", cate_level2_desc: "欧美剧包" } 28 | - { id: "日剧包", cate_level1: TV,cate_level2: "日剧包", cate_level2_desc: "日剧包" } 29 | - { id: "华语剧包", cate_level1: TV,cate_level2: "华语剧包", cate_level2_desc: "华语剧包" } 30 | - { id: "韩剧包", cate_level1: TV,cate_level2: "韩剧包", cate_level2_desc: "韩剧包" } 31 | - { id: "(电影原声&Game)OST", cate_level1: Music,cate_level2: "(电影原声&Game)OST", cate_level2_desc: "(电影原声&Game)OST" } 32 | - { id: "无损音乐FLAC&APE", cate_level1: Music,cate_level2: "无损音乐FLAC&APE", cate_level2_desc: "无损音乐FLAC&APE" } 33 | - { id: "MV&演唱会", cate_level1: Music,cate_level2: "MV&演唱会", cate_level2_desc: "MV&演唱会" } 34 | - { id: "高清体育节目", cate_level1: TV,cate_level2: "高清体育节目", cate_level2_desc: "高清体育节目" } 35 | - { id: "高清动漫", cate_level1: Anime,cate_level2: "高清动漫", cate_level2_desc: "高清动漫" } 36 | - { id: "韩国综艺", cate_level1: TV,cate_level2: "韩国综艺", cate_level2_desc: "韩国综艺" } 37 | - { id: "日本综艺", cate_level1: TV,cate_level2: "日本综艺", cate_level2_desc: "日本综艺" } 38 | - { id: "高清综艺", cate_level1: TV,cate_level2: "高清综艺", cate_level2_desc: "高清综艺" } 39 | - { id: "MiniVideo", cate_level1: Other,cate_level2: "MiniVideo", cate_level2_desc: "MiniVideo" } 40 | - { id: "补充音轨", cate_level1: Music,cate_level2: "补充音轨", cate_level2_desc: "补充音轨" } 41 | - { id: "iPhone/iPad视频", cate_level1: Movie,cate_level2: "iPhone/iPad视频", cate_level2_desc: "iPhone/iPad视频" } 42 | 43 | userinfo: 44 | path: https://totheglory.im/rules.php 45 | item: 46 | selector: table[style="width:100%"] 47 | fields: 48 | uid: 49 | default_value: 0 50 | selector: a[href^="/userdetails.php?id="] 51 | attribute: href 52 | filters: 53 | - name: re_search 54 | args: [ '\d+', 0 ] 55 | vip_group: 56 | case: 57 | img[alt="donor"]: true 58 | "*": false 59 | user_group: 60 | default_value: 'Byte' 61 | selector: a[href^="/userdetails.php?id="] 62 | attribute: class 63 | username: 64 | default_value: '未知用户名' 65 | selector: a[href^="/userdetails.php?id="] 66 | vip_share_ratio: 67 | text: "inf" 68 | share_ratio_default: 69 | default_value: '' 70 | selectors: font 71 | index: 3 72 | filters: 73 | - name: replace 74 | args: [ '无限','inf' ] 75 | share_ratio: 76 | text: "{% if fields['vip_group'] %}{{fields['vip_share_ratio']}}{%else%}{{fields['share_ratio_default']}}{% endif%}" 77 | uploaded: 78 | default_value: 0 79 | selectors: font 80 | index: -7 81 | filters: 82 | - name: replace 83 | args: [ '无限','inf' ] 84 | downloaded: 85 | default_value: 0 86 | selectors: font 87 | index: -5 88 | filters: 89 | - name: replace 90 | args: [ '无限','inf' ] 91 | seeding: 92 | default_value: 0 93 | selectors: font 94 | index: -3 95 | leeching: 96 | default_value: 0 97 | selectors: font 98 | index: -2 99 | search: 100 | paths: 101 | - path: browse.php 102 | query: 103 | search_field: "{% for c in query.cates %}category:`{{c}}` {% endfor %}{% if query.imdb_id %}{{ query.imdb_id | replace('tt','imdb') }}{% else %}{{ query.keyword }}{% endif %}" 104 | page: "{{ query.page }}" 105 | c: M 106 | torrents: 107 | list: 108 | selector: table#torrent_table > tr[id] 109 | fields: 110 | id: 111 | selector: div.name_left > a 112 | attribute: href 113 | filters: 114 | - name: re_search 115 | args: [ '\d+', 0 ] 116 | description_free_forever: 117 | selector: div.name_left > a > b > font > span 118 | description_normal: 119 | selector: div.name_left > a > b > span 120 | description: 121 | text: "{% if fields['description_free_forever'] %}{{ fields['description_free_forever'] }}{% else %}{{ fields['description_normal'] }}{% endif %}" 122 | title: 123 | selector: div.name_left > a > b 124 | remove: span 125 | category: 126 | selector: tr[id] td:nth-child(1) > a > img 127 | attribute: alt 128 | details: 129 | selector: div.name_left > a 130 | attribute: href 131 | download: 132 | selector: a.dl_a 133 | attribute: href 134 | files: 135 | selector: td:nth-child(3) 136 | size: 137 | selector: td:nth-child(7) 138 | seeders: 139 | selector: td:nth-child(9) 140 | filters: 141 | - name: split 142 | args: [ "/", 0 ] 143 | leechers: 144 | selector: td:nth-child(9) 145 | filters: 146 | - name: split 147 | args: [ "/", 1 ] 148 | - name: replace 149 | args: [ "\n", "" ] 150 | grabs: 151 | selector: td:nth-child(8) 152 | filters: 153 | - name: replace 154 | args: [ "次","" ] 155 | date: 156 | selector: td:nth-child(5) 157 | filters: 158 | - name: dateparse 159 | args: "%Y-%m-%d%H:%M:%S" 160 | imdbid: 161 | selector: span.imdb_rate > a 162 | attribute: href 163 | filters: 164 | - name: re_search 165 | args: [ 'tt\d+',0 ] 166 | downloadvolumefactor: 167 | case: 168 | img[alt="free"]: 0 169 | img[alt="50%"]: 0.5 170 | img[alt="30%"]: 0.3 171 | "*": 1 172 | uploadvolumefactor: 173 | case: 174 | img[alt="200%"]: 2 175 | "*": 1 176 | free_deadline: 177 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 178 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 179 | selector: span[onclick] 180 | attribute: onclick 181 | filters: 182 | - name: re_search 183 | args: [ '\d+年\d+月\d+日\d+点\d+分',0 ] 184 | - name: dateparse 185 | args: "%Y年%m月%d日%H点%M分" 186 | minimumratio: 187 | case: 188 | img[title="Hit and Run"]: 1 189 | "*": 0 190 | minimumseedtime: 191 | case: 192 | img[title="Hit and Run"]: 216000 193 | "*": 0 -------------------------------------------------------------------------------- /sites/hdsky.yml: -------------------------------------------------------------------------------- 1 | id: hdsky 2 | name: 天空 3 | domain: https://hdsky.me/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/hdsky.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 401, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/电影" } 13 | - { id: 404, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/纪录片" } 14 | - { id: 405, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/动漫" } 15 | - { id: 402, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/剧集" } 16 | - { id: 403, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Shows/综艺" } 17 | - { id: 406, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MusicVideo/音乐MV" } 18 | - { id: 407, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports/运体" } 19 | - { id: 408, cate_level1: Music, cate_level2: Audio,cate_level2_ desc: "HQ Audio/无损音乐" } 20 | - { id: 409, cate_level1: Other, cate_level2: Other, cate_level2_desc: "Misc/其他" } 21 | - { id: 410, cate_level1: Movie, cate_level2: Movies , cate_level2_desc: "Movies" } 22 | - { id: 411, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/剧集(合集)" } 23 | - { id: 412, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/海外剧集(分集)" } 24 | - { id: 413, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/海外剧集(合集)" } 25 | - { id: 414, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Shows/海外综艺(分集)" } 26 | - { id: 415, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Shows/海外综艺(合集)" } 27 | 28 | userinfo: 29 | path: https://hdsky.me/rules.php 30 | item: 31 | selector: table[id="info_block"] 32 | fields: 33 | uid: 34 | default_value: 0 35 | selector: a[href^="userdetails.php?id="] 36 | attribute: href 37 | filters: 38 | - name: re_search 39 | args: [ '\d+', 0 ] 40 | user_group: 41 | default_value: '' 42 | selector: a[href^="userdetails.php?id="] 43 | attribute: class 44 | username: 45 | default_value: '未知用户名' 46 | selector: a[href^="userdetails.php?id="] 47 | share_ratio: 48 | default_value: '' 49 | selector: font[class="color_ratio"] 50 | method: next_sibling 51 | filters: 52 | - name: replace 53 | args: [ '无限','inf' ] 54 | uploaded: 55 | default_value: 0 56 | selector: font[class="color_uploaded"] 57 | method: next_sibling 58 | filters: 59 | - name: replace 60 | args: [ '无限','inf' ] 61 | downloaded: 62 | default_value: 0 63 | selector: font[class="color_downloaded"] 64 | method: next_sibling 65 | filters: 66 | - name: replace 67 | args: [ '无限','inf' ] 68 | seeding: 69 | default_value: 0 70 | selector: img[alt="Torrents seeding"] 71 | method: next_sibling 72 | leeching: 73 | default_value: 0 74 | selector: img[alt="Torrents leeching"] 75 | method: next_sibling 76 | vip_group: 77 | case: 78 | a[class^="VIP"]: true 79 | "*": false 80 | search: 81 | paths: 82 | - path: torrents.php 83 | method: get 84 | query: 85 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 86 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 87 | # 0 incldead, 1 active, 2 dead 88 | incldead: 1 89 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 90 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 91 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 92 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 93 | # 0 AND, 1 OR, 2 exact 94 | search_mode: 0 95 | sort: "{{ query.sort }}" 96 | type: "{{ query.type }}" 97 | page: "{{ query.page }}" 98 | download: 99 | method: POST 100 | content_type: "application/x-www-form-urlencoded" 101 | #hdsky post时会带两个随机数参数 102 | args: 103 | - name: x 104 | value: "{{ range(5, 20) | random }}" 105 | - name: y 106 | value: "{{ range(5, 20) | random }}" 107 | torrents: 108 | list: 109 | selector: table.torrents > tr:has(table.torrentname) 110 | fields: 111 | id: 112 | selector: a[href^="details.php?id="] 113 | attribute: href 114 | filters: 115 | - name: re_search 116 | args: [ '\d+', 0 ] 117 | title_default: 118 | selector: a[href^="details.php?id="] 119 | title_optional: 120 | optional: true 121 | selector: a[title][href^="details.php?id="] 122 | attribute: title 123 | title: 124 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 125 | category: 126 | selector: a[href^="?cat="] 127 | attribute: href 128 | filters: 129 | - name: replace 130 | args: [ "?", "" ] 131 | - name: querystring 132 | args: cat 133 | details: 134 | selector: a[href^="details.php?id="] 135 | attribute: href 136 | download: 137 | selector: form[action*="/download.php?id="] 138 | attribute: action 139 | imdbid: 140 | selector: div.imdb_100 > a 141 | attribute: href 142 | date_elapsed: 143 | # 站点设置,已去时间 (默认) 144 | selector: td:nth-child(4) > span[title] 145 | attribute: title 146 | optional: true 147 | date_added: 148 | # 站点设置,实际时间 149 | selector: td:nth-child(4):not(:has(span)) 150 | optional: true 151 | date: 152 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 153 | filters: 154 | - name: dateparse 155 | args: "%Y-%m-%d %H:%M:%S" 156 | size: 157 | selector: td.rowfollow:nth-child(5) 158 | seeders: 159 | selector: td:nth-child(6) 160 | leechers: 161 | selector: td:nth-child(7) 162 | grabs: 163 | selector: td:nth-child(8) 164 | downloadvolumefactor: 165 | case: 166 | img.pro_free: 0 167 | img.pro_free2up: 0 168 | img.pro_50pctdown: 0.5 169 | img.pro_50pctdown2up: 0.5 170 | img.pro_30pctdown: 0.3 171 | "*": 1 172 | uploadvolumefactor: 173 | case: 174 | img.pro_50pctdown2up: 2 175 | img.pro_free2up: 2 176 | img.pro_2up: 2 177 | "*": 1 178 | free_deadline: 179 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 180 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 181 | selector: img.pro_free,img.pro_free2up 182 | attribute: onmouseover 183 | filters: 184 | - name: re_search 185 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 186 | - name: dateparse 187 | args: "%Y-%m-%d %H:%M:%S" 188 | tags: 189 | selectors: td.embedded > span.optiontag 190 | subject: 191 | selector: td:nth-child(2) > table > tr > td.embedded 192 | remove: img,a,b,span 193 | filters: 194 | - name: replace 195 | args: [ "[优惠剩余时间:]","" ] 196 | description: 197 | text: "{% if fields['tags']%}{{ fields['subject']+' '+fields['tags']|join(' ') }}{% else %}{{ fields['subject'] }}{% endif %}" 198 | 199 | detail: 200 | item: 201 | selector: table.mainouter > tr:last-child 202 | fields: 203 | downloadvolumefactor: 204 | case: 205 | font.halfdown: 0.5 206 | "*": 1 207 | title: 208 | selector: h1[id="top"] 209 | remove: b 210 | download: 211 | selector: form.index 212 | attribute: action 213 | filename: 214 | selector: form.index > input 215 | attribute: value 216 | description: 217 | selector: table > tr:nth-child(3) > td:last-child 218 | intro: 219 | selector: table > tr:nth-child(9) > td > div[id="kdescr"] 220 | date: 221 | selector: table > tr:nth-child(1) > td > span[title] 222 | attribute: title 223 | filters: 224 | - name: dateparse 225 | args: "%Y-%m-%d %H:%M:%S" 226 | id: 227 | text: "{{fields['download']}}" 228 | filters: 229 | - name: re_search 230 | args: [ 'id=(\d+)', 1 ] 231 | -------------------------------------------------------------------------------- /sites/iptorrents.yml: -------------------------------------------------------------------------------- 1 | id: iptorrents 2 | name: iptorrents 3 | domain: https://iptorrents.com/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/iptorrents.yml 6 | 7 | sub_search_value_type: 8 | - imdb_id 9 | login: 10 | test: 11 | selector: a[href^="/u/"] 12 | 13 | category_mappings: 14 | - { id: 72, cate_level1: Movie, cate_level2: "Movies" , cate_level2_desc: "Movies" } 15 | - { id: 87, cate_level1: Movie, cate_level2: "Movie/3D" , cate_level2_desc: "Movie/3D" } 16 | - { id: 77, cate_level1: Movie, cate_level2: "Movie/480p" , cate_level2_desc: "Movie/480p" } 17 | - { id: 101, cate_level1: Movie, cate_level2: "Movie/4K" , cate_level2_desc: "Movie/4K" } 18 | - { id: 89, cate_level1: Movie, cate_level2: "Movie/BD-R" , cate_level2_desc: "Movie/BD-R" } 19 | - { id: 90, cate_level1: Movie, cate_level2: "Movie/BD-Rip" , cate_level2_desc: "Movie/BD-Rip" } 20 | - { id: 96, cate_level1: Movie, cate_level2: "Movie/Cam" , cate_level2_desc: "Movie/Cam" } 21 | - { id: 6, cate_level1: Movie, cate_level2: "Movie/DVD-R" , cate_level2_desc: "Movie/DVD-R" } 22 | - { id: 48, cate_level1: Movie, cate_level2: "Movie/HD/Bluray" , cate_level2_desc: "Movie/HD/Bluray" } 23 | - { id: 54, cate_level1: Movie, cate_level2: "Movie/Kids" , cate_level2_desc: "Movie/Kids" } 24 | - { id: 62, cate_level1: Movie, cate_level2: "Movie/MP4" , cate_level2_desc: "Movie/MP4" } 25 | - { id: 38, cate_level1: Movie, cate_level2: "Movie/Non-English" , cate_level2_desc: "Movie/Non-English" } 26 | - { id: 68, cate_level1: Movie, cate_level2: "Movie/Packs" , cate_level2_desc: "Movie/Packs" } 27 | - { id: 20, cate_level1: Movie, cate_level2: "Movie/Web-DL" , cate_level2_desc: "Movie/Web-DL" } 28 | - { id: 100, cate_level1: Movie, cate_level2: "Movie/x265" , cate_level2_desc: "Movie/x265" } 29 | - { id: 7, cate_level1: Movie, cate_level2: "Movie/Xvid" , cate_level2_desc: "Movie/Xvid" } 30 | - { id: 73, cate_level1: TV, cate_level2: "TV" , cate_level2_desc: "TV" } 31 | - { id: 26, cate_level1: Documentary, cate_level2: "Documentaries" , cate_level2_desc: "Documentaries" } 32 | - { id: 55, cate_level1: Other, cate_level2: "Sports" , cate_level2_desc: "Sports" } 33 | - { id: 78, cate_level1: TV, cate_level2: "TV/480p" , cate_level2_desc: "TV/480p" } 34 | - { id: 23, cate_level1: TV, cate_level2: "TV/BD" , cate_level2_desc: "TV/BD" } 35 | - { id: 24, cate_level1: TV, cate_level2: "TV/DVD-R" , cate_level2_desc: "TV/DVD-R" } 36 | - { id: 25, cate_level1: TV, cate_level2: "TV/DVD-Rip" , cate_level2_desc: "TV/DVD-Rip" } 37 | - { id: 66, cate_level1: TV, cate_level2: "TV/Mobile" , cate_level2_desc: "TV/Mobile" } 38 | - { id: 82, cate_level1: TV, cate_level2: "TV/Non-English" , cate_level2_desc: "TV/Non-English" } 39 | - { id: 65, cate_level1: TV, cate_level2: "TV/Packs" , cate_level2_desc: "TV/Packs" } 40 | - { id: 83, cate_level1: TV, cate_level2: "TV/Packs/Non-English" , cate_level2_desc: "TV/Packs/Non-English" } 41 | - { id: 79, cate_level1: TV, cate_level2: "TV/SD/x264" , cate_level2_desc: "TV/SD/x264" } 42 | - { id: 22, cate_level1: TV, cate_level2: "TV/Web-DL" , cate_level2_desc: "TV/Web-DL" } 43 | - { id: 5, cate_level1: TV, cate_level2: "TV/x264" , cate_level2_desc: "TV/x264" } 44 | - { id: 99, cate_level1: TV, cate_level2: "TV/x265" , cate_level2_desc: "TV/x265" } 45 | - { id: 4, cate_level1: TV, cate_level2: "TV/Xvid" , cate_level2_desc: "TV/Xvid" } 46 | - { id: 74, cate_level1: Game, cate_level2: "Games" , cate_level2_desc: "Games" } 47 | - { id: 2, cate_level1: Game, cate_level2: "Games/Mixed" , cate_level2_desc: "Games/Mixed" } 48 | - { id: 47, cate_level1: Game, cate_level2: "Games/Nintendo" , cate_level2_desc: "Games/Nintendo" } 49 | - { id: 43, cate_level1: Game, cate_level2: "Games/PC-ISO" , cate_level2_desc: "Games/PC-ISO" } 50 | - { id: 45, cate_level1: Game, cate_level2: "Games/PC-Rip" , cate_level2_desc: "Games/PC-Rip" } 51 | - { id: 71, cate_level1: Game, cate_level2: "Games/Playstation" , cate_level2_desc: "Games/Playstation" } 52 | - { id: 50, cate_level1: Game, cate_level2: "Games/Wii" , cate_level2_desc: "Games/Wii" } 53 | - { id: 44, cate_level1: Game, cate_level2: "Games/Xbox" , cate_level2_desc: "Games/Xbox" } 54 | - { id: 75, cate_level1: Music, cate_level2: "Music" , cate_level2_desc: "Music" } 55 | - { id: 3, cate_level1: Music, cate_level2: "Music/Audio" , cate_level2_desc: "Music/Audio" } 56 | - { id: 80, cate_level1: Music, cate_level2: "Music/Flac" , cate_level2_desc: "Music/Flac" } 57 | - { id: 93, cate_level1: Music, cate_level2: "Music/Packs" , cate_level2_desc: "Music/Packs" } 58 | - { id: 37, cate_level1: Music, cate_level2: "Music/Video" , cate_level2_desc: "Music/Video" } 59 | - { id: 21, cate_level1: Music, cate_level2: "Podcast" , cate_level2_desc: "Podcast" } 60 | - { id: 64, cate_level1: Other, cate_level2: "AudioBook" , cate_level2_desc: "AudioBook" } 61 | - { id: 35, cate_level1: Other, cate_level2: "Books" , cate_level2_desc: "Books" } 62 | - { id: 102, cate_level1: Other, cate_level2: "Books/Non-English" , cate_level2_desc: "Books/Non-English" } 63 | - { id: 76, cate_level1: Other, cate_level2: "Miscellaneous" , cate_level2_desc: "Miscellaneous" } 64 | - { id: 1, cate_level1: Other, cate_level2: "Appz" , cate_level2_desc: "Appz" } 65 | - { id: 86, cate_level1: Other, cate_level2: "Appz/Non-English" , cate_level2_desc: "Appz/Non-English" } 66 | - { id: 60, cate_level1: Anime, cate_level2: "Anime" , cate_level2_desc: "Anime" } 67 | - { id: 94, cate_level1: Other, cate_level2: "Comics" , cate_level2_desc: "Comics" } 68 | - { id: 95, cate_level1: Other, cate_level2: "Educational" , cate_level2_desc: "Educational" } 69 | - { id: 98, cate_level1: Other, cate_level2: "Fonts" , cate_level2_desc: "Fonts" } 70 | - { id: 69, cate_level1: Other, cate_level2: "Mac" , cate_level2_desc: "Mac" } 71 | - { id: 92, cate_level1: Other, cate_level2: "Magazines / Newspapers" , cate_level2_desc: "Magazines / Newspapers" } 72 | - { id: 58, cate_level1: Other, cate_level2: "Mobile" , cate_level2_desc: "Mobile" } 73 | - { id: 36, cate_level1: Other, cate_level2: "Pics/Wallpapers" , cate_level2_desc: "Pics/Wallpapers" } 74 | - { id: 88, cate_level1: AV, cate_level2: "XXX" , cate_level2_desc: "XXX" } 75 | - { id: 85, cate_level1: AV, cate_level2: "XXX/Magazines" , cate_level2_desc: "XXX/Magazines" } 76 | - { id: 8, cate_level1: AV, cate_level2: "XXX/Movie" , cate_level2_desc: "XXX/Movie" } 77 | - { id: 81, cate_level1: AV, cate_level2: "XXX/Movie/0Day" , cate_level2_desc: "XXX/Movie/0Day" } 78 | - { id: 91, cate_level1: AV, cate_level2: "XXX/Packs" , cate_level2_desc: "XXX/Packs" } 79 | - { id: 84, cate_level1: AV, cate_level2: "XXX/Pics/Wallpapers" , cate_level2_desc: "XXX/Pics/Wallpapers" } 80 | 81 | userinfo: 82 | path: https://iptorrents.com/indexipt.php 83 | item: 84 | selector: div.stats 85 | fields: 86 | uid: 87 | default_value: 0 88 | selector: a[href^="/u/"] 89 | attribute: href 90 | filters: 91 | - name: re_search 92 | args: [ '\d+', 0 ] 93 | user_group: 94 | text: 'user' 95 | username: 96 | default_value: '未知用户名' 97 | selector: a[href^="/u/"] 98 | remove: div 99 | uploaded: 100 | default_value: 0 101 | selector: span.tTipWrap:has(> i.fa-upload) 102 | remove: div 103 | downloaded: 104 | default_value: 0 105 | selector: span.tTipWrap:has(> i.fa-download) 106 | remove: div 107 | seeding: 108 | default_value: 0 109 | selector: a[href^="/peers?u="] 110 | contents: 2 111 | leeching: 112 | default_value: 0 113 | selector: a[href^="/peers?u="] 114 | method: -1 115 | vip_group: 116 | case: 117 | a[class^="VIP"]: true 118 | "*": false 119 | search: 120 | paths: 121 | - path: t 122 | method: get 123 | query: 124 | $raw: "{% for c in query.cates %}cat{{c}}=&{% endfor %}" 125 | q: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 126 | o: "{{ query.sort }}" 127 | p: "{{ query.page }}" 128 | 129 | torrents: 130 | list: 131 | selector: table[id="torrents"] > tbody > tr:has(> td.al) 132 | fields: 133 | id: 134 | selector: a[href^="/t/"] 135 | attribute: href 136 | filters: 137 | - name: re_search 138 | args: [ '\d+', 0 ] 139 | title: 140 | selector: a[href^="/t/"] 141 | contents: 0 142 | category: 143 | selector: a[href^="?"]:has(> img) 144 | attribute: href 145 | filters: 146 | - name: replace 147 | args: [ "?", "" ] 148 | details: 149 | selector: a[href^="/t/"] 150 | attribute: href 151 | download: 152 | selector: a[href^="/download.php/"] 153 | attribute: href 154 | filters: 155 | - name: lstrip 156 | args: ['/'] 157 | date: 158 | selector: td:nth-child(2) > div 159 | filters: 160 | - name: split 161 | args: [ '|',1 ] 162 | - name: date_en_elapsed_parse 163 | size: 164 | selector: td:nth-child(6) 165 | seeders: 166 | selector: td:nth-child(8) 167 | leechers: 168 | selector: td:nth-child(9) 169 | grabs: 170 | selector: td:nth-child(7) 171 | downloadvolumefactor: 172 | case: 173 | span.free: 0 174 | "*": 1 175 | uploadvolumefactor: 176 | text: 1 177 | free_deadline: 178 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 179 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 180 | minimumratio: 181 | text: 1 182 | minimumseedtime: 183 | text: 1209600 -------------------------------------------------------------------------------- /sites/mteam.yml: -------------------------------------------------------------------------------- 1 | #!DATA etag=90f6c2914401d89245f71c402d736e582af31257a1f0ee5eb9e13ae1cc79f7c9 2 | id: mteam 3 | name: 馒头 4 | domain: https://api.m-team.io/ 5 | encoding: UTF-8 6 | config_url: https://gh-proxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/mteam.yml 7 | allow_auth_type: 8 | - cookies 9 | - api_key 10 | 11 | login: 12 | test: 13 | selector: a[href="logout.php"] 14 | 15 | category_mappings: 16 | - { id: 401, cate_level1: Movie, cate_level2: Movies/SD, cate_level2_desc: "Movie(電影)/SD" } 17 | - { id: 419, cate_level1: Movie, cate_level2: Movies/HD, cate_level2_desc: "Movie(電影)/HD" } 18 | - { id: 420, cate_level1: Movie, cate_level2: Movies/DVD, cate_level2_desc: "Movie(電影)/DVDiSo" } 19 | - { id: 421, cate_level1: Movie, cate_level2: Movies/BluRay, cate_level2_desc: "Movie(電影)/Blu-Ray" } 20 | - { id: 439, cate_level1: Movie, cate_level2: Movies/Other, cate_level2_desc: "Movie(電影)/Remux" } 21 | - { id: 403, cate_level1: TV, cate_level2: TV/SD, cate_level2_desc: "TV Series(影劇/綜藝)/SD" } 22 | - { id: 402, cate_level1: TV, cate_level2: TV/HD, cate_level2_desc: "TV Series(影劇/綜藝)/HD" } 23 | - { id: 435, cate_level1: TV, cate_level2: TV/SD, cate_level2_desc: "TV Series(影劇/綜藝)/DVDiSo" } 24 | - { id: 438, cate_level1: TV, cate_level2: TV/HD, cate_level2_desc: "TV Series(影劇/綜藝)/BD" } 25 | - { id: 404, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "紀錄教育" } 26 | - { id: 405, cate_level1: Anime, cate_level2: TV/Anime, cate_level2_desc: "Anime(動畫)" } 27 | - { id: 407, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports(運動)" } 28 | - { id: 422, cate_level1: Other, cate_level2: PC/0day, cate_level2_desc: "Software(軟體)" } 29 | - { id: 423, cate_level1: Game, cate_level2: PC/Games, cate_level2_desc: "PCGame(PC遊戲)" } 30 | - { id: 427, cate_level1: Other, cate_level2: Books, cate_level2_desc: "eBook(電子書)" } 31 | - { id: 409, cate_level1: Other, cate_level2: Other, cate_level2_desc: "Misc(其他)" } 32 | - { id: 406, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MV(演唱)" } 33 | - { id: 408, cate_level1: Music, cate_level2: Audio/Other, cate_level2_desc: "Music(AAC/ALAC)" } 34 | - { id: 434, cate_level1: Music, cate_level2: Audio, cate_level2_desc: "Music(無損)" } 35 | - { id: 410, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "AV(有碼)/HD Censored" } 36 | - { id: 429, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "AV(無碼)/HD Uncensored" } 37 | - { id: 424, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "AV(有碼)/SD Censored" } 38 | - { id: 430, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "AV(無碼)/SD Uncensored" } 39 | - { id: 426, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "AV(無碼)/DVDiSo Uncensored" } 40 | - { id: 437, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "AV(有碼)/DVDiSo Censored" } 41 | - { id: 431, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "AV(有碼)/Blu-Ray Censored" } 42 | - { id: 432, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "AV(無碼)/Blu-Ray Uncensored" } 43 | - { id: 436, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "AV(網站)/0Day" } 44 | - { id: 425, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "IV(寫真影集)/Video Collection" } 45 | - { id: 433, cate_level1: AV, cate_level2: XXX, cate_level2_desc: "IV(寫真圖集)/Picture Collection" } 46 | - { id: 411, cate_level1: Game, cate_level2: XXX, cate_level2_desc: "H-Game(遊戲)" } 47 | - { id: 412, cate_level1: Anime, cate_level2: XXX, cate_level2_desc: "H-Anime(動畫)" } 48 | - { id: 413, cate_level1: Anime, cate_level2: XXX, cate_level2_desc: "H-Comic(漫畫)" } 49 | 50 | userinfo: 51 | path: https://kp.m-team.cc/index.php 52 | item: 53 | selector: table[id="info_block"] 54 | fields: 55 | uid: 56 | default_value: 0 57 | selector: a[href^="userdetails.php?id="] 58 | attribute: href 59 | filters: 60 | - name: re_search 61 | args: [ '\d+', 0 ] 62 | user_group: 63 | default_value: '' 64 | selector: a[href^="userdetails.php?id="] 65 | attribute: class 66 | username: 67 | default_value: '未知用户名' 68 | selector: a[href^="userdetails.php?id="] 69 | share_ratio: 70 | default_value: '' 71 | selector: font[class="color_ratio"] 72 | method: next_sibling 73 | filters: 74 | - name: replace 75 | args: [ '無限','inf' ] 76 | uploaded: 77 | default_value: 0 78 | selector: font[class="color_uploaded"] 79 | method: next_sibling 80 | filters: 81 | - name: replace 82 | args: [ '無限','inf' ] 83 | downloaded: 84 | default_value: 0 85 | selector: font[class="color_downloaded"] 86 | method: next_sibling 87 | filters: 88 | - name: replace 89 | args: [ '無限','inf' ] 90 | seeding: 91 | default_value: 0 92 | selector: img[alt="Torrents seeding"] 93 | method: next_sibling 94 | leeching: 95 | default_value: 0 96 | selector: img[alt="Torrents leeching"] 97 | method: next_sibling 98 | vip_group: 99 | case: 100 | a[class^="VIP"]: true 101 | "*": false 102 | search: 103 | paths: 104 | - path: torrents.php 105 | categories: [ "!", 410, 429, 424, 430, 426, 437, 431, 432, 436, 425, 433, 411, 412, 413, 406, 408, 434 ] 106 | - path: adult.php 107 | categories: [ 410, 411, 412, 413, 429, 424, 430, 426, 437, 431, 432, 436, 425, 433 ] 108 | - path: music.php 109 | categories: [ 406, 408, 434 ] 110 | query: 111 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 112 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 113 | # 0 incldead, 1 active, 2 dead 114 | incldead: 1 115 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 116 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 117 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 118 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 119 | # 0 AND, 1 OR, 2 exact 120 | search_mode: 0 121 | sort: "{{ query.sort }}" 122 | type: "{{ query.type }}" 123 | page: "{{ query.page }}" 124 | 125 | torrents: 126 | list: 127 | selector: table.torrents > tr:has(table.torrentname) 128 | fields: 129 | id: 130 | selector: a[href^="details.php?id="] 131 | attribute: href 132 | filters: 133 | - name: re_search 134 | args: [ '\d+', 0 ] 135 | title_default: 136 | # shortened for long release names 137 | selector: a[href^="details.php?id="] > b 138 | title_optional: 139 | # not available if IMDB tooltips are turned on 140 | optional: true 141 | selector: a[title][href^="details.php?id="] 142 | attribute: title 143 | title: 144 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 145 | category: 146 | selector: a[href^="?cat="] 147 | attribute: href 148 | filters: 149 | - name: querystring 150 | args: cat 151 | details: 152 | selector: a[href^="details.php?id="] 153 | attribute: href 154 | download: 155 | selector: a[href^="download.php?id="] 156 | attribute: href 157 | poster: 158 | selector: img[alt="torrent thumbnail"] 159 | attribute: src 160 | filters: 161 | - name: replace 162 | args: [ "pic/nopic.jpg", "" ] 163 | imdbid: 164 | selector: a[href*="imdb.com/title/tt"] 165 | attribute: href 166 | filters: 167 | - name: re_search 168 | args: [ 'tt\d+',0 ] 169 | size: 170 | selector: td.rowfollow:nth-last-child(6) 171 | grabs: 172 | selector: td.rowfollow:nth-last-child(3) 173 | seeders: 174 | selector: td.rowfollow:nth-last-child(5) 175 | leechers: 176 | selector: td.rowfollow:nth-last-child(4) 177 | date_added: 178 | selector: td.rowfollow:nth-last-child(7) > span[title] 179 | optional: true 180 | attribute: title 181 | date_elapsed: 182 | selector: tr > td > span[title] 183 | attribute: title 184 | optional: true 185 | date: 186 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 187 | filters: 188 | - name: dateparse 189 | args: "%Y-%m-%d %H:%M:%S" 190 | downloadvolumefactor: 191 | case: 192 | img.pro_free: 0 193 | img.pro_free2up: 0 194 | img.pro_50pctdown: 0.5 195 | img.pro_50pctdown2up: 0.5 196 | img.pro_30pctdown: 0.3 197 | "*": 1 198 | uploadvolumefactor: 199 | case: 200 | img.pro_50pctdown2up: 2 201 | img.pro_free2up: 2 202 | img.pro_2up: 2 203 | "*": 1 204 | free_deadline: 205 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 206 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 207 | selector: span[style="font-weight:normal"] 208 | filters: 209 | - name: re_search 210 | args: [ '(?:限時:\s*)((?:\d+日)?(?:\d+時)?(?:\d+分)?)',1 ] 211 | - name: date_elapsed_parse 212 | description: 213 | selector: table.torrentname > tr > td.embedded 214 | contents: -1 215 | 216 | detail: 217 | item: 218 | selector: table.mainouter > tr:last-child 219 | fields: 220 | downloadvolumefactor: 221 | case: 222 | font.halfdown: 0.5 223 | "*": 1 224 | title: 225 | selector: h1[id="top"] 226 | remove: b 227 | download: 228 | selector: a[href^="download.php?id="] 229 | attribute: href 230 | filename: 231 | selector: td.rowfollow > a[class="index"] 232 | description: 233 | selector: table > tr:nth-child(2) > td:last-child 234 | intro: 235 | selector: div[id="kdescr"] 236 | date: 237 | selector: table > tr:nth-child(1) > td > span[title] 238 | attribute: title 239 | filters: 240 | - name: dateparse 241 | args: "%Y-%m-%d %H:%M:%S" 242 | images: 243 | selectors: img[onclick^="Preview"] 244 | item: 245 | selector: img 246 | attribute: src 247 | id: 248 | selector: a[href^="download.php?id="] 249 | attribute: href 250 | filters: 251 | - name: re_search 252 | args: [ '\d+', 0 ] 253 | -------------------------------------------------------------------------------- /sites/hdhome.yml: -------------------------------------------------------------------------------- 1 | id: HDHome 2 | name: 家园 3 | domain: https://hdhome.org/ 4 | encoding: UTF-8 5 | config_url: https://ghproxy.com/https://raw.githubusercontent.com/lovebeefcat/movie-bot-conf/main/sites/hdhome.yml 6 | 7 | login: 8 | test: 9 | selector: a[href="logout.php"] 10 | 11 | category_mappings: 12 | - { id: 411, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies SD" } 13 | - { id: 412, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies IPad" } 14 | - { id: 413, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies 720p" } 15 | - { id: 414, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies 1080p" } 16 | - { id: 415, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies REMUX" } 17 | - { id: 450, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies Bluray" } 18 | - { id: 499, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies UHD Blu-ray" } 19 | - { id: 416, cate_level1: Movie, cate_level2: Movies, cate_level2_desc: "Movies/Movies 2160p" } 20 | - { id: 417, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/Doc SD" } 21 | - { id: 418, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/Doc IPad" } 22 | - { id: 419, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/Doc 720p" } 23 | - { id: 420, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/Doc 1080p" } 24 | - { id: 421, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/Doc REMUX" } 25 | - { id: 451, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/Doc Bluray" } 26 | - { id: 500, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/Doc UHD Blu-ray" } 27 | - { id: 422, cate_level1: Documentary, cate_level2: TV/Documentary, cate_level2_desc: "Documentaries/Doc 2160p" } 28 | - { id: 423, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVMusic 720p" } 29 | - { id: 424, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVMusic 1080i" } 30 | - { id: 425, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVShow SD" } 31 | - { id: 426, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVShow IPad" } 32 | - { id: 471, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVShow IPad" } 33 | - { id: 427, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVShow 720p" } 34 | - { id: 472, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVShow 720p" } 35 | - { id: 428, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVShow 1080i" } 36 | - { id: 429, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVShow 1080p" } 37 | - { id: 430, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV TVShow REMUX" } 38 | - { id: 452, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TVShows Bluray" } 39 | - { id: 431, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TVShow 2160p" } 40 | - { id: 432, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TVSeries SD" } 41 | - { id: 433, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TVSeries IPad" } 42 | - { id: 434, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TVSeries 720p" } 43 | - { id: 435, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVSeries 1080i" } 44 | - { id: 436, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVSeries 1080p" } 45 | - { id: 437, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVSeries REMUX" } 46 | - { id: 453, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVSereis Bluray" } 47 | - { id: 438, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVSeries 2160p" } 48 | - { id: 502, cate_level1: TV, cate_level2: TV, cate_level2_desc: "TV Series/TVSeries 4K Bluray" } 49 | - { id: 439, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MusicVideo/Musics APE" } 50 | - { id: 440, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MusicVideo/Musics FLAC" } 51 | - { id: 441, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MusicVideo/Musics MV" } 52 | - { id: 503, cate_level1: Music, cate_level2: Audio/Video, cate_level2_desc: "MusicVideo/Musics Bluray" } 53 | - { id: 442, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports/Sports 720p" } 54 | - { id: 443, cate_level1: TV, cate_level2: TV/Sport, cate_level2_desc: "Sports/Sports 1080i" } 55 | - { id: 444, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/Anime SD" } 56 | - { id: 445, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/Anime IPad" } 57 | - { id: 446, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/Anime 720p" } 58 | - { id: 447, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/Anime 1080p" } 59 | - { id: 448, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/Anime REMUX" } 60 | - { id: 454, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/Anime Bluray" } 61 | - { id: 409, cate_level1: Other, cate_level2: Other, cate_level2_desc: "Misc/其他" } 62 | - { id: 449, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/Anime 2160p" } 63 | - { id: 501, cate_level1: Anime , cate_level2: TV/Anime, cate_level2_desc: "Animations/Anime UHD Blu-ray" } 64 | 65 | userinfo: 66 | path: https://hdhome.org/index.php 67 | item: 68 | selector: table[id="info_block"] 69 | fields: 70 | uid: 71 | default_value: 0 72 | selector: a[href^="userdetails.php?id="] 73 | attribute: href 74 | filters: 75 | - name: re_search 76 | args: [ '\d+', 0 ] 77 | user_group: 78 | default_value: '' 79 | selector: a[href^="userdetails.php?id="] 80 | attribute: class 81 | username: 82 | default_value: '未知用户名' 83 | selector: a[href^="userdetails.php?id="] 84 | share_ratio: 85 | default_value: '' 86 | selector: font[class="color_ratio"] 87 | method: next_sibling 88 | filters: 89 | - name: replace 90 | args: [ '无限','inf' ] 91 | uploaded: 92 | default_value: 0 93 | selector: font[class="color_uploaded"] 94 | method: next_sibling 95 | filters: 96 | - name: replace 97 | args: [ '无限','inf' ] 98 | downloaded: 99 | default_value: 0 100 | selector: font[class="color_downloaded"] 101 | method: next_sibling 102 | filters: 103 | - name: replace 104 | args: [ '无限','inf' ] 105 | seeding: 106 | default_value: 0 107 | selector: img[alt="Torrents seeding"] 108 | method: next_sibling 109 | leeching: 110 | default_value: 0 111 | selector: img[alt="Torrents leeching"] 112 | method: next_sibling 113 | vip_group: 114 | case: 115 | a[class^="VIP"]: true 116 | "*": false 117 | search: 118 | paths: 119 | - path: torrents.php 120 | method: get 121 | query: 122 | $raw: "{% for c in query.cates %}cat{{c}}=1&{% endfor %}" 123 | search: "{% if query.imdb_id %}{{query.imdb_id}}{%else%}{{query.keyword}}{% endif %}" 124 | # 0 incldead, 1 active, 2 dead 125 | incldead: 1 126 | # 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30% 127 | spstate: "{% if query.free %}2{% else %}0{% endif %}" 128 | # 0 title, 1 descr, 3 uploader, 4 imdburl (searching imdburl does not work with tt1234567, but descr is good) 129 | search_area: "{% if query.imdb_id %}4{% else %}0{%endif%}" 130 | # 0 AND, 1 OR, 2 exact 131 | search_mode: 0 132 | sort: "{{ query.sort }}" 133 | type: "{{ query.type }}" 134 | page: "{{ query.page }}" 135 | 136 | torrents: 137 | list: 138 | selector: table.torrents > tr:has(table.torrentname) 139 | fields: 140 | id: 141 | selector: a[href^="details.php?id="] 142 | attribute: href 143 | filters: 144 | - name: re_search 145 | args: [ '\d+', 0 ] 146 | title_default: 147 | selector: a[href^="details.php?id="] 148 | title_optional: 149 | optional: true 150 | selector: a[title][href^="details.php?id="] 151 | attribute: title 152 | title: 153 | text: "{% if fields['title_optional'] %}{{ fields['title_optional'] }}{% else %}{{ fields['title_default'] }}{% endif %}" 154 | category: 155 | selector: a[href^="?cat="] 156 | attribute: href 157 | filters: 158 | - name: replace 159 | args: [ "?", "" ] 160 | - name: querystring 161 | args: cat 162 | details: 163 | selector: a[href^="details.php?id="] 164 | attribute: href 165 | download: 166 | selector: a[href^="download.php?id="] 167 | attribute: href 168 | imdbid: 169 | selector: div.imdb_100 > a 170 | attribute: href 171 | filters: 172 | - name: re_search 173 | args: [ 'tt\d+',0 ] 174 | date_elapsed: 175 | # 站点设置,已去时间 (默认) 176 | selector: td:nth-child(4) > span[title] 177 | attribute: title 178 | optional: true 179 | date_added: 180 | # 站点设置,实际时间 181 | selector: td:nth-child(4):not(:has(span)) 182 | optional: true 183 | date: 184 | text: "{% if fields['date_elapsed'] or fields['date_added'] %}{{ fields['date_elapsed'] if fields['date_elapsed'] else fields['date_added'] }}{% else %}now{% endif %}" 185 | filters: 186 | - name: dateparse 187 | args: "%Y-%m-%d %H:%M:%S" 188 | size: 189 | selector: td:nth-child(5) 190 | seeders: 191 | selector: td:nth-child(6) 192 | leechers: 193 | selector: td:nth-child(7) 194 | grabs: 195 | selector: td:nth-child(8) 196 | downloadvolumefactor: 197 | case: 198 | img.pro_free: 0 199 | img.pro_free2up: 0 200 | img.pro_50pctdown: 0.5 201 | img.pro_50pctdown2up: 0.5 202 | img.pro_30pctdown: 0.3 203 | "*": 1 204 | uploadvolumefactor: 205 | case: 206 | img.pro_50pctdown2up: 2 207 | img.pro_free2up: 2 208 | img.pro_2up: 2 209 | "*": 1 210 | free_deadline: 211 | default_value: "{% if fields['downloadvolumefactor']==0 %}{{max_time}}{% endif%}" 212 | default_value_format: '%Y-%m-%d %H:%M:%S.%f' 213 | selector: img.pro_free,img.pro_free2up 214 | attribute: onmouseover 215 | filters: 216 | - name: re_search 217 | args: [ '\d+-\d+-\d+ \d+:\d+:\d+', 0 ] 218 | - name: dateparse 219 | args: "%Y-%m-%d %H:%M:%S" 220 | subject: 221 | selector: td:nth-child(2) > table > tr > td.embedded 222 | contents: -1 223 | tags: 224 | selectors: td.embedded > span.tags 225 | description: 226 | text: "{% if fields['tags']%}{{ fields['subject']+' '+fields['tags']|join(' ') }}{% else %}{{ fields['subject'] }}{% endif %}" --------------------------------------------------------------------------------