// 小心儿悠悠 - 影视仓JS版本 var rule = { title: '小心儿悠悠', host: 'https://mov.cenguigui.cn', url: '/duanju/api.php?page=fyclass&name=fyfilter&tab_type=19', searchUrl: '/duanju/api.php?page=fypage&name=fyfilter&tab_type=19', class_name: '推荐榜&热播榜&新剧榜&漫剧榜大唐&大秦&大明&擦边&逆袭&霸总&豪门恩怨&神豪&都市日常&大女主&都市修仙&强者回归&重生&闪婚&赘婿逆袭&追妻&萌宝&奇幻脑洞&传承觉醒&奇幻爱情&乡村&历史古代&王妃&娱乐圈&暗恋成真&系统&真假千金&穿书&女帝&团宠&年代爱情&玄幻仙侠&皇后&逆袭&霸总&现代言情&打脸虐渣&豪门恩怨&神豪&马甲&都市日常&战神归来&小人物&女性成长&大女主&穿越&都市修仙&强者回归&亲情&古装&重生&闪婚&赘婿逆袭&虐恋&追妻&天下无敌&家庭伦理&萌宝&古风权谋&职场&奇幻脑洞&异能&无敌神医&古风言情&传承觉醒&现言甜宠&奇幻爱情&乡村&历史古代&王妃&高手下山&娱乐圈&强强联合&破镜重圆&暗恋成真&民国&欢喜冤家&系统&真假千金&龙王&校园&穿书&女帝&团宠&年代爱情&玄幻仙侠&青梅竹马&悬疑推理&皇后&替身&大叔&喜剧&剧情', class_url: '', headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36' }, timeout: 10, play_headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36' }, player: '', js: '', parse: '', }; /** * 获取分类列表 */ rule.getClasses = function() { var classes = []; var classNames = rule.class_name.split('&'); for (var i = 0; i < classNames.length; i++) { var name = classNames[i]; classes.push({ type_id: name, type_name: name }); } return classes; }; /** * 获取首页/分类内容 */ rule.getHomeContent = function(filter) { var classes = this.getClasses(); return JSON.stringify({ class: classes, list: [] }); }; /** * 获取分类视频列表 */ rule.getCategoryContent = function(tid, pg, filter, ext) { var page = parseInt(pg) || 1; var url = rule.host + '/duanju/api.php?page=' + page + '&name=' + encodeURIComponent(tid) + '&tab_type=19'; try { var response = fetch(url, { headers: rule.headers, timeout: rule.timeout }); if (!response) return JSON.stringify({ list: [] }); var data = JSON.parse(response); if (data.code !== 200 || !data.data) { return JSON.stringify({ list: [] }); } var videos = []; for (var i = 0; i < data.data.length; i++) { var vod = data.data[i]; var vodId = 'book_id=' + (vod.book_id || '') + '&actor=' + (vod.author || '') + '&type=' + (vod.type || ''); videos.push({ vod_id: vodId, vod_name: vod.title || '', vod_pic: vod.cover || '', vod_remarks: vod.type || '', vod_content: vod.intro || '' }); } return JSON.stringify({ list: videos, page: page, pagecount: 9999, limit: 20, total: 999999 }); } catch (e) { return JSON.stringify({ list: [] }); } }; /** * 获取详情页 */ rule.getDetailContent = function(ids) { var did = ids[0]; var params = {}; var queryString = did.indexOf('?') > -1 ? did.split('?')[1] : did; var pairs = queryString.split('&'); for (var i = 0; i < pairs.length; i++) { var pair = pairs[i].split('='); if (pair.length === 2) { params[pair[0]] = pair[1]; } } var bookId = params.book_id || ''; if (!bookId) { var match = did.match(/book_id=([^&]*)/); if (match && match[1]) { bookId = match[1]; } } if (!bookId) return JSON.stringify({ list: [] }); var apiUrl = rule.host + '/duanju/api.php?book_id=' + bookId; try { var response = fetch(apiUrl, { headers: rule.headers, timeout: rule.timeout }); if (!response) return JSON.stringify({ list: [] }); var data = JSON.parse(response); if (data.code !== 200 || !data.data) { return JSON.stringify({ list: [] }); } var vodList = data.data; var playFrom = []; var playUrl = []; var qualityOptions = [ ['超清', '2160p'], ['高清', '1080p'], ['标清', '720p'], ['低清', '480p'], ['流畅', '360p'] ]; for (var q = 0; q < qualityOptions.length; q++) { var qualityName = qualityOptions[q][0]; var qualityValue = qualityOptions[q][1]; var urls = []; for (var j = 0; j < vodList.length; j++) { var item = vodList[j]; var chapterName = item.title || ''; var videoId = item.video_id || ''; var playUrlItem = rule.host + '/duanju/api.php?video_id=' + videoId + '&type=json&level=' + qualityValue; urls.push(chapterName + '$' + playUrlItem); } playFrom.push(qualityName); playUrl.push(urls.join('#')); } // 获取演员信息 var actors = []; try { var actorApiUrl = rule.host + '/duanju/api.php?series_id=' + bookId + '&showRawParams=false'; var actorResponse = fetch(actorApiUrl, { headers: rule.headers, timeout: rule.timeout }); if (actorResponse) { var actorData = JSON.parse(actorResponse); if (actorData.code === 200 && actorData.celebrities) { var celebrities = actorData.celebrities; if (Array.isArray(celebrities)) { for (var a = 0; a < celebrities.length; a++) { var celeb = celebrities[a]; var actorName = celeb.user_name || celeb.name || celeb.actor_name || ''; if (actorName && actorName.trim()) { if (actors.indexOf(actorName) === -1) { actors.push(actorName); } } } } } } } catch (e) { // 忽略演员获取错误 } var actorStr = actors.join(', ') || params.actor || ''; // 获取分类 var categories = []; if (data.category_names && Array.isArray(data.category_names)) { categories = data.category_names.slice(0, 3); } else if (data.category) { categories = [data.category]; } var typeStr = categories.join(', ') || params.type || ''; var vod = { vod_id: did, vod_name: data.book_name || '', vod_pic: data.book_pic || '', vod_actor: actorStr, type_name: typeStr, vod_remarks: '共' + vodList.length + '集', vod_content: data.desc || '', vod_play_from: playFrom.join('$$$'), vod_play_url: playUrl.join('$$$') }; return JSON.stringify({ list: [vod] }); } catch (e) { return JSON.stringify({ list: [] }); } }; /** * 获取播放地址 */ rule.getPlayerContent = function(flag, id, vipFlags) { var maxRetries = 3; for (var i = 0; i < maxRetries; i++) { try { var response = fetch(id, { headers: rule.headers, timeout: rule.timeout }); if (response) { var data = JSON.parse(response); if (data.code === 200 && data.data && data.data.url) { return JSON.stringify({ parse: 0, playUrl: '', url: data.data.url, header: rule.headers }); } break; } } catch (e) { if (i < maxRetries - 1) { continue; } break; } } return JSON.stringify({ parse: 0, playUrl: '', url: 'about:blank', header: rule.headers }); }; /** * 搜索内容 */ rule.getSearchContent = function(key, quick, pg) { var page = parseInt(pg) || 1; var url = rule.host + '/duanju/api.php?page=' + page + '&name=' + encodeURIComponent(key) + '&tab_type=19'; try { var response = fetch(url, { headers: rule.headers, timeout: rule.timeout }); if (!response) return JSON.stringify({ list: [] }); var data = JSON.parse(response); if (data.code !== 200 || !data.data) { return JSON.stringify({ list: [] }); } var videos = []; for (var i = 0; i < data.data.length; i++) { var vod = data.data[i]; var vodId = 'book_id=' + (vod.book_id || '') + '&actor=' + (vod.author || '') + '&type=' + (vod.type || ''); videos.push({ vod_id: vodId, vod_name: vod.title || '', vod_pic: vod.cover || '', vod_remarks: vod.type || '', vod_content: vod.intro || '' }); } return JSON.stringify({ list: videos, page: page, pagecount: 9999, limit: videos.length, total: 999999 }); } catch (e) { return JSON.stringify({ list: [] }); } }; rule;