[
  {
    "articleStyle": 0,
    "customOrder": 0,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": false,
    "sourceIcon": "",
    "sourceName": "18",
    "sourceUrl": ""
  },
  {
    "articleStyle": 0,
    "customOrder": 2,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "injectJs": "//$(\"div.layui-panel\").eq(0).remove();\nsetInterval(function () {\n    $(\"div.layui-hide-md\").css(\"display\",\"none\");\n},100)",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "678",
    "sourceIcon": "https://www.yckceo.com/favicon.ico",
    "sourceName": "源仓库(去底部广告）",
    "sourceUrl": "https://www.yckceo.com/"
  },
  {
    "articleStyle": 1,
    "customOrder": 4,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 14; zh-cn; M2102K1AC Build/UKQ1.231207.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/109.0.5414.118 Mobile Safari/537.36 MQQBrowser/10.1.0\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".thumbnail-group@li",
    "ruleContent": "<js>\np=result.match(/vod\\_data.*url\\\"\\:\\\"(.*?)\\\"\\,\\\"url/);\np=(p?p[1]:1).replace(/\\\\/g,'')||1; pi=java.getString('.breadcrumbs@span@text')||1;\n`<html>\n    <head>\n        <meta name=\"viewport\" content=\"width=device-width\">\n        <style>\n            body {\n                margin: 0;\n                font-family: Arial, sans-serif;\n                background: linear-gradient(135deg, #ece9e6, #ffffff);\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                justify-content: flex-start;\n                padding: 20px;\n            }\n            .container {\n                width: 100%;\n                max-width: 800px;\n                background: #fff;\n                border-radius: 10px;\n                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n                overflow: hidden;\n                margin-bottom: 20px;\n            }\n            h3 {\n                margin: 0;\n                padding: 10px 20px;\n                font-size: 0.9em;\n                background: #333;\n                color: #fff;\n                border-radius: 10px 10px 0 0;\n            }\n            .video-container {\n                width: 100%;\n                background: #000;\n                position: relative;\n            }\n            video {\n                width: 100%;\n                height: auto;\n                display: block;\n            }\n            .info-container {\n                padding: 20px;\n            }\n            .info-container p {\n                margin: 10px 0;\n                color: #555;\n            }\n            .info-container p span {\n                font-weight: bold;\n                color: #000;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container\">\n        <h3>${pi}</h3>\n            <div class=\"video-container\">\n                <video controls autoplay name=\"media\" id=\"videoPlayer\">\n                    <source src=\"${p}\" type=\"video/mp4\">\n                </video>\n            </div>\n            <div class=\"info-container\">\n                \n            </div>\n        </div>\n\n        <script>\n            // 获取视频元素\n            const video = document.getElementById('videoPlayer');\n            let touchStartX = 0;\n            let touchStartY = 0;\n            let touchStartTime = 0;\n            let isLongPress = false;\n\n            // 滑动快进\n            video.addEventListener('touchstart', (e) => {\n                touchStartX = e.touches[0].clientX;\n                touchStartY = e.touches[0].clientY;\n                touchStartTime = Date.now();\n                isLongPress = false;\n            });\n\n            video.addEventListener('touchmove', (e) => {\n                const deltaX = e.touches[0].clientX - touchStartX;\n                const deltaY = e.touches[0].clientY - touchStartY;\n\n                // 如果是水平滑动，且未进入长按状态\n                if (Math.abs(deltaX) > Math.abs(deltaY) && !isLongPress) {\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX / 100); // 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                }\n            });\n\n            // 长按快进\n            video.addEventListener('touchend', (e) => {\n                const touchEndTime = Date.now();\n                const touchDuration = touchEndTime - touchStartTime;\n\n                // 如果长按时间超过500ms，进入长按快进状态\n                if (touchDuration > 500) {\n                    isLongPress = true;\n\n                    // 在长按状态下，根据滑动距离快进\n                    const deltaX = e.changedTouches[0].clientX - touchStartX;\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX / 100); // 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                } else {\n                    isLongPress = false;\n                }\n            });\n\n            // 防止默认行为（如页面滚动）\n            video.addEventListener('touchmove', (e) => {\n                e.preventDefault();\n            });\n        </script>\n    </body>\n</html>`;\n\n</js>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "p@text",
    "ruleTitle": "h5@text||img@alt",
    "singleUrl": false,
    "sortUrl": "\n伦理三级::/index.php/vod/type/id/6/page/{{page}}.html\n国产精品::/index.php/vod/type/id/7/page/{{page}}.html\n偷拍自拍::/index.php/vod/type/id/8/page/{{page}}.html\n主播大秀::/index.php/vod/type/id/9/page/{{page}}.html\n卡通动漫::/index.php/vod/type/id/10/page/{{page}}.html\n制服丝袜::/index.php/vod/type/id/11/page/{{page}}.html\n少女萝莉::/index.php/vod/type/id/12/page/{{page}}.html\n巨乳美乳::/index.php/vod/type/id/20/page/{{page}}.html\n熟女人妻::/index.php/vod/type/id/21/page/{{page}}.html\n亚洲有码::/index.php/vod/type/id/22/page/{{page}}.html\n强奸乱伦::/index.php/vod/type/id/23/page/{{page}}.html\n亚洲无码::/index.php/vod/type/id/25/page/{{page}}.html\n中文字幕::/index.php/vod/type/id/26/page/{{page}}.html\n同性专区::/index.php/vod/type/id/27/page/{{page}}.html\nAl换脸::/index.php/vod/type/id/28/page/{{page}}.html\n欧美精品::/index.php/vod/type/id/32/page/{{page}}.html\n国产传媒::/index.php/vod/type/id/33/page/{{page}}.html\n口交颜射::/index.php/vod/type/id/34/page/{{page}}.html\n女优明星::/index.php/vod/type/id/35/page/{{page}}.html\n素人自拍::/index.php/vod/type/id/36/page/{{page}}.html\n多人群交::/index.php/vod/type/id/37/page/{{page}}.html\n网曝门::/index.php/vod/type/id/39/page/{{page}}.html\n探花系列::/index.php/vod/type/id/41/page/{{page}}.html\n麻豆传媒::/index.php/vod/type/id/43/page/{{page}}.html\n天美传媒::/index.php/vod/type/id/46/page/{{page}}.html\nSA国际传媒::/index.php/vod/type/id/47/page/{{page}}.html\n果冻传媒::/index.php/vod/type/id/50/page/{{page}}.html\n星空无限::/index.php/vod/type/id/51/page/{{page}}.html\n精东影业::/index.php/vod/type/id/52/page/{{page}}.html\n蜜桃传媒::/index.php/vod/type/id/54/page/{{page}}.html\nAV解说::/index.php/vod/type/id/56/page/{{page}}.html\nVR视角::/index.php/vod/type/id/57/page/{{page}}.html\nJVID::/index.php/vod/type/id/59/page/{{page}}.html\nSWAG::/index.php/vod/type/id/60/page/{{page}}.html \ncosplay::/index.php/vod/type/id/61/page/{{page}}.html\n抖音视频::/index.php/vod/type/id/62/page/{{page}}.html\n热门头条::/index.php/vod/type/id/63/page/{{page}}.html\n素人搭讪::/index.php/vod/type/id/80/page/{{page}}.html\n欺辱凌辱::/index.php/vod/type/id/81/page/{{page}}.html\n野外激情::/index.php/vod/type/id/82/page/{{page}}.html\n学生诱惑::/index.php/vod/type/id/83/page/{{page}}.html\nSM调教::/index.php/vod/type/id/84/page/{{page}}.html\n水果派::/index.php/vod/type/id/86/page/{{page}}.html\n91传媒::/index.php/vod/type/id/88/page/{{page}}.html\n糖心传媒::/index.php/vod/type/id/90/page/{{page}}.html\n一本道::/index.php/vod/type/id/93/page/{{page}}.html\n",
    "sourceComment": "发布页：https://wuxiants.github.io/",
    "sourceGroup": "678",
    "sourceIcon": "https://images.icon-icons.com/1147/PNG/512/1486486316-arrow-film-movie-play-player-start-video_81236.png",
    "sourceName": "无限臀山",
    "sourceUrl": "https://wxts.wuxiants564.com/"
  },
  {
    "articleStyle": 1,
    "customOrder": 5,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".thumb-block",
    "ruleContent": "body@all\n<js>var URL=result.match(/\\('(https:.*?\\.*mp4\\?.*?)'/)[1];\nresult = URL.replace(/\\\\/g,\"\");\nresult =\"<video src=\"+result+\" width=\\\"100%\\\" height=\\\"auto\\\" autoplay      muted controls>  </video>\"\n</js>",
    "ruleImage": "img@data-src",
    "ruleLink": "tag.a.0@href",
    "ruleNextPage": "class.no-page next-page@href",
    "rulePubDate": "{{@@class.duration@text}}",
    "ruleTitle": "a@title",
    "singleUrl": false,
    "sortUrl": "//搜索一设置源变量后再重进刷新下就行\n搜索一::/?k={{(source.getVariable()==''||source.getVariable()==null)?source.setVariable(''):\"\"}}{{source.getVariable()}}&p=\n\n\n//搜索二直接改搜索栏里的“k=”后面的文字就行\n搜索二::/?k=\n首页::/new/{{page}}\n说中文的色情::/lang/chinese/{{page}}\n成熟::/c/Mature-38/{{page}}\n出轨::/c/Cuckold-237/{{page}}\n调教::/c/Femdom-235/{{page}}\n肛交::/c/Anal-12/{{page}}\n家庭乱搞::/c/Fucked_Up_Family-81/{{page}}\n巨乳::/c/Big_Tits-23/{{page}}\n巨臀::/c/Big_Ass-24/{{page}}\n口交::/c/Blowjob-15/{{page}}\n美臀::/c/Ass-14/{{page}}\n女同::/c/Lesbian-26/{{page}}\n少女::/c/Teen-13/{{page}}\n中出::/c/Creampie-40/{{page}}\n亚洲::/c/Asian_Woman-32/{{page}}",
    "sourceComment": "https://penzu.com/public/42071993地址发布页",
    "sourceGroup": "678",
    "sourceIcon": "https://i.postimg.cc/NjQmTCJ5/1629968589491.png",
    "sourceName": "玉羞园(免翻已修复)",
    "sourceUrl": "https://tt.yxy311.icu/"
  },
  {
    "articleStyle": 1,
    "customOrder": 6,
    "enableJs": false,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\n  \"User-Agent\": \"okhttp/4.2.2\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.data.vodrows",
    "ruleContent": "<video src=\"{{$.data.httpurl}}{{$.data.httpurl_preview}}\" autoplay muted controls></video>",
    "ruleImage": "$.coverpic",
    "ruleLink": "http://ios.bxguwen.com{{$.play_url}}",
    "ruleNextPage": "$..next_url",
    "rulePubDate": "{{$.updatetime}}  {{$.scorenum}}分  {{$.areaname}}   {{$.catename}} {{$.actor_tags..tagname}}  {{$.tags..tagname}} ",
    "ruleTitle": "@js:\nif (\"{{$.isvip}}{{$.islimitv3}}\"==\"00\"){result=\"{{$.title}}\"}else{result=\"\"}",
    "singleUrl": false,
    "sortUrl": "搜索用::http://ios.bxguwen.com/search?page={{page}}&wd={{source.getVariable()}}\n制服诱惑::http://ios.bxguwen.com/vod/listing-5-0-0-0-0-0-0-0-0-1\n清纯少女::http://ios.bxguwen.com/vod/listing-6-0-0-0-0-0-0-0-0-1\n辣妹大奶::http://ios.bxguwen.com/vod/listing-7-0-0-0-0-0-0-0-0-1\n女同专属::http://ios.bxguwen.com/vod/listing-8-0-0-0-0-0-0-0-0-1\n素人出演::http://ios.bxguwen.com/vod/listing-9-0-0-0-0-0-0-0-0-1\n角色扮演::http://ios.bxguwen.com/vod/listing-10-0-0-0-0-0-0-0-0-1\n成人动漫::http://ios.bxguwen.com/vod/listing-11-0-0-0-0-0-0-0-0-1\n人妻熟女::http://ios.bxguwen.com/vod/listing-12-0-0-0-0-0-0-0-0-1\n变态另类::http://ios.bxguwen.com/vod/listing-13-0-0-0-0-0-0-0-0-1\n经典伦理::http://ios.bxguwen.com/vod/listing-14-0-0-0-0-0-0-0-0-1\n香蕉原创::http://ios.bxguwen.com/vod/listing-16-0-0-0-0-0-0-0-0-1",
    "sourceComment": "//      >>> 当前时间是：2025-06-23 04:07:37 <<<\n//  关注微信公众号【神秘的哥哥们】有惊喜哦！！！\n//  当前接口：http://ios.bxguwen.com/vod/listing-6-1-0-0-0-0-0-0-0-1\n模板http://ios.bxguwen.com/vod/listing-cateid-areaid-yearid-definition-duration-freetype-mosaic-langvoice-orderby-1\n\n{\"retcode\":0,\"errmsg\":\"\",\"data\":{\"now\":1750622857,\"action\":\"listing\",\"sample_params\":\"$cateid:0-$areaid:0-$yearid:0-$definition:0-$duration:0-$freetype:0-$mosaic:0-$langvoice:0-$orderby:0-$page:1\",\"params\":{\"cateid\":\"6\",\"areaid\":\"1\",\"yearid\":\"0\",\"definition\":\"0\",\"duration\":\"0\",\"freetype\":\"0\",\"mosaic\":\"0\",\"langvoice\":\"0\",\"orderby\":\"0\",\"page\":\"1\"},\n\"vodrows\":[],\"pageinfo\":{\"plist\":[{\"pos\":\"curr\",\"page\":1,\"text\":1,\"url\":\"/vod/listing-6-1-0-0-0-0-0-0-0-1\"}\n],\n\"pagesize\":16,\"total\":0,\"totalpage\":1,\"page\":1,\"start\":0,\"end\":0,\"prev\":0,\"next\":0,\"curr_url\":\"/vod/listing-6-1-0-0-0-0-0-0-0-1\",\"first_url\":\"/vod/listing-6-1-0-0-0-0-0-0-0-1\",\"prev_url\":\"/vod/listing-6-1-0-0-0-0-0-0-0-1\",\"next_url\":\"/vod/listing-6-1-0-0-0-0-0-0-0-1\",\"last_url\":\"/vod/listing-6-1-0-0-0-0-0-0-0-1\",\"page_url\":\"/vod/listing-6-1-0-0-0-0-0-0-0-[?]\",\"pages\":[1]},\n\"orders\":[{\"keyid\":1,\"value\":\"最多好评\"},\n{\"keyid\":2,\"value\":\"最多播放\"},\n{\"keyid\":3,\"value\":\"最高评分\"}\n],\n\"categories\":[{\"cateid\":\"16\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"香蕉原创\"},\n{\"cateid\":\"5\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"制服诱惑\"},\n{\"cateid\":\"6\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"清纯少女\"},\n{\"cateid\":\"7\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"辣妹大奶\"},\n{\"cateid\":\"8\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"女同专属\"},\n{\"cateid\":\"9\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"素人出演\"},\n{\"cateid\":\"10\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"角色扮演\"},\n{\"cateid\":\"11\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"成人动漫\"},\n{\"cateid\":\"12\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"人妻熟女\"},\n{\"cateid\":\"13\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"变态另类\"},\n{\"cateid\":\"14\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"经典伦理\"},\n{\"cateid\":\"4\",\"parentid\":\"0\",\"uuid\":\"\",\"catename\":\"偷拍自拍\"}\n],\n\"areas\":[{\"areaid\":\"2\",\"areaname\":\"国产\",\"sortnum\":\"1\"},\n{\"areaid\":\"3\",\"areaname\":\"日本\",\"sortnum\":\"2\"},\n{\"areaid\":\"8\",\"areaname\":\"台湾省\",\"sortnum\":\"3\"},\n{\"areaid\":\"5\",\"areaname\":\"韩国\",\"sortnum\":\"4\"},\n{\"areaid\":\"7\",\"areaname\":\"香港\",\"sortnum\":\"5\"},\n{\"areaid\":\"6\",\"areaname\":\"欧美\",\"sortnum\":\"6\"}\n],\n\"years\":[{\"yearid\":\"12\",\"yearname\":\"2025\",\"sortnum\":\"0\"},\n{\"yearid\":\"14\",\"yearname\":\"2024\",\"sortnum\":\"1\"},\n{\"yearid\":\"15\",\"yearname\":\"2023\",\"sortnum\":\"2\"},\n{\"yearid\":\"16\",\"yearname\":\"2022\",\"sortnum\":\"3\"},\n{\"yearid\":\"17\",\"yearname\":\"2021\",\"sortnum\":\"4\"},\n{\"yearid\":\"18\",\"yearname\":\"2020\",\"sortnum\":\"5\"},\n{\"yearid\":\"6\",\"yearname\":\"2019\",\"sortnum\":\"6\"},\n{\"yearid\":\"3\",\"yearname\":\"2018\",\"sortnum\":\"7\"}\n],\n\"definitions\":[{\"keyid\":1,\"value\":\"标清\"},\n{\"keyid\":2,\"value\":\"高清\"}\n],\n\"durations\":[{\"keyid\":1,\"value\":\"长片\"},\n{\"keyid\":2,\"value\":\"短片\"}\n],\n\"freetypes\":[{\"keyid\":1,\"value\":\"免费\"},\n{\"keyid\":2,\"value\":\"会员\"}\n],\n\"mosaics\":[{\"keyid\":1,\"value\":\"有码\"},\n{\"keyid\":2,\"value\":\"无码\"}\n],\n\"langvoices\":[{\"keyid\":1,\"value\":\"中文字幕\"},\n{\"keyid\":2,\"value\":\"国语对白\"},\n{\"keyid\":3,\"value\":\"其它\"}]}}",
    "sourceGroup": "678",
    "sourceIcon": "https://i.postimg.cc/WbBpgPrK/1655357335965.png",
    "sourceName": "香蕉视频",
    "sourceUrl": "http://ios.bxguwen.com/vod/listing-6-1-0-0-0-0-0-0-0-1",
    "style": "video{width:100%}"
  },
  {
    "articleStyle": 1,
    "customOrder": 7,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Mobile Safari/537.36 Edg/91.0.864.67\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "li",
    "ruleContent": "class.bz_message_table&&class.message@all##file##src",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": "tag.a@tag.span.3@text",
    "ruleTitle": "a@tag.span.0@text",
    "singleUrl": false,
    "sortUrl": "国产自拍::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=18&page={{page}}&mobile=2\n亚洲无码::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=19&page={{page}}&mobile=2\n中文字幕::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=21&page={{page}}&mobile=2\n欧美专区::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=25&page={{page}}&mobile=2",
    "sourceComment": "发布页\n6996dizhi.com\n<js>github@ifwlzs</js>",
    "sourceGroup": "678",
    "sourceIcon": "https://galaxy.st1003.top/favicon.ico",
    "sourceName": "69色堂",
    "sourceUrl": "https://galaxy.st1003.top/",
    "style": "img{\n\twidth:100%;\n\theight:auto;\n\t}##github@ifwlzs"
  },
  {
    "articleStyle": 1,
    "customOrder": 8,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".appel-max@ul@li!0:1:2:3:4:5",
    "ruleContent": "<js>\np=result.match(/url\\\"\\:\\\"(.*?)\\\"\\,\\\"url/)[1].replace(/\\\\/g,'')\nvar p\n`<html>\n    <head>\n        <meta name=\"viewport\" content=\"width=device-width\">\n        <style>\n            body {\n                margin: 0;\n                font-family: Arial, sans-serif;\n                background: linear-gradient(135deg, #ece9e6, #ffffff);\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                justify-content: flex-start;\n                padding: 20px;\n            }\n           .container {\n                width: 100%;\n                max-width: 800px;\n                background: #fff;\n                border-radius: 10px;\n                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n                overflow: hidden;\n                margin-bottom: 20px;\n            }\n            h3 {\n                margin: 0;\n                padding: 10px 20px;\n                font-size: 0.9em;\n                background: #333;\n                color: #fff;\n                border-radius: 10px 10px 0 0;\n            }\n           .video-container {\n                width: 100%;\n                background: #000;\n                position: relative;\n            }\n            video {\n                width: 100%;\n                height: auto;\n                display: block;\n            }\n           .info-container {\n                padding: 20px;\n            }\n           .info-container p {\n                margin: 10px 0;\n                color: #555;\n            }\n           .info-container p span {\n                font-weight: bold;\n                color: #000;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container\">\n            <div class=\"video-container\">\n                <video controls autoplay name=\"media\">\n                    <source src=\"${p}\" type=\"video/mp4\">\n                </video>\n            </div>\n            <div class=\"info-container\">\n                \n            </div>\n        </div>\n    </body>\n</html>`;\n\n</js>",
    "ruleImage": "img@data-original##.*gif",
    "ruleLink": "a.-1@href##/voddetail/(\\d+).html##https://cdnaaapi.yiniuyingshi6.com:2053/vodplay/$1-1-1.html",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "{{@span.video-grade@text}}  {{@p@text}}",
    "ruleTitle": "h5@a@text",
    "singleUrl": false,
    "sortUrl": "制服丝袜::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/20.html\n群交淫乱::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/21.html\n无码专区::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/22.html\n偷拍自拍::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/23.html\n卡通动画::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/24.html\n中文字幕:https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/25.html\n欧美性爱::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/26.html\n巨乳美乳::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/27.html\n国产裸聊::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/28.html\n国产自拍::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/29.html\n国产盗摄::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/30.html\n伦理三级::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/31.html\n女同性恋::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/32.html\n少女萝莉::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/33.html",
    "sourceComment": "需要频道换源\n地址发布页\nhttp://www.henniu69.xyz/",
    "sourceGroup": "678",
    "sourceIcon": "https://i.postimg.cc/xTLWq1dp/IMG-20220930-223954.jpg",
    "sourceName": "©h牛影视",
    "sourceUrl": "https://cdnaaapi.yiniuyingshi6.com:2053"
  },
  {
    "articleStyle": 1,
    "customOrder": 9,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 11; PCAM10 Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4103.106 Mobile Safari/537.36\"} ",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginUrl": "https://czy.yzfnb6.help/cn/home/web/index.php/vod/play/id/1177871/sid/1/nid/1.html",
    "ruleArticles": "[class=\"H5__content\"]@[class=\"video__wrap\"]@a",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取-双模版</title>\n\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body {font-family: Arial, sans-serif;font-size: 16px;}\n    #title, #page, #loading-status {margin: 0 auto;font-size: 20px;text-align: center;}\n    #description, #urls, #video-url, #video-sources, #messages {width: 100%;max-width: 800px;margin: 1.5px auto;font-size: 14px;text-align: left;word-wrap: break-word;white-space: pre-wrap;}\n    #text, #text :not(img), #text img + * {text-indent: 2em;width: 100%;font-size: 16px;line-height: 1.5em;margin-top: 0;margin-bottom: 0;word-wrap: break-word;white-space: pre-wrap;}\n    img, #text img {width: 100%;height: auto;display: block;margin-bottom: 1.5px;}\n    .flex-container {display: flex;justify-content: center;align-items: center;gap: 10px;margin: 1.5px 0;font-size: 14px;}\n    button, select {flex: 1 1 31%; padding: 3px;border: 1px solid #ccc;border-radius: 5px;box-sizing: border-box;cursor: pointer;background-color: #f9f9f9;transition: background-color 0.3s ease;margin: 1.5px;min-width: 0;font-size: 14px;}\n    #url-select, #video-source-select {flex: 1 1 100%; margin-left: 0;margin-right: 0;text-align: center;}\n    #video-element {width: 100%;height: auto;}\n    textarea {width: 100%;height: auto;min-height: 100px;box-sizing: border-box;resize: vertical;}\n    .error, .warn {color: red;}\n    #urls,#messages,#debug-info,#video-url,#video-container,#video-source-select,#images,#text {display:none;}\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text##高清在线观看|-国产剧| - 专享影视| - 热门高清|影视大全|海外华人|高清1080p|无广告影院|\\|}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">\n            您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n    <script>\nconst config = {    \n    videoSelector: 'body', // 视频选择器\n    imgSelector: '.gridlane-box-inside img', // 图片选择器\n    textSelector: '#content', // 文本选择器\n    debugSelector: '.player-wrapper', // 调试信息选择器\n    swapImageAttributes: false, // 是否交换图片属性\n    delayTime: 1500, // 延迟提取时间\n    retryDelayTime: 1500, // 重试加载延迟时间\n    maxLoadAttempts: 3, // 最大加载次数\n    autoLoading: false, // true自动模式，false单页模式\n    debugOnce: 0, // 只在特定索引输出一次调试信息\n         /* -网页拼接-*/    \n    totalPagesText: '{{@@.pager@li.-3@a@textNodes}}', // 总页码\n    urlSuffixToRemove: /\\.aspx$/, // 移除url后缀\n    pageUrlText: '{urlPrefix}p{i}.aspx', // 拼接URL模板        \n        /* -以上拼接模式（网址需要拼接）-*/\n        /* -上下分割线-*/\n        /* -以下列表模式（地址与目录对应，比如视频、漫画）-*/   \n    ListMode: true, // true网址列表模式，false网址拼接模式    \n    initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n    initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n    sourceurl: '', // 来源URL前缀\n};\n\nlet videoSources = [];\nlet loadAttempts = {};\nlet urls = [];\nlet imageBox;\nlet textBox;\nlet currentPageIndex = 0;\nlet canLoadNextPage = true;\nlet autoLoadInProgress = false;\n\n// 构建URL列表\nfunction buildUrls(totalPages, baseUrl) {\n    let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n    let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n    if (config.ListMode && initialUrlsArray.length > 0) {\n        if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n            $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n        }\n\n        urls = initialUrlsArray.map(url => {\n            if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                return config.sourceurl.replace(/\\/$/, '') + url;\n            } else {\n                return url;\n            }\n        });\n\n        urls.forEach((url, index) => {\n            const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n            $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n            $('#urls').append(`<div>${name}: ${url}</div>`);\n        });\n    } else {\n        if (totalPages === 1) {\n            urls.push(baseUrl);\n        } else {\n            urls.push(baseUrl);\n            for (let i = 2; i <= totalPages; i++) {\n                urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n            }\n        }\n\n        urls.forEach((url, index) => {\n            const name = `第 ${index + 1} 页`;\n            $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n            $('#urls').append(`<div>${name}: ${url}</div>`);\n        });\n    }\n\n    $('#total-pages').text(urls.length);\n    toggleNavigationButtons();\n}\n\nfunction normalizeUrl(url) {\n    if (typeof url!== 'string' ||!url.trim()) return '';\n    url = url.replace(/\\\\u[\\dA-F]{4}/gi, (match) => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n    url = decodeURIComponent(url);\n    url = url.replace(/^http:\\/([^/])/, 'http://$1'); // 修正 http:/ 协议部分\n    url = url.replace(/^https:\\/([^/])/, 'https://$1'); // 修正 https:/ 协议部分\n    return url;\n}\n\n// 清空容器\nfunction clearContainers() {\n    $('#messages').empty();\n    $('#images').empty();\n    $('#text').empty();\n}\n\n// 更新图片的src属性\nfunction updateImageSrc(elements, shouldSwap) {\n    elements.each(function () {\n        const $this = $(this);\n        const attrsToUpdate = {};\n        if (shouldSwap) {\n            ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                if ($this.attr(attr)) {\n                    attrsToUpdate['src'] = $this.attr(attr);\n                }\n            });\n        }\n        $this.attr(attrsToUpdate);\n    });\n    return elements;\n}\n\n// 切换导航按钮和选择框的显示\nfunction toggleNavigationButtons() {\n    if ($('#url-select option').length > 1  && !config.autoLoading) {\n        $('#loading-buttons').show();\n        $('#url-select').show();\n    } else {\n        $('#loading-buttons').hide();\n        $('#url-select').hide();\n    }\n}\n\n// 显示加载状态\nfunction showLoadingStatus(pageNumber) {\n    const selectedOption = $('#url-select option:selected').text();\n    $('#loading-status').text(`正在加载：${selectedOption}`).show();\n}\n\n// 隐藏加载状态\nfunction hideLoadingStatus() {\n    $('#loading-status').hide();\n}\n\n// 内容提取函数内容\nfunction loadContent(index) {\n    if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n    canLoadNextPage = false;\n    currentPageIndex = index;\n    $('#url-select').val(index);\n    $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span> </div>`);\n    if (autoLoadInProgress) {\n        showLoadingStatus(index + 1);\n    }\n    $.ajax({\n        url: urls[index],\n        type: 'GET',\n        success: function (data) {\n            try {\n                const $data = $(data);\n                let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                    .replace(/src=\"upload/gi, 'src=\"/upload')\n                    .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                    .replace(/\\\\\\//g, '/');\n                const parser = new DOMParser();\n                const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                  // 添加调试标签输出信息\n                if (config.debugOnce === index) {\n                    const debugElements = $(doc).find(config.debugSelector);\n                    if (debugElements.length > 0) {\n                        const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                        $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                    } else {\n                        $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                    }\n                }\n\n                // 方法1：video标签获取视频地址\n                const videoContents = $(doc).find(config.videoSelector);\n                const videoTags = $(videoContents).find('video');\n                videoTags.each(function () {\n                    const videosrc = $(this).attr('src') || $(this).attr('data-src') || $(this).attr('data-original') || '';\n                    if (videosrc) {\n                        videoSources.push(videosrc);\n                    }\n                });\n                \n                // 方法2：source标签获取视频地址\n                const sources = $(videoContents).find('source');\n                sources.each(function () {\n                    const sourceSrc = $(this).attr('src') || $(this).attr('data-src') || $(this).attr('data-original') || '';\n                    if (sourceSrc) {\n                        videoSources.push(sourceSrc);\n                    }\n                });\n                \n                // 方法3：正则表达式获取视频地址\n                const regex = /['\"]https?[^'<>\"]+\\.(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)['\"]/ig;\n                const matches = data.match(regex);\n                if (matches) {\n                    const uniqueMatches = matches.filter((value, idx, self) => self.indexOf(value) === idx);\n    videoSources = videoSources.concat(uniqueMatches.map((match) => {\n        // 使用replace删除引号\n                const urlWithoutQuotes = match.replace(/['\"]/g, '');\n                return normalizeUrl(urlWithoutQuotes);\n                          }));\n                }\n\n                videoSources = videoSources.map(src => normalizeUrl(src.replace(/\\\\+/g, '')));\n                videoSources = [...new Set(videoSources)];\n\n                if (videoSources.length > 0) {\n                    $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                    videoSources.forEach((src, idx) => {\n                        $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                        $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                    });\n                    \n                    if (videoSources.length == 1) {\n                        $('#video-container').show();\n                        $('#video-url').show();\n                        $('#video-source-select').hide();\n                        updateVideoSource(); // 自动更新视频源\n                    } else if (videoSources.length > 1) {\n                        $('#video-container').show();\n                        $('#video-url').show();\n                        $('#video-source-select').show();\n                        updateVideoSource(); // 默认选择第一个视频源\n                    } else {\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-select').hide();\n                    }\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                    $('#video-container').hide();\n                    $('#video-url').hide();\n                    $('#video-source-select').hide();\n                }\n\n                // 标签获图片\n                const $imgContents = $(doc).find(config.imgSelector);\n                const shouldSwap = config.swapImageAttributes;\n                const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                $('#images').append(newContents).show();\n                if (newContents.length > 0) {\n                    $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                    newContents.each(function () {\n                        const imgSrc =$(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                        $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                    });\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                }\n\n                // 标签获图文\n                const textContents = $(doc).find(config.textSelector).map(function () {\n                    const $currentContents = $(this);\n                    $currentContents.find('img + br, script, video, source').remove();\n                    $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                    return $currentContents.html();\n                }).get().join('');\n                if (textContents.trim()) {\n                    $('#text').append(`<span>${textContents}</span><br>`).show();\n                    $('#messages').append(`<span>成功提取图文。</span><br>`);\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                }\n                \n                \n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            } catch (parseError) {\n                $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                handleLoadFailure(urls, index);\n            } finally {\n                if (imageBox) imageBox.viewer.update();\n                if (textBox) textBox.viewer.update();\n            }\n        },\n        error: function (jqXHR, textStatus, errorThrown) {\n            let errorMessage = `内容加载失败: ${urls[index]}`;\n            switch (textStatus) {\n                case 'timeout':\n                    errorMessage += ', 请求超时';\n                    break;\n                case 'abort':\n                    errorMessage += ', 请求被取消';\n                    break;\n                case 'parsererror':\n                    errorMessage += ', 解析响应出错';\n                    break;\n                default:\n                    errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                    break;\n            }\n            $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n            handleLoadFailure(urls, index);\n        }\n    });\n}\n\n// 处理加载失败的情况\nfunction handleLoadFailure(urls, index) {\n    if (!loadAttempts[urls[index]]) {\n        loadAttempts[urls[index]] = 1;\n    } else {\n        loadAttempts[urls[index]]++;\n    }\n    if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n        const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n        $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n        setTimeout(() => { \n            canLoadNextPage = true;\n            loadContent(index); \n        }, config.retryDelayTime);\n    } else {\n        const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n        $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n        if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n            setTimeout(() => { \n                canLoadNextPage = true;\n                loadContent(currentPageIndex + 1); \n            }, config.delayTime);\n        } else {\n            canLoadNextPage = true;\n            if (autoLoadInProgress) {\n                hideLoadingStatus();\n            }\n        }\n    }\n}\n\n// 更新视频源\nfunction updateVideoSource() {\n    const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n    const selectedSource = videoSources[selectedIndex];\n    document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n    // 设置 video-source 的 src 属性\n    const videoSourceElement = document.getElementById('video-source');\n    videoSourceElement.src = selectedSource;\n\n    // 更新 video 元素的 src 属性\n    const videoElement = document.getElementById('video-element');\n    videoElement.load();\n\n    // 添加调试信息\n    $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n}\n\n// 函数执行主体\n$(document).ready(function () {\n    imageBox = document.getElementById('images');\n    textBox = document.getElementById('text');\n    if (imageBox && textBox) {\n        new Viewer(imageBox, { title: true, interval: 2000 });\n        new Viewer(textBox, { title: true, interval: 2000 });\n    }\n\n    const totalPagesText = config.totalPagesText;\n    const totalPages = parseInt(totalPagesText, 10) || 1;\n    const baseUrl = '{{baseUrl}}';\n    \n    clearContainers();\n    $('#urls').empty();\n    $('#debug-info textarea').empty();   \n    $('#video-url').empty().hide();\n    $('#video-container').hide();\n    $('#video-source-select').empty().hide();\n    \n    buildUrls(totalPages, baseUrl);\n\n    const urlSelect = document.getElementById('url-select');\n    if (urlSelect.options.length > 0) {\n        urlSelect.value = '0'; \n        \n        if (config.autoLoading) {\n            autoLoadInProgress = true;\n            for (let i = 0; i < urls.length; i++) {\n                loadContent(i);\n            }\n        } else {\n            loadContent(0);\n        }\n    } else {\n        loadContent(0);\n    }\n\n    $('#url-select').change(function () {\n        clearContainers();\n        const selectedIndex = parseInt($(this).val());\n        loadContent(selectedIndex);\n    });\n    $('#prev-page-btn').click(function () {\n        clearContainers();\n        if (currentPageIndex > 0) {\n            loadContent(currentPageIndex - 1);\n        }\n    });\n    $('#next-page-btn').click(function () {\n        clearContainers();\n        if (currentPageIndex < urls.length - 1) {\n            loadContent(currentPageIndex + 1);\n        }\n    });\n    $('#auto-load-btn').click(function () {\n        autoLoadInProgress = true;\n        showLoadingStatus(1); \n        for (let i = currentPageIndex + 1; i < urls.length; i++) {\n            loadContent(i);\n        }\n    });\n    $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n    $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n    $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n});\n    </script>\n</body>\n</html>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "p.-1@text\n",
    "ruleTitle": "h3.-1@text",
    "singleUrl": false,
    "sortUrl": "搜索::https://czy.yzfnb6.help/cn/home/web/index.php/vod/search.html?wd={{source.getVariable()}}\n最新上传::/cn/home/web/index.php/label/new/page/{{page}}.html\n月排行::/cn/home/web/index.php/label/hot_month/page/{{page}}.html\n日排行::/cn/home/web/index.php/label/hot_day/page/{{page}}.html\n周排行::/cn/home/web/index.php/label/hot_week/page/{{page}}.html\n熟母少妇::/cn/home/web/index.php/vod/type/id/20/page/{{page}}.html\n网红直播::/cn/home/web/index.php/vod/type/id/21/page/{{page}}.html\n自拍偷拍::/cn/home/web/index.php/vod/type/id/22/page/{{page}}.html\n强奸乱伦::/cn/home/web/index.php/vod/type/id/23/page/{{page}}.html\n高清国产::/cn/home/web/index.php/vod/type/id/24/page/{{page}}.html\n韩国专区::/cn/home/web/index.php/vod/type/id/25/page/{{page}}.html\n日本有码::/cn/home/web/index.php/vod/type/id/26/page/{{page}}.html\n日本无码::/cn/home/web/index.php/vod/type/id/27/page/{{page}}.html\n欧美情色::/cn/home/web/index.php/vod/type/id/28/page/{{page}}.html\n动漫卡通::/cn/home/web/index.php/vod/type/id/29/page/{{page}}.html\n三级伦理::/cn/home/web/index.php/vod/type/id/30/page/{{page}}.html",
    "sourceComment": "By小新\n永久地址：https://bqm.avds8.com/g/\nhttps://rlblsm.yzfnb4.lat/cn/home/web/\nhttps://qrb.yzfnb3.ink/cn/home/web/\nhttps://qrb.yzfnb3.ink/cn/home/web/",
    "sourceGroup": "678",
    "sourceIcon": "",
    "sourceName": "优质粉嫩鲍",
    "sourceUrl": "https://cwi.yzfnb2.makeup"
  },
  {
    "articleStyle": 1,
    "customOrder": 10,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 12; 22041211AC Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".list@li",
    "ruleContent": "<js>\nvar v = result.match(/source\\s*=\\s*[\"']([^\"']*?\\.(m3u8|mp4)\\b[^\"']*)[\"']/i);\nvar p = v ? v[1].replace(/\\\\/g,'') : '';\nvar t = '@get:{t}';\nvar d = java.getString('[property=\"video:tag\"]@content');\nvar sign1 = java.base64Decode('44CQ5aSc5piO56m644CR55qE5pKt5pS+5Zmo');\nvar sign2 = java.base64Decode('5LuF5L6b5Liq5Lq65a2m5Lmg5L2/55So77yM5Lil56aB5YiG5Lqr44CB5YCS5Y2W5Y+K5Lu75L2V6L+d5rOV6KGM5Li677yB');\nvar sign3 = java.base64Decode('5L2/55So6ICF6Ieq6KGM5om/5ouF6aOO6Zmp5LiO6LSj5Lu7');\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.sign{background:#e9f7ff;padding:6px;border-radius:6px;margin-bottom:8px;font-size:14px;color:#1a73e8;width:100%}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"sign\" style=\"text-align:center;padding:5px 0\">\n<div>${sign1}</div>\n<div style=\"text-align:left; padding-top:4px\">\n${sign2}<br>${sign3}</div>\n</div>\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"video/mp4\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>",
    "ruleImage": "img@data-original",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "{{@@.vodlist_img@html##(\\d+)-(\\d+)-(\\d+)##$0###}} | {{@@.vodlist_img@span.0@text}}",
    "ruleTitle": ".title@text@put:{\"t\":\"@@.title@text\"}",
    "singleUrl": false,
    "sortUrl": "搜索 🔍::/s/page/{{page}}/wd/{{source.getVariable()}}/\n最新::/label/hot/by/time/page/{{page}}/\n日榜::/label/hot/by/hits_day/page/{{page}}/\n周榜::/label/hot/by/hits_week/page/{{page}}/\n月榜::/label/hot/by/hits_month/page/{{page}}/\n国产 🎞::/t/1-{{page}}/\n自拍::/t/5-{{page}}/\n主播大秀::/t/6-{{page}}/\n主播诱惑::/t/36-{{page}}/\n探花::/t/7-{{page}}/\n偷拍::/t/8-{{page}}/\n乱伦::/t/8-{{page}}/\n吃瓜::/t/10-{{page}}/\n抖阴::/t/11-{{page}}/\nAV::/t/12-{{page}}/\n福利姬::/t/20-{{page}}/\n侵犯::/t/37-{{page}}/\n日韩 🎞::/t/2-{{page}}/\n日韩自拍::/t/13-{{page}}/\n日本无码::/t/14-{{page}}/\n字幕::/t/15-{{page}}/\n解说::/t/17-{{page}}/\n换脸::/t/18-{{page}}/\n欧美 🎞::/t/3-{{page}}/\n自拍::/t/21-{{page}}/\n字幕::/t/22-{{page}}/\n伦理 🎞::/t/4-{{page}}/\n三级::/t/29-{{page}}/\n日韩::/t/30-{{page}}/\n动漫 🎞::/t/16-{{page}}/\n剧集::/t/26-{{page}}/\n3D::/t/27-{{page}}/\n次元::/t/28-{{page}}/\n另类 🎞::/t/39-{{page}}/\n同性恋::/t/38-{{page}}/\n变性::/t/40-{{page}}/\n重口味::/t/23-{{page}}/",
    "sourceComment": "<声明>\n//2025.8.10 作者：夜明空\n//源社区：https://taoba.cf\n//仅供个人学习使用，严禁分享、倒卖及任何违法行为！使用者自行承担风险与责任\n</声明>\n\n//网址更新频繁，有需要请到发布页自行更新\n//发布页：\nhttps://18j.18hu.link/mdce\n18j.vip\n18zy.vip\n51zy.vip",
    "sourceGroup": "678",
    "sourceIcon": "https://18oc.life/18link/18j/images/favicon.ico",
    "sourceName": "18J-夜明空",
    "sourceUrl": "https://18oc.life/label/sort"
  },
  {
    "articleStyle": 0,
    "contentBlacklist": "",
    "contentWhitelist": "",
    "customOrder": 11,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 8.1.0; zh-CN; MI 8 Lite Build/OPM1.171019.019) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.2.0.1100 Mobile Safari/537.36\"\n}",
    "injectJs": "",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.module-item",
    "ruleContent": "<div class=\"play_video\">\n{{@@title@text}}{{@@class.player-wrapper@all}}",
    "ruleImage": "img@data-cover",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "class.module-item-caption@text",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "最新::https://cn1.91short.com/\n推荐::/short/recommend_home_list/\n美女正妹::/short/label_related_list/Ug_pu_kskqY%3D\n91大神::/short/label_related_list/otDa4t6lDDQ%3D\n门事件::/short/label_related_list/3QW8lOdBcls%3D\n大神::/search?wd=大神\n变量搜索::/search?wd={{java.encodeURI(source.getVariable())}}\n学生::/search?wd=学生\n91::/search?wd=91\n偷情::/search?wd=偷情\n推特::/search?wd=推特\n少女::/search?wd=少女\n贫乳::/search?wd=贫乳\n口交::/search?wd=口交\n妹妹::/search?wd=妹妹\n美女::/search?wd=美女\n\n美臀巨臀::/short/label_related_list/azG9-jZfzG0%3D?title=%E7%BE%8E%E8%87%80%E5%B7%A8%E8%87%80\n后入::/search?wd=后入\n国产高清::/short/home_category_list/hd\n排行::/short/ranking_list\n国产AV::/short/label_related_list/1Bd0Zzp8D_E%3D\n大象传媒::/short/label_related_list/F16wCJ3LmWY%3D\n情趣综艺::/short/label_related_list/-0S1LwkskU4%3D\n推荐2::/film/home_recommend_list\n专题::/film/home_subject_list\n女优::/film/home_actor_list\n无码::/film/home_category_list/coded\n中字::/film/home_category_list/chinese_subtitle\n动漫::/film/home_list/jOSxa-4E27U%3D\n经典三级::/film/home_list/uZg0vDL8P8A%3D\n欧美性爱::/film/home_list/LblejiEnM6s%3D\nAV解说::/film/home_list/vJq_GzRiesQ%3D",
    "sourceComment": "翻页和封面不会\n\n永久域名 https://cn1.91short.com",
    "sourceGroup": "678",
    "sourceIcon": "https://cn1.91short.com/public/statics/logo.png",
    "sourceName": "91视频",
    "sourceUrl": "https://cn1.91short.com/",
    "style": "iframe{\n\theight:auto\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 12,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "视频",
    "sourceGroup": "678",
    "sourceIcon": "https://img.fy6b.com/2024/06/13/7ca5da52f9cc0.jpg",
    "sourceName": "红桃视频",
    "sourceUrl": "https://www.htng415.vip:9527/"
  },
  {
    "articleStyle": 0,
    "customOrder": 13,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "视频",
    "sourceGroup": "678",
    "sourceIcon": "https://img.fy6b.com/2024/06/13/7ca5da52f9cc0.jpg",
    "sourceName": "欢乐谷",
    "sourceUrl": "https://2.hlg6440d.cc/"
  },
  {
    "articleStyle": 0,
    "customOrder": 14,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "纯欲",
    "sourceIcon": "",
    "sourceName": "樱之空动漫",
    "sourceUrl": "https://www.skrcc.cc/"
  },
  {
    "articleStyle": 0,
    "customOrder": 15,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "",
    "sourceGroup": "678",
    "sourceIcon": "https://m.acgnfl.com/24/07/content_33/525867/073.webp",
    "sourceName": "蜜桃视频",
    "sourceUrl": "https://www.mt314iu.vip:9527/"
  },
  {
    "articleStyle": 0,
    "customOrder": 16,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "678",
    "sourceIcon": "https://mmjs.1vkx.cn/public/1/assets/images/header/logo.png",
    "sourceName": "猫咪社区（请制作 不要VIP分类）",
    "sourceUrl": "https://www.bec9693b2cfd.com/shipin/list-%E4%BA%9A%E6%B4%B2%E6%97%A0%E7%A0%81-1.html"
  },
  {
    "articleStyle": 2,
    "customOrder": 17,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\",\n  \"Referer\": \"https://www.yinghua228.com/\",\n  \"Cookie\": \"ad_dismiss=1\"\n}",
    "injectJs": "##<div[^>]*?style[^>]*?fixed[^>]*?bottom[^>]*?>[\\s\\S]*?<\\/div>\n##<div[^>]*?z-index: 2147483647[\\s\\S]*?<\\/div>\n##<a[^>]*?href[^>]*?\\.com[^>]*?><img[^>]*?src[^>]*?>[\\s\\S]*?<\\/a>\n##<div[^>]*?>实时更新[\\s\\S]*?免费看片[\\s\\S]*?<\\/div>\n",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".col-md-6||ul.col-pd@li",
    "ruleContent": "",
    "ruleImage": "a@data-original",
    "ruleLink": "a@href",
    "ruleNextPage": "text.下一页@href||page",
    "ruleTitle": "a@text",
    "singleUrl": false,
    "sortUrl": "日本动漫::/index.php/vod/type/id/20.html\n国产动漫::/index.php/vod/type/id/21.html\n欧美动漫::/index.php/vod/type/id/22.html\n动漫电影::/index.php/vod/type/id/23.html\n其他动漫::/index.php/vod/type/id/24.html\n里番::/index.php/vod/show/by/hits/id/26.html\n搜索::/index.php/vod/search/wd/{{source.getVariable()}}",
    "sourceGroup": "动漫",
    "sourceIcon": "https://tse2.mm.bing.net/th/id/OIP.0w67-qvgh_VqOurfrC377AHaEK?dpr=3.5&pid=ImgDetMain&o=7&rm=3",
    "sourceName": "樱花动漫",
    "sourceUrl": "https://www.yinghua228.com/"
  },
  {
    "articleStyle": 1,
    "customOrder": 18,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".anime-card||.col!0:1:2:3",
    "ruleContent": "<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no\"/>\n<script src=\"//cdn.staticfile.org/jquery/2.2.4/jquery.min.js\"></script>\n<script src=\"//cdn.staticfile.org/dplayer/1.25.0/DPlayer.min.js\"></script>\n<link rel =\"stylesheet\" href = \"//cdn.staticfile.org/dplayer/1.25.0/DPlayer.min.css\">\n</head>\n\n\n<div class =\"dz\" width=\"100%\"></div>\n\n<div class=\"dplayer\" id=\"dplayer\" style=\"width:100%;height:300\"></div>\n\n<div id=\"tab\"><ul>{{@@class.nav-pills@html}}</ul></div>\n{{@@class.anime-episode@html}}\n\n\n<script>\nfunction video(url){\n$.get(url,function(result){json=result.match(/var player.*?=(\\{.*\\})/)[1];\nsrc= JSON.parse(json).url;\nloadding='https://ftp.bmp.ovh/imgs/2021/05/5c31747aeb7bff4e.gif'\n//假如提取到的视频带 mp4|m3u8 就采用dp播放器播放\nif(src.match(/mp4|m3u8/)){\nvar dplayer = new DPlayer({element:document.getElementById(\"dplayer\"),autoplay: true,lang: 'zh-cn',video:{url:src,pic:loadding}});}else\n//直接提取的前面带https://jx.quanmingjiexi.com/?url= 进行播放\n{\nsrc=\"https://jx.quanmingjiexi.com/?url=\"+src;\niframe='<iframe src=\"'+src+'\" width=\"350\" height=\"280\" id=\"cciframe\" scrolling=\"no\"allowfullscreen=\"true\" webkitallowfullscreen=\"true\" autoplay=\"true\" mozallowfullscreen=\"true\"></iframe>'\n\n$(\".dplayer\").html(iframe)\n}\n$(\".dz\").html(src);\n});\n}\n\n(function(){\n$(\".anime-episode\").hide();\n$(\".anime-episode:eq(0)\").show();\n$(\"li:eq(0)\").addClass(\"active\")})();\n\n$(\"button\").click(function(){\n$(\"button\").removeClass(\"upBtn\");\n$(this).addClass(\"upBtn\");\nurl='https://acgfta.com/'+$(this).val();\nvideo(url)\n});\n\n$(\"button\").click(function(){\n$(\"button\").removeClass(\"upBtn\");\n$(this).addClass(\"upBtn\");\nurl='https://acgfta.com/'+$(this).val();\nvideo(url);\n});\n\n$(\"li\").click(function(){\n$(\"li\").removeClass(\"active\");\n$(this).addClass(\"active\");\nindex=$(this).index();\n$(\".anime-episode\").hide();\n$(\".anime-episode:eq(\"+index+\")\").show();\n})\n</script>\n</html>\n\n@js:\nresult = result.replace(/<a.*?href=\"([^\"]+)\">([^<]+)<\\/a>/g,'<button value=\"$1\">$2</button>').replace(/<a/g,'<li').replace(/<\\/a>/g,'</li>')",
    "ruleImage": "img@data-src||img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": ".mb-0@text||p@text",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "\n搜索::https://acgfta.com/search/page/{{page}}/wd/{{source.getVariable()}}.html\n最近更新::/ft/recent/file/recent/page/{{page}}.html\n日榜::https://acgfta.com/ft/leaderboard.html?l=day\n周榜::https://acgfta.com/ft/leaderboard.html?l=week\n月榜::https://acgfta.com/ft/leaderboard.html?l=month\n剧场版::https://acgfta.com/ft/top-movie.html",
    "sourceComment": "https://fantuantv.com/",
    "sourceGroup": "动漫,影视",
    "sourceIcon": "https://acgfta.com/template/ft-v2/icon/ft-logo-f.png",
    "sourceName": "饭团动漫",
    "sourceUrl": "https://acgfta.com/",
    "style": "#tab{\nheight:75px;\nmargin-bottom:8px;\n}\n\n.dz {\npadding:5px 0;\noverflow:scroll;\nbackground:#1C1B1E;color:#D3D3D3;;\n}\n\nul{\nmargin:0;\npadding:0;\n}\n\n#tab li {\nfont-size:35px;\nlist-style:none;\nfloat:left;\nheight:30px;\nmargin-right:5px;\ncolor:#D3D3D3;\nline-height:35px;\nmargin-bottom:10px;\n}\n\n#tab li.active {\n  color: #FF8C00;\n  border-top: 2px solid #FF8C00; \n  position: relative;\n  margin-top: -2px; \n}\n\nbutton{\noutline:none;\nheight:35px; \nborder:1px solid #1C1B1E ;\nborder-radius:8px;\nmargin-bottom:8px;\nbackground:#1C1B1E;color:#A9A9A9;\nvertical-align:middle; \nwidth:75px;\noverflow:scroll\n}\n\nbutton.upBtn{\nborder:1px solid #FF8C00 ;\nbackground-color:#555555; \n}\n\nbody{\nmargin:0;\nbackground-color: #333333; \n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 19,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\": \"Mozilla/5.0 (Linux; Android 9) Mobile Safari/537.36\",\"referer\": \"{{baseUrl}}\"\n\t}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".picstyle ul li||.threadlist ul li",
    "ruleContent": ".bz_message_table@all&&link@all&&script@all",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "span!0@text##\\s##😁",
    "ruleTitle": "span.0@text",
    "singleUrl": false,
    "sortUrl": "网友自拍::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=6&mobile=2\n有声小说::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=45&mobile=2\n国产自拍::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=18&mobile=2\n校园春色::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=14&mobile=2\n搜索::https://qp.tangse95.one/search.php?mod=forum&searchid=243&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw={{(source.getVariable()==''||source.getVariable()==null)?source.setVariable('妹妹'):\"\"}}{{source.getVariable()}}&mobile=2",
    "sourceComment": "https://96tang.club",
    "sourceGroup": "678",
    "sourceIcon": "https://qp.tangse95.one/template/banzhuan_touch000/images/logo.png",
    "sourceName": "69bbs",
    "sourceUrl": "https://qp.tangse95.one"
  },
  {
    "articleStyle": 3,
    "customOrder": 24,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 1774018195635,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.ucontent@li",
    "ruleContent": "<js>\n// 提取m3u8链接\nvar m3u8Match = result.match(/\"([^\"]*?index\\.m3u8[^\"]*)\"/i) \n             || result.match(/'([^']*?index\\.m3u8[^']*)'/i);\n\nvar p = '';\nif (m3u8Match) {\n    var u = m3u8Match[1]\n        .replace(/\\\\\\//g, '/')      // \\/ → /\n        .replace(/\\\\\\\\/g, '\\\\')      // \\\\ → \\\n        .trim();\n    \n    // 补全协议\n    if (u.startsWith('//')) {\n        u = 'https:' + u;\n    } else if (!u.startsWith('http')) {\n        // 需要基础URL，这里假设当前页面URL在result中或需要传入\n        u = 'https://' + u;  // 简化处理，或根据实际需求调整\n    }\n    p = u;\n}\n\n// 标题：从 span.tx-flex-sh > a 的 title 属性获取\nvar t = java.getString('.single-strong @text') || '未知标题';\n\n// 标签：从 meta[name=\"description\"] 的 content 获取  \nvar b = java.getString('meta[name=\"description\"]@content') || '';\nvar updateIndex = b.indexOf('更新时间');\nif (updateIndex !== -1) {\nvar d = b.substring(updateIndex);  // 保留\"更新时间\"及之后的内容\n}\n\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"application/x-mpegURL\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>\n",
    "ruleImage": "class.cover@style\n<js>\nvar img=\"\";\nvar pics = result.split(\"background-image:url('\")[1];\nvar picc = pics.split(\"')\")[0];\n\nimg= picc;\n</js>",
    "ruleLink": "a@href",
    "ruleNextPage": ".text-center@a.-2 @href",
    "rulePubDate": "class.time@text",
    "ruleTitle": "class.ctitle@text",
    "singleUrl": false,
    "sortUrl": "情侣::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-SwmVnh7DhV5fti8rANEOnA%3D%3D.html\n真实自拍::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-sxFQ8fIfXNi%2F7h%2FTa%2BVqaQ%3D%3D-2.html?k=%E7%9C%9F%E5%AE%9E%E8%87%AA%E6%8B%8D{{page}}\n艳照门::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-sWJNZL81qog%2FV0kqE7K4xg%3D%3D.html\n韩国::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-qYmLQw%2Bg9uPbbhsqBrcq2Q%3D%3D.html\n水滴::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-WuIS%2BITZ25HLRd6XZW%2FOxA%3D%3D.html\r\n91大神::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-QOe0y05XimbXo8PhBayueA%3D%3D.html\r\n重口::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-DEbPb09hbgP9k6scQg63sw%3D%3D.html\r\n国产3P::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-GWLkyuIEPQDeXCqVFoTAyA%3D%3D.html\r\n寻花::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-rKKopyjdoS20rSOUxh3zJQ%3D%3D.html\r\n探花::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-hgzJx3zpIIxdOEMcWHz2Tg%3D%3D.html\r\n百度云泄密::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-2lC5aEeJd1u2dqQ%2FmdRIVQ%3D%3D.html\r\n叫爸爸::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-y8uZo8HwYsn8SvxL1UCb0g%3D%3D.html\r\n人妖::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-%2BbRZ5xmyn24x0B7zvVH51A%3D%3D.html\r\n双飞::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-5thccQpFuzxfZnnatss5wQ%3D%3D.html\r\n援交::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-eYLQqyMZKX0naw7R9aFiUQ%3D%3D.html\n高潮::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-vxgb5Mhrcm45%2BvJ3jR%2FK5w%3D%3D.html\n云盘泄密::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-Uk8R2RDqogK686unextaRA%3D%3D.html\n百度云::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-5ZDf525skrVIknBGx5lmFQ%3D%3D.html\n母狗::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-6%2BdjspHsB86vEMDYR8vX0g%3D%3D.html\nSWAG::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-dth6EA%2B8L38m3Nca%2FQFL2Q%3D%3D.html\n灌醉::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-CgBbOg15Du4JraAsWNBNjQ%3D%3D.html\n乱伦::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-62iSChVBLwn9fxJe4R2eFw%3D%3D.html\n台湾::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-SxxaH9csNSivTS3P7gZoFg%3D%3D.html\n双洞::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-PsCugwsYtwmQ4ClpO%2FoDjg%3D%3D.html\n黑人::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-Jo0QDMWSz9h5NGQAE9Q6VQ%3D%3D.html\n模特::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-rkt3PZIjjsRwGyupHFDGaA%3D%3D.html\n明星::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-QYz3d2N9zvH04hLT6JKzUQ%3D%3D.html\n外围::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-IMWBtdaYv%2Fjxugi4%2BHhZ4A%3D%3D.html\n平胸::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-6KvMA5igEDec1T31X3GJzw%3D%3D.html\n萝莉::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-z90Pw6%2BPlSZL6DsNDa3HDw%3D%3D.html\n偷拍::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-kA%2FTlS7qmOLRGkgF%2Fn0INQ%3D%3D.html\n强奸::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-rkfTz9iRzCZ2YZ9BgpLQPQ%3D%3D.html\n孕妇::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-T5nxv4JMS0RuKayEmUskBg%3D%3D.html\n露出::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-cWH28OVOk5XusdgQlQ42DA%3D%3D.html\n学生::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-S4a6Y3Jh0ahrOuC%2BnPWraw%3D%3D.html\n厕所::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-OBoF9jSv3ssvCWLzi0ZUow%3D%3D.html\n丝袜::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-HZAcWdDll929vjXxi%2Fis9Q%3D%3D.html\n麻豆::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-AAzZLiir3JVotigCPt5yyw%3D%3D.html\n剧情::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-vX2kdY6Bji%2BZDgJC3Uom8Q%3D%3D.html\n少妇::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-WvRQ3zJ6x0Iddtyv%2F3kQ7Q%3D%3D.html\n初中::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-7zlfwQmL2OCGlwAMuO9PkQ%3D%3D.html\n户外::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-P5xjiQfnsJ62f4Hz3RGbVg%3D%3D.html\n巨乳::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-B5Vt3CkBgs3beFwmKholzg%3D%3D.html\n按摩师::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-JM5fp9rXtfWRGHxSh8zS5w%3D%3D.html\n抖音::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-zFa%2FHlIv9P7FSIj1wrTPLw%3D%3D.html\n极品::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-IuN82Iai2xUOVHMMANfnOA%3D%3D.html\n勾引::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-vh64QmiM3Mo2OcKdxDQdsQ%3D%3D.html\n调教::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-%2BQeUgBv85wKceg%2FDI5Ak0w%3D%3D.html\n对白::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-%2B9ccuxdMZa3%2FJ8LzxMB6qg%3D%3D.html\n喷水::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-1oRbUL2Xn9xhEmXGx6GsQA%3D%3D.html\n白虎::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-UKNntcz6aNUmZxjkxJCFPQ%3D%3D.html\n肛交::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-nWw6UIl046QAjrvoKFS2Rw%3D%3D.html\n双洞::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-PsCugwsYtwmQ4ClpO%2FoDjg%3D%3D.html\n宿舍::https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com/search-0-1-12%2BMLChLTiqIX3cSShXxtg%3D%3D.html",
    "sourceComment": "搜索被加密了，不加搜索\n永久地址：https://jfgso.xyz\n\n260320修复",
    "sourceGroup": "678",
    "sourceIcon": "http://img5.adesk.com/68d0f78fab9725cae3c22331?imageMogr2/thumbnail/!1080x1920r/gravity/Center/crop/1080x1920&sign=ec76e92a65142f3c04f056faeaa9c918&t=69bd67e1",
    "sourceName": "集芳阁云搜",
    "sourceUrl": "https://xn---jifanggecom-ud8sv658aesydp6a.xn--9kq80g37uthu.com",
    "style": ".dz {\nwidth:100%; \npadding:5px 0;\nborder:solid; \nborder-radius:5px;\noverflow:scroll;\nbackground-color:#dddddd\n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 34,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "legado",
    "sourceIcon": "http://mmbiz.qpic.cn/mmbiz_png/hpfMV8hEuL2eS6vnCxvTzoOiaCAibV6exBzJWq9xMic9xDg3YXAick87tsfafic0icRwkQ5ibV0bJ84JtSuxhPuEDVquA/0?wx_fmt=png",
    "sourceName": "小说拾遗",
    "sourceUrl": "snssdk1128://user/profile/562564899806367"
  },
  {
    "articleStyle": 0,
    "customOrder": 40,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "legado",
    "sourceIcon": "https://cdn.jsdelivr.net/gh/gedoor/legado@master/app/src/main/res/mipmap-hdpi/ic_launcher.png",
    "sourceName": "烏雲净化",
    "sourceUrl": "https://www.lanzoux.com/b0bw8jwoh"
  },
  {
    "articleStyle": 0,
    "customOrder": 41,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "七猫",
    "sourceUrl": "https://www.33ccpp.com/"
  },
  {
    "articleStyle": 2,
    "concurrentRate": "",
    "customOrder": 46,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.zhubo",
    "ruleContent": "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n<script src=\"http://bilibili.github.io/flv.js/dist/flv.js\"></script>\n</head>\n<body>\n\t\t\t<video id=\"player1\"  autoplay=\"autoplay\" preload=\"auto\" muted controls=\"controls\">\n\t\t</video>\n\t\t<p>\n    <button onclick=\"enableMute()\" type=\"button\">关闭声音</button>\n\n    <button onclick=\"disableMute()\" type=\"button\">打开声音</button>\n\n</p> \n<div>\n直播链接:{{baseUrl.replace(/zhibo/,\"flv\").replace(/http:\\/\\/api.hclyz.com:81/,\"不可播放rtmp:/\")}}\n</div>\n</body>\n</html>\n<script>\n    if (flvjs.isSupported()) {\n        var videoElement = document.getElementById('player1');\n\t\tvar flvPlayer = flvjs.createPlayer({\n            type: 'flv', \n            url: '{{baseUrl.replace(/zhibo/,\"flv\").replace(/http:\\/\\/api.hclyz.com:81/,\"rtmp://\")}}',\n     });\n\t\tflvPlayer.attachMediaElement(videoElement);\n\t\tflvPlayer.load();\n\t\t//flvPlayer.play();\n    }\n</script>\n <script>\n\nvar myVid = document.getElementById(\"player1\");\n\nfunction enableMute() { \n\n    myVid.muted = true;\n\n} \n\nfunction disableMute() { \n\n    myVid.muted = false;\n\n} \n</script> ",
    "ruleDescription": "",
    "ruleImage": "$.img",
    "ruleLink": "$.address@js:result\n.replace(/\\.flv/,\".zhibo\")\n.replace(/rtmp:\\//,\"\")",
    "rulePubDate": "",
    "ruleTitle": "$.title",
    "singleUrl": false,
    "sortUrl": "偶遇::http://api.hclyz.com:81/mf/jsonouyu.txt\n依依::http://api.hclyz.com:81/mf/jsonyiyi.txt\n夜色::http://api.hclyz.com:81/mf/jsonyese.txt\n亚米::http://api.hclyz.com:81/mf/jsonyami.txt\n色趣::http://api.hclyz.com:81/mf/jsonsequ.txt\n咪狐::http://api.hclyz.com:81/mf/jsonmihu.txt\n夜律::http://api.hclyz.com:81/mf/jsonyelu.txt\n暗语::http://api.hclyz.com:81/mf/jsonanyu.txt\n咪咪::http://api.hclyz.com:81/mf/jsonmimi.txt\n糯米::http://api.hclyz.com:81/mf/jsonnuomi.txt\n苦瓜::http://api.hclyz.com:81/mf/jsonkugua.txt\n蝴蝶::http://api.hclyz.com:81/mf/jsonhudie.txt\n云鹿::http://api.hclyz.com:81/mf/jsonyunlu.txt\n付宝::http://api.hclyz.com:81/mf/jsonfubao.txt\n菠萝::http://api.hclyz.com:81/mf/jsonboluo.txt\n夜艳::http://api.hclyz.com:81/mf/jsonyeyan.txt\n二嫂::http://api.hclyz.com:81/mf/jsonersao.txt\n土豪::http://api.hclyz.com:81/mf/jsontuhao.txt\n盘他::http://api.hclyz.com:81/mf/jsonpanta.txt\n美夕::http://api.hclyz.com:81/mf/jsonmeixi.txt\n坦克::http://api.hclyz.com:81/mf/jsontanke.txt\n蜜桃::http://api.hclyz.com:81/mf/jsonmitao.txt\n她秀::http://api.hclyz.com:81/mf/jsontaxiu.txt\n金鱼::http://api.hclyz.com:81/mf/jsonjinyu.txt\n浴火::http://api.hclyz.com:81/mf/jsonyuhuo.txt\n套路::http://api.hclyz.com:81/mf/jsontaolu.txt\n日出::http://api.hclyz.com:81/mf/jsonrichu.txt\n桃花::http://api.hclyz.com:81/mf/jsontaohua.txt\nLOVE::http://api.hclyz.com:81/mf/jsonLOVE.txt\n久久::http://api.hclyz.com:81/mf/jsonjiujiu.txt\n杏趣::http://api.hclyz.com:81/mf/jsonxingqu.txt\n媚颜::http://api.hclyz.com:81/mf/jsonmeiyan.txt\n灰灰::http://api.hclyz.com:81/mf/jsonhuihui.txt\n爱零::http://api.hclyz.com:81/mf/jsonailing.txt\n爱恋::http://api.hclyz.com:81/mf/jsonailian.txt\n杏播::http://api.hclyz.com:81/mf/jsonxingbo.txt\n金呗::http://api.hclyz.com:81/mf/jsonjinbei.txt\nmoon::http://api.hclyz.com:81/mf/jsonmoon.txt\n夜纯::http://api.hclyz.com:81/mf/jsonyechun.txt\n彩云::http://api.hclyz.com:81/mf/jsoncaiyun.txt\n妞妞::http://api.hclyz.com:81/mf/jsonniuniu.txt\n艳后::http://api.hclyz.com:81/mf/jsonyanhou.txt\n蓝猫::http://api.hclyz.com:81/mf/jsonlanmao.txt\n情趣::http://api.hclyz.com:81/mf/jsonqingqu.txt\n翠鸟::http://api.hclyz.com:81/mf/jsoncuiniao.txt\n糖果::http://api.hclyz.com:81/mf/jsontangguo.txt\n么么哒::http://api.hclyz.com:81/mf/jsonmemeda.txt\n豹娱l::http://api.hclyz.com:81/mf/jsonbaoyul.txt\n卡哇伊::http://api.hclyz.com:81/mf/jsonkawayi.txt\n小妖::http://api.hclyz.com:81/mf/jsonxiaoyao.txt\n幽梦::http://api.hclyz.com:81/mf/jsonyoumeng.txt\n风流::http://api.hclyz.com:81/mf/jsonfengliu.txt\n樱桃::http://api.hclyz.com:81/mf/jsonyingtao.txt\n享色::http://api.hclyz.com:81/mf/jsonxiangse.txt\n娇媚::http://api.hclyz.com:81/mf/jsonjiaomei.txt\n爱爱你::http://api.hclyz.com:81/mf/jsonaiaini.txt\n花房::http://api.hclyz.com:81/mf/jsonhuafang.txt\n卡路里::http://api.hclyz.com:81/mf/jsonkaluli.txt\n名流::http://api.hclyz.com:81/mf/jsonmingliu.txt\n倾心::http://api.hclyz.com:81/mf/jsonqingxin.txt\n樱花::http://api.hclyz.com:81/mf/jsonyinghua.txt\n飘雪::http://api.hclyz.com:81/mf/jsonpiaoxue.txt\n入巷::http://api.hclyz.com:81/mf/jsonruxiang.txt\n蝶恋::http://api.hclyz.com:81/mf/jsondielian.txt\n彩虹::http://api.hclyz.com:81/mf/jsoncaihong.txt\n奥斯卡::http://api.hclyz.com:81/mf/jsonaosika.txt\n皇后::http://api.hclyz.com:81/mf/jsonhuanghou.txt\n牵手::http://api.hclyz.com:81/mf/jsonqianshou.txt\n台妹l::http://api.hclyz.com:81/mf/jsontaimeil.txt\n夜妖姬::http://api.hclyz.com:81/mf/jsonyeyaoji.txt\n一直播::http://api.hclyz.com:81/mf/jsonyizhibo.txt\n玲珑::http://api.hclyz.com:81/mf/jsonlinglong.txt\n橙秀::http://api.hclyz.com:81/mf/jsonchengxiu.txt\n黄瓜::http://api.hclyz.com:81/mf/jsonhuanggua.txt\n颜如玉::http://api.hclyz.com:81/mf/jsonyanruyu.txt\n蛟龙::http://api.hclyz.com:81/mf/jsonjiaolong.txt\n好基友::http://api.hclyz.com:81/mf/jsonhaojiyou.txt\n夜女郎::http://api.hclyz.com:81/mf/jsonyenulang.txt\n娇喘::http://api.hclyz.com:81/mf/jsonjiaochuan.txt\n小妲己::http://api.hclyz.com:81/mf/jsonxiaodaji.txt\n花蝴蝶::http://api.hclyz.com:81/mf/jsonhuahudie.txt\n尤物岛::http://api.hclyz.com:81/mf/jsonyouwudao.txt\n77直播::http://api.hclyz.com:81/mf/json77zhibo.txt\n十八禁::http://api.hclyz.com:81/mf/jsonshibajin.txt\n蝴蝶飞::http://api.hclyz.com:81/mf/jsonhudiefei.txt\n喜欢你::http://api.hclyz.com:81/mf/jsonxihuanni.txt\n兔女郎::http://api.hclyz.com:81/mf/jsontunulang.txt\n双碟::http://api.hclyz.com:81/mf/jsonshuangdie.txt\n约直播::http://api.hclyz.com:81/mf/jsonyuezhibo.txt\n九尾狐::http://api.hclyz.com:81/mf/jsonjiuweihu.txt\n红妆::http://api.hclyz.com:81/mf/jsonhongzhuang.txt\n花仙子::http://api.hclyz.com:81/mf/jsonhuaxianzi.txt\n持久男::http://api.hclyz.com:81/mf/jsonchijiunan.txt\n丽柜厅::http://api.hclyz.com:81/mf/jsonliguiting.txt\n桃花运::http://api.hclyz.com:81/mf/jsontaohuayun.txt\n903娱乐::http://api.hclyz.com:81/mf/json903yule.txt\n视觉秀::http://api.hclyz.com:81/mf/jsonshijuexiu.txt\n芒果派::http://api.hclyz.com:81/mf/jsonmangguopai.txt\n七仙女s::http://api.hclyz.com:81/mf/jsonqixiannus.txt\n夜来香::http://api.hclyz.com:81/mf/jsonyelaixiang.txt\n星宝贝::http://api.hclyz.com:81/mf/jsonxingbaobei.txt\n小蜜蜂::http://api.hclyz.com:81/mf/jsonxiaomifeng.txt\n小棉袄::http://api.hclyz.com:81/mf/jsonxiaomianao.txt\n小辣椒::http://api.hclyz.com:81/mf/jsonxiaolajiao.txt\n小仙女::http://api.hclyz.com:81/mf/jsonxiaoxiannu.txt\n兰桂坊::http://api.hclyz.com:81/mf/jsonlanguifang.txt\n花果山::http://api.hclyz.com:81/mf/jsonhuaguoshan.txt\n招财猫::http://api.hclyz.com:81/mf/jsonzhaocaimao.txt\n心之恋::http://api.hclyz.com:81/mf/jsonxinzhilian.txt\n睡美人::http://api.hclyz.com:81/mf/jsonshuimeiren.txt\n小花螺::http://api.hclyz.com:81/mf/jsonxiaohualuo.txt\n小天使::http://api.hclyz.com:81/mf/jsonxiaotianshi.txt\n小红帽::http://api.hclyz.com:81/mf/jsonxiaohongmao.txt\n樱花雨i::http://api.hclyz.com:81/mf/jsonyinghuayui.txt\n小萌猪::http://api.hclyz.com:81/mf/jsonxiaomengzhu.txt\n小坏蛋::http://api.hclyz.com:81/mf/jsonxiaohuaidan.txt\n小性感::http://api.hclyz.com:81/mf/jsonxiaoxinggan.txt\n红浪漫::http://api.hclyz.com:81/mf/jsonhonglangman.txt\n蚊香社::http://api.hclyz.com:81/mf/jsonwenxiangshe.txt\n蓝月亮::http://api.hclyz.com:81/mf/jsonlanyueliang.txt\n小精灵::http://api.hclyz.com:81/mf/jsonxiaojingling.txt\n红高粱::http://api.hclyz.com:81/mf/jsonhonggaoliang.txt\n小天仙::http://api.hclyz.com:81/mf/jsonxiaotianxian.txt",
    "sourceComment": "某个软件的聚合直播\nrtmp的手机网页应该是无法播放\nmp4的都是广告没管",
    "sourceGroup": "678",
    "sourceIcon": "https://img2.baidu.com/it/u=3810767422,2486090729&fm=253&fmt=auto&app=138&f=PNG?w=192&h=192",
    "sourceName": "H直播大全",
    "sourceUrl": "http://api.hclyz.com:81",
    "style": "video{\nwidth:100%;\nheight:auto;}"
  },
  {
    "articleStyle": 0,
    "customOrder": 57,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.ucontent@li",
    "ruleContent": "class.s-tab-main@html",
    "ruleImage": "@js:\"https://i.postimg.cc/htVZ5jk1/1665570814797.png\"",
    "ruleLink": "tag.a@href",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "class.time@text",
    "ruleTitle": "class.ctitle@text",
    "singleUrl": true,
    "sortUrl": "情侣::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=SwmVnh7DhV5fti8rANEOnA%3D%3D\n真实自拍::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=sxFQ8fIfXNi%2F7h%2FTa%2BVqaQ%3D%3D\n艳照门::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=sWJNZL81qog%2FV0kqE7K4xg%3D%3D\n韩国::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=qYmLQw%2Bg9uPbbhsqBrcq2Q%3D%3D\n91大神::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=WuIS%2BITZ25HLRd6XZW%2FOxA%3D%3D\n重口::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=DEbPb09hbgP9k6scQg63sw%3D%3D\n国产3P::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=GWLkyuIEPQDeXCqVFoTAyA%3D%3D\n寻花::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=rKKopyjdoS20rSOUxh3zJQ%3D%3D\n探花::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=hgzJx3zpIIxdOEMcWHz2Tg%3D%3D\n百度云泄露::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=2lC5aEeJd1u2dqQ%2FmdRIVQ%3D%3D\n叫爸爸::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=y8uZo8HwYsn8SvxL1UCb0g%3D%3D\n双飞::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=5thccQpFuzxfZnnatss5wQ%3D%3D\n援交::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=eYLQqyMZKX0naw7R9aFiUQ%3D%3D\n高潮::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=vxgb5Mhrcm45%2BvJ3jR%2FK5w%3D%3D\n云盘泄密::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=Uk8R2RDqogK686unextaRA%3D%3D\n百度云::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=5ZDf525skrVIknBGx5lmFQ%3D%3D\n母狗::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=6%2BdjspHsB86vEMDYR8vX0g%3D%3D\nSWAG::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=dth6EA%2B8L38m3Nca%2FQFL2Q%3D%3D\n灌醉::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=CgBbOg15Du4JraAsWNBNjQ%3D%3D\n乱伦::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=62iSChVBLwn9fxJe4R2eFw%3D%3D\n台湾::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=SxxaH9csNSivTS3P7gZoFg%3D%3D\n双洞::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=PsCugwsYtwmQ4ClpO%2FoDjg%3D%3D\n黑人::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=Jo0QDMWSz9h5NGQAE9Q6VQ%3D%3D\n模特::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=rkt3PZIjjsRwGyupHFDGaA%3D%3D\n明星::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=QYz3d2N9zvH04hLT6JKzUQ%3D%3D\n外围::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=IMWBtdaYv%2Fjxugi4%2BHhZ4A%3D%3D\nE罩::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=est3SVEmdTex%2Fvm3L4vYPw%3D%3D\n平胸::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=6KvMA5igEDec1T31X3GJzw%3D%3D\n萝莉::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=z90Pw6%2BPlSZL6DsNDa3HDw%3D%3D\n偷拍::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=kA%2FTlS7qmOLRGkgF%2Fn0INQ%3D%3D\n强奸::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=rkfTz9iRzCZ2YZ9BgpLQPQ%3D%3D\n孕妇::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=T5nxv4JMS0RuKayEmUskBg%3D%3D\n露出::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=cWH28OVOk5XusdgQlQ42DA%3D%3D\n学生::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=S4a6Y3Jh0ahrOuC%2BnPWraw%3D%3D\n厕所::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=OBoF9jSv3ssvCWLzi0ZUow%3D%3D\n丝袜::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=HZAcWdDll929vjXxi%2Fis9Q%3D%3D\n麻豆::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=AAzZLiir3JVotigCPt5yyw%3D%3D\n剧情::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=vX2kdY6Bji%2BZDgJC3Uom8Q%3D%3D\n少妇::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=WvRQ3zJ6x0Iddtyv%2F3kQ7Q%3D%3D\n初中::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=7zlfwQmL2OCGlwAMuO9PkQ%3D%3D\n户外::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=P5xjiQfnsJ62f4Hz3RGbVg%3D%3D\n巨乳::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=B5Vt3CkBgs3beFwmKholzg%3D%3D\n按摩师::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=JM5fp9rXtfWRGHxSh8zS5w%3D%3D\n抖音::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=zFa%2FHlIv9P7FSIj1wrTPLw%3D%3D\n极品::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=IuN82Iai2xUOVHMMANfnOA%3D%3D\n勾引::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=vh64QmiM3Mo2OcKdxDQdsQ%3D%3D\n调教::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=%2BQeUgBv85wKceg%2FDI5Ak0w%3D%3D\n对白::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=%2B9ccuxdMZa3%2FJ8LzxMB6qg%3D%3D\n喷水::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=1oRbUL2Xn9xhEmXGx6GsQA%3D%3D\n白虎::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=UKNntcz6aNUmZxjkxJCFPQ%3D%3D\n肛交::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=nWw6UIl046QAjrvoKFS2Rw%3D%3D\n宿舍::https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/search.php?k=12%2BMLChLTiqIX3cSShXxtg%3D%3D",
    "sourceComment": "",
    "sourceGroup": "678",
    "sourceIcon": "https://i.postimg.cc/tCs5Fb8F/1664101587780.png",
    "sourceName": "©集芳阁®",
    "sourceUrl": "https://xn---jfgsoucom-xo3rt4olv7g07mz39a.jifangge-club.com/"
  },
  {
    "articleStyle": 0,
    "customOrder": 77,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "1阅读书源交流群:1015950952。\n2该订阅源由源仓库用户ID:15839搜集整理\n3订阅源所有链接均经过测试可以正常使用，如载入失败请自行挂梯。如依然无法正常使用请自行删除。\n3由于只是搜集整理 所有内容取自网络 本人不承担任何责任及后果 如有侵害 请第一时间联系阅读书源交流群:1015950952的群主要求删除并致歉。\n4订阅源内容取自网络，仅供学习参考 请在获取后24小时内删除。",
    "sourceGroup": "678",
    "sourceIcon": "https://img1.baidu.com/it/u=3097007933,3775451098&fm=253&fmt=auto&app=120&f=JPEG?w=1200&h=750",
    "sourceName": "135个R18订阅源（源注释必看）",
    "sourceUrl": "yuedu://rsssource/importonline?src=https://jt12.de/SYV2/2023/03/17/0/02/42/167898256264133da2869d4.json"
  },
  {
    "articleStyle": 0,
    "customOrder": 101,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "每日大赛",
    "sourceUrl": "https://www.njttvylz.cc"
  },
  {
    "articleStyle": 1,
    "customOrder": 168,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 13; 2211133C Build/TKQ1.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Mobile Safari/537.36\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".grid_post-box",
    "ruleContent": "@js:\nlet images = [];\nlet regex = /<a\\s[^>]*?href\\s*=\\s*['\"]([^'\"]+\\.(?:jpe?g|png|gif|webp|bmp))['\"][^>]*>\\s*<img[^>]*>/gi;\nlet match;\nwhile ((match = regex.exec(result)) !== null) {\n    let realUrl = match[1];\n    images.push(`<img src=\"${realUrl}\" style=\"max-width:100%;display:block;margin:0px auto;\">`);\n}\nlet imageContent = images.join('');\nlet p = `\n<title>🏄Mengteen</title>\n<style>\n  * {margin: 0; padding: 0}\n  img {width: 100%;height: auto}\n  /* Mengteen阅图基础UI */\n  /* 返回按钮基础 */\n  #backToTopBtn {\n    display: none;\n    position: fixed;\n    bottom: 36px;\n    right: 18px;\n    z-index: 999;\n    border: none;\n    outline: none;\n    background: linear-gradient(135deg, #ADD8E6, #FFF8DC);\n    color: white;\n    cursor: pointer;\n    padding: 2px;\n    border-radius: 10%;\n    font-size: 18px;\n    box-shadow: 0 8px 32px rgba(70, 130, 180, 0.3);\n    transition: all 0.3s ease;\n    backdrop-filter: blur(4px);\n    border: 1px solid rgba(255, 255, 255, 0.3);\n  }\n  \n  #backToTopBtn:hover {\n    background: linear-gradient(135deg, #ADD8E6, #FFF8DC);\n    transform: scale(1.08);\n    box-shadow: 0 8px 25px rgba(70, 130, 180, 0.4);\n  }\n  \n  #backToTopBtn:active {\n    transform: scale(0.95);\n  }\n  \n  /* 图片加载完成提示基础 */\n  #image-loaded-toast {\n    position: fixed;\n    bottom: 33px;\n    left: 50%;\n    transform: translateX(-50%);\n    background: rgba(0, 0, 0, 0.7);\n    color: white;\n    padding: 10px 20px;\n    border-radius: 20px;\n    font-size: 14px;\n    z-index: 998;\n    backdrop-filter: blur(4px);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n    opacity: 0;\n    transition: opacity 0.3s;\n    pointer-events: none;\n  }\n  \n  /* 标题卡片基础 */\n  #image-loaded-toast.show {\n    opacity: 1;\n  }\n</style>\n<div style=\"\n  text-align:center;\n  padding:50px 20px 20px;\n  margin:0 0 0px;\n  position:relative;\n  background:linear-gradient(135deg, #f0f7ff, #e6f0ff);\n\">\n  <!-- 标题卡片 -->\n  <div style=\"\n    position:relative;\n    z-index:10;\n    display:inline-block;\n    transform:translateY(-20px);\n    filter: drop-shadow(0 15px 25px rgba(70,130,180,0.25));\n  \">\n    <div style=\"\n      background:rgba(255,255,255,0.75);\n      backdrop-filter:blur(12px);\n      padding:16px 48px;\n      border-radius:18px;\n      border:1px solid rgba(255,255,255,0.5);\n      box-shadow:0 8px 32px rgba(70,130,180,0.2), inset 0 0 12px rgba(255,255,255,0.6);\n      position:relative;\n      overflow:hidden;\n    \">\n      <!-- 顶部高光 -->\n      <div style=\"\n        position:absolute;\n        top:0; left:0; right:0;\n        height:40%;\n        background:linear-gradient(to bottom, rgba(255,255,255,0.4), transparent);\n        pointer-events:none;\n      \"></div>\n      \n      <h3 style=\"\n        background:linear-gradient(135deg, #4a7bd0, #00a2b8);\n        -webkit-background-clip:text;\n        background-clip:text;\n        color:transparent;\n        font-size:1.3rem;\n        font-weight:700;\n        margin:0;\n        letter-spacing:-0.5px;\n        position:relative;\n        z-index:2;\n      \">{{@@h1@text}}</h3>\n      \n      <!-- 左下装饰点 -->\n      <div style=\"\n        position:absolute;\n        bottom:12px;\n        left:20px;\n        width:6px;\n        height:6px;\n        background:#00a2b8;\n        border-radius:50%;\n        opacity:0.7;\n      \"></div>\n      \n      <!-- 右下装饰点 -->\n      <div style=\"\n        position:absolute;\n        bottom:12px;\n        right:20px;\n        width:6px;\n        height:6px;\n        background:#4a7bd0;\n        border-radius:50%;\n        opacity:0.7;\n      \"></div>\n    </div>\n  </div>\n  \n  <!-- 时间信息 -->\n  <div style=\"\n    margin-top:0px;\n    padding:0px 20px;\n  \">\n    <h5 style=\"\n      color:#6c757d;\n      font-weight:400;\n      font-size:1rem;\n      margin:0;\n      line-height:1.6;\n      letter-spacing:0.3px;\n      position:relative;\n      display:inline-block;\n      max-width:700px;\n    \">\n      {{@@.post-meta-bottom@time.0@text}}\n      <!-- 下划线装饰 -->\n      <div style=\"\n        position:absolute;\n        bottom:-5px;\n        left:0;\n        width:100%;\n        height:1px;\n        background:linear-gradient(90deg, transparent, rgba(70,130,180,0.3), transparent);\n      \"></div>\n    </h5>\n  </div>\n  \n  <!-- 左上装饰圆 -->\n  <div style=\"\n    position:absolute;\n    top:10%;\n    left:15%;\n    width:40px;\n    height:40px;\n    border-radius:50%;\n    background:linear-gradient(135deg, rgba(74,123,208,0.1), transparent);\n    filter:blur(2px);\n  \"></div>\n  \n  <!-- 右下装饰圆 -->\n  <div style=\"\n    position:absolute;\n    bottom:15%;\n    right:10%;\n    width:60px;\n    height:60px;\n    border-radius:50%;\n    background:linear-gradient(135deg, rgba(0,162,184,0.1), transparent);\n    filter:blur(4px);\n    transform:rotate(30deg);\n  \"></div>\n</div>\n${imageContent}  <!-- 这里是图片内容 -->\n<div id=\"image-loaded-toast\">✅ 全部图片已完成加载</div>\n<button id=\"backToTopBtn\" title=\"回到顶部\">🔝</button>\n<script>\n(function() {\n  const backToTopBtn = document.getElementById(\"backToTopBtn\");\n  const toast = document.getElementById(\"image-loaded-toast\");\n  \n  // 图片加载完成检测\n  const images = document.querySelectorAll(\"img\");\n  let loadedCount = 0;\n  const totalImages = images.length;\n  \n  // 如果页面没有图片，直接隐藏提示\n  if(totalImages === 0) {\n    toast.style.display = \"none\";\n  }\n  \n  // 检测图片加载完成\n  images.forEach(img => {\n    if(img.complete) {\n      checkAllLoaded();\n    } else {\n      img.addEventListener(\"load\", checkAllLoaded);\n      img.addEventListener(\"error\", checkAllLoaded);\n    }\n  });\n  \n  function checkAllLoaded() {\n    loadedCount++;\n    if(loadedCount >= totalImages) {\n      showToast();\n    }\n  }\n  \n  function showToast() {\n    toast.classList.add(\"show\");\n    setTimeout(() => {\n      toast.classList.remove(\"show\");\n    }, 2000);\n  }\n  \n  // 监听页面滚动事件\n  window.addEventListener(\"scroll\", () => {\n    const scrollPosition = window.scrollY || document.documentElement.scrollTop;\n    \n    if (scrollPosition > 288) {\n      backToTopBtn.style.display = \"block\";\n      backToTopBtn.style.opacity = \"1\";\n    } else {\n      backToTopBtn.style.display = \"none\";\n    }\n  });\n  \n  // 点击事件监听器\n  backToTopBtn.addEventListener(\"click\", () => {\n    window.scrollTo({\n      top: 0,\n      behavior: \"smooth\"\n    });\n  });\n})();\n</script>\n`;\np;",
    "ruleImage": "img@data-src",
    "ruleLink": ".clearfix@data-href",
    "ruleNextPage": "page",
    "rulePubDate": "🏄Mengteen｜🔖{{@@.post-cat@text}}",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "首页::/page/{{page}}/\n搜索::/page/{{page}}/?s={{(source.getVariable()==''||source.getVariable()==null)?source.setVariable('美女'):source.getVariable()}}\n女優画像::/category/avjoyuu/page/{{page}}/\n女高画像::/category/josikousei/page/{{page}}/\nおっぱい画像[美乳]::/category/oppai/page/{{page}}/\n太もも画像[美腿]::/category/hutomomo/page/{{page}}/\nオナニー画像[自慰]::/category/onani/page/{{page}}/\n野外セックス[野外啪啪]::/category/yagaisekkusu/page/{{page}}/\n乱交画像[群P]::/category/rankougazou/page/{{page}}/\nフェラ画像[口交]::/category/fera/page/{{page}}/\nクンニ画像[口交]::/category/kunnni/page/{{page}}/\nパイズリ画像[乳交]::/category/paizurigazou/page/{{page}}/\nレズ[女同]::/category/rezugazou/page/{{page}}/\nキス画像[接吻]::/category/kisugazou/page/{{page}}/\nSM::/category/smgazou/page/{{page}}/\n露出::/category/rosyutsugazou/page/{{page}}/\n偷拍::/category/tousatsugazou/page/{{page}}/\n素人::/category/sirouto/page/{{page}}/\n欧美::/category/gaizinerogazou/page/{{page}}/\n制服::/category/olgazou/page/{{page}}/\n泳衣::/category/mizugi/page/{{page}}/\n网袜::/category/amitaitsu/page/{{page}}/\n黑丝::/category/pannsuto/page/{{page}}/\n吊带::/category/ga-ta-beruto/page/{{page}}/\n浴衣::/category/yukatakimono/page/{{page}}/\n女仆::/category/meido/page/{{page}}/\n眼镜娘::/category/megane/page/{{page}}/",
    "sourceComment": "源社区：@Mengteen  2025.7.16\n二传二创或者是其它问题请联系我。\n我邮箱:[xxxmgqxxx@vip.qq.com]\n我QQ:99737563(备注来意)\n1.不需要挂🪜子,个别地方网络加载可能有点慢或者是需要挂🪜子才能访问，别急！\n2.使用了我自己的看图UI,卡片式标题,自适应全屏,一键返回顶上按钮,图片加载完成提示等。\n3.搜索和分类是按我自己个人喜欢的,你也可以放一些你自己喜欢的。",
    "sourceGroup": "678",
    "sourceIcon": "https://pashalism.com/wp-content/uploads/2022/03/2341-33.jpg",
    "sourceName": "👙工口画像",
    "sourceUrl": "https://pashalism.com/##@Mengteen",
    "variableComment": "🏄Mengteen提示：在此输入关键词搜索！"
  },
  {
    "articleStyle": 0,
    "customOrder": 169,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "678",
    "sourceIcon": "https://xiaohuangshu.me/images/favicon_2.0.png",
    "sourceName": "小黄书",
    "sourceUrl": "https://xiaohuangshu.me/"
  },
  {
    "articleStyle": 3,
    "customOrder": 170,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\": \"Mozilla/5.0 (Linux; Android 9) Mobile Safari/537.36\",\"referer\": \"{{baseUrl}}\"\n\t}",
    "jsLib": "let search = \"https://dns.jingluo.love/2025/68a878e00d302.jpg\";",
    "lastUpdateTime": 1770433530465,
    "loadWithBaseUrl": true,
    "ruleArticles": ".pornkvideos",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取</title>\n<!-- v2025.05.10 -->\n\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body { font-family: Arial, sans-serif; font-size: 16px; }\n    #title, #page, #loading-status { margin: 0 auto; font-size: 20px; text-align: center; }\n    #description, #urls, #video-url, #video-sources, #messages { width: 100%; max-width: 800px; margin: 1.5px auto; font-size: 14px; text-align: left; word-wrap: break-word; white-space: pre-wrap; }\n    #text, #text :not(img), #text img + * { text-indent: 2em; width: 100%; font-size: 16px; line-height: 1.5em; margin-top: 0; margin-bottom: 0; word-wrap: break-word; white-space: pre-wrap; }\n    img, #text img { width: 100%; height: auto; display: block; margin-bottom: 1.5px; }\n    .flex-container { display: flex; justify-content: center; align-items: center; gap: 10px; margin: 1.5px 0; font-size: 14px; }\n    button, select { flex: 1 1 31%; padding: 3px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box; cursor: pointer; background-color: #f9f9f9; transition: background-color 0.3s ease; margin: 1.5px; min-width: 0; font-size: 14px; }\n    #url-select, #video-source-select { flex: 1 1 100%; margin-left: 0; margin-right: 0; text-align: center; }\n    #video-element { width: 100%; height: auto; }\n    textarea { width: 100%; height: auto; min-height: 100px; box-sizing: border-box; resize: vertical; }\n    .error, .warn { color: red; }\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\" style=\"display:none;\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    \n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    \n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\" style=\"display: none;\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\" id=\"video-source-container\" style=\"display: none;\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n\n    <script>\n        // 配置对象，包含各种选择器、延迟时间等配置项\n        const config = {    \n            videoSelector: 'body', // 视频选择器\n            imgSelector: '.gridlane-box-inside img,.photos figure img,.content p img', // 图片选择器\n            textSelector: '#content', // 文本选择器\n            debugSelector: '#content, .page, .pager, .content, script', // 调试信息选择器\n            swapImageAttributes: false, // 是否交换图片属性\n            delayTime: 1500, // 延迟提取时间\n            retryDelayTime: 1500, // 重试加载延迟时间\n            maxLoadAttempts: 3, // 最大加载次数\n            autoLoading: false, // true自动模式，false单页模式\n            debugOnce: 0, // 只在特定索引输出一次调试信息\n            totalPagesText: '{{@@.page.0@a.-2@textNodes}}', // 总页码\n            urlSuffixToRemove: /\\.html$/, // 移除url后缀\n            pageUrlText: '{urlPrefix}_{i}.html', // 拼接URL模板        \n            ListMode: true, // true网址列表模式，false网址拼接模式    \n            initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n            initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n            sourceurl: '', // 来源URL前缀\n        };\n\n        let videoSources = []; // 存储视频源数组\n        let loadAttempts = {}; // 记录每个URL的加载尝试次数\n        let urls = []; // 存储所有页面的URL\n        let imageBox;\n        let textBox;\n        let currentPageIndex = 0; // 当前页面索引\n        let canLoadNextPage = true; // 控制是否可以加载下一页\n        let autoLoadInProgress = false; // 自动加载状态\n\n        // 构建URL列表\n        function buildUrls(totalPages, baseUrl) {\n            let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n            let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n            if (config.ListMode && initialUrlsArray.length > 0) {\n                if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n                    $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n                }\n\n                urls = initialUrlsArray.map(url => {\n                    if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                        return config.sourceurl.replace(/\\/$/, '') + url;\n                    } else {\n                        return url;\n                    }\n                });\n\n                urls.forEach((url, index) => {\n                    const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            } else {\n                if (totalPages === 1) {\n                    urls.push(baseUrl);\n                } else {\n                    urls.push(baseUrl);\n                    for (let i = 2; i <= totalPages; i++) {\n                        urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n                    }\n                }\n\n                urls.forEach((url, index) => {\n                    const name = `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            }\n\n            $('#total-pages').text(urls.length);\n            toggleNavigationButtons();\n            toggleTotalPagesDisplay();\n        }\n\n        // 规范化URL\n        function normalizeUrl(url) {\n            if (typeof url !== 'string' || !url.trim()) {\n                return '';\n            }\n            const match = url.match(/['\"](.*?)['\"]/);\n            if (match && match[1]) {\n                url = match[1];\n            }\n\n            function processUrl(str) {\n                str = str.trim();\n                str = str.replace(/\\\\u[\\dA-F]{4}/gi, match => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n                str = decodeURIComponent(str);\n                str = str.replace(/^http:\\/([^/])/, 'http://$1');\n                str = str.replace(/^https:\\/([^/])/, 'https://$1');\n                return str;\n            }\n            return processUrl(url);\n        }\n\n        // 清空容器内容\n        function clearContainers() {\n            $('#messages').empty();\n            $('#images').empty();\n            $('#text').empty();\n        }\n\n        // 更新图像源\n        function updateImageSrc(elements, shouldSwap) {\n            elements.each(function () {\n                const $this = $(this);\n                const attrsToUpdate = {};\n                if (shouldSwap) {\n                    ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                        if ($this.attr(attr)) {\n                            attrsToUpdate['src'] = $this.attr(attr);\n                        }\n                    });\n                }\n                $this.attr(attrsToUpdate);\n            });\n            return elements;\n        }\n\n        // 切换导航按钮显示状态\n        function toggleNavigationButtons() {\n            if ($('#url-select option').length > 1 && !config.autoLoading) {\n                $('#loading-buttons').show();\n                $('#url-select').show();\n            } else {\n                $('#loading-buttons').hide();\n                $('#url-select').hide();\n            }\n        }\n\n        // 显示加载状态\n        function showLoadingStatus(pageNumber) {\n            const selectedOption = $('#url-select option:selected').text();\n            $('#loading-status').text(`正在加载：${selectedOption}`).show();\n        }\n\n        // 隐藏加载状态\n        function hideLoadingStatus() {\n            $('#loading-status').hide();\n        }\n\n        // 加载指定索引的内容\n        function loadContent(index) {\n            if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n            canLoadNextPage = false;\n            currentPageIndex = index;\n            $('#url-select').val(index);\n            $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span></div>`);\n            if (autoLoadInProgress) {\n                showLoadingStatus(index + 1);\n            }\n            $.ajax({\n                url: urls[index],\n                type: 'GET',\n                success: function (data) {\n                    try {\n                    const $data = $(data);\n                    let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                        .replace(/src=\"upload/gi, 'src=\"/upload')\n                        .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                        .replace(/\\\\\\//g, '/');\n                    const parser = new DOMParser();\n                    const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                    if (config.debugOnce === index) {\n                        const debugElements = $(doc).find(config.debugSelector);\n                        if (debugElements.length > 0) {\n                            const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                        } else {\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                        }\n                    }\n                    // 方法1：提取视频\n                    const videoSources1 = [];\n                    const videoContents = $(doc).find(config.videoSelector);\n                    const videoTags = $(videoContents).find('video, source');\n                    videoTags.each(function() {\n                        const videosrc = $(this).attr('src') || \n                                     $(this).attr('data-src') || \n                                     $(this).attr('data-original') || '';\n                        \n                        if (videosrc) {\n                            videoSources1.push(videosrc);\n                        }\n                    });\n                    //反馈\n                    if (videoSources1.length > 0) {\n                        $('#messages').append(`<span>方法1，找到 ${videoSources1.length} 个视频。</span><br>`);\n                    }\n\n                    // 方法2：正则提取视频\n                    const regex = /['\"]https?[^'<>\"]+(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)([^'<>\"]+)?['\"]/gi;\n                    const matches = data.match(regex);\n                    const videoSources2 = [];\n\n                    if (matches) {\n                        const uniqueMatches = [...new Set(matches)];\n                    \n                        uniqueMatches.forEach(match => {\n                            const normalizedSrc = normalizeUrl(match.replace(/['\"]/g, ''));\n                            videoSources2.push(normalizedSrc);\n                        });\n                    }\n                    //反馈\n                    if (videoSources2.length > 0) {\n                        $('#messages').append(`<span>方法2，找到 ${videoSources2.length} 个视频。</span><br>`);\n                    }\n\n                    // 合并两种方法的结果\n                    videoSources = [...videoSources1, ...videoSources2];\n\n                    // 去重并标准化 URL\n                    const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|svg)$/i;\n\n                    videoSources = videoSources\n                                  .map(src => normalizeUrl(src.replace(/\\\\+/g, '')))\n                                  .filter(src => src) // 过滤空值\n                                  .filter(src => !imageExtensions.test(src)); // 移除图片地址\n                        \n                    videoSources = [...new Set(videoSources)];// 去重\n\n                    // 显示最终结果\n                    $('#messages').append(`<span>总共找到 ${videoSources.length} 个视频。</span><br>`);\n\n                    if (videoSources.length > 0) {\n                        $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                        videoSources.forEach((src, idx) => {\n                            $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                            $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                        });\n                    \n                        if (videoSources.length == 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').hide();\n                            updateVideoSource();\n                        } else if (videoSources.length > 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').show();\n                            updateVideoSource();\n                        } else {\n                            $('#video-container').hide();\n                            $('#video-url').hide();\n                            $('#video-source-container').hide();\n                        }\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-container').hide();\n                    }\n\n                    //提取图片\n                    const $imgContents = $(doc).find(config.imgSelector);\n                    const shouldSwap = config.swapImageAttributes;\n                    const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                    $('#images').append(newContents).show();\n                    if (newContents.length > 0) {\n                        $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                        newContents.each(function () {\n                            const imgSrc = $(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                            $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                        });\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                    }\n\n                    //提取图片和文本\n                    const textContents = $(doc).find(config.textSelector).map(function () {\n                        const $currentContents = $(this);\n                        $currentContents.find('img + br, script, video, source, iframe').remove();\n                        $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                        return $currentContents.html();\n                    }).get().join('');\n                    if (textContents.trim()) {\n                        $('#text').append(`<span>${textContents}</span><br>`).show();\n                        $('#messages').append(`<span>成功提取图文。</span><br>`);\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                    }\n\n                    if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                        setTimeout(() => { \n                            canLoadNextPage = true;\n                            loadContent(currentPageIndex + 1); \n                        }, config.delayTime);\n                    } else {\n                        canLoadNextPage = true;\n                        if (autoLoadInProgress) {\n                            hideLoadingStatus();\n                        }\n                    }\n                } catch (parseError) {\n                    $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                    handleLoadFailure(urls, index);\n                } finally {\n                    if (imageBox) imageBox.viewer.update();\n                    if (textBox) textBox.viewer.update();\n                }\n            },\n            error: function (jqXHR, textStatus, errorThrown) {\n                let errorMessage = `内容加载失败: ${urls[index]}`;\n                switch (textStatus) {\n                    case 'timeout':\n                        errorMessage += ', 请求超时';\n                        break;\n                    case 'abort':\n                        errorMessage += ', 请求被取消';\n                        break;\n                    case 'parsererror':\n                        errorMessage += ', 解析响应出错';\n                        break;\n                    default:\n                        errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                        break;\n                }\n                $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n                handleLoadFailure(urls, index);\n                }\n            });\n        }\n\n        // 处理加载失败的情况\n        function handleLoadFailure(urls, index) {\n            if (!loadAttempts[urls[index]]) {\n                loadAttempts[urls[index]] = 1;\n            } else {\n                loadAttempts[urls[index]]++;\n            }\n            if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n                const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n                $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n                setTimeout(() => { \n                    canLoadNextPage = true;\n                    loadContent(index); \n                }, config.retryDelayTime);\n            } else {\n                const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n                $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            }\n        }\n\n        // 更新视频源\n        function updateVideoSource() {\n            const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n            if (isNaN(selectedIndex) || !videoSources[selectedIndex]) {\n                $('#messages').append(`<span class=\"warn\">未找到有效的视频源。</span><br>`);\n                console.warn(\"Invalid or undefined video source:\", selectedIndex, videoSources);\n                return;\n            }\n\n            const selectedSource = videoSources[selectedIndex];\n            document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n            const videoSourceElement = document.getElementById('video-source');\n            videoSourceElement.src = selectedSource;\n\n            const videoElement = document.getElementById('video-element');\n            videoElement.load();\n\n            $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n            console.log(\"Updated video source to:\", selectedSource);\n        }\n\n        // 切换总页数显示状态\n        function toggleTotalPagesDisplay() {\n            if (urls.length > 1) {\n                $('#page').show();\n            } else {\n                $('#page').hide();\n            }\n        }\n\n        // 页面加载完成后执行的主要逻辑\n        $(document).ready(function () {\n            imageBox = document.getElementById('images');\n            textBox = document.getElementById('text');\n            if (imageBox && textBox) {\n                new Viewer(imageBox, { title: true, interval: 2000 });\n                new Viewer(textBox, { title: true, interval: 2000 });\n            }\n\n            const totalPagesText = config.totalPagesText;\n            const totalPages = parseInt(totalPagesText, 10) || 1;\n            const baseUrl = '{{baseUrl}}';\n\n            clearContainers();\n            $('#urls, #debug-info textarea, #video-url, #video-source-select').empty();\n            $('#urls, #messages, #debug-info, #video-url, #video-container, #video-source-container, #images, #text').hide();\n\n            buildUrls(totalPages, baseUrl);\n\n            const urlSelect = document.getElementById('url-select');\n            if (urlSelect.options.length > 0) {\n                urlSelect.value = '0'; \n\n                if (config.autoLoading) {\n                    autoLoadInProgress = true;\n                    for (let i = 0; i < urls.length; i++) {\n                        loadContent(i);\n                    }\n                } else {\n                    loadContent(0);\n                }\n            } else {\n                loadContent(0);\n            }\n\n            $('#url-select').change(function () {\n                clearContainers();\n                const selectedIndex = parseInt($(this).val());\n                loadContent(selectedIndex);\n            });\n            $('#prev-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex > 0) {\n                    loadContent(currentPageIndex - 1);\n                }\n            });\n            $('#next-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex < urls.length - 1) {\n                    loadContent(currentPageIndex + 1);\n                }\n            });\n            $('#auto-load-btn').click(function () {\n                autoLoadInProgress = true;\n                showLoadingStatus(1); \n                for (let i = currentPageIndex + 1; i < urls.length; i++) {\n                    loadContent(i);\n                }\n            });\n            $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n            $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n            $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n        });\n    </script>\n</body>\n</html>",
    "ruleImage": "img@data-src",
    "ruleLink": "/vodplay/{{@a.0@href##voddetail/(.*).html##$1##}}-1-1.html",
    "ruleNextPage": "text.下页@href",
    "rulePubDate": ".vlength@text",
    "ruleTitle": "a@text",
    "singleUrl": false,
    "sortUrl": "国产色情::/vodtype/12.html\n日本无码::/vodtype/20.html\n自拍偷拍::/vodtype/21.html\n人妻熟女::/vodtype/22.html\n黑人洋屌::/vodtype/23.html\n欧美精品::/vodtype/24.html\n岛国女优::/vodtype/25.html\n萝莉少女::/vodtype/26.html\n国产精品::/vodtype/55.html\n国产直播::/vodtype/56.html\n动漫禁漫::/vodtype/57.html\n黑料吃瓜::/vodtype/58.html\n欧美大屌::/vodtype/60.html\n探花约炮::/vodtype/61.html\n华语精品::/vodtype/63.html\n乱伦精品::/vodtype/64.html\n学生合集::/vodtype/65.html\n卡通动漫::/vodtype/69.html\n乱伦中出::/vodtype/70.html\n传媒原创::/vodtype/71.html\n口爆颜射::/vodtype/72.html\n岛国群交::/vodtype/73.html\n日本有码::/vodtype/74.html\n中文字幕::/vodtype/75.html\n吃瓜爆料::/vodtype/76.html\n角色扮演::/vodtype/77.html\n淫娃自慰::/vodtype/78.html\n日本有码::/vodtype/80.html\n主播网红::/vodtype/81.html\n韩国直播::/vodtype/84.html\n公开漏出::/vodtype/85.html\n日本无码::/vodtype/86.html\n重口调教::/vodtype/88.html\n户外打野::/vodtype/89.html",
    "sourceComment": "shewo1.cc",
    "sourceGroup": "678",
    "sourceIcon": "https://baf7baf7.shewo11.cc/template/shewo/images/logo.png",
    "sourceName": "射我里面了",
    "sourceUrl": "https://baf7baf7.shewo11.cc/"
  },
  {
    "articleStyle": 0,
    "coverDecodeJs": "java.createSymmetricCrypto(\"AES/CBC/NoPadding\",\"f5d965df75336270\",\"97b60394abc2fbe1\").decrypt(result)",
    "customOrder": 172,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; U; Android 13; zh-Hans-CN; PFJM10 Build/TP1A.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/135.0.4896.58 Quark/6.13.6.581 Mobile Safari/537.36\",\n\"Accept-Language\":\"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\"}",
    "lastUpdateTime": 1768948420510,
    "loadWithBaseUrl": true,
    "ruleArticles": "#body>.container>.row>div[role=\"main\"]>article:not(:has(meta[content=\"广告\"]))>a",
    "ruleContent": "<js>\nvar step1 = java.base64Decode('QGpzOg0KbGV0IHVybHMgPSBbXTsNCmxldCByZXN1bHRTdHIgPSBTdHJpbmcocmVzdWx0KTsNCg0KLy8g566A5YyW5o+Q5Y+WbTN1OA0KbGV0IGdldE0zdTggPSBmdW5jdGlvbigpIHsNCiAgICBsZXQgdXJsU2V0ID0gW107DQogICAgDQogICAgLy8gMS4g5LuOdmlkZW/moIfnrb7mj5Dlj5YNCiAgICBsZXQgdmlkZW9zID0gamF2YS5nZXRFbGVtZW50cygndmlkZW8nKTsNCiAgICBpZiAodmlkZW9zICYmIHZpZGVvcy5sZW5ndGggPiAwKSB7DQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlkZW9zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBsZXQgdiA9IHZpZGVvc1tpXTsNCiAgICAgICAgICAgIGxldCBzcmMgPSBTdHJpbmcodi5hdHRyKCdzcmMnKSk7DQogICAgICAgICAgICBpZiAoc3JjLmluZGV4T2YoJy5tM3U4JykgPiAtMSkgew0KICAgICAgICAgICAgICAgIGlmICh1cmxTZXQuaW5kZXhPZihzcmMpID09PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICB1cmxTZXQucHVzaChzcmMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyAyLiDku45IVE1M5rqQ56CB5o+Q5Y+WDQogICAgbGV0IHJlZ2V4ID0gLyhodHRwcz86W14nIlxzXSo/XC5tM3U4W14nIlxzXSopL2c7DQogICAgbGV0IG1hdGNoOw0KICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHJlc3VsdFN0cikpICE9PSBudWxsKSB7DQogICAgICAgIGxldCB1cmwgPSBtYXRjaFsxXS5yZXBsYWNlKC9cXC9nLCAiIik7DQogICAgICAgIGlmICh1cmxTZXQuaW5kZXhPZih1cmwpID09PSAtMSkgew0KICAgICAgICAgICAgdXJsU2V0LnB1c2godXJsKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICByZXR1cm4gdXJsU2V0Ow0KfTsNCg0KLy8g5aSE55CG5YiG6ZuGDQppZiAoL+eCueaIkS8udGVzdChyZXN1bHQpICYmIC/mn6XnnIvor6bmg4UvLnRlc3QocmVzdWx0KSkgew0KICAgIGxldCBsaW5rcyA9IGphdmEuZ2V0RWxlbWVudHMoJ0BAI3Bvc3Q+YXJ0aWNsZT4ucG9zdC1jb250ZW50PnA+YScpOw0KICAgIGxldCB0ZW1wVXJscyA9IFtdOw0KICAgIA0KICAgIGlmIChsaW5rcyAmJiBsaW5rcy5sZW5ndGggPiAwKSB7DQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoIC0gMTsgaSsrKSB7DQogICAgICAgICAgICBsZXQgaHJlZiA9IFN0cmluZyhsaW5rc1tpXS5hdHRyKCdocmVmJykpOw0KICAgICAgICAgICAgbGV0IGRvYyA9IFN0cmluZyhqYXZhLmFqYXgoc291cmNlLmtleSArIGhyZWYpKTsNCiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZG9jLm1hdGNoKC8oaHR0cHM/OlteJyJcc10qP1wubTN1OFteJyJcc10qKS9nKTsNCiAgICAgICAgICAgIGlmIChtYXRjaGVzKSB7DQogICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRjaGVzLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBtYXRjaGVzW2pdLnJlcGxhY2UoL1xcL2csICIiKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBVcmxzLmluZGV4T2YodXJsKSA9PT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBVcmxzLnB1c2godXJsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICB1cmxzID0gdGVtcFVybHM7DQp9IGVsc2Ugew0KICAgIHVybHMgPSBnZXRNM3U4KCk7DQp9DQoNCi8vIOWOu+mHje+8iOWGjeasoeehruS/ne+8iQ0KbGV0IGZpbmFsVXJscyA9IFtdOw0KZm9yIChsZXQgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgaSsrKSB7DQogICAgbGV0IHVybCA9IHVybHNbaV07DQogICAgaWYgKHVybCAmJiB1cmwuaW5kZXhPZignLm0zdTgnKSA+IC0xICYmIGZpbmFsVXJscy5pbmRleE9mKHVybCkgPT09IC0xKSB7DQogICAgICAgIGZpbmFsVXJscy5wdXNoKHVybCk7DQogICAgfQ0KfQ0KdXJscyA9IGZpbmFsVXJsczsNCg0KLy8g566A5YyW5pKt5pS+5ZmoDQp2YXIgaHRtbCA9ICc8IURPQ1RZUEUgaHRtbD4nICsNCic8aHRtbD4nICsNCic8aGVhZD4nICsNCiAgICAnPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCI+JyArDQogICAgJzxzdHlsZT4nICsNCiAgICAgICAgJyogeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9JyArDQogICAgICAgICdib2R5IHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjBmMGYwOyBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IH0nICsNCiAgICAgICAgJy5jb250YWluZXIgeyBtYXgtd2lkdGg6IDEwMDBweDsgbWFyZ2luOiAwIGF1dG87IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiAxMHB4OyBvdmVyZmxvdzogaGlkZGVuOyBib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTsgfScgKw0KICAgICAgICAnLmhlYWRlciB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM2NjdlZWEgMCUsICM3NjRiYTIgMTAwJSk7IGNvbG9yOiB3aGl0ZTsgcGFkZGluZzogMTVweDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyB9JyArDQogICAgICAgICcudmlkZW8td3JhcHBlciB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDEwMCU7IHBhZGRpbmctdG9wOiA1Ni4yNSU7IC8qIDE2Ojkg5a696auY5q+UICovIGJhY2tncm91bmQ6ICMwMDA7IH0nICsNCiAgICAgICAgJyN2aWRlbyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluOyB9JyArDQogICAgICAgICcuY29udHJvbHMgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHBhZGRpbmc6IDE1cHggMjBweDsgYmFja2dyb3VuZDogI2Y4ZjlmYTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlZWU7IH0nICsNCiAgICAgICAgJy5uYXYtZ3JvdXAgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7IH0nICsNCiAgICAgICAgJ2J1dHRvbiB7IHBhZGRpbmc6IDEwcHggMjBweDsgYmFja2dyb3VuZDogIzAwN2JmZjsgY29sb3I6IHdoaXRlOyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDVweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDE0cHg7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zczsgfScgKw0KICAgICAgICAnYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDogIzAwNTZiMzsgfScgKw0KICAgICAgICAnYnV0dG9uOmRpc2FibGVkIHsgYmFja2dyb3VuZDogIzZjNzU3ZDsgY3Vyc29yOiBub3QtYWxsb3dlZDsgfScgKw0KICAgICAgICAnc2VsZWN0IHsgcGFkZGluZzogMTBweCAxNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItcmFkaXVzOiA1cHg7IGZvbnQtc2l6ZTogMTRweDsgYmFja2dyb3VuZDogd2hpdGU7IG1pbi13aWR0aDogMTIwcHg7IH0nICsNCiAgICAgICAgJy5pbmZvIHsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjZjVmNWY1OyBjb2xvcjogIzY2NjsgZm9udC1zaXplOiAxNHB4OyB9JyArDQogICAgICAgICcuZnVsbHNjcmVlbi1idG4geyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjMjhhNzQ1OyB9JyArDQogICAgICAgICcuZnVsbHNjcmVlbi1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiAjMjE4ODM4OyB9JyArDQogICAgICAgICdAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsnICsNCiAgICAgICAgICAgICdib2R5IHsgcGFkZGluZzogMTBweDsgfScgKw0KICAgICAgICAgICAgJy5jb250YWluZXIgeyBib3JkZXItcmFkaXVzOiA1cHg7IH0nICsNCiAgICAgICAgICAgICcuY29udHJvbHMgeyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDEwcHg7IH0nICsNCiAgICAgICAgICAgICcubmF2LWdyb3VwIHsgd2lkdGg6IDEwMCU7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfScgKw0KICAgICAgICAgICAgJ2J1dHRvbiwgc2VsZWN0IHsgd2lkdGg6IDEwMCU7IH0nICsNCiAgICAgICAgJ30nICsNCiAgICAnPC9zdHlsZT4nICsNCic8L2hlYWQ+JyArDQonPGJvZHk+JyArDQogICAgJzxkaXYgY2xhc3M9ImNvbnRhaW5lciI+JyArDQogICAgICAgICc8ZGl2IGNsYXNzPSJoZWFkZXIiPicgKw0KICAgICAgICAgICAgJzxzcGFuIGlkPSJjdXJyZW50Ij4xPC9zcGFuPiAvIDxzcGFuIGlkPSJ0b3RhbCI+JyArIHVybHMubGVuZ3RoICsgJzwvc3Bhbj4g6ZuGJyArDQogICAgICAgICc8L2Rpdj4nICsNCiAgICAgICAgJzxkaXYgY2xhc3M9InZpZGVvLXdyYXBwZXIiPicgKw0KICAgICAgICAgICAgJzx2aWRlbyBjb250cm9scyBhdXRvcGxheSBwbGF5c2lubGluZSBpZD0idmlkZW8iPicgKw0KICAgICAgICAgICAgICAgICc8c291cmNlIHNyYz0iJyArICh1cmxzWzBdIHx8ICcnKSArICciIHR5cGU9ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCI+JyArDQogICAgICAgICAgICAgICAgJ+aCqOeahOa1j+iniOWZqOS4jeaUr+aMgeinhumikeaSreaUvicgKw0KICAgICAgICAgICAgJzwvdmlkZW8+JyArDQogICAgICAgICc8L2Rpdj4nICsNCiAgICAgICAgJzxkaXYgY2xhc3M9ImNvbnRyb2xzIj4nICsNCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJuYXYtZ3JvdXAiPicgKw0KICAgICAgICAgICAgICAgICc8YnV0dG9uIG9uY2xpY2s9ImNoYW5nZVZpZGVvKC0xKSIgaWQ9InByZXZCdG4iPuS4iuS4gOmbhjwvYnV0dG9uPicgKw0KICAgICAgICAgICAgICAgICc8c2VsZWN0IG9uY2hhbmdlPSJqdW1wVG9WaWRlbyh0aGlzLnZhbHVlKSIgaWQ9InZpZGVvU2VsZWN0Ij4nOw0KDQovLyDnlJ/miJDpgInpobkNCmZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykgew0KICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9IicgKyBpICsgJyI+56ysICcgKyAoaSArIDEpICsgJyDpm4Y8L29wdGlvbj4nOw0KfQ0KDQpodG1sICs9ICc8L3NlbGVjdD4nICsNCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJjaGFuZ2VWaWRlbygxKSIgaWQ9Im5leHRCdG4iPuS4i+S4gOmbhjwvYnV0dG9uPicgKw0KICAgICAgICAgICAgJzwvZGl2PicgKw0KICAgICAgICAgICAgJzxidXR0b24gb25jbGljaz0idG9nZ2xlRnVsbHNjcmVlbigpIiBjbGFzcz0iZnVsbHNjcmVlbi1idG4iPuWFqOWxjzwvYnV0dG9uPicgKw0KICAgICAgICAnPC9kaXY+JyArDQogICAgICAgICc8ZGl2IGNsYXNzPSJpbmZvIj7mib7liLAgJyArIHVybHMubGVuZ3RoICsgJyDkuKrop4bpopHmupA8L2Rpdj4nICsNCiAgICAnPC9kaXY+JyArDQoNCiAgICAnPHNjcmlwdD4nICsNCiAgICAgICAgJ3ZhciB2aWRlb1VybHMgPSAnICsgSlNPTi5zdHJpbmdpZnkodXJscykgKyAnOycgKw0KICAgICAgICAndmFyIGN1cnJlbnRJbmRleCA9IDA7JyArDQogICAgICAgICd2YXIgdmlkZW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidmlkZW8iKTsnICsNCiAgICAgICAgJ3ZhciB2aWRlb1NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aWRlb1NlbGVjdCIpOycgKw0KICAgICAgICAndmFyIGN1cnJlbnRTcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN1cnJlbnQiKTsnICsNCiAgICAgICAgJ3ZhciB0b3RhbFNwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG90YWwiKTsnICsNCiAgICAgICAgJ3ZhciBwcmV2QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByZXZCdG4iKTsnICsNCiAgICAgICAgJ3ZhciBuZXh0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5leHRCdG4iKTsnICsNCiAgICAgICAgJycgKw0KICAgICAgICAnZnVuY3Rpb24gdXBkYXRlVUkoKSB7JyArDQogICAgICAgICAgICAnY3VycmVudFNwYW4udGV4dENvbnRlbnQgPSBjdXJyZW50SW5kZXggKyAxOycgKw0KICAgICAgICAgICAgJ3RvdGFsU3Bhbi50ZXh0Q29udGVudCA9IHZpZGVvVXJscy5sZW5ndGg7JyArDQogICAgICAgICAgICAndmlkZW9TZWxlY3QudmFsdWUgPSBjdXJyZW50SW5kZXg7JyArDQogICAgICAgICAgICAncHJldkJ0bi5kaXNhYmxlZCA9IGN1cnJlbnRJbmRleCA9PT0gMDsnICsNCiAgICAgICAgICAgICduZXh0QnRuLmRpc2FibGVkID0gY3VycmVudEluZGV4ID09PSB2aWRlb1VybHMubGVuZ3RoIC0gMTsnICsNCiAgICAgICAgICAgICd2aWRlby5zcmMgPSB2aWRlb1VybHNbY3VycmVudEluZGV4XTsnICsNCiAgICAgICAgICAgICd2aWRlby5sb2FkKCk7JyArDQogICAgICAgICd9JyArDQogICAgICAgICcnICsNCiAgICAgICAgJ2Z1bmN0aW9uIGNoYW5nZVZpZGVvKGRpcmVjdGlvbikgeycgKw0KICAgICAgICAgICAgJ3ZhciBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCArIGRpcmVjdGlvbjsnICsNCiAgICAgICAgICAgICdpZiAobmV3SW5kZXggPj0gMCAmJiBuZXdJbmRleCA8IHZpZGVvVXJscy5sZW5ndGgpIHsnICsNCiAgICAgICAgICAgICAgICAnY3VycmVudEluZGV4ID0gbmV3SW5kZXg7JyArDQogICAgICAgICAgICAgICAgJ3VwZGF0ZVVJKCk7JyArDQogICAgICAgICAgICAnfScgKw0KICAgICAgICAnfScgKw0KICAgICAgICAnJyArDQogICAgICAgICdmdW5jdGlvbiBqdW1wVG9WaWRlbyhpbmRleCkgeycgKw0KICAgICAgICAgICAgJ2N1cnJlbnRJbmRleCA9IHBhcnNlSW50KGluZGV4KTsnICsNCiAgICAgICAgICAgICd1cGRhdGVVSSgpOycgKw0KICAgICAgICAnfScgKw0KICAgICAgICAnJyArDQogICAgICAgICdmdW5jdGlvbiB0b2dnbGVGdWxsc2NyZWVuKCkgeycgKw0KICAgICAgICAgICAgJ2lmICghZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQpIHsnICsNCiAgICAgICAgICAgICAgICAnaWYgKHZpZGVvLnJlcXVlc3RGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICd2aWRlby5yZXF1ZXN0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKHZpZGVvLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICd2aWRlby53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKHZpZGVvLm1velJlcXVlc3RGdWxsU2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICd2aWRlby5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9JyArDQogICAgICAgICAgICAnfSBlbHNlIHsnICsNCiAgICAgICAgICAgICAgICAnaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICdkb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKGRvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICdkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pIHsnICsNCiAgICAgICAgICAgICAgICAgICAgJ2RvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTsnICsNCiAgICAgICAgICAgICAgICAnfScgKw0KICAgICAgICAgICAgJ30nICsNCiAgICAgICAgJ30nICsNCiAgICAgICAgJycgKw0KICAgICAgICAnLy8g5Yid5aeL5YyWJyArDQogICAgICAgICd1cGRhdGVVSSgpOycgKw0KICAgICAgICAnJyArDQogICAgICAgICcvLyDplK7nm5jlv6vmjbfplK4nICsNCiAgICAgICAgJ2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBmdW5jdGlvbihlKSB7JyArDQogICAgICAgICAgICAnaWYgKGUua2V5ID09PSAiQXJyb3dMZWZ0IikgY2hhbmdlVmlkZW8oLTEpOycgKw0KICAgICAgICAgICAgJ2Vsc2UgaWYgKGUua2V5ID09PSAiQXJyb3dSaWdodCIpIGNoYW5nZVZpZGVvKDEpOycgKw0KICAgICAgICAgICAgJ2Vsc2UgaWYgKGUua2V5ID09PSAiZiIgfHwgZS5rZXkgPT09ICJGIikgdG9nZ2xlRnVsbHNjcmVlbigpOycgKw0KICAgICAgICAnfSk7JyArDQogICAgICAgICcnICsNCiAgICAgICAgJy8vIOinhumikemUmeivr+WkhOeQhicgKw0KICAgICAgICAndmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBmdW5jdGlvbigpIHsnICsNCiAgICAgICAgICAgICdjb25zb2xlLmxvZygi6KeG6aKR5Yqg6L296ZSZ6K+v77yM5bCd6K+V5YiH5o2i5Yiw5LiL5LiA5LiqIik7JyArDQogICAgICAgICAgICAnaWYgKGN1cnJlbnRJbmRleCA8IHZpZGVvVXJscy5sZW5ndGggLSAxKSB7JyArDQogICAgICAgICAgICAgICAgJ2N1cnJlbnRJbmRleCsrOycgKw0KICAgICAgICAgICAgICAgICd1cGRhdGVVSSgpOycgKw0KICAgICAgICAgICAgJ30nICsNCiAgICAgICAgJ30pOycgKw0KICAgICc8L3NjcmlwdD4nICsNCic8L2JvZHk+JyArDQonPC9odG1sPic7DQoNCmh0bWw7');\nvar step2 = java.getString(step1);\nresult = step2\n</js>",
    "ruleImage": "@js:\nvar text = java.getString('script@html');\nvar match = text.match(/loadBannerDirect\\('([^']+)'/);\nvar img = match ? match[1] : '';\nimg;",
    "ruleLink": "href",
    "ruleNextPage": "page",
    "rulePubDate": "{{@@.wraps@text}}{{@@.post-card-info span@text##\\n}}",
    "ruleTitle": "h2@text",
    "singleUrl": false,
    "sortUrl": "搜索::/search/{{source.getVariable()}}/{{page}}/\n首页::/page/{{page}}/\n今日看料::/category/24hcg/{{page}}/\n热门吃瓜::/category/rgtj/{{page}}/\n每日热瓜::/category/mrrg/{{page}}/\n反差女神::/category/fcns/{{page}}/\n学院热瓜::/category/xyrg/{{page}}/\n网红吃瓜::/category/whhl/{{page}}/\n每日大赛::/category/mrds/{{page}}/\n海角乱伦::/category/llsq/{{page}}/\n黑料大事::/category/hlda/{{page}}/\n撸友看片::/category/lydt/{{page}}/\n黑料杂谈::/category/hlzt/{{page}}/\nav解说::/category/avjs/{{page}}/\n禁播动漫::/category/mrst/{{page}}/\n性爱技巧::/category/wyxs/{{page}}/\n爽文短剧::/category/swdj/{{page}}/\n明星吃瓜::/category/mxbg/{{page}}/\n官场秘闻::/category/gcmw/{{page}}/\n学生::/search/学生/{{page}}/\n全部①::/<,page/{{page}}/>\n全部②::/page/3/\n全部③::/page/5/\n偷情::/search/偷情/{{page}}/\n白虎::/search/白虎/{{page}}/\n反差::/search/反差/{{page}}/\n极品::/search/极品/{{page}}/\n萝莉::/search/萝莉/{{page}}/\n00后::/search/00后/{{page}}/\n女同::/search/女同/{{page}}/\n双马尾::/search/双马尾/{{page}}/\n学院::/search/学院/{{page}}/\n高三::/search/高三/{{page}}/\n高中::/search/高中/{{page}}/\n少女::/search/少女/{{page}}/\n情趣::/search/情趣/{{page}}/\n自拍::/search/自拍/{{page}}/\n大学::/search/大学/{{page}}/\n大一::/search/大一/{{page}}/\n学妹::/search/学妹/{{page}}/\n校花::/search/校花/{{page}}/\n调教::/search/调教/{{page}}/\n女神::/search/女神/{{page}}/\n少妇::/search/少妇/{{page}}/\n巨乳::/search/巨乳/{{page}}/\n孕妇::/search/孕妇/{{page}}/\n口::/search/口交/{{page}}/\n精::/search/精/{{page}}/",
    "sourceGroup": "678",
    "sourceIcon": "https://i1.wp.com/i.postimg.cc/wjL5myHr/kpptube-cc-3e997cb42a6b0f37af6c6a40866ba202.gif",
    "sourceName": "黑料不打烊",
    "sourceUrl": "https://wiki.cvgdpnvq.xyz/",
    "style": "iframe{\n\theight:600px\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 2,
    "customOrder": 187,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Linux; Android 13; SM-S918B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36\",\n  \"Referer\": \"https://qikzj.com/\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".bricks-layout-item.repeater-item",
    "ruleContent": "@js:\nvar doc = org.jsoup.Jsoup.parse(result);\nvar myImgs = [];\n\n// 1. 严格锁定正文 ID，彻底避开 Related Posts 等外部组件\nvar contentHtml = \"\";\nvar mainBox = doc.getElementById(\"brxe-qoenez\");\nif (mainBox) {\n    contentHtml = mainBox.html();\n} else {\n    contentHtml = doc.select(\".brxe-post-content\").html();\n}\n\nif (contentHtml) {\n    // 2. 在限定范围内扫描高清图片链接\n    var regex = /https?:\\/\\/qikzj\\.com\\/wp-content\\/uploads\\/[^\"'\\s<>]*?\\.(?:jpg|jpeg|png|webp|gif)/gi;\n    var matches;\n    while ((matches = regex.exec(contentHtml)) !== null) {\n        var s = matches[0];\n        // 过滤 Logo 和头像\n        if (s.indexOf(\"logo\") === -1 && s.indexOf(\"avatar\") === -1) {\n            // 还原高清原图路径，去掉尺寸和缩放后缀\n            var cleanUrl = s.replace(/-\\d+x\\d+\\./i, \".\").replace(/-scaled\\./i, \".\");\n            if (myImgs.indexOf(cleanUrl) === -1) {\n                myImgs.push(cleanUrl);\n            }\n        }\n    }\n}\n\nvar displayTitle = (typeof title !== 'undefined' && title) ? title : \"QikZ Visuals\";\n\nvar h = \"<!DOCTYPE html><html><head><style>body{margin:0;background:#050505;color:#eee;font-family:sans-serif;padding-bottom:100px} .top{background:#111;color:#888;text-align:center;padding:15px;font-size:10px;text-transform:uppercase;letter-spacing:3px;border-bottom:1px solid #222} .header{padding:40px 25px;text-align:center} .img-list{padding:0 10px} .img-box{position:relative;margin-bottom:18px;background:#000;border-radius:2px;overflow:hidden;box-shadow:0 10px 30px rgba(0,0,0,0.5)} .img-box img{width:100%;display:block;height:auto} .img-num{position:absolute;bottom:10px;right:15px;background:rgba(0,0,0,0.6);color:#fff;padding:2px 8px;border-radius:2px;font-size:10px;font-family:monospace;font-weight:bold}</style></head><body>\";\nh += \"<div class='top'>HD VISUAL SHOWCASE</div>\";\nh += \"<div class='header'><h1 style='font-size:20px;margin:0;font-weight:300;color:#fff;line-height:1.4'>\" + displayTitle + \"</h1></div>\";\nh += \"<div class='img-list'>\";\nfor(var k=0; k<myImgs.length; k++){\n    h += \"<div class='img-box'><img src='\" + myImgs[k] + \"'><span class='img-num'>\" + (k+1) + \" / \" + myImgs.length + \"</span></div>\";\n}\nh += \"</div><p style='text-align:center;color:#333;font-size:10px;margin-top:60px;letter-spacing:2px'>QIKZ PHOTOGRAPHY GALLERY</p></body></html>\";\nresult = h;",
    "ruleImage": "@js:\nvar img = result.select(\"img\").first();\nif (img) {\n    var s = img.attr(\"data-src\") || img.attr(\"data-srcset\") || img.attr(\"src\");\n    if (s && s.indexOf(\" \") > 0) s = s.split(\" \")[0];\n    result = s;\n} else {\n    result = \"https://qikzj.com/favicon.ico\";\n}\nresult;",
    "ruleLink": "h3.dynamic a@href",
    "ruleNextPage": ".page-numbers.next@href",
    "ruleTitle": "h3.dynamic a@text",
    "singleUrl": false,
    "sortUrl": "",
    "sourceGroup": "678",
    "sourceIcon": "https://qikzj.com/favicon.ico",
    "sourceName": "3.2",
    "sourceUrl": "https://qikzj.com"
  },
  {
    "articleStyle": 1,
    "customOrder": 197,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.list",
    "ruleDescription": "<br><h3>{{$.vod_name}}</h3>\n<h6>[{{$.vod_score}}分] [{{$.vod_class ##\\,##] [}}]<b>发布于 {{$.vod_time}}</b></h6>\n\n<video src=\"{{$.vod_play_url ##^.*?\\$}}\" poster=\"{{$.vod_pic}}\" controls></video>",
    "ruleImage": "$.vod_pic",
    "ruleLink": "/api.php/provide/vod/?ac=detail&ids={{$.vod_id}}",
    "ruleNextPage": "page",
    "rulePubDate": "⏱️ {{$.vod_duration}}　{{$.vod_score}}分　{{$.vod_time}}",
    "ruleTitle": "$.vod_name",
    "singleUrl": false,
    "sortUrl": "精品推荐::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=20\n🔎 视频搜索::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&wd={{source.getVariable()}}\n国产视频::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=22\n主播直播::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=23\n日本无码::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=24\n日本有码::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=25\n中文字幕::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=26\n巨乳美乳::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=27\n制服丝袜::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=34\n角色扮演::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=35\n熟女人妻::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=28\n强奸乱伦::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=29\n欧美精品::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=30\n少女萝莉::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=31\n三级伦理::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=32\n成人动漫::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=33\n自拍偷拍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=34\n制服丝袜::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=35\n口交颜射::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=36\n日本精品::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=37\nCosplay::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=38\n素人自拍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=39\n台湾辣妹::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=40\n韩国御姐::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=41\n唯美港姐::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=42\n东南亚AV::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=43\n欺辱凌辱::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=44\n剧情介绍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=45\n多人多P::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=46\n91探花::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=47\n网红流出::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=48\n野外露出::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=49\n古装扮演::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=50\n女优系列::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=51\n可爱学生::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=52\n风情旗袍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=53\n兽耳系列::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=54\n瑜伽裤::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=55\n闷骚护士::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=56\n过膝袜::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=57\n网爆门::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=58\n传媒出品::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=59\n女同性恋::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=60\n男同性恋::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=61\n练腿狂魔::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=63",
    "sourceComment": "★源URL的填写链接为【list】格式\n\t网站网址\n\t网站网址/api.php/provide/vod/?ac=【list】\n\n例：\nhttps://apittzy.com\nhttps://apittzy.com/api.php/provide/vod/?ac=list\n\nps：\n\t使用【list】格式查看分类和分类id以组成分类URL\n\n\n\n★分类URL的填写链接为【detail】格式\n\t视频搜索::网站网址/api.php/provide/vod/?ac=【detail】&pg={{page}}&wd=关键词\n\t分类名称::网站网址/api.php/provide/vod/?ac=【detail】&pg={{page}}&t=分类id\n\n例：\n\t视频搜索::https://apittzy.com/api.php/provide/vod/?ac=detail&pg={{page}}&wd=按摩\n\t精品推荐::https://apittzy.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=1\n\nps：\n\t分类URL写成【list】格式也行，但是没有详细信息。需要通过正文链接跳转正文页再填写正文规则。而且没有封面！\n\n\n\n★正文规则\n\t因为分类URL使用了【detail】格式，需要的信息都显示了。(视频链接)\n\t所以我们在描述规则填写正文规则就行了，这样子就省的再跳转一次正文链接了。\n\t但是链接规则还是要写的，不然不会加载列表。\n\n\n\n☆【vod】和【art】\n视频分类链接为【vod】格式\n\t网站网址/api.php/provide/vod/?ac=list\n图文分类链接为【art】格式\n\t网站网址/api.php/provide/art/?ac=list\n通过【list】格式查看分类和分类id以组成分类URL\n\nps：\n\t图片和小说链接都是【art】格式，这样子不好分割，建议把小说分类相关链接移除\n\t因为【art】格式的【detail】链接并不会显示全部套图，所以需要填写正确的链接规则跳转正文页再填写正文规则而不是直接在描述规则处填写规则\n\n\n\n☆详情页链接规则\n\t详情页链接仅支持【detail】格式\n网站网址/api.php/provide/(vod/art)/?ac=detail&ids=(视频id/图文id)\n\n\t如果分类URL只填写了网址，那么链接规则补充剩下的链接就行了\n例：\n\t/api.php/provide/vod/?ac=detail&ids=视频id\n❗仅限【vod】/【art】单格式使用\n\n\t如果订阅同时写了【vod】和【art】两种格式，链接就需要使用js判定\n@js:\nif(baseUrl.match(/art/)){\n\t网站网址/api.php/provide/art/?ac=detail&ids={{$.art_id}}\n}else{\n\t网站网址/api.php/provide/vod/?ac=detail&ids={{$.vod_id}}\n}\nps：\n\t使用两种格式时，此js在正文规则也会需要用到。\n\n\n\n\n\n‼️以下网址加上【list】链接可更改为json格式，查看分类及分类id\n\n\t因为json链接格式固定？\n\t所以修改一下网站之间的分类URL差别即可使用此订阅格式套用，，，大概\n\nps：\n\t注意【list】和【detail】格式以及【vod】和【art】链接的差别\n\n\n共30个网址：\n\n\t★鲨鱼::https://shayuapi.com\n\t\tps：老朋友了\n\n\n\t老鸭资源失效::http://laoyazy50.cc\n\t\tps：网站有时效性？\n\n\n\t老鸭资源2失效::https://api.apilyzy.com\n\n\n\n\t水蜜桃失效::http://51smt4.xyz\n\n\n\t99资源失效::http://99zy.pw\n\n\n\t99资源吧失效::http://99zyba.com\n\n\n\t丝袜资源失效::http://siwazyw.net\n\n\n\t浪潮资源失效::http://langchaozy6.com\n\n\n\tCK资源失效::http://www.feifei67.com\n\n\n\t大雕资源失效::http://www.dd-01.com\n\n\n\t银龙资源失效::https://yinlong.tv\n\n\n\t苍天资源失效::http://cj.cangtiancj.com\n\n\n\t骚色资源失效::http://api.saosezy.icu\n\n\n\t芒果资源失效::https://mgzyz1.com\n\n\n\t酷豆资源失效::https://kudouzy.com\n\n\n\t酷伦理资源失效::https://api.kudian70.com\n\n\n\t速播资源失效::https://api.suboapi.com\n\n\n\t国产精品::https://zy.difi.life\n\n\n\t痴汉队长失效::https://javcaptain.com\n\n\n\t秀色资源失效::https://api.xiuseapi.com\n\n\n\t苹果资源失效::https://www.pg111222.com\n\n\n\t茄子资源失效::http://www.qiezizy8.com\n\n\n\t辣椒资源失效::https://www.lajiaozy18.com\n\n\n\t花椒资源失效::https://apihjzy.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t桃色资源失效::https://api.taoseapi.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t乐播资源::https://lbapi9.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t佳丽资源失效::https://jializyzapi.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t番号资源::http://fhapi9.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\tx8优酷失效::https://gov.gooder.bar\n\t\tps：没有vod格式？\n\n\n\t土狗采集失效::http://vip-04.tgzy.cc\n\t\tpa：vod格式好像是音乐？\n\n\n\n☆使用【vod】和【art】两种链接的正文规则参考\n<br><h3>{{$.list..vod_name||$.list..art_name}}</h3>\n<h6>[{{$.list..type_name}}]<b>发布于 {{$.list..vod_time||$.list..art_time}}</b></h6>\n\n<video src=\"{{$.list..vod_play_url ##^.*?\\$}}\" poster=\"{{$.list..vod_pic}}\" controls>视频加载失败</video>\n\n<div id=\"TúPiàn\">\n{{$.list..art_content ##</?(br|p)>}}\n</div>\n<link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.2/viewer.min.css\">\n<script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.2/viewer.min.js\"></script>\n<script>\n  new Viewer(\n    document.getElementById(\"TúPiàn\")    ,{\n//设置图片地址来源\n    url: 'src',\n//是否显示图片标题(true/false)\n    title: false,\n//设置播放间隔(单位毫秒，1秒=1000毫秒)\n    interval: 3000\n    }\n  );\n</script>\n\n@js:\nif(baseUrl.match(/art/)){\n\tresult.replace(/<vid[\\s\\S]+deo>/,'')\n}else{\n\tresult.replace(/<div[\\s\\S]+ipt>/,'')\n}",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.postimg.cc/sXtXHZDM/IMG_20220716_190738.png",
    "sourceName": "4.7",
    "sourceUrl": "https://slapibf.com/api.php/provide/vod/?ac=list",
    "style": "h3{text-align:center}\nh6{margin-bottom:0}\nb{float:right}\n\nvideo{width:100%;max-height:285px;border-radius:5px}"
  },
  {
    "articleStyle": 1,
    "customOrder": 199,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "@js:\nJSON.stringify({\n  'User-Agent': \"Mozilla/5.0 (Linux; Android 15; V2304A Build/AP3A.240905.015.A2; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/132.0.6834.163 Mobile Safari/537.36\",\n  'sec-ch-ua-platform': \"\\\"Android\\\"\",\n  'X-Requested-With': \"XMLHttpRequest\",\n  'Referer': \"https://cn.royalcams.com/female/tags/recordable\",\n  'Connection':\"keep-alive\",\n  'Accept-language': \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\"\n})",
    "lastUpdateTime": 1771719337202,
    "loadWithBaseUrl": true,
    "ruleArticles": "models[*]",
    "ruleImage": "{$.thumb_image}@js:result.replace(/{ext}/g, 'jpg')",
    "ruleLink": "https://{$.esid}.bcvcdn.com/hls/stream_{$.username}/playlist.m3u8",
    "ruleNextPage": "page",
    "rulePubDate": "👥 观众: {$.viewers}⭐ 粉丝: {$.f}",
    "ruleTitle": "$.display_name",
    "singleUrl": false,
    "sortUrl": "所有::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36\n青少年18::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=teens-18\n中等乳房::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=medium-tits\n波霸::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=big-tits\n超级波霸::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=huge-tits\n主妇::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=housewives\n亚洲::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=asian\n无毛::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=shaved-pussy\n大学生::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=college-girls\n大屁股::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=big-ass\n白人女孩::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=white-girls\n娇小体型::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=petite\n平胸::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=72&category=small-tits\n拉丁裔::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=latina\n捆绑::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=bondage\n曲线美::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=curvy\n潮喷::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=squirt\n熟女::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=mature\n物神::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=fetish\n玩具::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=toys\n红发::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=redhead\n肛交::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=anal\n褐色女郎::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=brunette\n辣妹::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=babes\nBBW::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=bbw\n多人::https://cn.royalcams.com/tools/listing_v3.php?livetab=couples&is_mobile=true&offset={{(page-1)*36}}&limit=36",
    "sourceGroup": "678",
    "sourceIcon": "https://i.wlicdn.com/wl/000/000/193/c0c5540e263feee85fbb8da2b1a888ca.png",
    "sourceName": "4.9",
    "sourceUrl": "https://cn.royalcams.com"
  },
  {
    "articleStyle": 0,
    "customOrder": 217,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "678",
    "sourceIcon": "",
    "sourceName": "6.6",
    "sourceUrl": "https://6661.vaf3.com/web/index.html?jkzz=1"
  },
  {
    "articleStyle": 1,
    "customOrder": 218,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.rescont.data",
    "ruleContent": "<video src=\"{{$.rescont.videopath}}\" controls width=\"auto\" height=\"auto\"></video>",
    "ruleImage": "$.coverpath",
    "ruleLink": "http://lu3fcm.aksdsrle.com/api/videoplay/{{$.id}}?&uuid=1",
    "ruleNextPage": "page",
    "rulePubDate": "{{$.authername}}",
    "ruleTitle": "$.title",
    "singleUrl": false,
    "sortUrl": "性感佳人::http://lu3fcm.aksdsrle.com/api/videosort/9?orderby=&page={{page}}&uuid=1&device=0\n国产精品::http://lu3fcm.aksdsrle.com/api/videosort/10?orderby=&page={{page}}&uuid=1&device=0\nH动漫::http://lu3fcm.aksdsrle.com/api/videosort/14?orderby=&page={{page}}&uuid=1&device=0\n欧美激情::http://lu3fcm.aksdsrle.com/api/videosort/16?orderby=&page={{page}}&uuid=1&device=0\n三级电影::http://lu3fcm.aksdsrle.com/api/videosort/25?orderby=&page={{page}}&uuid=1&device=0\n高清无码::http://lu3fcm.aksdsrle.com/api/videosort/26?orderby=&page={{page}}&uuid=1&device=0\n美乳巨乳::http://lu3fcm.aksdsrle.com/api/videosort/27?orderby=&page={{page}}&uuid=1&device=0\n少女萝莉::http://lu3fcm.aksdsrle.com/api/videosort/28?orderby=&page={{page}}&uuid=1&device=0\n家庭乱伦::http://lu3fcm.aksdsrle.com/api/videosort/29?orderby=&page={{page}}&uuid=1&device=0\n绝顶潮吹::http://lu3fcm.aksdsrle.com/api/videosort/30?orderby=&page={{page}}&uuid=1&device=0\n痴女淫乱::http://lu3fcm.aksdsrle.com/api/videosort/31?orderby=&page={{page}}&uuid=1&device=0\n强奸凌辱::http://lu3fcm.aksdsrle.com/api/videosort/34?orderby=&page={{page}}&uuid=1&device=0\n制服丝袜::http://lu3fcm.aksdsrle.com/api/videosort/35?orderby=&page={{page}}&uuid=1&device=0\nAV剧情::http://lu3fcm.aksdsrle.com/api/videosort/36?orderby=&page={{page}}&uuid=1&device=0\n人妻熟女::http://lu3fcm.aksdsrle.com/api/videosort/37?orderby=&page={{page}}&uuid=1&device=0\n偷拍盗摄::http://lu3fcm.aksdsrle.com/api/videosort/38?orderby=&page={{page}}&uuid=1&device=0\n风俗沙龙::http://lu3fcm.aksdsrle.com/api/videosort/39?orderby=&page={{page}}&uuid=1&device=0\n国产传媒::http://lu3fcm.aksdsrle.com/api/videosort/40?orderby=&page={{page}}&uuid=1&device=0\n女同性恋::http://lu3fcm.aksdsrle.com/api/videosort/41?orderby=&page={{page}}&uuid=1&device=0\n直播网红::http://lu3fcm.aksdsrle.com/api/videosort/42?orderby=&page={{page}}&uuid=1&device=0\n国产AV::http://lu3fcm.aksdsrle.com/api/videosort/44?orderby=&page={{page}}&uuid=1&device=0\nSM调教::http://lu3fcm.aksdsrle.com/api/videosort/45?orderby=&page={{page}}&uuid=1&device=0\nAV解说::http://lu3fcm.aksdsrle.com/api/videosort/49?orderby=&page={{page}}&uuid=1&device=0\n热门爆料::http://lu3fcm.aksdsrle.com/api/videosort/50?orderby=&page={{page}}&uuid=1&device=0",
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "6.9",
    "sourceUrl": "http://lu3fcm.aksdsrle.com/api/videosort/9?orderby=&page=1&uuid=1&device=0"
  },
  {
    "articleStyle": 0,
    "contentBlacklist": "https://pc.stgowan.com/,\nhttps://dmku.mhtjx.top/,\nhttps://dmku.m3u8.pw/,\nhttps://dm.bbj.icu/,\nhttps://www.superplayer.top/index.php/index/dm",
    "coverDecodeJs": "function toByteArray(input) {\n  var out = new Packages.java.io.ByteArrayOutputStream();\n  var buffer = java.strToBytes('\\0'.repeat(4096));\n  var bytesRead;\n  while ((bytesRead = input.read(buffer)) != -1) {\n    out.write(buffer, 0, bytesRead);\n  }\n  return out.toByteArray();\n}\n\n(function() {\n  // 1. 读取原始字节内容\n  var textBytes = toByteArray(result);\n  // 2. 如果是GIF文件，直接返回原始字节\n  if (src.endsWith('.gif')) {\n    return textBytes;\n  }\n  try {\n    // 3. 将字节转换为字符串（用于解析数据URI）\n    var dataUri = java.bytesToStr(textBytes, \"UTF-8\");\n    // 4. 判断是完整的数据URI还是纯Base64数据\n    var base64Prefix = \"base64,\";\n    var base64Index = dataUri.indexOf(base64Prefix);\n    if (base64Index === -1) {\n      // 如果没有找到base64前缀，检查是否需要截取第一个/及之后的内容\n      var firstSlashIndex = dataUri.indexOf('/');\n      if (firstSlashIndex !== -1) {\n        // 如果找到第一个/，截取/及之后的内容\n        dataUri = dataUri.substring(firstSlashIndex);\n      }\n      // 对整个内容进行Base64解码\n      return java.base64DecodeToByteArray(dataUri);\n    } else {\n      // 如果是标准data URI，提取base64编码部分解码\n      var base64Data = dataUri.substring(base64Index + base64Prefix.length);\n      return java.base64DecodeToByteArray(base64Data);\n    }\n  } catch (e) {\n    // 解码失败时返回原始字节\n    return textBytes;\n  }\n})();",
    "customOrder": 219,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\":\"Mozilla/5.0 (Linux; U; Android 10; zh-cn; MI CC 11)  AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.127 Mobile Safari/537.36 XiaoMi/MiuiBrowser/18.1.8 swan-mibrowser\",\n\t\"referer\": \"{{baseUrl}}\"\n}",
    "injectJs": "function setupCustomPlayer(video) {\n  // 手势滑动快进\n  let isDragging = false;\n  let startX = 0;\n  let startTime = 0;\n  \n  // 长按加速相关变量\n  let longPressTimer = null;\n  const LONG_PRESS_DELAY = 300;\n  const NORMAL_SPEED = 1.25;\n  const FAST_SPEED = 3;\n  let wasPaused = false;\n\n  // 触摸事件处理\n  function handleTouchStart(e) {\n    startX = e.touches[0].clientX;\n    startTime = video.currentTime;\n    wasPaused = video.paused;\n    \n    longPressTimer = setTimeout(() => {\n      video.playbackRate = FAST_SPEED;\n      if (wasPaused) video.play();\n    }, LONG_PRESS_DELAY);\n  }\n\n  function handleTouchMove(e) {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    const dx = e.touches[0].clientX - startX;\n    if (Math.abs(dx) > 10) {\n      if (!isDragging) {\n        video.pause();\n        isDragging = true;\n      }\n      const change = (dx / video.clientWidth) * video.duration;\n      video.currentTime = Math.max(0, Math.min(startTime + change, video.duration));\n    }\n  }\n\n  function handleTouchEnd() {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    if (isDragging) {\n      video.playbackRate = NORMAL_SPEED;\n      video.play();\n      isDragging = false;\n    } else if (video.playbackRate === FAST_SPEED) {\n      video.playbackRate = NORMAL_SPEED;\n      if (wasPaused) video.pause();\n    }\n  }\n\n  // 添加触摸事件监听\n  video.addEventListener('touchstart', handleTouchStart);\n  video.addEventListener('touchmove', handleTouchMove);\n  video.addEventListener('touchend', handleTouchEnd);\n  \n  // 初始播放速度\n  video.playbackRate = NORMAL_SPEED;\n\n  // 创建按钮的通用函数\n  function createButton(text, onClick, position, width = '20px') {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.position = 'absolute';\n    button.style[position.horizontal] = '0';\n    button.style.top = '50%';\n    button.style.transform = 'translateY(-50%)';\n    button.style.zIndex = '999';\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = width;\n    button.style.height = '30px';\n    button.addEventListener('click', onClick);\n    video.parentNode.appendChild(button);\n    return button;\n  }\n\n  // 旋转按钮（右侧）\n  createButton('⟳', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    const newRotation = (currentRotation + 90) % 360;\n    video.setAttribute('data-rotation', newRotation);\n    \n    // 保留当前的缩放比例\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    video.style.transform = `rotate(${newRotation}deg) scale(${currentScale})`;\n  }, { horizontal: 'right' });\n\n  // 缩放按钮（左侧）\n  let zoomCount = 0;\n  createButton('+', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    \n    // 获取当前缩放比例\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    if (zoomCount < 4) {\n      const newScale = currentScale * 1.25;\n      video.style.transform = `rotate(${currentRotation}deg) scale(${newScale})`;\n      zoomCount++;\n    } else {\n      video.style.transform = `rotate(${currentRotation}deg) scale(1)`;\n      zoomCount = 0;\n    }\n  }, { horizontal: 'left' });\n\n  // 快速跳转按钮（底部中央）\n  const buttonContainer = document.createElement('div');\n  buttonContainer.style.position = 'absolute';\n  buttonContainer.style.bottom = '0';\n  buttonContainer.style.left = '50%';\n  buttonContainer.style.transform = 'translateX(-50%)';\n  buttonContainer.style.display = 'flex';\n  buttonContainer.style.gap = '10px';\n  buttonContainer.style.zIndex = '999';\n  \n  // 按钮配置\n  const seekButtons = [\n    { text: '-5分', time: -300 },\n    { text: '-1分', time: -60 },\n    { text: '+1分', time: 60 },\n    { text: '+5分', time: 300 }\n  ];\n\n  seekButtons.forEach(({ text, time }) => {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = '60px';\n    button.style.height = '30px';\n    button.addEventListener('click', () => {\n      video.currentTime = Math.max(0, Math.min(video.currentTime + time, video.duration));\n    });\n    buttonContainer.appendChild(button);\n  });\n\n  video.parentNode.appendChild(buttonContainer);\n}\n\n// 修改初始化逻辑，增加重试机制\nfunction initPlayerWithRetry() {\n  const maxRetries = 10;\n  const retryInterval = 500;\n  let retries = 0;\n  const tryInit = () => {\n    const video = document.getElementById('video');\n    if (video) {\n      setupCustomPlayer(video);\n    } else if (retries < maxRetries) {\n      retries++;\n      setTimeout(tryInit, retryInterval);\n    }\n  };\n  tryInit();\n}\n// 使用重试机制初始化播放器\ninitPlayerWithRetry();",
    "lastUpdateTime": 1775588357478,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.rescont.data[*]",
    "ruleContent": "<html><head><meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n<meta name=\"referrer\" content=\"never\"/>\n  <style>html, body {text-align: center;margin: 0; padding: 0;width: 100%;overflow: hidden;} </style>\n  <script src=\"https://unpkg.com/hls.js@1.4.3/dist/hls.min.js\"></script>\n</head><body>\n  <div class=\"container\">\n    <div class=\"title\">{{$.rescont.title}}</div>\n    <video id=\"video\" width=\"100%\" height=\"91%\" poster=\"\" controls autoplay muted loop></video>\n  </div>\n<script>\nconst v=document.getElementById('video'),s=[\n  \"{{$.rescont.videopath}}\",\n  \"\"];\nlet c=0;\nfunction setupCustomControls(e){/* 自定义功能实现 */}\nfunction playNext(){\n  c>=s.length&&(c=0); // 循环重置计数器\n  const u=s[c++];\n  // 检测Hls对象是否存在\n  if (typeof Hls !== 'undefined' && Hls.isSupported()) {\n    const h = new Hls({\n      enableSoftwareAES: true,          // 强制软件解密\n      forceKeyFrameOnDiscontinuity: true // 关键帧恢复\n    });\n    h.loadSource(u);\n    h.attachMedia(v);\n    h.on(Hls.Events.MANIFEST_PARSED,()=>v.play().then(()=>setupCustomControls(v)).catch(console.log));\n    h.on(Hls.Events.ERROR,(_,d)=>d.fatal&&playNext())\n  } else { // Hls加载失败或浏览器原生支持HLS\n    if (v.canPlayType('application/vnd.apple.mpegurl')) {\n      v.src = u;\n      v.onloadedmetadata = () => v.play().then(() => setupCustomControls(v));\n      v.onerror = playNext;\n    } else {\n      // 如果都不支持，尝试直接播放（可能支持MP4等格式）\n      v.src = u;\n      v.onerror = playNext;\n      v.play().then(() => setupCustomControls(v)).catch(playNext);\n    }\n  }\n}playNext();\n</script>\n</body></html>",
    "ruleImage": "{{$.coverbase64.url}}",
    "ruleLink": "/api/videoplay/{{$.id}}?uuid=1",
    "ruleNextPage": "$.rescont.next_page_url",
    "rulePubDate": "📆{{$.updated_at## .*}}  ⏱️{{$.playtimes}}",
    "ruleTitle": "$.title##.*屎.*|.*Ts.*|.*TS.*|.*ts.*|.*伪娘.*|.*人妖.*|.*男同.*|.*mbrba.*|.*水果派.*|.*解说.*|.*mmraa.*|.*ss-.*|.*fway.*|.*rebd.*|.*mbdd.*|.*双性.*|.*妈妈.*|.*儿子.*|.*爸爸.*|.*女儿.*|.*母子.*|.*父女.*|.*熟女.*|.*眼射.*|.*直男.*|.*CD.*|.*肥女.*|.*黄金.*|.*骚0.*|.*gv.*|.*父子.*|.*飞机.*|.*撸.*|.*厕.*|.*老阿姨.*|.*乱伦.*",
    "singleUrl": false,
    "sortUrl": "\n随机::/api/videosort/0?page={{ Math.ceil(Math.random()*1500) }}\n最新::/api/videosort/0?page={{page}}\n🔎搜索::/api/videosort/0?serach={{v=source.getVariable();if(/^\\s*$/.test(v)||v==null)source.setVariable('强奸');source.getVariable()}}&page={{page}}\n国产自拍::/api/videosort/10?page={{page}}\nH动漫::/api/videosort/14?page={{page}}\n扶她姐妹::/api/videosort/58?page={{page}}\n国产AV::/api/videosort/60?page={{page}}\n网红主播::/api/videosort/17?page={{page}}\n嫩模专区::/api/videosort/37?page={{page}}\n偷拍盗摄::/api/videosort/53?page={{page}}\n萌妹酱篇::/api/videosort/54?page={{page}}\n精彩短片::/api/videosort/55?page={{page}}\n外流视频::/api/videosort/32?page={{page}}\n明星淫梦::/api/videosort/40?page={{page}}\n鹿少女集::/api/videosort/56?page={{page}}\n高清无码::/api/videosort/1?page={{page}}\n制服诱惑::/api/videosort/5?page={{page}}\n长腿丝袜::/api/videosort/11?page={{page}}\nAV剧情::/api/videosort/29?page={{page}}\nAV素人::/api/videosort/24?page={{page}}\n淫荡痴女::/api/videosort/51?page={{page}}\n巨乳咪咪::/api/videosort/20?page={{page}}\n人妻熟女::/api/videosort/6?page={{page}}\n近亲乱伦::/api/videosort/49?page={{page}}\n淫乱师生::/api/videosort/46?page={{page}}\n角色扮演::/api/videosort/4?page={{page}}\n青春萝莉::/api/videosort/22?page={{page}}\n魔镜系列::/api/videosort/39?page={{page}}\n中文无码::/api/videosort/57?page={{page}}\n当红女优::/api/videosort/9?page={{page}}\n中文字幕::/api/videosort/19?page={{page}}\n259LUXU::/api/videosort/36?page={{page}}\n重咸口味::/api/videosort/23?page={{page}}\n丝瓜推荐::/api/videosort/30?page={{page}}\n三级电影::/api/videosort/25?page={{page}}\n电车之狼::/api/videosort/52?page={{page}}\n中外合拍::/api/videosort/59?page={{page}}\n苍老师::/api/videosort/44?page={{page}}\n女同性爱::/api/videosort/38?page={{page}}\n欧美AV::/api/videosort/16?page={{page}}\n恐怖情色::/api/videosort/35?page={{page}}",
    "sourceGroup": "版本",
    "sourceIcon": "https://kp-i25985.com/Uploads/vod/2023-06-21/1141.mp4.gif",
    "sourceName": "7.6",
    "sourceUrl": "https://api.sgapiaba.xyz",
    "style": ".container {\n    position: relative; /* 相对定位，用于包含视频 */\n    height: 100%; /* 容器高度与视频原始高度相同 */\n    overflow: hidden; /* 隐藏超出容器的部分 */\n}\n.title {\n    position: absolute; /* 绝对定位，相对于容器 */\n    top: 0; \n    width: 100%;\n    overflow: hidden; \n    text-overflow: ellipsis;\n    display: -webkit-box;\n    -webkit-box-orient: vertical; \n    -webkit-line-clamp: 2;\n    z-index: 1; /* 确保标题在视频之上 */\n    background: #000; /* 纯黑色背景 */ \n    padding: 0 0 3px 0;\n}\nvideo {\n    position: absolute; /* 绝对定位，相对于容器 */ \n    top: -65px; /* 上移80px */\n    left: 0; \n    width: 100%; \n    height: calc(96% + 65px);  /* 调整高度以适应内容 */\n    object-fit: contain; /* 确保视频内容不被裁剪 */\n    z-index: 0; /* 确保视频在标题之下 */\n    controls=\"controls\" autoplay muted; \n} \n"
  },
  {
    "articleStyle": 0,
    "customOrder": 250,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "<js>\nheaders={\n    \"User-Agent\": \"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36 EdgA/127.0.0.0\",\n\"Cache-Control\": \"no-cache\",\n    \"Referer\": String(source.getKey()).replace(/(.*\\/\\/[a-z0-9.-]+).*/, '$1')\n}\nJSON.stringify(headers);\n</js>",
    "injectJs": "function setupCustomPlayer(video) {\n  // 手势滑动快进\n  let isDragging = false;\n  let startX = 0;\n  let startTime = 0;\n  \n  // 长按加速相关变量\n  let longPressTimer = null;\n  const LONG_PRESS_DELAY = 300;\n  const NORMAL_SPEED = 1.25;\n  const FAST_SPEED = 3;\n  let wasPaused = false;\n\n  // 触摸事件处理\n  function handleTouchStart(e) {\n    startX = e.touches[0].clientX;\n    startTime = video.currentTime;\n    wasPaused = video.paused;\n    \n    longPressTimer = setTimeout(() => {\n      video.playbackRate = FAST_SPEED;\n      if (wasPaused) video.play();\n    }, LONG_PRESS_DELAY);\n  }\n\n  function handleTouchMove(e) {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    const dx = e.touches[0].clientX - startX;\n    if (Math.abs(dx) > 10) {\n      if (!isDragging) {\n        video.pause();\n        isDragging = true;\n      }\n      const change = (dx / video.clientWidth) * video.duration;\n      video.currentTime = Math.max(0, Math.min(startTime + change, video.duration));\n    }\n  }\n\n  function handleTouchEnd() {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    if (isDragging) {\n      video.playbackRate = NORMAL_SPEED;\n      video.play();\n      isDragging = false;\n    } else if (video.playbackRate === FAST_SPEED) {\n      video.playbackRate = NORMAL_SPEED;\n      if (wasPaused) video.pause();\n    }\n  }\n\n  // 添加触摸事件监听\n  video.addEventListener('touchstart', handleTouchStart);\n  video.addEventListener('touchmove', handleTouchMove);\n  video.addEventListener('touchend', handleTouchEnd);\n  \n  // 初始播放速度\n  video.playbackRate = NORMAL_SPEED;\n\n  // 创建按钮的通用函数\n  function createButton(text, onClick, position, width = '20px', top = '50%', fontSize = '16px') {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.position = 'absolute';\n    button.style[position.horizontal] = '0';\n    button.style.top = top;\n    button.style.transform = top === '50%' ? 'translateY(-50%)' : 'none';\n    button.style.zIndex = '999';\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = width;\n    button.style.height = '30px';\n    button.style.fontSize = fontSize; // 添加字体大小设置\n    button.addEventListener('click', onClick);\n    video.parentNode.appendChild(button);\n    return button;\n  }\n\n  // 旋转按钮（右侧上方） \n  createButton('⟳', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    const newRotation = (currentRotation + 90) % 360;\n    video.setAttribute('data-rotation', newRotation);\n    \n    // 保留当前的缩放比例和反转状态\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    // 获取当前反转状态\n    const isFlipped = video.getAttribute('data-flipped') === 'true';\n    const flipValue = isFlipped ? -1 : 1;\n    \n    video.style.transform = `rotate(${newRotation}deg) scale(${currentScale}) scaleX(${flipValue})`;\n  }, { horizontal: 'right' }, '20px', 'calc(50% - 20px)');\n\n  // 播放/暂停按钮（右侧下方）\n  let isPlaying = !video.paused;\n  const playPauseBtn = createButton(\n    isPlaying ? '❚❚' : '▶',\n    () => {\n      if (video.paused) {\n        video.play();\n        playPauseBtn.textContent = '❚❚';\n      } else {\n        video.pause();\n        playPauseBtn.textContent = '▶';\n      }\n    },\n    { horizontal: 'right' },\n    '22px',\n    'calc(50% + 20px)',\n    '10px' // 单独设置字体大小\n  );\n\n  // 监听视频的播放状态变化\n  video.addEventListener('play', () => {\n    playPauseBtn.textContent = '❚❚';\n    isPlaying = true;\n  });\n\n  video.addEventListener('pause', () => {\n    playPauseBtn.textContent = '▶';\n    isPlaying = false;\n  });\n\n  // 缩放按钮（左侧上方）\n  let zoomCount = 0;\n  createButton('+', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    \n    // 获取当前缩放比例和反转状态\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    // 获取当前反转状态\n    const isFlipped = video.getAttribute('data-flipped') === 'true';\n    const flipValue = isFlipped ? -1 : 1;\n    \n    if (zoomCount < 4) {\n      const newScale = currentScale * 1.25;\n      video.style.transform = `rotate(${currentRotation}deg) scale(${newScale}) scaleX(${flipValue})`;\n      zoomCount++;\n    } else {\n      video.style.transform = `rotate(${currentRotation}deg) scale(1) scaleX(${flipValue})`;\n      zoomCount = 0;\n    }\n  }, { horizontal: 'left' }, '20px', 'calc(50% - 20px)');\n\n  // 反转按钮（左侧下方）\n  const flipBtn = createButton('⇄', () => {\n    const isFlipped = video.getAttribute('data-flipped') === 'true';\n    const newFlipState = !isFlipped;\n    video.setAttribute('data-flipped', newFlipState);\n    \n    // 保留当前的旋转和缩放比例\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    const flipValue = newFlipState ? -1 : 1;\n    video.style.transform = `rotate(${currentRotation}deg) scale(${currentScale}) scaleX(${flipValue})`;\n  }, { horizontal: 'left' }, '20px', 'calc(50% + 20px)', '10px'); // 单独设置字体大小\n\n  // 快速跳转按钮（底部中央）\n  const buttonContainer = document.createElement('div');\n  buttonContainer.style.position = 'absolute';\n  buttonContainer.style.bottom = '0';\n  buttonContainer.style.left = '50%';\n  buttonContainer.style.transform = 'translateX(-50%)';\n  buttonContainer.style.display = 'flex';\n  buttonContainer.style.gap = '10px';\n  buttonContainer.style.zIndex = '999';\n  \n  // 按钮配置\n  const seekButtons = [\n    { text: '-5分', time: -300 },\n    { text: '-1分', time: -60 },\n    { text: '+1分', time: 60 },\n    { text: '+5分', time: 300 }\n  ];\n\n  seekButtons.forEach(({ text, time }) => {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = '60px';\n    button.style.height = '30px';\n    // 快速跳转按钮使用默认字体大小\n    button.addEventListener('click', () => {\n      video.currentTime = Math.max(0, Math.min(video.currentTime + time, video.duration));\n    });\n    buttonContainer.appendChild(button);\n  });\n video.parentNode.appendChild(buttonContainer);\n\n// 跳过片头功能\n  video.addEventListener('timeupdate', () => {\n    if (video.currentTime < 10) {\n      video.currentTime = 10;\n    }\n  });\n}\n\n// 修改初始化逻辑，增加重试机制\nfunction initPlayerWithRetry() {\n  const maxRetries = 10;\n  const retryInterval = 500;\n  let retries = 0;\n  const tryInit = () => {\n    const video = document.getElementById('video');\n    if (video) {\n      setupCustomPlayer(video);\n    } else if (retries < maxRetries) {\n      retries++;\n      setTimeout(tryInit, retryInterval);\n    }\n  };\n  tryInit();\n}\n// 使用重试机制初始化播放器\ninitPlayerWithRetry();",
    "lastUpdateTime": 1770070818566,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.data.list",
    "ruleContent": "{{$.data.movie_m3u8_url..url}}\n@js:\nresult=decodeURIComponent(result);\nresult=result.replace(/\\\\/g,'');\nresult=`\n<html>  \n<head>  \n<meta charset=\"utf-8\">  \n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\">\n<meta name=\"referrer\" content=\"never\"/>\n<style>html,body{text-align:center;margin:0;padding:0;width:100%;overflow: hidden;}</style>\n</head>  \n<body>  \n<div class=\"container\"><div  class=\"title\">{{$.data.movie_name}}</div>\n<video id=\"video\" width=\"100%\" height=\"91%\" poster=\"{{$.data.movie_cover}}\"  controls autoplay muted loop>  \n    <source src=\"${result}\" type=\"application/x-mpegURL\">    \n</video></div>\n</body>  \n</html>\n`;",
    "ruleImage": "$.movie_cover",
    "ruleLink": "/api/Webapi_v1/Resource/movieInfo?movie_id={{$.movie_id}}",
    "ruleNextPage": "page",
    "rulePubDate": "{{$.movie_cover##/(20.*)/.*/##$1##}} ⏱️{{$.movie_long}}",
    "ruleTitle": "@js:\nif (\"{{$.need_vip}}\"==\"0\"){result=\"{{$.movie_name##.*屎.*|.*Ts.*|.*TS.*|.*ts.*|.*伪娘.*|.*无法抑制的热情.*}}\"}else{result=\"\"}",
    "singleUrl": false,
    "sortUrl": "\n主播随机::/api/Webapi_v1/Resource/movieList?page={{ Math.ceil(Math.random()*380) }}&num=20&sort=1&label_ids[0]=5\n\n最新::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1\n\n🔎搜索::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&search={{v=source.getVariable();if(/^\\s*$/.test(v)||v==null)source.setVariable('奸');source.getVariable()}}\n\n自拍::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=2\n主播::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=5\n中字::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=20\nAV::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=25\n国产::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=26\n网红::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=21\n麻豆::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=22\n偷拍::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=23\n探花::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=24\n欧美::/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=6\n动漫:/api/Webapi_v1/Resource/movieList?page={{page}}&num=20&sort=1&label_ids[0]=9\n",
    "sourceComment": "http://www.wus82.com/\n备用地址 \nhttps://www.x3o5z.com/\nhttps://www.e2d0m.com/\nhttps://www.m4e0p.com/\nhttps://www.b1b4j.com/\nhttps://www.s1b9k.com/\nhttps://www.w4x5j.com/\nhttps://www.8u0lz.com/\n",
    "sourceGroup": "678",
    "sourceIcon": "https://ali-ec.static.yximgs.com/bs2/upload-kwaishop-themis-bucket/cfd1eec1-f882-458c-a66e-89585596d6f0_1a379e34b53e7834b9853e6c4d9918c1.jpg",
    "sourceName": "✿吾色      S",
    "sourceUrl": "https://www.l1m9r.top/",
    "style": ".container {\n    position: relative; \n    height: 100%; \n    overflow: hidden; \n}\n.title {\n    position: absolute; \n    top: 0; \n    width: 100%;\n    overflow: hidden; \n    text-overflow: ellipsis;\n    display: -webkit-box;\n    -webkit-box-orient: vertical; \n    -webkit-line-clamp: 2;\n    z-index: 1; \n    background: #000; \n    padding: 0 0 3px 0;\n}\nvideo {\n    position: absolute; \n    top: -120px; /* 视频上移 */\n    left: 0; \n    width: 100%; \n    height: calc(96% + 120px);  /* 调整高度以适应内容 */\n    object-fit: contain; \n    z-index: 0; \n    controls=\"controls\" autoplay muted; \n} \nvideo::-webkit-media-controls-overlay-play-button {\n    display: none !important;\n}\n"
  },
  {
    "articleStyle": 1,
    "customOrder": 253,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 12; 22041211AC Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".list@li",
    "ruleContent": "<js>\nvar v = result.match(/source\\s*=\\s*[\"']([^\"']*?\\.(m3u8|mp4)\\b[^\"']*)[\"']/i);\nvar p = v ? v[1].replace(/\\\\/g,'') : '';\nvar t = '@get:{t}';\nvar d = java.getString('[property=\"video:tag\"]@content');\nvar sign1 = java.base64Decode('44CQ5aSc5piO56m644CR55qE5pKt5pS+5Zmo');\nvar sign2 = java.base64Decode('5LuF5L6b5Liq5Lq65a2m5Lmg5L2/55So77yM5Lil56aB5YiG5Lqr44CB5YCS5Y2W5Y+K5Lu75L2V6L+d5rOV6KGM5Li677yB');\nvar sign3 = java.base64Decode('5L2/55So6ICF6Ieq6KGM5om/5ouF6aOO6Zmp5LiO6LSj5Lu7');\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.sign{background:#e9f7ff;padding:6px;border-radius:6px;margin-bottom:8px;font-size:14px;color:#1a73e8;width:100%}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"sign\" style=\"text-align:center;padding:5px 0\">\n<div>${sign1}</div>\n<div style=\"text-align:left; padding-top:4px\">\n${sign2}<br>${sign3}</div>\n</div>\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"video/mp4\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>",
    "ruleImage": "img@data-original",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "{{@@.vodlist_img@html##(\\d+)-(\\d+)-(\\d+)##$0###}} | {{@@.vodlist_img@span.0@text}}",
    "ruleTitle": ".title@text@put:{\"t\":\"@@.title@text\"}",
    "singleUrl": false,
    "sortUrl": "搜索 🔍::/s/page/{{page}}/wd/{{source.getVariable()}}/\n最新::/label/hot/by/time/page/{{page}}/\n日榜::/label/hot/by/hits_day/page/{{page}}/\n周榜::/label/hot/by/hits_week/page/{{page}}/\n月榜::/label/hot/by/hits_month/page/{{page}}/\n国产 🎞::/t/1-{{page}}/\n自拍::/t/5-{{page}}/\n主播大秀::/t/6-{{page}}/\n主播诱惑::/t/36-{{page}}/\n探花::/t/7-{{page}}/\n偷拍::/t/8-{{page}}/\n乱伦::/t/8-{{page}}/\n吃瓜::/t/10-{{page}}/\n抖阴::/t/11-{{page}}/\nAV::/t/12-{{page}}/\n福利姬::/t/20-{{page}}/\n侵犯::/t/37-{{page}}/\n日韩 🎞::/t/2-{{page}}/\n日韩自拍::/t/13-{{page}}/\n日本无码::/t/14-{{page}}/\n字幕::/t/15-{{page}}/\n解说::/t/17-{{page}}/\n换脸::/t/18-{{page}}/\n欧美 🎞::/t/3-{{page}}/\n自拍::/t/21-{{page}}/\n字幕::/t/22-{{page}}/\n伦理 🎞::/t/4-{{page}}/\n三级::/t/29-{{page}}/\n日韩::/t/30-{{page}}/\n动漫 🎞::/t/16-{{page}}/\n剧集::/t/26-{{page}}/\n3D::/t/27-{{page}}/\n次元::/t/28-{{page}}/\n另类 🎞::/t/39-{{page}}/\n同性恋::/t/38-{{page}}/\n变性::/t/40-{{page}}/\n重口味::/t/23-{{page}}/",
    "sourceComment": "<声明>\n//2025.8.10 作者：夜明空\n//源社区：https://taoba.cf\n//仅供个人学习使用，严禁分享、倒卖及任何违法行为！使用者自行承担风险与责任\n</声明>\n\n//网址更新频繁，有需要请到发布页自行更新\n//发布页：\nhttps://18j.18hu.link/mdce\n18j.vip\n18zy.vip\n51zy.vip",
    "sourceGroup": "678",
    "sourceIcon": "https://18oc.life/18link/18j/images/favicon.ico",
    "sourceName": "18J-夜明空",
    "sourceUrl": "https://18oj.life/label/"
  },
  {
    "articleStyle": 3,
    "customOrder": 266,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 1770433515484,
    "loadWithBaseUrl": true,
    "ruleArticles": ".item",
    "ruleContent": "id.kt_player@all&&script@all",
    "ruleImage": "img@data-original",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": ".time@span",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "搜索::https://www.85xo.com/search/{{v=source.getVariable()}}/\n亚洲人::/tags/ya-zhou-ren/\n马来::/tags/ma-lai/\n日本::/tags/ri-ben/\n后入::/tags/hou-ru/\n大奶::/tags/da-nai/\n高潮::/tags/gao-chao/\n做爱::/tags/zuo-ai/\n马来西亚::/tags/ma-lai-zi-ya/\n妹妹::/tags/mei-mei/\n兔牙::/tags/tu-ya/\n妹::/tags/mei/\n巨乳::/tags/ju-ru/\n自慰::/tags/zi-wei/\n情侣::/tags/qing-lv/\n骚::/tags/sao/\n男友::/tags/nan-you/\n淫叫::/tags/yin-jiao/\n抓奶::/tags/zhua-nai/\n新加坡::/tags/xin-jia-po/\n内衣::/tags/nei-yi/\n肉棒::/tags/rou-bang/\n床上::/tags/chuang-shang/\n嫩逼::/tags/nei-bi/\n日本人::/tags/ri-ben-ren/\n鲍鱼::/tags/bao-yu/\n口::/tags/kou/\n少女::/tags/shao-nv/\n美女::/tags/mei-nv/\n台灣::/tags/tai-wan/\n可爱::/tags/ke-ai/\n偷拍::/tags/tou-pai/\n掰逼::/tags/bai-bi/\n喷水::/tags/pen-shui/\n脱衣::/tags/tuo-yi/\n屁眼::/tags/pi-yan/\n口交::/tags/kou-jiao/\n高中::/tags/gao-zhong/\n妹子::/tags/mei-zi/\n中國::/tags/zhong-guo/\n母狗::/tags/mu-gao/\n全裸::/tags/quan-luo/\n美臀::/tags/mei-tun/\n贫乳::/tags/pin-ru/\n逼::/tags/bi/\n内裤::/tags/nei-ku/\n爱::/tags/ai/\n自拍::/tags/zi-pai/\n学生::/tags/xue-sheng/\n呻吟::/tags/shen-yin/\n韓國::/tags/han-guo/\n泰國::/tags/tai-guo/\n越南::/tags/yue-nan/\n近拍::/tags/jin-pai/\n香港::/tags/xiang-gang/\n新馬::/tags/xin-ma/\n街拍::/tags/jie-pai/",
    "sourceComment": "https://www.85po.com",
    "sourceGroup": "678",
    "sourceIcon": "https://85tube.com/favicon.ico",
    "sourceName": "85Tube",
    "sourceUrl": "https://www.85xo.com/",
    "style": "{background-color:black;margin:0;padding:0;width:100%;}"
  },
  {
    "articleStyle": 3,
    "customOrder": 275,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1773222833605,
    "loadWithBaseUrl": true,
    "ruleArticles": "[class=\"box\"]@a",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取</title>\n<!-- v2025.05.10 -->\n\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body { font-family: Arial, sans-serif; font-size: 16px; }\n    #title, #page, #loading-status { margin: 0 auto; font-size: 20px; text-align: center; }\n    #description, #urls, #video-url, #video-sources, #messages { width: 100%; max-width: 800px; margin: 1.5px auto; font-size: 14px; text-align: left; word-wrap: break-word; white-space: pre-wrap; }\n    #text, #text :not(img), #text img + * { text-indent: 2em; width: 100%; font-size: 16px; line-height: 1.5em; margin-top: 0; margin-bottom: 0; word-wrap: break-word; white-space: pre-wrap; }\n    img, #text img { width: 100%; height: auto; display: block; margin-bottom: 1.5px; }\n    .flex-container { display: flex; justify-content: center; align-items: center; gap: 10px; margin: 1.5px 0; font-size: 14px; }\n    button, select { flex: 1 1 31%; padding: 3px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box; cursor: pointer; background-color: #f9f9f9; transition: background-color 0.3s ease; margin: 1.5px; min-width: 0; font-size: 14px; }\n    #url-select, #video-source-select { flex: 1 1 100%; margin-left: 0; margin-right: 0; text-align: center; }\n    #video-element { width: 100%; height: auto; }\n    textarea { width: 100%; height: auto; min-height: 100px; box-sizing: border-box; resize: vertical; }\n    .error, .warn { color: red; }\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\" style=\"display:none;\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    \n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    \n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\" style=\"display: none;\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\" id=\"video-source-container\" style=\"display: none;\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n\n    <script>\n        // 配置对象，包含各种选择器、延迟时间等配置项\n        const config = {    \n            videoSelector: 'body', // 视频选择器\n            imgSelector: '.gridlane-box-inside img,.photos figure img,.content p img', // 图片选择器\n            textSelector: '#content', // 文本选择器\n            debugSelector: '#content, .page, .pager, .content, script', // 调试信息选择器\n            swapImageAttributes: false, // 是否交换图片属性\n            delayTime: 1500, // 延迟提取时间\n            retryDelayTime: 1500, // 重试加载延迟时间\n            maxLoadAttempts: 3, // 最大加载次数\n            autoLoading: false, // true自动模式，false单页模式\n            debugOnce: 0, // 只在特定索引输出一次调试信息\n            totalPagesText: '{{@@.page.0@a.-2@textNodes}}', // 总页码\n            urlSuffixToRemove: /\\.html$/, // 移除url后缀\n            pageUrlText: '{urlPrefix}_{i}.html', // 拼接URL模板        \n            ListMode: true, // true网址列表模式，false网址拼接模式    \n            initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n            initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n            sourceurl: '', // 来源URL前缀\n        };\n\n        let videoSources = []; // 存储视频源数组\n        let loadAttempts = {}; // 记录每个URL的加载尝试次数\n        let urls = []; // 存储所有页面的URL\n        let imageBox;\n        let textBox;\n        let currentPageIndex = 0; // 当前页面索引\n        let canLoadNextPage = true; // 控制是否可以加载下一页\n        let autoLoadInProgress = false; // 自动加载状态\n\n        // 构建URL列表\n        function buildUrls(totalPages, baseUrl) {\n            let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n            let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n            if (config.ListMode && initialUrlsArray.length > 0) {\n                if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n                    $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n                }\n\n                urls = initialUrlsArray.map(url => {\n                    if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                        return config.sourceurl.replace(/\\/$/, '') + url;\n                    } else {\n                        return url;\n                    }\n                });\n\n                urls.forEach((url, index) => {\n                    const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            } else {\n                if (totalPages === 1) {\n                    urls.push(baseUrl);\n                } else {\n                    urls.push(baseUrl);\n                    for (let i = 2; i <= totalPages; i++) {\n                        urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n                    }\n                }\n\n                urls.forEach((url, index) => {\n                    const name = `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            }\n\n            $('#total-pages').text(urls.length);\n            toggleNavigationButtons();\n            toggleTotalPagesDisplay();\n        }\n\n        // 规范化URL\n        function normalizeUrl(url) {\n            if (typeof url !== 'string' || !url.trim()) {\n                return '';\n            }\n            const match = url.match(/['\"](.*?)['\"]/);\n            if (match && match[1]) {\n                url = match[1];\n            }\n\n            function processUrl(str) {\n                str = str.trim();\n                str = str.replace(/\\\\u[\\dA-F]{4}/gi, match => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n                str = decodeURIComponent(str);\n                str = str.replace(/^http:\\/([^/])/, 'http://$1');\n                str = str.replace(/^https:\\/([^/])/, 'https://$1');\n                return str;\n            }\n            return processUrl(url);\n        }\n\n        // 清空容器内容\n        function clearContainers() {\n            $('#messages').empty();\n            $('#images').empty();\n            $('#text').empty();\n        }\n\n        // 更新图像源\n        function updateImageSrc(elements, shouldSwap) {\n            elements.each(function () {\n                const $this = $(this);\n                const attrsToUpdate = {};\n                if (shouldSwap) {\n                    ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                        if ($this.attr(attr)) {\n                            attrsToUpdate['src'] = $this.attr(attr);\n                        }\n                    });\n                }\n                $this.attr(attrsToUpdate);\n            });\n            return elements;\n        }\n\n        // 切换导航按钮显示状态\n        function toggleNavigationButtons() {\n            if ($('#url-select option').length > 1 && !config.autoLoading) {\n                $('#loading-buttons').show();\n                $('#url-select').show();\n            } else {\n                $('#loading-buttons').hide();\n                $('#url-select').hide();\n            }\n        }\n\n        // 显示加载状态\n        function showLoadingStatus(pageNumber) {\n            const selectedOption = $('#url-select option:selected').text();\n            $('#loading-status').text(`正在加载：${selectedOption}`).show();\n        }\n\n        // 隐藏加载状态\n        function hideLoadingStatus() {\n            $('#loading-status').hide();\n        }\n\n        // 加载指定索引的内容\n        function loadContent(index) {\n            if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n            canLoadNextPage = false;\n            currentPageIndex = index;\n            $('#url-select').val(index);\n            $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span></div>`);\n            if (autoLoadInProgress) {\n                showLoadingStatus(index + 1);\n            }\n            $.ajax({\n                url: urls[index],\n                type: 'GET',\n                success: function (data) {\n                    try {\n                    const $data = $(data);\n                    let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                        .replace(/src=\"upload/gi, 'src=\"/upload')\n                        .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                        .replace(/\\\\\\//g, '/');\n                    const parser = new DOMParser();\n                    const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                    if (config.debugOnce === index) {\n                        const debugElements = $(doc).find(config.debugSelector);\n                        if (debugElements.length > 0) {\n                            const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                        } else {\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                        }\n                    }\n                    // 方法1：提取视频\n                    const videoSources1 = [];\n                    const videoContents = $(doc).find(config.videoSelector);\n                    const videoTags = $(videoContents).find('video, source');\n                    videoTags.each(function() {\n                        const videosrc = $(this).attr('src') || \n                                     $(this).attr('data-src') || \n                                     $(this).attr('data-original') || '';\n                        \n                        if (videosrc) {\n                            videoSources1.push(videosrc);\n                        }\n                    });\n                    //反馈\n                    if (videoSources1.length > 0) {\n                        $('#messages').append(`<span>方法1，找到 ${videoSources1.length} 个视频。</span><br>`);\n                    }\n\n                    // 方法2：正则提取视频\n                    const regex = /['\"]https?[^'<>\"]+(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)([^'<>\"]+)?['\"]/gi;\n                    const matches = data.match(regex);\n                    const videoSources2 = [];\n\n                    if (matches) {\n                        const uniqueMatches = [...new Set(matches)];\n                    \n                        uniqueMatches.forEach(match => {\n                            const normalizedSrc = normalizeUrl(match.replace(/['\"]/g, ''));\n                            videoSources2.push(normalizedSrc);\n                        });\n                    }\n                    //反馈\n                    if (videoSources2.length > 0) {\n                        $('#messages').append(`<span>方法2，找到 ${videoSources2.length} 个视频。</span><br>`);\n                    }\n\n                    // 合并两种方法的结果\n                    videoSources = [...videoSources1, ...videoSources2];\n\n                    // 去重并标准化 URL\n                    const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|svg)$/i;\n\n                    videoSources = videoSources\n                                  .map(src => normalizeUrl(src.replace(/\\\\+/g, '')))\n                                  .filter(src => src) // 过滤空值\n                                  .filter(src => !imageExtensions.test(src)); // 移除图片地址\n                        \n                    videoSources = [...new Set(videoSources)];// 去重\n\n                    // 显示最终结果\n                    $('#messages').append(`<span>总共找到 ${videoSources.length} 个视频。</span><br>`);\n\n                    if (videoSources.length > 0) {\n                        $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                        videoSources.forEach((src, idx) => {\n                            $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                            $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                        });\n                    \n                        if (videoSources.length == 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').hide();\n                            updateVideoSource();\n                        } else if (videoSources.length > 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').show();\n                            updateVideoSource();\n                        } else {\n                            $('#video-container').hide();\n                            $('#video-url').hide();\n                            $('#video-source-container').hide();\n                        }\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-container').hide();\n                    }\n\n                    //提取图片\n                    const $imgContents = $(doc).find(config.imgSelector);\n                    const shouldSwap = config.swapImageAttributes;\n                    const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                    $('#images').append(newContents).show();\n                    if (newContents.length > 0) {\n                        $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                        newContents.each(function () {\n                            const imgSrc = $(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                            $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                        });\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                    }\n\n                    //提取图片和文本\n                    const textContents = $(doc).find(config.textSelector).map(function () {\n                        const $currentContents = $(this);\n                        $currentContents.find('img + br, script, video, source, iframe').remove();\n                        $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                        return $currentContents.html();\n                    }).get().join('');\n                    if (textContents.trim()) {\n                        $('#text').append(`<span>${textContents}</span><br>`).show();\n                        $('#messages').append(`<span>成功提取图文。</span><br>`);\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                    }\n\n                    if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                        setTimeout(() => { \n                            canLoadNextPage = true;\n                            loadContent(currentPageIndex + 1); \n                        }, config.delayTime);\n                    } else {\n                        canLoadNextPage = true;\n                        if (autoLoadInProgress) {\n                            hideLoadingStatus();\n                        }\n                    }\n                } catch (parseError) {\n                    $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                    handleLoadFailure(urls, index);\n                } finally {\n                    if (imageBox) imageBox.viewer.update();\n                    if (textBox) textBox.viewer.update();\n                }\n            },\n            error: function (jqXHR, textStatus, errorThrown) {\n                let errorMessage = `内容加载失败: ${urls[index]}`;\n                switch (textStatus) {\n                    case 'timeout':\n                        errorMessage += ', 请求超时';\n                        break;\n                    case 'abort':\n                        errorMessage += ', 请求被取消';\n                        break;\n                    case 'parsererror':\n                        errorMessage += ', 解析响应出错';\n                        break;\n                    default:\n                        errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                        break;\n                }\n                $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n                handleLoadFailure(urls, index);\n                }\n            });\n        }\n\n        // 处理加载失败的情况\n        function handleLoadFailure(urls, index) {\n            if (!loadAttempts[urls[index]]) {\n                loadAttempts[urls[index]] = 1;\n            } else {\n                loadAttempts[urls[index]]++;\n            }\n            if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n                const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n                $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n                setTimeout(() => { \n                    canLoadNextPage = true;\n                    loadContent(index); \n                }, config.retryDelayTime);\n            } else {\n                const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n                $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            }\n        }\n\n        // 更新视频源\n        function updateVideoSource() {\n            const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n            if (isNaN(selectedIndex) || !videoSources[selectedIndex]) {\n                $('#messages').append(`<span class=\"warn\">未找到有效的视频源。</span><br>`);\n                console.warn(\"Invalid or undefined video source:\", selectedIndex, videoSources);\n                return;\n            }\n\n            const selectedSource = videoSources[selectedIndex];\n            document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n            const videoSourceElement = document.getElementById('video-source');\n            videoSourceElement.src = selectedSource;\n\n            const videoElement = document.getElementById('video-element');\n            videoElement.load();\n\n            $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n            console.log(\"Updated video source to:\", selectedSource);\n        }\n\n        // 切换总页数显示状态\n        function toggleTotalPagesDisplay() {\n            if (urls.length > 1) {\n                $('#page').show();\n            } else {\n                $('#page').hide();\n            }\n        }\n\n        // 页面加载完成后执行的主要逻辑\n        $(document).ready(function () {\n            imageBox = document.getElementById('images');\n            textBox = document.getElementById('text');\n            if (imageBox && textBox) {\n                new Viewer(imageBox, { title: true, interval: 2000 });\n                new Viewer(textBox, { title: true, interval: 2000 });\n            }\n\n            const totalPagesText = config.totalPagesText;\n            const totalPages = parseInt(totalPagesText, 10) || 1;\n            const baseUrl = '{{baseUrl}}';\n\n            clearContainers();\n            $('#urls, #debug-info textarea, #video-url, #video-source-select').empty();\n            $('#urls, #messages, #debug-info, #video-url, #video-container, #video-source-container, #images, #text').hide();\n\n            buildUrls(totalPages, baseUrl);\n\n            const urlSelect = document.getElementById('url-select');\n            if (urlSelect.options.length > 0) {\n                urlSelect.value = '0'; \n\n                if (config.autoLoading) {\n                    autoLoadInProgress = true;\n                    for (let i = 0; i < urls.length; i++) {\n                        loadContent(i);\n                    }\n                } else {\n                    loadContent(0);\n                }\n            } else {\n                loadContent(0);\n            }\n\n            $('#url-select').change(function () {\n                clearContainers();\n                const selectedIndex = parseInt($(this).val());\n                loadContent(selectedIndex);\n            });\n            $('#prev-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex > 0) {\n                    loadContent(currentPageIndex - 1);\n                }\n            });\n            $('#next-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex < urls.length - 1) {\n                    loadContent(currentPageIndex + 1);\n                }\n            });\n            $('#auto-load-btn').click(function () {\n                autoLoadInProgress = true;\n                showLoadingStatus(1); \n                for (let i = currentPageIndex + 1; i < urls.length; i++) {\n                    loadContent(i);\n                }\n            });\n            $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n            $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n            $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n        });\n    </script>\n</body>\n</html>",
    "ruleImage": "img@data-src",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "em@text",
    "ruleTitle": "strong@text",
    "singleUrl": false,
    "sortUrl": "搜索🔍::/new/index.php?mod=search&kw={{source.getVariable()}}&page={{page}}\n最新::/new/index.php?page={{page}}\n国产自拍::/new/index.php?mod=forumdisplay&fid=10065&page={{page}}\n欧美极品::/new/index.php?mod=forumdisplay&fid=10066&page={{page}}\n日韩无码::/new/index.php?mod=forumdisplay&fid=10067&page={{page}}\n日韩有码::/new/index.php?mod=forumdisplay&fid=10068&page={{page}}\n中文字幕::/new/index.php?mod=forumdisplay&fid=10069&page={{page}}\n动漫精品::/new/index.php?mod=forumdisplay&fid=10070&page={{page}}\n极品萝莉::/new/index.php?mod=forumdisplay&fid=10071&page={{page}}\n强奸乱伦::/new/index.php?mod=forumdisplay&fid=10072&page={{page}}\n童颜巨乳::/new/index.php?mod=forumdisplay&fid=10073&page={{page}}\n三级自慰::/new/index.php?mod=forumdisplay&fid=10075&page={{page}}",
    "sourceComment": "xxrbs.com",
    "sourceGroup": "678",
    "sourceIcon": "https://xn--bwy.taojing62.buzz/upload/155042831.jpg",
    "sourceName": "日鲍社",
    "sourceUrl": "https://879.xxrbs.biz/"
  },
  {
    "articleStyle": 0,
    "customOrder": 307,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1769582869551,
    "loadWithBaseUrl": true,
    "ruleArticles": "article",
    "ruleContent": "class.dplayer@all<js>\nresult=result.match(/http.*m3u8/)[0]##\\</js>{{@@title@text##正在播放:|永久.*}}\n<video src=\"{{result}}\" width=\"100%\" height=\"auto\" controls></video>",
    "ruleImage": "@js:\"https://mgtv-bbqn.oss-cn-beijing.aliyuncs.com/1/2310310103284A29582395A850D3A0F5C26862354MzFE/SrRlbr0.gif\"",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "class.post-card-info@text",
    "ruleTitle": "h2@text##热榜.*",
    "singleUrl": false,
    "sortUrl": "学生::/search/学生/{{page}}/\n全部①::/<,page/{{page}}/>\n全部②::/page/3/\n全部③::/page/5/\n搜索::/search/{{source.getVariable()}}/{{page}}/\n偷情::/search/偷情/{{page}}/\n白虎::/search/白虎/{{page}}/\n反差::/search/反差/{{page}}/\n极品::/search/极品/{{page}}/\n萝莉::/search/萝莉/{{page}}/\n00后::/search/00后/{{page}}/\n女同::/search/女同/{{page}}/\n双马尾::/search/双马尾/{{page}}/\n学院::/search/学院/{{page}}/\n高三::/search/高三/{{page}}/\n高中::/search/高中/{{page}}/\n少女::/search/少女/{{page}}/\n情趣::/search/情趣/{{page}}/\n自拍::/search/自拍/{{page}}/\n大学::/search/大学/{{page}}/\n大一::/search/大一/{{page}}/\n学妹::/search/学妹/{{page}}/\n校花::/search/校花/{{page}}/\n调教::/search/调教/{{page}}/\n女神::/search/女神/{{page}}/\n少妇::/search/少妇/{{page}}/\n巨乳::/search/巨乳/{{page}}/\n孕妇::/search/孕妇/{{page}}/\n口::/search/口交/{{page}}/\n精::/search/精/{{page}}/",
    "sourceComment": "//多个视频不会写\n发:https://heiliao.su",
    "sourceGroup": "678",
    "sourceIcon": "http://p6.itc.cn/images01/20201202/8d012ed623d647a78635557e7d235ab6.jpeg",
    "sourceName": "黑料不打洋🥝",
    "sourceUrl": "https://heiliao1076.pro/"
  },
  {
    "articleStyle": 0,
    "customOrder": 313,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "data",
    "ruleImage": "pic",
    "ruleLink": "playlink",
    "ruleNextPage": "page",
    "rulePubDate": "{{$.category}}😊{{$.html5introduce}}",
    "ruleTitle": "title",
    "singleUrl": false,
    "sourceGroup": "678",
    "sourceIcon": "",
    "sourceName": "4399变态版在线玩",
    "sourceUrl": "http://h.4399.com/data/android_s148_{{page}}.js?t=1650965242"
  },
  {
    "articleStyle": 1,
    "customOrder": 317,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 14; zh-cn; M2102K1AC Build/UKQ1.231207.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/109.0.5414.118 Mobile Safari/537.36 MQQBrowser/10.1.0\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".thumbnail-group@li",
    "ruleContent": "<js>\np=result.match(/vod\\_data.*url\\\"\\:\\\"(.*?)\\\"\\,\\\"url/);\np=(p?p[1]:1).replace(/\\\\/g,'')||1; pi=java.getString('.breadcrumbs@span@text')||1;\n`<html>\n    <head>\n        <meta name=\"viewport\" content=\"width=device-width\">\n        <style>\n            body {\n                margin: 0;\n                font-family: Arial, sans-serif;\n                background: linear-gradient(135deg, #ece9e6, #ffffff);\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                justify-content: flex-start;\n                padding: 20px;\n            }\n            .container {\n                width: 100%;\n                max-width: 800px;\n                background: #fff;\n                border-radius: 10px;\n                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n                overflow: hidden;\n                margin-bottom: 20px;\n            }\n            h3 {\n                margin: 0;\n                padding: 10px 20px;\n                font-size: 0.9em;\n                background: #333;\n                color: #fff;\n                border-radius: 10px 10px 0 0;\n            }\n            .video-container {\n                width: 100%;\n                background: #000;\n                position: relative;\n            }\n            video {\n                width: 100%;\n                height: auto;\n                display: block;\n            }\n            .info-container {\n                padding: 20px;\n            }\n            .info-container p {\n                margin: 10px 0;\n                color: #555;\n            }\n            .info-container p span {\n                font-weight: bold;\n                color: #000;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container\">\n        <h3>${pi}</h3>\n            <div class=\"video-container\">\n                <video controls autoplay name=\"media\" id=\"videoPlayer\">\n                    <source src=\"${p}\" type=\"video/mp4\">\n                </video>\n            </div>\n            <div class=\"info-container\">\n                \n            </div>\n        </div>\n\n        <script>\n            // 获取视频元素\n            const video = document.getElementById('videoPlayer');\n            let touchStartX = 0;\n            let touchStartY = 0;\n            let touchStartTime = 0;\n            let isLongPress = false;\n\n            // 滑动快进\n            video.addEventListener('touchstart', (e) => {\n                touchStartX = e.touches[0].clientX;\n                touchStartY = e.touches[0].clientY;\n                touchStartTime = Date.now();\n                isLongPress = false;\n            });\n\n            video.addEventListener('touchmove', (e) => {\n                const deltaX = e.touches[0].clientX - touchStartX;\n                const deltaY = e.touches[0].clientY - touchStartY;\n\n                // 如果是水平滑动，且未进入长按状态\n                if (Math.abs(deltaX) > Math.abs(deltaY) && !isLongPress) {\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX / 100); // 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                }\n            });\n\n            // 长按快进\n            video.addEventListener('touchend', (e) => {\n                const touchEndTime = Date.now();\n                const touchDuration = touchEndTime - touchStartTime;\n\n                // 如果长按时间超过500ms，进入长按快进状态\n                if (touchDuration > 500) {\n                    isLongPress = true;\n\n                    // 在长按状态下，根据滑动距离快进\n                    const deltaX = e.changedTouches[0].clientX - touchStartX;\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX / 100); // 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                } else {\n                    isLongPress = false;\n                }\n            });\n\n            // 防止默认行为（如页面滚动）\n            video.addEventListener('touchmove', (e) => {\n                e.preventDefault();\n            });\n        </script>\n    </body>\n</html>`;\n\n</js>",
    "ruleImage": "img@src",
    "ruleLink": "a@href\n<js>\nresult=result.replace('detail','play');\nif(!result.includes('/sid/1/nid/1.html')){\n\tresult=result.replace('.html','/sid/1/nid/1.html');\n\t}\nresult\n</js>",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "p@text",
    "ruleTitle": "h5@text||img@alt",
    "singleUrl": false,
    "sortUrl": "搜索🔍::/index.php/vod/search/page/{{page}}/wd/{{source.getVariable()}}.html\n\n偷拍自拍::/index.php/vod/type/id/2/page/{{page}}.html\n国产精品::/index.php/vod/type/id/3/page/{{page}}.html\n伦理三级::/index.php/vod/type/id/4/page/{{page}}.html\n主播大秀::/index.php/vod/type/id/5/page/{{page}}.html\n网曝黑料::/index.php/vod/type/id/6/page/{{page}}.html\n热门头条::/index.php/vod/type/id/7/page/{{page}}.html\n抖音视频::/index.php/vod/type/id/8/page/{{page}}.html\n素人自拍::/index.php/vod/type/id/9/page/{{page}}.html\n\n刘玥::/index.php/vod/type/id/10/page/{{page}}.html\n过膝袜::/index.php/vod/type/id/11/page/{{page}}.html\n探花系列::/index.php/vod/type/id/12/page/{{page}}.html\n玩偶姐姐::/index.php/vod/type/id/13/page/{{page}}.html\ncosplay::/index.php/vod/type/id/14/page/{{page}}.html\n学生诱惑::/index.php/vod/type/id/15/page/{{page}}.html\n台湾粉红兔::/index.php/vod/type/id/16/page/{{page}}.html\n\n口交颜射::/index.php/vod/type/id/17/page/{{page}}.html\n女优明星::/index.php/vod/type/id/18/page/{{page}}.html\n翹臀美尻::/index.php/vod/type/id/19/page/{{page}}.html\n亚洲无码::/index.php/vod/type/id/20/page/{{page}}.html\n中文字幕::/index.php/vod/type/id/21/page/{{page}}.html\n熟女人妻::/index.php/vod/type/id/22/page/{{page}}.html\n亚洲有码::/index.php/vod/type/id/23/page/{{page}}.html\n强奸乱伦::/index.php/vod/type/id/24/page/{{page}}.html\n\n巨乳美乳::/index.php/vod/type/id/25/page/{{page}}.html\n制服丝袜::/index.php/vod/type/id/26/page/{{page}}.html\n少女萝莉::/index.php/vod/type/id/27/page/{{page}}.html\n卡通动漫::/index.php/vod/type/id/28/page/{{page}}.html\n东京热::/index.php/vod/type/id/29/page/{{page}}.html\n素人搭讪::/index.php/vod/type/id/31/page/{{page}}.html\n\n国产传媒::/index.php/vod/type/id/32/page/{{page}}.html\n麻豆传媒::/index.php/vod/type/id/33/page/{{page}}.html\n杏吧传媒::/index.php/vod/type/id/34/page/{{page}}.html\n兔子先生::/index.php/vod/type/id/35/page/{{page}}.html\n天美传媒::/index.php/vod/type/id/36/page/{{page}}.html\nSA国际传媒::/index.php/vod/type/id/37/page/{{page}}.html\n性视界::/index.php/vod/type/id/38/page/{{page}}.html\n扣扣传媒::/index.php/vod/type/id/39/page/{{page}}.html\n\n果冻传媒::/index.php/vod/type/id/40/page/{{page}}.html\n星空无限::/index.php/vod/type/id/41/page/{{page}}.html\n精东影业::/index.php/vod/type/id/42/page/{{page}}.html\n葫芦影业::/index.php/vod/type/id/43/page/{{page}}.html\n蜜桃传媒::/index.php/vod/type/id/44/page/{{page}}.html\n起点传媒::/index.php/vod/type/id/45/page/{{page}}.html\n皇家华人::/index.php/vod/type/id/46/page/{{page}}.html\nJVID::/index.php/vod/type/id/47/page/{{page}}.html\n\nSWAG::/index.php/vod/type/id/48/page/{{page}}.html\n水果派::/index.php/vod/type/id/49/page/{{page}}.html\n91传媒::/index.php/vod/type/id/50/page/{{page}}.html\n渡边传媒::/index.php/vod/type/id/51/page/{{page}}.html\n糖心传媒::/index.php/vod/type/id/52/page/{{page}}.html\n乐播传媒::/index.php/vod/type/id/53/page/{{page}}.html\n\n多人群交::/index.php/vod/type/id/54/page/{{page}}.html\nAl换脸::/index.php/vod/type/id/55/page/{{page}}.html\n重口色情::/index.php/vod/type/id/56/page/{{page}}.html\n同性专区::/index.php/vod/type/id/57/page/{{page}}.html\n淫妻绿帽::/index.php/vod/type/id/58/page/{{page}}.html\nTS人妖::/index.php/vod/type/id/59/page/{{page}}.html\nVR视角::/index.php/vod/type/id/60/page/{{page}}.html\n欺辱凌辱::/index.php/vod/type/id/61/page/{{page}}.html\n\n野外激情::/index.php/vod/type/id/62/page/{{page}}.html\nSM调教::/index.php/vod/type/id/63/page/{{page}}.html\n恐怖色情::/index.php/vod/type/id/64/page/{{page}}.html\n海外一区::/\n欧美精品::/index.php/vod/type/id/65/page/{{page}}.html\n韩国主播::/index.php/vod/type/id/66/page/{{page}}.html\n极品媚黑::/index.php/vod/type/id/67/page/{{page}}.html\n",
    "sourceComment": "大爱天尊20251010：修补分类索引与实际分类不匹配，替换源url为目前验证可用的网站\n大爱天尊20251006：修补搜索不能播放\n\n源变量里可以设置要搜索的内容，要搜什么直接填\n\n某些视频播放不了，可以在播放界面，点击右上角三个点，点击用浏览器打开，如果浏览器也播放不了，那就不是源的问题。（一般当天网站更新的视频可能看不了）\n\n部分图片不能显示，是因为网站抓来的视频本来就没图片\n\n源url里面的网站失效了，可以在下面的发布页里面找一个自己能访问的网址替换上去。\n发布页：https://wuxiants.github.io/",
    "sourceGroup": "678",
    "sourceIcon": "https://images.icon-icons.com/1147/PNG/512/1486486316-arrow-film-movie-play-player-start-video_81236.png",
    "sourceName": "无限臀山",
    "sourceUrl": "https://wxts.wuxiants569.com/#大爱"
  },
  {
    "articleStyle": 1,
    "customOrder": 318,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "[class=\"item\"]@a",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取</title>\n<!-- v2025.05.10 -->\n\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body { font-family: Arial, sans-serif; font-size: 16px; }\n    #title, #page, #loading-status { margin: 0 auto; font-size: 20px; text-align: center; }\n    #description, #urls, #video-url, #video-sources, #messages { width: 100%; max-width: 800px; margin: 1.5px auto; font-size: 14px; text-align: left; word-wrap: break-word; white-space: pre-wrap; }\n    #text, #text :not(img), #text img + * { text-indent: 2em; width: 100%; font-size: 16px; line-height: 1.5em; margin-top: 0; margin-bottom: 0; word-wrap: break-word; white-space: pre-wrap; }\n    img, #text img { width: 100%; height: auto; display: block; margin-bottom: 1.5px; }\n    .flex-container { display: flex; justify-content: center; align-items: center; gap: 10px; margin: 1.5px 0; font-size: 14px; }\n    button, select { flex: 1 1 31%; padding: 3px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box; cursor: pointer; background-color: #f9f9f9; transition: background-color 0.3s ease; margin: 1.5px; min-width: 0; font-size: 14px; }\n    #url-select, #video-source-select { flex: 1 1 100%; margin-left: 0; margin-right: 0; text-align: center; }\n    #video-element { width: 100%; height: auto; }\n    textarea { width: 100%; height: auto; min-height: 100px; box-sizing: border-box; resize: vertical; }\n    .error, .warn { color: red; }\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\" style=\"display:none;\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    \n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    \n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\" style=\"display: none;\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\" id=\"video-source-container\" style=\"display: none;\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n\n    <script>\n        // 配置对象，包含各种选择器、延迟时间等配置项\n        const config = {    \n            videoSelector: 'body', // 视频选择器\n            imgSelector: '.gridlane-box-inside img,.photos figure img,.content p img', // 图片选择器\n            textSelector: '#content', // 文本选择器\n            debugSelector: '#content, .page, .pager, .content, script', // 调试信息选择器\n            swapImageAttributes: false, // 是否交换图片属性\n            delayTime: 1500, // 延迟提取时间\n            retryDelayTime: 1500, // 重试加载延迟时间\n            maxLoadAttempts: 3, // 最大加载次数\n            autoLoading: false, // true自动模式，false单页模式\n            debugOnce: 0, // 只在特定索引输出一次调试信息\n            totalPagesText: '{{@@.page.0@a.-2@textNodes}}', // 总页码\n            urlSuffixToRemove: /\\.html$/, // 移除url后缀\n            pageUrlText: '{urlPrefix}_{i}.html', // 拼接URL模板        \n            ListMode: true, // true网址列表模式，false网址拼接模式    \n            initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n            initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n            sourceurl: '', // 来源URL前缀\n        };\n\n        let videoSources = []; // 存储视频源数组\n        let loadAttempts = {}; // 记录每个URL的加载尝试次数\n        let urls = []; // 存储所有页面的URL\n        let imageBox;\n        let textBox;\n        let currentPageIndex = 0; // 当前页面索引\n        let canLoadNextPage = true; // 控制是否可以加载下一页\n        let autoLoadInProgress = false; // 自动加载状态\n\n        // 构建URL列表\n        function buildUrls(totalPages, baseUrl) {\n            let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n            let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n            if (config.ListMode && initialUrlsArray.length > 0) {\n                if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n                    $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n                }\n\n                urls = initialUrlsArray.map(url => {\n                    if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                        return config.sourceurl.replace(/\\/$/, '') + url;\n                    } else {\n                        return url;\n                    }\n                });\n\n                urls.forEach((url, index) => {\n                    const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            } else {\n                if (totalPages === 1) {\n                    urls.push(baseUrl);\n                } else {\n                    urls.push(baseUrl);\n                    for (let i = 2; i <= totalPages; i++) {\n                        urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n                    }\n                }\n\n                urls.forEach((url, index) => {\n                    const name = `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            }\n\n            $('#total-pages').text(urls.length);\n            toggleNavigationButtons();\n            toggleTotalPagesDisplay();\n        }\n\n        // 规范化URL\n        function normalizeUrl(url) {\n            if (typeof url !== 'string' || !url.trim()) {\n                return '';\n            }\n            const match = url.match(/['\"](.*?)['\"]/);\n            if (match && match[1]) {\n                url = match[1];\n            }\n\n            function processUrl(str) {\n                str = str.trim();\n                str = str.replace(/\\\\u[\\dA-F]{4}/gi, match => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n                str = decodeURIComponent(str);\n                str = str.replace(/^http:\\/([^/])/, 'http://$1');\n                str = str.replace(/^https:\\/([^/])/, 'https://$1');\n                return str;\n            }\n            return processUrl(url);\n        }\n\n        // 清空容器内容\n        function clearContainers() {\n            $('#messages').empty();\n            $('#images').empty();\n            $('#text').empty();\n        }\n\n        // 更新图像源\n        function updateImageSrc(elements, shouldSwap) {\n            elements.each(function () {\n                const $this = $(this);\n                const attrsToUpdate = {};\n                if (shouldSwap) {\n                    ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                        if ($this.attr(attr)) {\n                            attrsToUpdate['src'] = $this.attr(attr);\n                        }\n                    });\n                }\n                $this.attr(attrsToUpdate);\n            });\n            return elements;\n        }\n\n        // 切换导航按钮显示状态\n        function toggleNavigationButtons() {\n            if ($('#url-select option').length > 1 && !config.autoLoading) {\n                $('#loading-buttons').show();\n                $('#url-select').show();\n            } else {\n                $('#loading-buttons').hide();\n                $('#url-select').hide();\n            }\n        }\n\n        // 显示加载状态\n        function showLoadingStatus(pageNumber) {\n            const selectedOption = $('#url-select option:selected').text();\n            $('#loading-status').text(`正在加载：${selectedOption}`).show();\n        }\n\n        // 隐藏加载状态\n        function hideLoadingStatus() {\n            $('#loading-status').hide();\n        }\n\n        // 加载指定索引的内容\n        function loadContent(index) {\n            if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n            canLoadNextPage = false;\n            currentPageIndex = index;\n            $('#url-select').val(index);\n            $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span></div>`);\n            if (autoLoadInProgress) {\n                showLoadingStatus(index + 1);\n            }\n            $.ajax({\n                url: urls[index],\n                type: 'GET',\n                success: function (data) {\n                    try {\n                    const $data = $(data);\n                    let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                        .replace(/src=\"upload/gi, 'src=\"/upload')\n                        .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                        .replace(/\\\\\\//g, '/');\n                    const parser = new DOMParser();\n                    const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                    if (config.debugOnce === index) {\n                        const debugElements = $(doc).find(config.debugSelector);\n                        if (debugElements.length > 0) {\n                            const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                        } else {\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                        }\n                    }\n                    // 方法1：提取视频\n                    const videoSources1 = [];\n                    const videoContents = $(doc).find(config.videoSelector);\n                    const videoTags = $(videoContents).find('video, source');\n                    videoTags.each(function() {\n                        const videosrc = $(this).attr('src') || \n                                     $(this).attr('data-src') || \n                                     $(this).attr('data-original') || '';\n                        \n                        if (videosrc) {\n                            videoSources1.push(videosrc);\n                        }\n                    });\n                    //反馈\n                    if (videoSources1.length > 0) {\n                        $('#messages').append(`<span>方法1，找到 ${videoSources1.length} 个视频。</span><br>`);\n                    }\n\n                    // 方法2：正则提取视频\n                    const regex = /['\"]https?[^'<>\"]+(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)([^'<>\"]+)?['\"]/gi;\n                    const matches = data.match(regex);\n                    const videoSources2 = [];\n\n                    if (matches) {\n                        const uniqueMatches = [...new Set(matches)];\n                    \n                        uniqueMatches.forEach(match => {\n                            const normalizedSrc = normalizeUrl(match.replace(/['\"]/g, ''));\n                            videoSources2.push(normalizedSrc);\n                        });\n                    }\n                    //反馈\n                    if (videoSources2.length > 0) {\n                        $('#messages').append(`<span>方法2，找到 ${videoSources2.length} 个视频。</span><br>`);\n                    }\n\n                    // 合并两种方法的结果\n                    videoSources = [...videoSources1, ...videoSources2];\n\n                    // 去重并标准化 URL\n                    const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|svg)$/i;\n\n                    videoSources = videoSources\n                                  .map(src => normalizeUrl(src.replace(/\\\\+/g, '')))\n                                  .filter(src => src) // 过滤空值\n                                  .filter(src => !imageExtensions.test(src)); // 移除图片地址\n                        \n                    videoSources = [...new Set(videoSources)];// 去重\n\n                    // 显示最终结果\n                    $('#messages').append(`<span>总共找到 ${videoSources.length} 个视频。</span><br>`);\n\n                    if (videoSources.length > 0) {\n                        $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                        videoSources.forEach((src, idx) => {\n                            $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                            $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                        });\n                    \n                        if (videoSources.length == 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').hide();\n                            updateVideoSource();\n                        } else if (videoSources.length > 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').show();\n                            updateVideoSource();\n                        } else {\n                            $('#video-container').hide();\n                            $('#video-url').hide();\n                            $('#video-source-container').hide();\n                        }\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-container').hide();\n                    }\n\n                    //提取图片\n                    const $imgContents = $(doc).find(config.imgSelector);\n                    const shouldSwap = config.swapImageAttributes;\n                    const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                    $('#images').append(newContents).show();\n                    if (newContents.length > 0) {\n                        $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                        newContents.each(function () {\n                            const imgSrc = $(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                            $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                        });\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                    }\n\n                    //提取图片和文本\n                    const textContents = $(doc).find(config.textSelector).map(function () {\n                        const $currentContents = $(this);\n                        $currentContents.find('img + br, script, video, source, iframe').remove();\n                        $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                        return $currentContents.html();\n                    }).get().join('');\n                    if (textContents.trim()) {\n                        $('#text').append(`<span>${textContents}</span><br>`).show();\n                        $('#messages').append(`<span>成功提取图文。</span><br>`);\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                    }\n\n                    if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                        setTimeout(() => { \n                            canLoadNextPage = true;\n                            loadContent(currentPageIndex + 1); \n                        }, config.delayTime);\n                    } else {\n                        canLoadNextPage = true;\n                        if (autoLoadInProgress) {\n                            hideLoadingStatus();\n                        }\n                    }\n                } catch (parseError) {\n                    $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                    handleLoadFailure(urls, index);\n                } finally {\n                    if (imageBox) imageBox.viewer.update();\n                    if (textBox) textBox.viewer.update();\n                }\n            },\n            error: function (jqXHR, textStatus, errorThrown) {\n                let errorMessage = `内容加载失败: ${urls[index]}`;\n                switch (textStatus) {\n                    case 'timeout':\n                        errorMessage += ', 请求超时';\n                        break;\n                    case 'abort':\n                        errorMessage += ', 请求被取消';\n                        break;\n                    case 'parsererror':\n                        errorMessage += ', 解析响应出错';\n                        break;\n                    default:\n                        errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                        break;\n                }\n                $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n                handleLoadFailure(urls, index);\n                }\n            });\n        }\n\n        // 处理加载失败的情况\n        function handleLoadFailure(urls, index) {\n            if (!loadAttempts[urls[index]]) {\n                loadAttempts[urls[index]] = 1;\n            } else {\n                loadAttempts[urls[index]]++;\n            }\n            if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n                const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n                $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n                setTimeout(() => { \n                    canLoadNextPage = true;\n                    loadContent(index); \n                }, config.retryDelayTime);\n            } else {\n                const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n                $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            }\n        }\n\n        // 更新视频源\n        function updateVideoSource() {\n            const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n            if (isNaN(selectedIndex) || !videoSources[selectedIndex]) {\n                $('#messages').append(`<span class=\"warn\">未找到有效的视频源。</span><br>`);\n                console.warn(\"Invalid or undefined video source:\", selectedIndex, videoSources);\n                return;\n            }\n\n            const selectedSource = videoSources[selectedIndex];\n            document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n            const videoSourceElement = document.getElementById('video-source');\n            videoSourceElement.src = selectedSource;\n\n            const videoElement = document.getElementById('video-element');\n            videoElement.load();\n\n            $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n            console.log(\"Updated video source to:\", selectedSource);\n        }\n\n        // 切换总页数显示状态\n        function toggleTotalPagesDisplay() {\n            if (urls.length > 1) {\n                $('#page').show();\n            } else {\n                $('#page').hide();\n            }\n        }\n\n        // 页面加载完成后执行的主要逻辑\n        $(document).ready(function () {\n            imageBox = document.getElementById('images');\n            textBox = document.getElementById('text');\n            if (imageBox && textBox) {\n                new Viewer(imageBox, { title: true, interval: 2000 });\n                new Viewer(textBox, { title: true, interval: 2000 });\n            }\n\n            const totalPagesText = config.totalPagesText;\n            const totalPages = parseInt(totalPagesText, 10) || 1;\n            const baseUrl = '{{baseUrl}}';\n\n            clearContainers();\n            $('#urls, #debug-info textarea, #video-url, #video-source-select').empty();\n            $('#urls, #messages, #debug-info, #video-url, #video-container, #video-source-container, #images, #text').hide();\n\n            buildUrls(totalPages, baseUrl);\n\n            const urlSelect = document.getElementById('url-select');\n            if (urlSelect.options.length > 0) {\n                urlSelect.value = '0'; \n\n                if (config.autoLoading) {\n                    autoLoadInProgress = true;\n                    for (let i = 0; i < urls.length; i++) {\n                        loadContent(i);\n                    }\n                } else {\n                    loadContent(0);\n                }\n            } else {\n                loadContent(0);\n            }\n\n            $('#url-select').change(function () {\n                clearContainers();\n                const selectedIndex = parseInt($(this).val());\n                loadContent(selectedIndex);\n            });\n            $('#prev-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex > 0) {\n                    loadContent(currentPageIndex - 1);\n                }\n            });\n            $('#next-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex < urls.length - 1) {\n                    loadContent(currentPageIndex + 1);\n                }\n            });\n            $('#auto-load-btn').click(function () {\n                autoLoadInProgress = true;\n                showLoadingStatus(1); \n                for (let i = currentPageIndex + 1; i < urls.length; i++) {\n                    loadContent(i);\n                }\n            });\n            $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n            $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n            $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n        });\n    </script>\n</body>\n</html>",
    "ruleImage": "img@data-original",
    "ruleLink": "a@href##(\\d+)##/vodplay/$1-1-1.html###",
    "ruleNextPage": "page",
    "rulePubDate": "em@text",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "搜索🔍::/index.php/vod/search/page/{{page}}/wd/{{source.getVariable()}}.html\n播放一区::/index.php/vod/type/id/1/page/{{page}}.html\n精品推荐::/index.php/vod/type/id/6/page/{{page}}.html\n国产色情::/index.php/vod/type/id/7/page/{{page}}.html\n主播直播::/index.php/vod/type/id/8/page/{{page}}.html\n亚洲无码::/index.php/vod/type/id/9/page/{{page}}.html\n亚洲有码::/index.php/vod/type/id/10/page/{{page}}.html\n中文字幕::/index.php/vod/type/id/11/page/{{page}}.html\n人妻熟女::/index.php/vod/type/id/20/page/{{page}}.html\n成人动漫::/index.php/vod/type/id/21/page/{{page}}.html\n自拍偷拍::/index.php/vod/type/id/22/page{{page}}.html\n制服丝袜::/index.php/vod/type/id/23/page/{{page}}.html\n口交颜射::/index.php/vod/type/id/24/page/{{page}}.html\n强奸乱伦::/index.php/vod/type/id/13\n/page{{page}}.html\n萝莉少女::/index.php/vod/type/id/15/page/{{page}}.html\n日本精品::/index.php/vod/type/id/26/page{{page}}.html\ncosplay::/index.php/vod/type/id/27/page/{{page}}.html\n素人自拍::/index.php/vod/type/id/28/page/{{page}}.html\n台湾辣妹::/index.php/vod/type/id/29/page{{page}}.html\n韩国御姐::/index.php/vod/type/id/30/page/{{page}}.html\n唯美港姐::/index.php/vod/type/id/31/page/{{page}}.html\n东南亚AV::/index.php/vod/type/id/32/page/{{page}}.html\n欺辱凌辱::/index.php/vod/type/id/33/page/{{page}}.html\n剧情介绍::/index.php/vod/type/id/35/page/{{page}}.html\n多人多p::/index.php/vod/type/id/36/page/{{page}}.html\n91探花::/index.php/vod/type/id/37/page/{{page}}.html\n自拍流出::/index.php/vod/type/id/38/page/{{page}}.html\n野外露出::/index.php/vod/type/id/39/page/{{page}}.html\n古装扮演::/index.php/vod/type/id/40/page/{{page}}.html\n可爱学生::/index.php/vod/type/id/41/page{{page}}.html\n女同性爱::/index.php/vod/type/id/45/page/{{page}}.html\n重口猎奇::/index.php/vod/type/id/46/page/{{page}}.html\n人兽大战::/index.php/vod/type/id/47/page/{{page}}.html\n人妖系列::/index.php/vod/type/id/48/page/{{page}}.html\nSM调教::/index.php/vod/type/id/49/page{{page}}.html\n网红主播::/index.php/vod/type/id/50/page/{{page}}.html\n探花约炮::/index.php/vod/type/id/51/page/{{page}}.html",
    "sourceComment": "/index.php/vod/search/page/{{page}}/wd/{{source.getVariable()}}.html",
    "sourceGroup": "678",
    "sourceIcon": "https://images2.imgbox.com/fb/29/QxzvMOV6_o.gif",
    "sourceName": "暴力重口",
    "sourceUrl": "https://www.baolzk10.sbs###"
  }
]