VirtualTaboo直播优化
https://zh.virtualtaboo.live##吉吉国王
CVGghhv (8592)7天前
更新了API
{
"bookSourceComment": "如遇卡顿在章节URL切换下面线路\n A\": \"doppiocdn.com\",\n \"B\": \"doppiocdn1.com\",\n \"C\": \"doppiocdn.media\",\n \"D\": \"doppiocdn.net\",\n \"E\": \"doppiocdn.org\",\n \"F\": \"doppiocdn.live\",",
"bookSourceGroup": "视频直播",
"bookSourceName": "VirtualTaboo直播优化",
"bookSourceType": 4,
"bookSourceUrl": "https:\/\/zh.virtualtaboo.live##吉吉国王",
"customButton": false,
"customOrder": 4,
"enabled": true,
"enabledCookieJar": false,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "@js:var currentPrimaryTag = 'girls';\nlet sort = [], push = (t, u, p) => sort.push({ title: t, url: u, style: { layout_flexBasisPercent: p } });\n\nlet data = JSON.parse(java.ajax('https:\/\/zh.virtualtaboo.live\/api\/front\/models\/liveTags?primaryTag=girls&withMixedTags=true&sac=true'));\nlet tagGroups = data.liveTagGroups || [], tagDetails = data.liveTagDetails || {};\n\nlet tagNameMap = {\n 'tagLanguageChinese':'中文','tagLanguageUkrainian':'乌克兰语','autoTagNew':'新主播','autoTagVr':'VR直播',\n 'subcultureBdsm':'虐恋','groupShow':'群组秀','ageTeen':'18+','ageYoung':'22+','ageMilf':'熟女',\n 'ageMature':'成熟','ageOld':'老年','ethnicityMiddleEastern':'中东','ethnicityAsian':'亚洲','ethnicityEbony':'黑人',\n 'ethnicityIndian':'印度','ethnicityLatino':'拉丁','ethnicityMultiracial':'混血','ethnicityWhite':'白人',\n 'bodyTypePetite':'娇小','bodyTypeAthletic':'运动型','bodyTypeMedium':'匀称','bodyTypeCurvy':'曲线型',\n 'bodyTypeBBW':'大码美女','bodyTypeBig':'丰满','hairColorBlonde':'金发','hairColorBrown':'棕发',\n 'hairColorBlack':'黑发','hairColorRed':'红发','hairColorColorful':'彩发','hairColorHairless':'无毛',\n 'privatePriceEight':'8元\/分钟','privatePriceSixteenToTwentyFour':'16-24元\/分钟','privatePriceThirtyTwoSixty':'32-60元\/分钟',\n 'privatePriceNinetyPlus':'90+元\/分钟','autoTagBestPrivates':'最佳私密秀','autoTagRecordablePrivate':'可录制私密秀',\n 'autoTagSpy':'可窥视','autoTagP2P':'P2P直播','autoTagInteractiveToy':'互动玩具','mobile':'手机直播',\n 'tagGroupSex':'群交','specificsBigTits':'巨乳','specificsHairy':'有毛','doPublicPlace':'公共场合',\n 'specificsBigAss':'大屁股','doAnal':'肛交','doSquirt':'喷水','fuckMachine':'炮机','doHardcore':'硬核',\n 'doBlowjob':'口交','specificSmallTits':'贫乳','specificPregnant':'孕妇','doFisting':'拳交',\n 'doMasturbation':'自慰','specificShaven':'剃毛','doDeepThroat':'深喉','doDildoOrVibrator':'假阳具\/震动器',\n 'doFootFetish':'恋足','doOffice':'办公室','subcultureGoth':'哥特','jerkOffInstruction':'射精指导',\n 'subcultureSwingers':'交换伴侣','doCosplay':'Cosplay','doSexToys':'性玩具','doTalk':'聊天',\n 'subcultureEmo':'Emo','subcultureCuckold':'出轨','subcultureMistresses':'情妇','videoGames':'电玩',\n 'doStriptease':'脱衣舞','asmr':'ASMR','doYoga':'瑜伽','doCooking':'烹饪','autoTagNonNude':'非全裸',\n 'specificInterracial':'跨种族','specificsTattoos':'纹身','specificsPiercing':'穿孔','autoTagLovense':'Lovense',\n 'latex':'乳胶','doRolePlay':'角色扮演','leather':'皮革','autoTagKiiroo':'Kiiroo','corset':'紧身内衣',\n 'doAnalToys':'后庭玩具','doNippleToys':'乳头玩具','specificBigClit':'大阴蒂','specificBigNipples':'大乳头',\n 'specificHairyArmpits':'腋毛','specificTrimmed':'修剪','specificTomboy':'假小子','specificQueer':'酷儿',\n 'specificNonBinary':'非二元性别','subcultureEgirl':'电子女孩','subcultureAnime':'动漫女孩',\n 'subcultureGlamour':'高贵','subcultureKpop':'韩流','subcultureHousewives':'家庭主妇',\n 'subcultureGymBabe':'健身宝贝','subcultureRomantic':'浪漫','subculturePunks':'朋克',\n 'subcultureNerds':'书呆子','subcultureGamers':'玩家','subcultureStudent':'学生',\n 'subcultureClubber':'夜店女郎','subcultureBottom':'Bottom','subcultureTop':'Top',\n 'subcultureChubbies':'胖熊','subcultureCubs':'小熊','subcultureDragQueens':'变装皇后',\n 'subcultureEboy':'E-boy','subcultureGymRats':'健身狂','subcultureHunks':'猛男',\n 'subcultureJocks':'运动男','subcultureOtters':'水獭','subcultureStuds':'种马',\n 'doEroticDance':'色情舞','cockRating':'大屌评分','doEjaculation':'射精','doTwerk':'电臀舞',\n 'doAssToMouth':'肛交到口交','doDoublePenetration':'双茎插入','doOrgasm':'高潮',\n 'doFoursome':'四人性交','doAhegao':'高潮脸','doCreamPie':'体内射精','doDoggyStyle':'狗式',\n 'doPussyLicking':'舔鲍鱼','doBukkake':'集体颜射','doShower':'洗澡','doHumiliation':'羞辱',\n 'doOilShow':'精油表演','doCumshot':'颜射','doGape':'开肛','doCamelToe':'阴部骆驼趾',\n 'doFlashing':'快闪裸体','doCowgirl':'骑乘女','doFacesitting':'骑脸','doGagging':'强制塞口',\n 'doStrapon':'穿戴式阳具','do69Position':'69姿势','doMassage':'按摩','doSpanking':'鞭打',\n 'doUpskirt':'裙底风光','doGloryHole':'厕板洞','doThreesome':'三人性交','doSmoking':'抽烟',\n 'boots':'靴子','heels':'高跟鞋','nylon':'丝袜','specificJeans':'牛仔裤','specificSportGear':'运动装备',\n 'tagLanguageAfrican':'非洲裔','tagLanguageAlgerian':'阿尔及利亚','tagLanguageArgentinian':'阿根廷',\n 'tagLanguageArmenian':'亚美尼亚','tagLanguageAssamese':'阿萨姆','tagLanguageAustralian':'澳大利亚',\n 'tagLanguageAustrian':'奥地利人','tagLanguageBangladeshi':'孟加拉','tagLanguageBelgian':'比利时',\n 'tagLanguageBengali':'孟加拉语','tagLanguageBrazilian':'巴西','tagLanguageBulgarian':'保加利亚人',\n 'tagLanguageCanadian':'加拿大','tagLanguageChilean':'智利','tagLanguageColombian':'哥伦比亚',\n 'tagLanguageCroatian':'克罗地亚','tagLanguageCzech':'捷克','tagLanguageDanish':'丹麦',\n 'tagLanguageDominican':'多米尼加','tagLanguageDutch':'荷兰','tagLanguageEcuadorian':'厄瓜多尔',\n 'tagLanguageEgyptian':'埃及','tagLanguageEstonian':'爱沙尼亚','tagLanguageEuropean':'欧洲女孩',\n 'tagLanguageFilipino':'菲律宾','tagLanguageFinnish':'芬兰','tagLanguageFrench':'法语',\n 'tagLanguageGeorgian':'格鲁吉亚','tagLanguageGermanSpeaking':'德语','tagLanguageGreek':'希腊',\n 'tagLanguageGujarati':'古吉拉特','tagLanguageHindi':'印地','tagLanguageHungarian':'匈牙利',\n 'tagLanguageIndonesian':'印度尼西亚','tagLanguageIrish':'爱尔兰','tagLanguageIsraeli':'以色列',\n 'tagLanguageItalian':'意大利','tagLanguageJamaican':'牙买加','tagLanguageJapanese':'日语',\n 'tagLanguageKannada':'卡纳达','tagLanguageKenyan':'肯尼亚','tagLanguageKiwi':'新西兰',\n 'tagLanguageKorean':'韩语','tagLanguageLatvian':'拉脱维亚','tagLanguageLithuanian':'立陶宛',\n 'tagLanguageMalagasy':'马尔加什','tagLanguageMalayalam':'马拉雅拉姆','tagLanguageMalaysian':'马来西亚',\n 'tagLanguageMarathi':'马拉地','tagLanguageMexican':'墨西哥','tagLanguageMoroccan':'摩洛哥',\n 'tagLanguageNigerian':'尼日利亚','tagLanguageNordic':'北欧','tagLanguageNorwegian':'挪威',\n 'tagLanguageOdia':'奥里亚','tagLanguagePeruvian':'秘鲁','tagLanguagePolish':'波兰',\n 'tagLanguagePortuguese':'葡萄牙','tagLanguagePortugueseSpeaking':'葡萄牙语','tagLanguagePunjabi':'旁遮普',\n 'tagLanguageRomanian':'罗马尼亚','tagLanguageRussianSpeaking':'俄罗斯','tagLanguageSerbian':'塞尔维亚',\n 'tagLanguageSlovakian':'斯洛伐克','tagLanguageSouthAfrican':'南非','tagLanguageSpanish':'西班牙语',\n 'tagLanguageSpanishSpeaking':'西班牙','tagLanguageSriLankan':'斯里兰卡','tagLanguageSwedish':'瑞典',\n 'tagLanguageSwiss':'瑞士','tagLanguageTaiwanese':'台湾省','tagLanguageTamil':'泰米尔',\n 'tagLanguageTelugu':'泰卢固','tagLanguageThai':'泰国','tagLanguageTurkish':'土耳其',\n 'tagLanguageUKModels':'英国','tagLanguageUSModels':'美国','tagLanguageUgandan':'乌干达',\n 'tagLanguageVenezuelan':'委内瑞拉','tagLanguageVietnamese':'越南','tagLanguageZimbabwean':'津巴布韦'\n};\n\nfunction getDisplay(tag) { return tagNameMap[tag] || tag.replace(\/([A-Z])\/g, ' $1').trim(); }\n\nfunction buildUrl(tag) {\n return 'https:\/\/zh.virtualtaboo.live\/api\/front\/models?removeShows=false&recInFeatured=false&limit=60&offset={{(page-1)*60}}&primaryTag=' + currentPrimaryTag + '&filterGroupTags=' + encodeURIComponent(JSON.stringify([[tag]])) + '&sortBy=stripRanking&parentTag=' + tag + '&userRole=user&sac=true';\n}\n\nfunction render(tags, title) {\n if (!tags || !tags.length) return;\n push('❤️ ' + title + ' ❤️', null, 1);\n for (var i = 0; i < tags.length; i++) {\n var tag = tags[i];\n if (!tag) continue;\n var count = tagDetails[tag] ? tagDetails[tag].modelsLive || 0 : 0;\n push(getDisplay(tag) + (count > 0 ? count + '人' : ''), buildUrl(tag), 0.29);\n }\n}\n\nfunction sortTags(tags) {\n tags.sort(function(a, b) {\n var ca = tagDetails[a] ? tagDetails[a].modelsLive || 0 : 0;\n var cb = tagDetails[b] ? tagDetails[b].modelsLive || 0 : 0;\n return cb - ca;\n });\n return tags;\n}\n\nfunction findGroup(alias) {\n for (var i = 0; i < tagGroups.length; i++) {\n if (tagGroups[i].alias === alias) return tagGroups[i];\n }\n return null;\n}\n\nfunction renderManual(list, title) {\n var valid = [];\n for (var i = 0; i < list.length; i++) {\n var tag = list[i];\n if (tagDetails[tag] && tagDetails[tag].modelsLive > 0) valid.push(tag);\n }\n render(sortTags(valid), title);\n}\n\n\/\/ ============================================================\n\/\/ girls 频道\n\/\/ ============================================================\ncurrentPrimaryTag = 'girls';\npush('🔥 在线热门', 'https:\/\/zh.virtualtaboo.live\/api\/front\/models?removeShows=false&recInFeatured=false&limit=60&offset=0&primaryTag=girls&sortBy=stripRanking&userRole=user&sac=true', 1);\n\nvar quickLang = [\n ['🇨🇳 中文', 'tagLanguageChinese'],\n ['🇯🇵 日语', 'tagLanguageJapanese'],\n ['🇻🇳 越南语', 'tagLanguageVietnamese']\n];\nfor (var i = 0; i < quickLang.length; i++) {\n var tag = quickLang[i][1];\n var count = tagDetails[tag] ? tagDetails[tag].modelsLive || 0 : 0;\n if (count > 0) push(quickLang[i][0] + count + '人', buildUrl(tag), 0.29);\n}\n\nvar groupTitles = { 'specials': '🔥 特别推荐', 'age': '🎂 年龄', 'ethnicity': '🌍 人种', 'bodyType': '💪 体型', 'hairColor': '💇 发色', 'privatePrice': '💰 价格' };\n['specials', 'age', 'ethnicity', 'bodyType', 'hairColor', 'privatePrice'].forEach(function(alias) {\n var group = findGroup(alias);\n if (!group) return;\n var valid = [];\n var tags = group.tags || [];\n for (var i = 0; i < tags.length; i++) {\n var tag = tags[i];\n if (tagDetails[tag] && tagDetails[tag].modelsLive > 0) valid.push(tag);\n }\n render(sortTags(valid), groupTitles[alias]);\n});\n\nvar langTags = [];\nfor (var tag in tagDetails) {\n if (tag.indexOf('tagLanguage') === 0 && tag.indexOf('-') === -1 && tagDetails[tag].modelsLive > 0) langTags.push(tag);\n}\nrender(sortTags(langTags), '🌐 语言分类');\n\nvar subTags = [];\nfor (var tag in tagDetails) {\n if (tag.indexOf('subculture') === 0 && tag.indexOf('-') === -1 && tagDetails[tag].modelsLive > 0) subTags.push(tag);\n}\nrender(sortTags(subTags), '🎭 亚文化');\n\nvar allGroup = findGroup('allTags');\nvar actionTags = [], bodyTags = [], perfTags = [];\nvar perfKeywords = ['striptease', 'eroticDance', 'twerk', 'oilShow', 'shower', 'topless', 'flashing', 'upskirt'];\nif (allGroup) {\n var allTags = allGroup.tags || [];\n for (var i = 0; i < allTags.length; i++) {\n var tag = allTags[i];\n if (!tagDetails[tag] || tagDetails[tag].modelsLive <= 0) continue;\n if (tag.indexOf('do') === 0) actionTags.push(tag);\n else if (tag.indexOf('specific') === 0) bodyTags.push(tag);\n for (var k = 0; k < perfKeywords.length; k++) {\n if (tag.indexOf(perfKeywords[k]) !== -1) { perfTags.push(tag); break; }\n }\n }\n}\nrender(sortTags(actionTags), '🎬 活动分类');\nrender(sortTags(bodyTags), '🔍 身体特征');\nrender(sortTags(perfTags), '💃 表演类型');\n\nrenderManual(['doStrapon','doAnalToys','autoTagInteractiveToy','doDildoOrVibrator','fuckMachine','doNippleToys','doSexToys','autoTagKiiroo','autoTagLovense'], '📱 设备分类');\nrenderManual(['doSmoking','subcultureCuckold','specificsPiercing','cockRating','heels','corset','doFootFetish','specificJeans','subcultureBdsm','leather','subcultureMistresses','latex','nylon','specificsTattoos','specificPregnant','specificSportGear'], '🖤 恋物癖');\n\n\/\/ ============================================================\n\/\/ couples 频道\n\/\/ ============================================================\nfunction buildCouples() {\n currentPrimaryTag = 'couples';\n var data2 = JSON.parse(java.ajax('https:\/\/zh.virtualtaboo.live\/api\/front\/models\/liveTags?primaryTag=couples&withMixedTags=true&sac=true'));\n var tagGroups2 = data2.liveTagGroups || [];\n var tagDetails2 = data2.liveTagDetails || {};\n\n function renderCouplesTags(tags, title) {\n if (!tags || !tags.length) return;\n push('❤️ ' + title + ' ❤️', null, 1);\n for (var i = 0; i < tags.length; i++) {\n var tag = tags[i];\n if (!tag) continue;\n var count = tagDetails2[tag] ? tagDetails2[tag].modelsLive || 0 : 0;\n push(getDisplay(tag) + (count > 0 ? count + '人' : ''), buildUrl(tag), 0.29);\n }\n }\n\n function findGroup2(alias) {\n for (var i = 0; i < tagGroups2.length; i++) {\n if (tagGroups2[i].alias === alias) return tagGroups2[i];\n }\n return null;\n }\n\n function sortTags2(tags) {\n tags.sort(function(a, b) {\n var ca = tagDetails2[a] ? tagDetails2[a].modelsLive || 0 : 0;\n var cb = tagDetails2[b] ? tagDetails2[b].modelsLive || 0 : 0;\n return cb - ca;\n });\n return tags;\n }\n\n function renderManualCouples(list, title) {\n var valid = [];\n for (var i = 0; i < list.length; i++) {\n var tag = list[i];\n if (tagDetails2[tag] && tagDetails2[tag].modelsLive > 0) valid.push(tag);\n }\n renderCouplesTags(sortTags2(valid), title);\n }\n\n push('💕 情侣专区 💕', null, 1);\n\n var groupTitles2 = {\n 'specials': '🔥 特别推荐',\n 'age': '🎂 年龄',\n 'ethnicity': '🌍 人种',\n 'bodyType': '💪 体型',\n 'hairColor': '💇 发色',\n 'privatePrice': '💰 价格'\n };\n ['specials', 'age', 'ethnicity', 'bodyType', 'hairColor', 'privatePrice'].forEach(function(alias) {\n var group = findGroup2(alias);\n if (!group) return;\n var valid = [];\n var tags = group.tags || [];\n for (var i = 0; i < tags.length; i++) {\n var tag = tags[i];\n if (tagDetails2[tag] && tagDetails2[tag].modelsLive > 0) valid.push(tag);\n }\n renderCouplesTags(sortTags2(valid), groupTitles2[alias]);\n });\n\n ['tagLanguage', 'subculture'].forEach(function(prefix) {\n var tags = [];\n for (var tag in tagDetails2) {\n if (tag.indexOf(prefix) === 0 && tag.indexOf('-') === -1 && tagDetails2[tag].modelsLive > 0) tags.push(tag);\n }\n renderCouplesTags(sortTags2(tags), prefix === 'tagLanguage' ? '🌐 语言分类' : '🎭 亚文化');\n });\n\n var allGroup2 = findGroup2('allTags');\n var actionTags2 = [], bodyTags2 = [], perfTags2 = [];\n var perfKeywords = ['striptease', 'eroticDance', 'twerk', 'oilShow', 'shower', 'topless', 'flashing', 'upskirt'];\n if (allGroup2) {\n var allTags2 = allGroup2.tags || [];\n for (var i = 0; i < allTags2.length; i++) {\n var tag = allTags2[i];\n if (!tagDetails2[tag] || tagDetails2[tag].modelsLive <= 0) continue;\n if (tag.indexOf('do') === 0) actionTags2.push(tag);\n else if (tag.indexOf('specific') === 0) bodyTags2.push(tag);\n for (var k = 0; k < perfKeywords.length; k++) {\n if (tag.indexOf(perfKeywords[k]) !== -1) { perfTags2.push(tag); break; }\n }\n }\n }\n renderCouplesTags(sortTags2(actionTags2), '🎬 活动分类');\n renderCouplesTags(sortTags2(bodyTags2), '🔍 身体特征');\n renderCouplesTags(sortTags2(perfTags2), '💃 表演类型');\n\n renderManualCouples(['doStrapon','doAnalToys','autoTagInteractiveToy','doDildoOrVibrator','fuckMachine','doNippleToys','doSexToys','autoTagKiiroo','autoTagLovense'], '📱 设备分类');\n renderManualCouples(['doSmoking','subcultureCuckold','specificsPiercing','cockRating','heels','corset','doFootFetish','specificJeans','subcultureBdsm','leather','subcultureMistresses','latex','nylon','specificsTattoos','specificPregnant','specificSportGear'], '🖤 恋物癖');\n}\n\n\/\/ ============================================================\n\/\/ men 频道\n\/\/ ============================================================\nfunction buildMen() {\n currentPrimaryTag = 'men';\n var data2 = JSON.parse(java.ajax('https:\/\/zh.virtualtaboo.live\/api\/front\/models\/liveTags?primaryTag=men&withMixedTags=true&sac=true'));\n var tagGroups2 = data2.liveTagGroups || [];\n var tagDetails2 = data2.liveTagDetails || {};\n\n function renderMenTags(tags, title) {\n if (!tags || !tags.length) return;\n push('❤️ ' + title + ' ❤️', null, 1);\n for (var i = 0; i < tags.length; i++) {\n var tag = tags[i];\n if (!tag) continue;\n var count = tagDetails2[tag] ? tagDetails2[tag].modelsLive || 0 : 0;\n push(getDisplay(tag) + (count > 0 ? count + '人' : ''), buildUrl(tag), 0.29);\n }\n }\n\n function findGroup2(alias) {\n for (var i = 0; i < tagGroups2.length; i++) {\n if (tagGroups2[i].alias === alias) return tagGroups2[i];\n }\n return null;\n }\n\n function sortTags2(tags) {\n tags.sort(function(a, b) {\n var ca = tagDetails2[a] ? tagDetails2[a].modelsLive || 0 : 0;\n var cb = tagDetails2[b] ? tagDetails2[b].modelsLive || 0 : 0;\n return cb - ca;\n });\n return tags;\n }\n\n function renderManualMen(list, title) {\n var valid = [];\n for (var i = 0; i < list.length; i++) {\n var tag = list[i];\n if (tagDetails2[tag] && tagDetails2[tag].modelsLive > 0) valid.push(tag);\n }\n renderMenTags(sortTags2(valid), title);\n }\n\n push('👨 男主播专区 👨', null, 1);\n\n var groupTitles2 = {\n 'specials': '🔥 特别推荐',\n 'orientation': '💖 性取向',\n 'age': '🎂 年龄',\n 'ethnicity': '🌍 人种',\n 'bodyType': '💪 体型',\n 'hairColor': '💇 发色',\n 'privatePrice': '💰 价格'\n };\n ['specials', 'orientation', 'age', 'ethnicity', 'bodyType', 'hairColor', 'privatePrice'].forEach(function(alias) {\n var group = findGroup2(alias);\n if (!group) return;\n var valid = [];\n var tags = group.tags || [];\n for (var i = 0; i < tags.length; i++) {\n var tag = tags[i];\n if (tagDetails2[tag] && tagDetails2[tag].modelsLive > 0) valid.push(tag);\n }\n renderMenTags(sortTags2(valid), groupTitles2[alias]);\n });\n\n ['tagLanguage', 'subculture'].forEach(function(prefix) {\n var tags = [];\n for (var tag in tagDetails2) {\n if (tag.indexOf(prefix) === 0 && tag.indexOf('-') === -1 && tagDetails2[tag].modelsLive > 0) tags.push(tag);\n }\n renderMenTags(sortTags2(tags), prefix === 'tagLanguage' ? '🌐 语言分类' : '🎭 亚文化');\n });\n\n var allGroup2 = findGroup2('allTags');\n var actionTags2 = [], bodyTags2 = [], perfTags2 = [];\n var perfKeywords = ['striptease', 'eroticDance', 'twerk', 'oilShow', 'shower', 'topless', 'flashing', 'upskirt'];\n if (allGroup2) {\n var allTags2 = allGroup2.tags || [];\n for (var i = 0; i < allTags2.length; i++) {\n var tag = allTags2[i];\n if (!tagDetails2[tag] || tagDetails2[tag].modelsLive <= 0) continue;\n if (tag.indexOf('do') === 0) actionTags2.push(tag);\n else if (tag.indexOf('specific') === 0) bodyTags2.push(tag);\n for (var k = 0; k < perfKeywords.length; k++) {\n if (tag.indexOf(perfKeywords[k]) !== -1) { perfTags2.push(tag); break; }\n }\n }\n }\n renderMenTags(sortTags2(actionTags2), '🎬 活动分类');\n renderMenTags(sortTags2(bodyTags2), '🔍 身体特征');\n renderMenTags(sortTags2(perfTags2), '💃 表演类型');\n\n renderManualMen(['doStrapon','doAnalToys','autoTagInteractiveToy','doDildoOrVibrator','fuckMachine','doNippleToys','doSexToys','autoTagKiiroo','autoTagLovense'], '📱 设备分类');\n renderManualMen(['doSmoking','subcultureCuckold','specificsPiercing','cockRating','heels','corset','doFootFetish','specificJeans','subcultureBdsm','leather','subcultureMistresses','latex','nylon','specificsTattoos','specificPregnant','specificSportGear'], '🖤 恋物癖');\n}\n\n\/\/ ============================================================\n\/\/ trans 频道\n\/\/ ============================================================\nfunction buildTrans() {\n currentPrimaryTag = 'trans';\n var data3 = JSON.parse(java.ajax('https:\/\/zh.virtualtaboo.live\/api\/front\/models\/liveTags?primaryTag=trans&withMixedTags=true&sac=true'));\n var tagGroups3 = data3.liveTagGroups || [];\n var tagDetails3 = data3.liveTagDetails || {};\n\n function renderTransTags(tags, title) {\n if (!tags || !tags.length) return;\n push('❤️ ' + title + ' ❤️', null, 1);\n for (var i = 0; i < tags.length; i++) {\n var tag = tags[i];\n if (!tag) continue;\n var count = tagDetails3[tag] ? tagDetails3[tag].modelsLive || 0 : 0;\n push(getDisplay(tag) + (count > 0 ? count + '人' : ''), buildUrl(tag), 0.29);\n }\n }\n\n function findGroup3(alias) {\n for (var i = 0; i < tagGroups3.length; i++) {\n if (tagGroups3[i].alias === alias) return tagGroups3[i];\n }\n return null;\n }\n\n function sortTags3(tags) {\n tags.sort(function(a, b) {\n var ca = tagDetails3[a] ? tagDetails3[a].modelsLive || 0 : 0;\n var cb = tagDetails3[b] ? tagDetails3[b].modelsLive || 0 : 0;\n return cb - ca;\n });\n return tags;\n }\n\n function renderManualTrans(list, title) {\n var valid = [];\n for (var i = 0; i < list.length; i++) {\n var tag = list[i];\n if (tagDetails3[tag] && tagDetails3[tag].modelsLive > 0) valid.push(tag);\n }\n renderTransTags(sortTags3(valid), title);\n }\n\n push('⚧️ 跨性别专区 ⚧️', null, 1);\n\n var groupTitles3 = {\n 'specials': '🔥 特别推荐',\n 'age': '🎂 年龄',\n 'ethnicity': '🌍 人种',\n 'bodyType': '💪 体型',\n 'hairColor': '💇 发色',\n 'privatePrice': '💰 价格'\n };\n ['specials', 'age', 'ethnicity', 'bodyType', 'hairColor', 'privatePrice'].forEach(function(alias) {\n var group = findGroup3(alias);\n if (!group) return;\n var valid = [];\n var tags = group.tags || [];\n for (var i = 0; i < tags.length; i++) {\n var tag = tags[i];\n if (tagDetails3[tag] && tagDetails3[tag].modelsLive > 0) valid.push(tag);\n }\n renderTransTags(sortTags3(valid), groupTitles3[alias]);\n });\n\n ['tagLanguage', 'subculture'].forEach(function(prefix) {\n var tags = [];\n for (var tag in tagDetails3) {\n if (tag.indexOf(prefix) === 0 && tag.indexOf('-') === -1 && tagDetails3[tag].modelsLive > 0) tags.push(tag);\n }\n renderTransTags(sortTags3(tags), prefix === 'tagLanguage' ? '🌐 语言分类' : '🎭 亚文化');\n });\n\n var allGroup3 = findGroup3('allTags');\n var actionTags3 = [], bodyTags3 = [], perfTags3 = [];\n var perfKeywords = ['striptease', 'eroticDance', 'twerk', 'oilShow', 'shower', 'topless', 'flashing', 'upskirt'];\n if (allGroup3) {\n var allTags3 = allGroup3.tags || [];\n for (var i = 0; i < allTags3.length; i++) {\n var tag = allTags3[i];\n if (!tagDetails3[tag] || tagDetails3[tag].modelsLive <= 0) continue;\n if (tag.indexOf('do') === 0) actionTags3.push(tag);\n else if (tag.indexOf('specific') === 0) bodyTags3.push(tag);\n for (var k = 0; k < perfKeywords.length; k++) {\n if (tag.indexOf(perfKeywords[k]) !== -1) { perfTags3.push(tag); break; }\n }\n }\n }\n renderTransTags(sortTags3(actionTags3), '🎬 活动分类');\n renderTransTags(sortTags3(bodyTags3), '🔍 身体特征');\n renderTransTags(sortTags3(perfTags3), '💃 表演类型');\n\n renderManualTrans(['doStrapon','doAnalToys','autoTagInteractiveToy','doDildoOrVibrator','fuckMachine','doNippleToys','doSexToys','autoTagKiiroo','autoTagLovense'], '📱 设备分类');\n renderManualTrans(['doSmoking','subcultureCuckold','specificsPiercing','cockRating','heels','corset','doFootFetish','specificJeans','subcultureBdsm','leather','subcultureMistresses','latex','nylon','specificsTattoos','specificPregnant','specificSportGear'], '🖤 恋物癖');\n}\n\n\/\/ ============================================================\n\/\/ 执行所有频道\n\/\/ ============================================================\nbuildCouples();\nbuildMen();\nbuildTrans();\n\nJSON.stringify(sort);",
"header": "{\"User-Agent\": \"Mozilla\/5.0 (Android)\"}",
"lastUpdateTime": "1787711886134",
"respondTime": 151,
"ruleBookInfo": {
"author": "{{$.user.user.name}}",
"coverUrl": "https:\/\/img.doppiocdn.com\/thumbs\/{{$.user.user.snapshotTimestamp}}\/{{$.cam.streamName}}_webp",
"name": "{{$.user.user.username}}",
"tocUrl": "https:\/\/zh.virtualtaboo.live\/api\/front\/v2\/broadcasts\/{{$.user.user.id}}?uniq=ix9yufd20we8bscq"
},
"ruleContent": {},
"ruleExplore": {
"bookList": "$.blocks..models[*]||$.models[*]",
"bookUrl": "https:\/\/zh.virtualtaboo.live\/api\/front\/v2\/models\/{{$.id}}\/cam?timezoneOffset=-480&triggerRequest=loadCam&primaryTag=girls&withRecentShow=1&skipTipMenu=1&uniq=ix9yufd20we8bscq",
"coverUrl": "@js:result.snapshotTimestamp && result.streamName ? 'https:\/\/img.doppiocdn.com\/thumbs\/' + result.snapshotTimestamp + '\/' + result.streamName + '_webp' : result.snapshotUrl",
"kind": "@js:var s={'public':'免费','groupShow':'付费'}[result.status]||'离线';var c=result.country?result.country.toUpperCase()+' ':'未知';c+' | '+(s)+(result.isLive?(' | '+(result.viewersCount||0)+'在看'):'')",
"name": "@js:\nif (\"{{$.status}}\"==\"public\"){result=\"{{$.username}}\"}else{result=\"\"}"
},
"ruleSearch": {
"author": "$.streamName",
"bookList": "$.models[*]",
"bookUrl": "https:\/\/zh.virtualtaboo.live\/api\/front\/v2\/models\/{{$.id}}\/cam?timezoneOffset=-480&triggerRequest=loadCam&primaryTag=girls&withRecentShow=1&skipTipMenu=1&uniq=ix9yufd20we8bscq",
"checkKeyWord": "bao",
"coverUrl": "@js:try{var sn=result.streamName;var ts=result.snapshotTimestamp;if(sn&&ts){'https:\/\/img.doppiocdn.live\/thumbs\/'+ts+'\/'+sn+'_webp'}else if(result.previewUrl){result.previewUrl}else if(result.previewUrlThumbBig){result.previewUrlThumbBig}else if(result.previewUrlThumbSmall){result.previewUrlThumbSmall}else if(result.avatarUrl){result.avatarUrl}else{''}}catch(e){''}",
"intro": "$.groupShowTopic",
"kind": "@js:var s={'public':'免费','groupShow':'付费'}[result.status]||'离线';var c=result.country?result.country.toUpperCase()+' ':'未知';c+' | '+s+' | '+(result.viewersCount||0)+'在看'",
"name": "@js:\nif (\"{{$.status}}\"==\"public\"){result=\"{{$.username}}\"}else{result=\"\"}"
},
"ruleToc": {
"chapterList": "$..item",
"chapterName": "@js: ( ({ 'true': '在线', 'false': '离线' }[result.isLive] || result.isLive)+({ 'public': '免费', 'groupShow': '收费', 'p2p': '一对一','off':' ' }[result.status] || result.status) )",
"chapterUrl": "@js: 'https:\/\/edge-hls.doppiocdn.live\/hls\/'+result.modelId+'\/master\/'+result.modelId+'_'+({ 'public': 'auto', 'groupShow': '160p_blurred', 'p2p': '160p_blurred','off':' ' }[result.status] || result.status)+'.m3u8?pkey=bXorqTB5ZhP5FcpX'\n\/\/卡顿就换掉上面域名"
},
"searchUrl": "https:\/\/zh.virtualtaboo.live\/api\/front\/v4\/models\/search\/group\/username?query={{key}}&limit=500&offset={{(page-1)*500}}&primaryTag=girls&uniq=",
"weight": 0
}