code:
(function () {
    "use strict";

    var drT = {
        name: "drT",
        version: "1.0.0",
        templateSettings: {
            evaluate:    /\{\{([\s\S]+?(\}?)+)\}\}/g,
            interpolate: /\{\{([\s\S]+?)\}\}/g, // 变量渲染
            encode:      /\{\{@([\s\S]+?)\}\}/g, // 变量自动url编码
            use:         /\{\{#([\s\S]+?)\}\}/g,
            useParams:   /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,
            define:      /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,
            defineParams:/^\s*([\w$]+):([\s\S]+)/,
            conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, // ? if ?? else if ?? else
            iterate:     /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
            varname:	"fl",
            strip:		true,
            append:		true,
            selfcontained: false,
            doNotSkipEncoded: false
        },
        template: undefined, //fn, compile template
        compile:  undefined, //fn, for express
        log: true
    }, _globals;

    drT.encodeHTMLSource = function(doNotSkipEncoded) {
        var encodeHTMLRules = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "/": "/" },
            matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g;
        return function(code) {
            return code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : "";
        };
    };

    _globals = (function(){ return this || (0,eval)("this"); }());

    /* istanbul ignore else */
    if (typeof module !== "undefined" && module.exports) {
        module.exports = drT;
    } else if (typeof define === "function" && define.amd) {
        define(function(){return drT;});
    } else {
        _globals.drT = drT;
    }

    var startend = {
        append: { start: "'+(",      end: ")+'",      startencode: "'+encodeHTML(" },
        split:  { start: "';out+=(", end: ");out+='", startencode: "';out+=encodeHTML(" }
    }, skip = /$^/;

    function resolveDefs(c, block, def) {
        return ((typeof block === "string") ? block : block.toString())
            .replace(c.define || skip, function(m, code, assign, value) {
                if (code.indexOf("def.") === 0) {
                    code = code.substring(4);
                }
                if (!(code in def)) {
                    if (assign === ":") {
                        if (c.defineParams) value.replace(c.defineParams, function(m, param, v) {
                            def[code] = {arg: param, text: v};
                        });
                        if (!(code in def)) def[code]= value;
                    } else {
                        new Function("def", "def['"+code+"']=" + value)(def);
                    }
                }
                return "";
            })
            .replace(c.use || skip, function(m, code) {
                if (c.useParams) code = code.replace(c.useParams, function(m, s, d, param) {
                    if (def[d] && def[d].arg && param) {
                        var rw = (d+":"+param).replace(/'|\\/g, "_");
                        def.__exp = def.__exp || {};
                        def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2");
                        return s + "def.__exp['"+rw+"']";
                    }
                });
                var v = new Function("def", "return " + code)(def);
                return v ? resolveDefs(c, v, def) : v;
            });
    }

    function unescape(code) {
        return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " ");
    }

    drT.template = function(tmpl, c, def) {
        c = c || drT.templateSettings;
        var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv,
            str  = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl;

        // console.log(str);
        let beforeCode = '';
        if(str.match(c.interpolate || skip)){
            let inter_codes = str.match(c.interpolate || skip);
            let inter_dict = {};
            inter_codes.forEach(item=>{
                item.replace(c.interpolate || skip,function (m,code) {
                    let varname = code.split('.')[0];
                    if(!inter_dict.hasOwnProperty(varname)){
                        let beginCode = `if(typeof(${varname})==='undefined'){${varname}={}}`;
                        inter_dict[varname] = beginCode;
                    }if(!inter_dict.hasOwnProperty(code)){
                        let beginCode = `if(typeof(${code})==='undefined'){${code}=''};`;
                        inter_dict[code] = beginCode;
                    }
                });
            });
            let beginCode = Object.values(inter_dict).join('\n');
            // console.log(beginCode);
            beforeCode += beginCode;
        }
        str = beforeCode+("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ")
                .replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""): str)
                .replace(/'|\\/g, "\\$&")
                .replace(c.encode || skip, function(m, code) {
                    needhtmlencode = true;
                    return cse.startencode + unescape(code) + cse.end;
                })
                .replace(c.interpolate || skip, function(m, code) {
                    let varname = code.split('.')[0];
                    // console.log(varname === code);
                    // console.log(`varname:${varname},code:${code}`);
                    if(varname === code){
                        let res = cse.start + `JSON.stringify(${unescape(code)})` + cse.end;
                        // console.log(res);
                        return res
                    }
                    return cse.start + unescape(code) + cse.end;
                })
                .replace(c.conditional || skip, function(m, elsecase, code) {
                    return elsecase ?
                        (code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='") :
                        (code ? "';if(" + unescape(code) + "){out+='" : "';}out+='");
                })
                .replace(c.iterate || skip, function(m, iterate, vname, iname) {
                    if (!iterate) return "';} } out+='";
                    sid+=1; indv=iname || "i"+sid; iterate=unescape(iterate);
                    return "';var arr"+sid+"="+iterate+";if(arr"+sid+"){var "+vname+","+indv+"=-1,l"+sid+"=arr"+sid+".length-1;while("+indv+"<l"+sid+"){"
                        +vname+"=arr"+sid+"["+indv+"+=1];out+='";
                })
                .replace(c.evaluate || skip, function(m, code) {
                    return "';" + unescape(code) + "out+='";
                })
            + "';return out;")
            .replace(/\n/g, "\\n").replace(/\t/g, '\\t').replace(/\r/g, "\\r")
            .replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, "");
        //.replace(/(\s|;|\}|^|\{)out\+=''\+/g,'$1out+=');

        if (needhtmlencode) {
            // console.log('需要编码');
            // console.log(c.doNotSkipEncoded);
            if (!c.selfcontained && _globals && !_globals._encodeHTML) _globals._encodeHTML = drT.encodeHTMLSource(c.doNotSkipEncoded);
            str = "var encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : ("
                + drT.encodeHTMLSource.toString() + "(" + (c.doNotSkipEncoded || '') + "));"
                + str;
            // console.log(str);
        }else{
            // console.log('不需要编码');
        }
        // console.log(c.varname);
        // console.log(str);
        try {
            return new Function(c.varname, str);
        } catch (e) {
            /* istanbul ignore else */
            // console.log(e.message);
            if (typeof console !== "undefined") console.log("Could not create a template function: " + str);
            throw e;
        }
    };

    drT.compile = function(tmpl, def) {
        return drT.template(tmpl, null, def);
    };
    drT.renderText = function (tmpl,dict,varname){
        varname = varname||'';
        if(varname){
            drT.templateSettings.varname = varname;
        }
        dict = dict||{};
        return drT.compile(tmpl)(dict);
    };
}());

license: unknown


code:
function qmkg(packages) {
    const { axios, cheerio } = packages;

    async function parseMusicItemFromUrl(shareUrl) {
        const html = (await axios.get(shareUrl)).data;
        const $ = cheerio.load(html);
        const script = $("script:contains('window.__DATA__')").text();
        const jsonStr = script.match(/window\.__DATA__ \=(.+);\s*$/);
        if (jsonStr) {
            const result = JSON.parse(jsonStr[1]);
            const musicItem = {
                id: result.detail.ksong_mid,
                shareid: result.shareid,
                lrc: result.lyric,
                artwork: result.detail.cover,
                title: result.detail.song_name,
                artist: `${result.detail.nick} (原唱: ${result.detail.singer_name})`,
                album: result.detail.content,
                url: result.detail.playurl,
                detail: result.detail
            }
            return musicItem;
        }
    }

    return {
        platform: '全民K歌',
        version: '0.0.0',
        srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/master/qmkg.js',
        cacheControl: 'no-store',
        async getMediaSource(musicItem) {
            if (musicItem.shareid) {
                const newItem = await parseMusicItemFromUrl(`https://kg.qq.com/node/play?s=${musicItem.shareid}`);
                return {
                    url: newItem.url,
                }
            }
            return {
                url: musicItem.url,
            }
        },
        async importMusicItem(shareUrl) {
            return parseMusicItemFromUrl(shareUrl);
        }
    }

}


code:
var rule={
    title:'兰花影院',
    //host:'https://www.lanhuatv.com',
    //host:'https://www.malustv.com',
    //host:'https://cucutube.com',
    host:'https://www.lanhua.tv',
    url:'/vodshow/fyclass--------fypage---.html',
    searchUrl:'/vodsearch/**----------fypage---.html',
    searchable:2,
    quickSearch:0,
    filterable:0,
    headers:{'User-Agent':'MOBILE_UA', },
    class_name:'电影&电视剧&综艺&动漫&纪录片&国产剧&日韩剧&欧美剧&港台剧&海外剧&其他剧',
    class_url:'1&2&3&4&118&201&203&204&202&205&206',
    play_parse:true,
    lazy:'',
    limit:6,
    推荐:'ul.vodlist.vodlist_wi;li;a&&title;a&&data-original;.pic_text.text_right&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'li.vodlist_item;a&&title;a&&data-original;.pic_text.text_right&&Text;a&&href',
    二级:{"title":"h2&&Text;.content_detail.content_min.fl .data_style&&Text","img":".content_thumb .vodlist_thumb&&data-original","desc":".content_detail.content_min.fl li:eq(-8)&&Text;.content_detail.content_min.fl li:eq(-8)&&Text;.content_detail.content_min.fl li:eq(0)&&Text;.content_detail.content_min.fl li:eq(2)&&Text;.content_detail.content_min.fl li:eq(3)&&Text","content":".content&&Text","tabs":".play_source_tab:eq(0) a","lists":".play_list_box:eq(#id)&&.content_playlist li"},
    搜索:'body .searchlist_item;a&&title;.vodlist_thumb&&data-original;.pic_text.text_right&&Text;a&&href;.vodlist_sub&&Text',
}

path: js/不良帅/兰花影院.js


code:
function qianqian(packages) {
    const { axios, dayjs, CryptoJs } = packages;

    const pageSize = 20;

    const secret = '0b50b02fd0d73a9c4c8c3a781c30845f';
    function getSignedParams(e) {
        if ("[object Object]" !== Object.prototype.toString.call(e))
            throw new Error("The parameter of query must be a Object.");
        var t = Math.floor(Date.now() / 1e3);
        Object.assign(e, {
            timestamp: t
        });
        var n = Object.keys(e);
        n.sort();
        for (var r = "", i = 0; i < n.length; i++) {
            var s = n[i];
            r += (0 == i ? "" : "&") + s + "=" + e[s]
        }
        return {
            ...e,
            sign: CryptoJs.MD5(r += secret).toString(),
            timestamp: t
        }
    }

    const searchHeaders = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
        'referer': 'https://music.91q.com/',
        'from': 'web',
        'accept': 'application/json, text/plain, */*',
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'zh-CN,zh;q=0.9'
    };

    function formatMusicItem(_) {
        return {
            id: _.id || _.assetId,
            artwork: _.pic,
            title: _.title,
            artist: (_.artist || []).map(ar => ar.name).join('、'),
            artistItems: (_.artist || []).map(formatArtistItem),
            album: _.albumTitle,
            lrc: _.lyric
        }
    }

    function formatAlbumItem(_) {
        return {
            id: _.albumAssetCode,
            artist: (_.artist || []).map(ar => ar.name).join('、'),
            title: _.title,
            artwork: _.pic,
            description: '',
            date: dayjs(_.releaseDate).format('YYYY-MM-DD'),
        }
    }

    function formatArtistItem(_) {
        return {
            name: _.name,
            id: _.artistCode,
            avatar: _.pic,
            worksNum: _.trackTotal,
            description: _.introduce,
        }
    }

    function musicCanPlayFilter(_) {
        return !_.pay_model;
    }

    async function searchBase(query, page, type) {
        const res = (await axios.get('https://music.91q.com/v1/search', {
            headers: searchHeaders,
            params: getSignedParams({
                appid: '16073360',
                type,
                word: query,
                pageNo: page,
                pageSize
            })
        }));

        return res.data;
    }

    async function searchMusic(query, page) {
        const res = await searchBase(query, page, 1);

        return {
            isEnd: res.data.total <= page * pageSize,
            data: res.data.typeTrack.filter(musicCanPlayFilter).map(formatMusicItem)
        }
    }

    async function searchAlbum(query, page) {
        const res = await searchBase(query, page, 3);

        return {
            isEnd: res.data.total <= page * pageSize,
            data: res.data.typeAlbum.map(formatAlbumItem)
        }
    }

    async function searchArtist(query, page) {
        const res = await searchBase(query, page, 2);

        return {
            isEnd: res.data.total <= page * pageSize,
            data: res.data.typeArtist.map(formatArtistItem)
        }
    }

    async function getArtistMusicWorks(artistItem, page) {
        const headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
            'referer': `https://music.91q.com/search?word=${encodeURIComponent(artistItem.name)}`,
            'from': 'web',
            'accept': 'application/json, text/plain, */*',
            'accept-encoding': 'gzip, deflate, br',
            'accept-language': 'zh-CN,zh;q=0.9'
        };
        const res = (await axios.get('https://music.91q.com/v1/artist/song', {
            headers,
            params: getSignedParams({
                appid: '16073360',
                artistCode: artistItem.id,
                pageNo: page,
                pageSize
            })
        })).data;

        return {
            isEnd: res.data.total <= page * pageSize,
            data: res.data.result.filter(musicCanPlayFilter).map(formatMusicItem)
        }
    }

    async function getArtistAlbumWorks(artistItem, page) {
        const headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
            'referer': `https://music.91q.com/search?word=${encodeURIComponent(artistItem.name)}`,
            'from': 'web',
            'accept': 'application/json, text/plain, */*',
            'accept-encoding': 'gzip, deflate, br',
            'accept-language': 'zh-CN,zh;q=0.9'
        };
        const res = (await axios.get('https://music.91q.com/v1/artist/album', {
            headers,
            params: getSignedParams({
                appid: '16073360',
                artistCode: artistItem.id,
                pageNo: page,
                pageSize
            })
        })).data;

        return {
            isEnd: res.data.total <= page * pageSize,
            data: res.data.result.map(formatAlbumItem)
        }
    }

    async function getArtistWorks(artistItem, page, type) {
        if (type === 'music') {
            return getArtistMusicWorks(artistItem, page);
        } else if (type === 'album') {
            return getArtistAlbumWorks(artistItem, page);
        }
    }

    async function getLyric(musicItem) {
        return {
            lrc: musicItem.lrc
        }
    }

    async function getAlbumInfo(albumItem) {
        if (albumItem.musicList) {
            return albumItem;
        } else {
            const headers = {
                'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
                'referer': `https://music.91q.com/search?word=${encodeURIComponent(albumItem.name)}`,
                'from': 'web',
                'accept': 'application/json, text/plain, */*',
                'accept-encoding': 'gzip, deflate, br',
                'accept-language': 'zh-CN,zh;q=0.9'
            };
            const res = (await axios.get('https://music.91q.com/v1/album/info', {
                headers,
                params: getSignedParams({
                    appid: '16073360',
                    albumAssetCode: albumItem.id,
                })
            }));
            const musicList = (res.data.data.trackList || []).filter(musicCanPlayFilter).map(_ => ({
                ...formatMusicItem(_),
                artwork: albumItem.artwork,
                album: albumItem.name
            }))
            return {
                ...albumItem,
                musicList
            }
        }
    }

    return {
        platform: '千千音乐',
        version: '0.0.0',
        srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/master/qianqian.js',
        cacheControl: 'no-cache',
        async search(query, page, type) {
            if (type === 'music') {
                return await searchMusic(query, page);
            }
            if (type === 'album') {
                return await searchAlbum(query, page);
            }
            if (type === 'artist') {
                return await searchArtist(query, page);
            }
        },
        async getMediaSource(musicItem) {

            const headers = {
                'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
                'referer': `https://music.91q.com/artist/${(musicItem.artistItems[0] || {}).id}`,
                'from': 'webapp_music',
                'accept': 'application/json, text/plain, */*',
                'accept-encoding': 'gzip, deflate, br',
                'accept-language': 'zh-CN,zh;q=0.9'
            }
            const res = (await axios.get('https://music.91q.com/v1/song/tracklink', {
                headers,
                params: getSignedParams({
                    appid: '16073360',
                    TSID: musicItem.id,
                })
            })).data;

            return {
                url: res.data.path
            };
        },
        getAlbumInfo,
        getLyric,
        getArtistWorks

    }
}

path: js/不良帅/千千音乐.js


code:
var rule={
    title:'厂长资源',
    host:'https://www.c-zzy.com',
     //host:'WWW.CZZY.TV',
    url:'/fyclass/page/fypage',
    searchUrl:'/xssearch?q=**&f=_all&p=fypage',
    searchable:2,//是否启用全局搜索,
    quickSearch:1,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{'User-Agent':'UC_UA', },
    play_parse:true,
    lazy:'',
    limit:6,
    class_name:'豆瓣电影Top250&最新电影&电视剧&国产剧&美剧&韩剧&番剧&动漫',
    class_url:'dbtop250&zuixindianying&dsj&gcj&meijutt&hanjutv&fanju&dm',
    推荐:'.bt_img;ul&&li;*;*;*;*',
    double:true,
    一级:'.bt_img&&ul&&li;h3.dytit&&Text;img.lazy&&data-original;.jidi&&Text;a&&href',
    二级:{"title":"h1&&Text;.moviedteail_list li&&a&&Text","img":"div.dyimg img&&src","desc":".moviedteail_list li:eq(3) a&&Text;.moviedteail_list li:eq(2) a&&Text;.moviedteail_list li:eq(1) a&&Text;.moviedteail_list li:eq(7) a&&Text;.moviedteail_list li:eq(5) a&&Text","content":".yp_context&&Text","tabs":".mi_paly_box&&span","lists":".paly_list_btn:eq(#id) a"},
    搜索:'.search_list&&ul&&li;*;*;*;*',
}

path: js/不良帅/厂长资源.js


code:
var rule = {
    title:'听书网',
    host:'https://www.tingbook.cc',
    // url:'/book/fyclass_fypage.html',
    url:'/book/fyclass-fypage.html',
    searchUrl:'/search.php?page=fypage&searchword=**&searchtype=-1',
    searchable:2,
    quickSearch:0,
    headers:{
        'User-Agent':'MOBILE_UA'
    },
    timeout:5000,
    // class_name:'玄幻&武侠&都市&言情&科幻&推理&恐怖&惊悚&历史&军事&网游&官商&评书&相声&文学&儿童&穿越&娱乐&笑话&戏曲&其它&百家讲坛',
    // class_url:'1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&28&29&30&31&32&33',
    class_parse:'.nav li;a&&Text;a&&href;/book/(\\d+).html',
    play_parse:true,
    lazy:'',
    limit:6,
    double:true,
    // 推荐:'.row2;ul&&li;.f-bold&&Text;.img-box&&img;.f-gray&&Text;a&&href',
    推荐:'.row2;ul&&li;.f-bold&&Text;.img-box img&&src;.f-gray&&Text;a&&href',
    // 一级:'.row3&&li;.f-bold&&Text;img-box&&img;.f-gray&&Text;a&&href',
    一级:'.row3&&li;.f-bold&&Text;.img-box img&&src;.f-gray&&Text;a&&href',
    // 二级:{title:'h2&&Text',img:'.img-box&&img',desc:'section&&p:eq(1)&&Text',content:'section&&p:eq(2)&&Text',tabs:'#yuedu&&h2',lists:'#yuedu:eq(#id)&&ul&&li'},
    二级:{title:'h2&&Text',img:'.img-box img&&src',desc:'section&&p:eq(1)&&Text',content:'section&&p:eq(2)&&Text',tabs:'#yuedu&&h2',lists:'#yuedu:eq(#id)&&ul&&li'},
    搜索:'*',
}


code:
function migu(packages) {
  const { axios, cheerio } = packages;

  const searchRows = 20;

  async function searchBase(query, page, type) {
    const headers = {
      'Accept': 'application/json, text/javascript, */*; q=0.01',
      'Accept-Encoding': 'gzip, deflate, br',
      'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
      'Connection': 'keep-alive',
      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
      'Host': 'm.music.migu.cn',
      'Referer': `https://m.music.migu.cn/v3/search?keyword=${encodeURIComponent(query)}`,
      'Sec-Fetch-Dest': 'empty',
      'Sec-Fetch-Mode': 'cors',
      'Sec-Fetch-Site': 'same-origin',
      'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36 Edg/89.0.774.68',
      'X-Requested-With': 'XMLHttpRequest'
    };
    const params = {
      keyword: query,
      type,
      pgc: page,
      rows: searchRows
    }
    const data = await axios.get('https://m.music.migu.cn/migu/remoting/scr_search_tag', { headers, params });
    return data.data;
  }

  function musicCanPlayFilter(_) {
    return _.mp3 || _.listenUrl || _.lisQq || _.lisCr;
  }

  async function searchMusic(query, page) {
    const data = await searchBase(query, page, 2);
    const musics = data.musics.filter(musicCanPlayFilter).map(_ => ({
      id: _.id,
      artwork: _.cover,
      title: _.songName,
      artist: _.artist,
      album: _.albumName,
      url: musicCanPlayFilter(_),
      copyrightId: _.copyrightId,
      singerId: _.singerId,
    }))
    return {
      isEnd: (+data.pageNo) * searchRows >= data.pgt,
      data: musics
    };
  }

  async function searchAlbum(query, page) {
    const data = await searchBase(query, page, 4);
    const albums = data.albums.map(_ => ({
      id: _.id,
      artwork: _.albumPicM,
      title: _.title,
      date: _.publishDate,
      artist: (_.singer || []).map(s => s.name).join(','),
      singer: _.singer,
      fullSongTotal: _.fullSongTotal
    }));
    return {
      isEnd: (+data.pageNo) * searchRows >= data.pgt,
      data: albums
    }
  }

  async function searchArtist(query, page) {
    const data = await searchBase(query, page, 1);
    const artists = data.artists.map(result => ({
      name: result.title,
      id: result.id,
      avatar: result.artistPicM,
      worksNum: result.songNum
    }));
    return {
      isEnd: (+data.pageNo) * searchRows >= data.pgt,
      data: artists,
    }
  }

  async function getArtistAlbumWorks(artistItem, page) {
    const headers = {
      'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
      'accept-encoding': 'gzip, deflate, br',
      'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
      'connection': 'keep-alive',
      'host': 'music.migu.cn',
      'referer': 'http://music.migu.cn',
      'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
      'Cache-Control': 'max-age=0',
    };
    const html = (await axios.get(`https://music.migu.cn/v3/music/artist/${artistItem.id}/album?page=${page}`, {
      headers
    })).data;
    const $ = cheerio.load(html);
    const rawAlbums = $('div.artist-album-list').find('li');
    const albums = [];
    for (let i = 0; i < rawAlbums.length; ++i) {
      const al = $(rawAlbums[i]);
      const artwork = al.find('.thumb-img').attr('data-original');
      albums.push({
        id: al.find('.album-play').attr('data-id'),
        title: al.find('.album-name').text(),
        artwork: artwork.startsWith('//') ? `https:${artwork}` : artwork,
        date: '',
        artist: artistItem.name
      })
    }

    return {
      isEnd: $('.pagination-next').hasClass('disabled'),
      data: albums
    }
  }

  async function getArtistWorks(artistItem, page, type) {
    if (type === 'music') {
      const headers = {
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'Connection': 'keep-alive',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Host': 'm.music.migu.cn',
        'Referer': `https://m.music.migu.cn/migu/l/?s=149&p=163&c=5123&j=l&id=${artistItem.id}`,
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36 Edg/89.0.774.68',
        'X-Requested-With': 'XMLHttpRequest'
      };
      //  https://m.music.migu.cn/migu/remoting/cms_artist_detail_tag
      const musicList = (await axios.get('https://m.music.migu.cn/migu/remoting/cms_artist_song_list_tag', {
        headers,
        params: {
          artistId: artistItem.id,
          pageSize: 20,
          pageNo: page - 1
        }
      })).data || {};

      return {
        data: musicList.result.results.filter(musicCanPlayFilter).map(_ => ({
          id: _.songId,
          artwork: _.picM,
          title: _.songName,
          artist: (_.singerName || []).join(', '),
          album: _.albumName,
          url: musicCanPlayFilter(_),
          rawLrc: _.lyricLrc,
          copyrightId: _.copyrightId,
          singerId: _.singerId,
        }))
      }
    } else if (type === 'album') {
      return getArtistAlbumWorks(artistItem, page);
    }
  }

  async function getLyric(musicItem) {
    const headers = {
      'Accept': 'application/json, text/javascript, */*; q=0.01',
      'Accept-Encoding': 'gzip, deflate, br',
      'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
      'Connection': 'keep-alive',
      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
      'Host': 'm.music.migu.cn',
      'Referer': `https://m.music.migu.cn/migu/l/?s=149&p=163&c=5200&j=l&id=${musicItem.copyrightId}`,
      'Sec-Fetch-Dest': 'empty',
      'Sec-Fetch-Mode': 'cors',
      'Sec-Fetch-Site': 'same-origin',
      'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36 Edg/89.0.774.68',
      'X-Requested-With': 'XMLHttpRequest'
    };

    const result = (await axios.get('https://m.music.migu.cn/migu/remoting/cms_detail_tag', {
      headers,
      params: {
        cpid: musicItem.copyrightId
      }
    })).data;
    return {
      rawLrc: result.data.lyricLrc
    }
  }

  async function importMusicSheet(urlLike) {
    let id;
    if (!id) {
      id = (urlLike.match(/https?:\/\/music\.migu\.cn\/v3\/my\/playlist\/([0-9]+)/) || [])[1];
    }
    if (!id) {
      id = (urlLike.match(/https?:\/\/h5\.nf\.migu\.cn\/app\/v4\/p\/share\/playlist\/index.html\?.*id=([0-9]+)/) || [])[1];
    }
    if (!id) {
      return;
    }

    const headers = {
      host: 'm.music.migu.cn',
      'Sec-Fetch-Dest': 'empty',
      'Sec-Fetch-Mode': 'cors',
      'Sec-Fetch-Site': 'same-origin',
      'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36 Edg/89.0.774.68',
      'X-Requested-With': 'XMLHttpRequest',
      'Referer': 'https://m.music.migu.cn'
    }

    const res = (await (axios.get(`https://m.music.migu.cn/migu/remoting/query_playlist_by_id_tag?onLine=1&queryChannel=0&createUserId=migu&contentCountMin=5&playListId=${id}`, {
      headers
    }))).data;

    const contentCount = parseInt(res.rsp.playList[0].contentCount);
    const cids = [];

    let pageNo = 1;
    while ((pageNo-1) * 20 < contentCount) {
      const listPage = (await axios.get(`https://music.migu.cn/v3/music/playlist/${id}?page=${pageNo}`)).data;

      const $ = cheerio.load(listPage);

      $('.row.J_CopySong').each((i, v) => cids.push($(v).attr('data-cid')));

      pageNo += 1;
    }
    if(cids.length === 0) {
      return;
    }
    const songs = (await axios({
      url: `https://music.migu.cn/v3/api/music/audioPlayer/songs?type=1&copyrightId=${cids.join(',')}`,
      headers: {
        referer: 'http://m.music.migu.cn/v3'
      },
      xsrfCookieName: 'XSRF-TOKEN',
      withCredentials: true,
    })).data;

    return songs.items.filter(_ => _.vipFlag === 0).map(_ => ({
      id: _.songId,
      artwork: _.cover,
      title: _.songName,
      artist: (_.singers || []).map(_ => _.artistName).join(', '),
      album: ((_.albums || [])[0] || {}).albumName,
      copyrightId: _.copyrightId,
      singerId: ((_.singers || [])[0] || {}).artistId,
    }))

  }

  return {
    platform: '咪咕',
    version: '0.0.2',
    primaryKey: ['id', 'copyrightId'],
    cacheControl: 'no-store',
    srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/master/migu.js',
    async getMediaSource(musicItem) {
      if(musicItem.url) {
        return {
          url: musicItem.url
        }
      };
      const resource = (await axios({
        url: `https://app.c.nf.migu.cn/MIGUM2.0/strategy/listen-url/v2.2?netType=01&resourceType=E&songId=${musicItem.copyrightId}&toneFlag=HQ`,
        headers: {
          referer: 'http://m.music.migu.cn/v3',
          uid: 123,
          channel: '0146741'
        }
      })).data.data;

      return {
        artwork: musicItem.artwork || ((resource.songItem.albumImgs[0] || {}).img),
        url: resource.url
      };
    },

    async search(query, page, type) {
      if (type === 'music') {
        return await searchMusic(query, page);
      }
      if (type === 'album') {
        return await searchAlbum(query, page);
      }
      if (type === 'artist') {
        return await searchArtist(query, page);
      }

    },

    async getAlbumInfo(albumItem) {
      const headers = {
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'Connection': 'keep-alive',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Host': 'm.music.migu.cn',
        'Referer': `https://m.music.migu.cn/migu/l/?record=record&id=${albumItem.id}`,
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36 Edg/89.0.774.68',
        'X-Requested-With': 'XMLHttpRequest'
      };
      const musicList = (await axios.get('https://m.music.migu.cn/migu/remoting/cms_album_song_list_tag', {
        headers,
        params: {
          albumId: albumItem.id,
          pageSize: 30
        }
      })).data || {};
      const albumDesc = (await axios.get('https://m.music.migu.cn/migu/remoting/cms_album_detail_tag', {
        headers,
        params: {
          albumId: albumItem.id
        }
      })).data || {}; // 有个trackcount

      return {
        ...albumItem,
        description: albumDesc.albumIntro,
        musicList: musicList.result.results.filter(musicCanPlayFilter).map(_ => ({
          id: _.songId,
          artwork: _.picM,
          title: _.songName,
          artist: (_.singerName || []).join(', '),
          album: albumItem.title,
          url: musicCanPlayFilter(_),
          rawLrc: _.lyricLrc,
          copyrightId: _.copyrightId,
          singerId: _.singerId,
        }))
      }
    },
    getArtistWorks: getArtistWorks,
    getLyric: getLyric,
    importMusicSheet

  };
}


code:
var rule={
    title:'唐人街影视',
    host:'https://www.tangrenjie.tv',
    url:'/vod/show/id/fyclass/page/fypage.html',
    searchUrl:'/vod/search/page/fypage/wd/**.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{
        'User-Agent':'UC_UA',
    },
    // class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
    //class_parse:'.top_nav&&ul li:gt(0):lt(25);a&&Text;a&&href;.*/(.*?).html',
    class_name:'电影&电视剧&综艺&动漫&国产剧&港台剧&日韩剧&欧美剧&海外剧',
    class_url:'1&2&3&4&13&14&15&16&27',
    play_parse:true,
    lazy:'',
    limit:6,
    推荐:'ul.vodlist.vodlist_wi;li;a&&title;a&&data-original;.pic_text.text_right&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'li.vodlist_item;a&&title;a&&data-original;.pic_text.text_right&&Text;a&&href',
    //二级:{"title":"h2&&Text;.content_detail.content_min.fl .data_style&&Text","img":".content_thumb .vodlist_thumb&&data-original","desc":".content_detail.content_min.fl li:eq(0)&&Text;.content_detail.content_min.fl li:eq(2)&&Text;.content_detail.content_min.fl li:eq(3)&&Text","content":".content&&Text","tabs":".play_source_tab:eq(0) a","lists":".content_playlist:eq(#id) li"},
    二级:{"title":"h2&&Text;.text-muted:eq(-1)&&Text","img":".content_thumb .vodlist_thumb&&data-original","desc":".content_detail.content_min.fl li:eq(-1)&&Text;.content_detail.content_min.fl li:eq(-1)&&Text;.content_detail.content_min.fl&&ul&&li:eq(3)&&Text;.content_detail.content_min.fl&&ul&&li:eq(0)&&Text;.content_detail.content_min.fl&&ul&&li:eq(1)&&Text","content":".content&&Text","tabs":".play_source_tab:eq(0) a","lists":".play_list_box:eq(#id)&&.content_playlist li"},
    搜索:'body .searchlist_item;a&&title;.vodlist_thumb&&data-original;.pic_text.text_right&&Text;a&&href;.vodlist_sub&&Text',
}

path: js/不良帅/唐人街影视.js


code:
var rule = {
    title:'在线之家',
    host:'https://www.zx189.com',
    // homeUrl:'/',
    url:'/vodtype/fyclass-fypage.html',
    headers:{
        'User-Agent':'MOBILE_UA',
        "Cookie": "searchneed=ok"
    },
    searchUrl:'/vodsearch/**----------fypage---.html',
    searchable:2,
    // class_name:'电影&网剧&剧集&动漫&综艺&记录',
    // class_url:'20&1&2&3&4&23',
    class_parse:'.stui-header__menu li:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html',
    play_parse:true,
    // lazy:'干饭',
    // lazy:'@js:cacheUrl = d.getParse(input);print(cacheUrl);input=cacheUrl',
    // lazy:'js:cacheUrl = d.getParse(input);print(cacheUrl);input=cacheUrl',
    // lazy:'js:cacheUrl=d.getParse(input);if(cacheUrl){input=cacheUrl}else{try{let html=fetch(input,{headers:d.headers,timeout:d.timeout,encoding:d.encoding});let ret=html.match(/var player_(.*?)=(.*?)</)[2];let url=JSON.parse(ret).url;if(url.length>10){real_url="https://player.buyaotou.xyz/?url="+url;d.saveParse(input,real_url);input=real_url}}catch(e){print("网络请求发生错误:"+e.message)}}',
    lazy:'js:cacheUrl=getParse(input);if(cacheUrl){input=cacheUrl}else{try{let html=fetch(input,fetch_params);let ret=html.match(/var player_(.*?)=(.*?)</)[2];let url=JSON.parse(ret).url;if(url.length>10){real_url="https://player.buyaotou.xyz/?url="+url;saveParse(input,real_url);input=real_url}}catch(e){print("网络请求发生错误:"+e.message)}}',
    limit:5,
    推荐:'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text.text-right&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'body .stui-vodlist__box;a&&title;.lazyload&&data-original;.pic-text.text-right&&Text;a&&href',
    二级:{"title":"h1.title&&Text;.stui-content__detail p:eq(1)&&Text","img":".lazyload&&data-original","desc":".stui-content__detail p:eq(-3)&&Text;.stui-content__detail p:eq(-2)&&Text","content":".stui-content__detail p.detail&&Text","tabs":".stui-pannel__head ul li","lists":".stui-content__playlist:eq(#id) li"},
    // 搜索:'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
}


code:
var rule = {
    title:'在线之家',
    host:'https://zxzjmtv.com',
    // homeUrl:'/',
    url:'/vsph/fyclassavbvcdcddvvfypageddv.html',
    searchUrl:'/vsear/**acabaaacacvcvvvcfypagecvvb.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{//网站的请求头,完整支持所有的,常带ua和cookies
        'User-Agent':'MOBILE_UA',
        // "Cookie": "searchneed=ok"
    },
    class_name:'电影&电视剧&综艺&动漫&剧情片&动画电影&同性片&喜剧片&国产剧&欧美剧&韩剧&日剧&港剧&台剧&泰剧&新马剧&其他剧',
    class_url:'2&1&4&3&30&32&33&34&20&21&22&23&24&25&26&27&28',
    //class_parse:'.myui-panel-box&&ul&&li;a&&Text;a&&href;/v/(.*)/',
    play_parse:true,
    lazy:'',
    limit:6,
    推荐:'ul.hl-vod-list;li;a&&title;.hl-item-thumb.hl-lazy&&data-original;.hl-pic-text&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'.hl-list-item;a&&title;.hl-item-thumb.hl-lazy&&data-original;.hl-pic-text&&Text;a&&href',
    二级:{"title":".hl-item-thumb.hl-lazy&&title;.hl-full-box&&ul li:eq(6)&&Text","img":".hl-item-thumb.hl-lazy&&data-original","desc":".hl-full-box&&ul&&li:eq(-1)&&Text;.hl-full-box&&ul&&li:eq(-2)&&Text;.hl-full-box&&ul&&li:eq(-3)&&Text;.hl-full-box&&ul&&li:eq(2)&&Text;.hl-full-box&&ul&&li:eq(3)&&Text","content":".hl-col-xs-12.blurb&&Text","tabs":".hl-plays-from:eq(0) a","lists":".hl-plays-list:eq(#id) li"},
    搜索:'.hl-item-div;a&&title;.hl-item-thumb&&data-original;.hl-lc-1&&Text;a&&href;.text-muted:eq(-1)&&Text',
}


code:
var rule = {
    title:'天天视频',
    host:'http://www.ttsp.tv',
    // homeUrl:'/',
    url:'/vodshow/fyclass--------fypage---.html',
    searchUrl:'/vodsearch/**----------fypage---.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{//网站的请求头,完整支持所有的,常带ua和cookies
        'User-Agent':'MOBILE_UA',
        // "Cookie": "searchneed=ok"
    },
    class_name:'电影&电视剧&综艺&动漫',
    class_url:'1&2&3&4',
    play_parse:true,
    lazy:'',
    limit:6,
    推荐:'ul.vodlist.vodlist_wi;li;a&&title;a&&data-original;.pic_text.text_right&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'li.vodlist_item;a&&title;a&&data-original;.pic_text.text_right&&Text;a&&href',
    二级:{"title":"h1&&Text;.text-muted:eq(-1)&&Text","img":".content_thumb .vodlist_thumb&&data-original","desc":".text-muted:eq(-1)&&Text;.text-muted:eq(-1)&&Text;.text-muted:eq(-1)&&Text;.content_detail.content_min.fl&&ul&&li:eq(3)&&Text;.content_detail.content_min.fl&&ul&&li:eq(4)&&Text","content":".content&&Text","tabs":".play_source_tab:eq(0) a","lists":".play_list_box:eq(#id) .playlist_notfull&&ul li"},
    搜索:'body .searchlist_item;a&&title;.vodlist_thumb.lazyload&&data-original;.pic_text.text_right&&Text;a&&href',
}


code:
var rule={
    title:'天天影视',
    host:'http://www.b7yy.cc',
    // homeUrl:'/',
    url:'/yy6090-show/fyclass/page/fypage.html',
    searchUrl:'/yy6090-search/page/fypage/wd/**.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{//网站的请求头,完整支持所有的,常带ua和cookies
        'User-Agent':'PC_UA',
        // "Cookie": "searchneed=ok"
    },
    class_name:'电影&剧集&综艺&动漫&纪录',
    class_url:'dianying&lianxuju&zongyi&dongman&jilupian',
    lazy:'',
    limit:6,
    推荐:'.mo-cols-lays;ul.mo-cols-rows li;.mo-situ-name&&Text;a&&data-original;.mo-situ-rema&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'.mo-cols-lays:eq(1)&&ul.mo-cols-rows li;.mo-situ-name&&Text;a&&data-original;.mo-situ-rema&&Text;a&&href',
    二级:{"title":"h1&&Text;.s-top-info-title&&Text","img":"img.mo-part-full&&src","desc":".data:eq(0)&&Text;.data:eq(1)&&Text;.data:eq(2)&&Text;.data:eq(3)&&Text","content":".mo-word-info&&Text","tabs":"h2.mo-fsxs-14px&&.mo-movs-btns","lists":"ul.mo-movs-item:eq(#id)&&li"},
    搜索:'.mo-deta-info.mo-cols-rows;h1&&Text;a&&data-original;.mo-situ-rema&&Text;a&&href',
}

path: js/不良帅/天天影视.js


code:
var rule={
    title:'天空影视',
    host:'https://www.tkys6.com',
    url:'/vodshow/id/fyclass/page/fypage.html',
    searchUrl:'/vodsearch/page/fypage/wd/**.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    //class_parse:'.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
    //cate_exclude:'演员',
    class_name:'电影&电视剧&综艺&动漫&纪录片&竞技体育&国产剧&港台剧&日韩剧&欧美剧&新马泰&其他',
    class_url:'1&2&3&4&29&5&30&16&18&47&14&13',
    推荐:'.module-poster-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
    一级:'.module-poster-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
    //二级:{"title":"h1&&Text;","img":".lazyload&&data-original","desc":";;.module-info-item:eq(4) p&&Text;.module-info-item:eq(3) div&&Text;.module-info-item:eq(1) a&&Text","content":".show-desc&&Text","tabs":'#y-playList&&span',"lists":".module-play-list:eq(#id) a"},
    二级:{"title":"h1&&Text;.module-info-tag-link:eq(2)&&Text","img":".lazyload&&data-original","desc":".module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(2)&&.module-info-item-content&&Text;.module-info-content&&.module-info-item:eq(1)&&.module-info-item-content&&Text","content":".module-info-introduction-content&&Text","tabs":".module-tab-items-box:eq(0)&&.module-tab-item","lists":".module-list:eq(#id)&&.module-play-list-content a"},
    搜索:'.module-card-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
}

path: js/不良帅/天空影视.js


code:
var rule={
    title:'子子影视',
    host:'https://www.ziziys.com',
    // homeUrl:'/',
    url:'/list/fyclass/page/fypage.html',
    searchUrl:'/vsearch/--.html?wd=**',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{//网站的请求头,完整支持所有的,常带ua和cookies
        'User-Agent':'MOBILE_UA',
        // "Cookie": "searchneed=ok"
    },
    class_name:'电影&动漫&国产剧&美剧&日韩剧',
    class_url:'1&3&13&14&15',
    lazy:'',
    limit:6,
    推荐:'.module-item;a&&title;.lazyloaded&&data-src;.module-item-text&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'.module-item;a&&title;.lazyloaded&&data-src;.module-item-text&&Text;a&&href',
    二级:{"title":"h1&&Text;.video-info-header&&Text","img":".lazyload&&data-src","desc":".video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text","content":".vod_content&&Text","tabs":".module-tab-item","lists":".sort-item:eq(#id) a"},
    搜索:'.module-items;.lazyload&&alt;.lazyload&&data-src;.tag-link&&Text;*',
}

path: js/不良帅/子子影视.js


code:
var rule={
    title:'小宝影视',
    host:'https://xiaobao.tv',
    url:'/index.php/vod/show/id/fyclass/page/fypage.html',
    searchUrl:'/index.php/vod/search/page/fypage/wd/**.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{
        'User-Agent':'UC_UA',
    },
    // class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
    //class_parse:'.top_nav&&ul li:gt(0):lt(25);a&&Text;a&&href;/(\\d+).html',
    class_name:'电影&电视剧&综艺&动漫&记录片',
    class_url:'1&2&3&4&24',
    play_parse:true,
    lazy:'',
    limit:6,
    推荐:'ul.vodlist.vodlist_wi;li;a&&title;a&&data-original;.pic_text.text_right&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'li.vodlist_item;a&&title;a&&data-original;.pic_text.text_right&&Text;a&&href',
    二级:{"title":"h2&&Text;.content_detail.content_min.fl .data_style&&Text","img":".content_thumb .vodlist_thumb&&data-original","desc":".content_detail.content_min.fl li:eq(-8)&&Text;.content_detail.content_min.fl li:eq(-8)&&Text;.content_detail.content_min.fl li:eq(0)&&Text;.content_detail.content_min.fl li:eq(2)&&Text;.content_detail.content_min.fl li:eq(3)&&Text","content":".content&&Text","tabs":".play_source_tab:eq(0) a","lists":".play_list_box:eq(#id)&&.content_playlist li"},
    搜索:'body .searchlist_item;a&&title;.vodlist_thumb&&data-original;.pic_text.text_right&&Text;a&&href;.vodlist_sub&&Text',
}

path: js/不良帅/小宝影视.js


code:
var rule={
    title:'布雷蓝光',
    host:'https://www.bulei.cc',
    url:'/index.php/vod/show/by/time/id/fyclass/page/fypage.html',
    searchUrl:'/index.php/vod/search/page/fypage/wd/**.html',
    searchable:2,
    quickSearch:1,
    filterable:0,
    headers:{'User-Agent':'MOBILE_UA',         },
    class_name:'电影&电视剧&综艺&动漫&纪录片&国产剧&港剧&日剧&欧美剧&韩剧&泰剧&台剧&海外剧',
    class_url:'1&2&3&4&27&13&46&15&16&45&34&14&35',
    推荐:'.module-poster-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
    一级:'.module-poster-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
    二级:{"title":"h1&&Text;","img":".lazyload&&data-original","desc":";;.module-info-item:eq(4) p&&Text;.module-info-item:eq(3) div&&Text;.module-info-item:eq(1) a&&Text","content":".show-desc&&Text","tabs":'#y-playList&&span',"lists":".module-play-list:eq(#id) a"},
    搜索:'.module-card-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
}

path: js/不良帅/布雷蓝光.js


code:
var rule = {
    title:'抓饭体育',
    host:'https://www.zhuafan.tech',
    url:'/sports-home/category/fyclass',
    class_name:'全部&足球&篮球&羽乒&台球&棒球&户外&搏击&综合&棋盘&电竞&网球&排球&聊天&原声',
    class_url:'all&Football&Basketball&Badminton&Billiards&Baseball&Outdoors&Wrestling&Others&Boardgame&Popular&Tennis&Volleyball&Chat&Acoustic',
	homeUrl:'/sports-home/category/all',//网站的首页链接,用于分类获取和推荐获取
    detailUrl:'https://m.zhuafan.tech/fyid',//二级详情拼接链接(json格式用)
    searchUrl:'/live-search/search/query/data?keyword=**&page=fypage&num=&searchType=all&uid=null&from=pc',
    searchable:2,
    quickSearch:0,
    headers:{
        'User-Agent':'PC_UA'
    },
    limit:6,
    timeout:5000,
    play_parse:true,
    lazy:'',
    double:false,
    推荐:'*',
    一级:'json:data;cname;imageUrl;uname;id',
    二级:'*',
	搜索:'json:cObj.cList;*;*;*;_id',
}

path: js/不良帅/抓饭体育.js


code:
var rule = {
    title:'映迷影院',
    host:'https://www.inmi.app',
    // homeUrl:'/',
    url:'/index.php/vod/show/id/fyclass/page/fypage.html',
    searchUrl:'/index.php/vod/search/page/fypage/wd/**.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{//网站的请求头,完整支持所有的,常带ua和cookies
        'User-Agent':'MOBILE_UA',
        // "Cookie": "searchneed=ok"
    },
    class_name:'电影&电视剧&综艺&动漫',
    class_url:'20&21&24&23',
    play_parse:true,
    lazy:'',
    limit:6,
    //推荐:'a.module-poster-item.module-item;a&&title;img&&data-original;.module-item-note&&Text;a&&href',
    推荐:'.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'.module-poster-item.module-item;a&&title;img&&data-original;.module-item-note&&Text;a&&href',
    二级:{"title":"h1&&Text;.module-info-tag-link:eq(2)&&Text","img":".ls-is-cached.lazy.lazyload&&data-original","desc":".module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(4)&&Text;.module-info-content&&.module-info-item:eq(3)&&Text;.module-info-content&&.module-info-item:eq(2)&&.module-info-item-content&&Text;.module-info-content&&.module-info-item:eq(1)&&.module-info-item-content&&Text","content":".module-info-introduction-content&&Text","tabs":".module-tab-items-box:eq(0)&&.module-tab-item","lists":".module-list.sort-list:eq(#id)&&.module-play-list-content a"},
    搜索:'.module-card-item.module-item;.module-card-item-title&&Text;img&&data-original;.module-item-note&&Text;a.play-btn-o&&href',
}

path: js/不良帅/映迷影院.


code:
if (typeof Object.assign != 'function') {
    Object.assign = function () {
	var target = arguments[0];
    for (var i = 1; i < arguments.length; i++) {
        var source = arguments[i];
        for (var key in source) {
            if (Object.prototype.hasOwnProperty.call(source, key)) {
                target[key] = source[key];
            }
        }
    }
    return target;
};
}
function getMubans() {
    var mubanDict = { // 模板字典
        mxpro: {
            title: '',
            host: '',
            // homeUrl:'/',
            url: '/vodshow/fyclass--------fypage---.html',
            searchUrl: '/vodsearch/**----------fypage---.html',
            searchable: 2,//是否启用全局搜索,
            quickSearch: 0,//是否启用快速搜索,
            filterable: 0,//是否启用分类筛选,
            headers: {//网站的请求头,完整支持所有的,常带ua和cookies
                'User-Agent': 'MOBILE_UA',
                // "Cookie": "searchneed=ok"
            },
            class_parse: '.navbar-items li:gt(2):lt(8);a&&Text;a&&href;/(\\d+).html',
            play_parse: true,
            lazy: '',
            limit: 6,
            推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
            double: true, // 推荐内容是否双层定位
            一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
            二级: {
                "title": "h1&&Text;.module-info-tag&&Text",
                "img": ".lazyload&&data-original",
                "desc": ".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text",
                "content": ".module-info-introduction&&Text",
                "tabs": ".module-tab-item",
                "lists": ".module-play-list:eq(#id) a"
            },
            搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
        },
        mxone5: {
            title: '',
            host: '',
            url: '/show/fyclass--------fypage---.html',
            searchUrl: '/search/**----------fypage---.html',
            searchable: 2,//是否启用全局搜索,
            quickSearch: 0,//是否启用快速搜索,
            filterable: 0,//是否启用分类筛选,
            class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
            play_parse: true,
            lazy: '',
            limit: 6,
            推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
            double: true, // 推荐内容是否双层定位
            一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
            二级: {
                "title": "h1&&Text;.tag-link&&Text",
                "img": ".module-item-pic&&img&&data-src",
                "desc": ".video-info-items:eq(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text",
                "content": ".vod_content&&Text",
                "tabs": ".module-tab-item",
                "lists": ".module-player-list:eq(#id)&&.scroll-content&&a"
            },
            搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
        },
        首图: {
            title: '',
            host: '',
            url: '/vodshow/fyclass--------fypage---/',
            searchUrl: '/vodsearch/**----------fypage---.html',
            searchable: 2,//是否启用全局搜索,
            quickSearch: 0,//是否启用快速搜索,
            filterable: 0,//是否启用分类筛选,
            headers: {//网站的请求头,完整支持所有的,常带ua和cookies
                'User-Agent': 'MOBILE_UA',
                // "Cookie": "searchneed=ok"
            },
            class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html',
            play_parse: true,
            lazy: '',
            limit: 6,
            推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
            double: true, // 推荐内容是否双层定位
            一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
            二级: {
                "title": ".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text",
                "img": ".myui-content__thumb .lazyload&&data-original",
                "desc": ".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text",
                "content": ".content&&Text",
                "tabs": ".nav-tabs:eq(0) li",
                "lists": ".myui-content__list:eq(#id) li"
            },
            搜索: '#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
        },
        首图2: {
            title: '',
            host: '',
            url: '/list/fyclass-fypage.html',
            searchUrl: '/vodsearch/**----------fypage---.html',
            searchable: 2,//是否启用全局搜索,
            quickSearch: 0,//是否启用快速搜索,
            filterable: 0,//是否启用分类筛选,
            headers: {
                'User-Agent': 'UC_UA',
                // "Cookie": ""
            },
            // class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
            class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
            play_parse: true,
            lazy: '',
            limit: 6,
            推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
            double: true, // 推荐内容是否双层定位
            一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
            二级: {
                "title": ".stui-content__detail .title&&Text;.stui-content__detail p:eq(-2)&&Text",
                "img": ".stui-content__thumb .lazyload&&data-original",
                "desc": ".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text",
                "content": ".detail&&Text",
                "tabs": ".stui-vodlist__head h3",
                "lists": ".stui-content__playlist:eq(#id) li"
            },
            搜索: 'ul.stui-vodlist__media:eq(0) li,ul.stui-vodlist:eq(0) li,#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
            搜索1: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
            搜索2: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
        },
        默认: {
            title: '',
            host: '',
            url: '/vodshow/fyclass--------fypage---.html',
            searchUrl: '/vodsearch/-------------.html?wd=**',
            searchable: 2,//是否启用全局搜索,
            quickSearch: 0,//是否启用快速搜索,
            filterable: 0,//是否启用分类筛选,
            headers: {
                'User-Agent': 'MOBILE_UA',
            },
            play_parse: true,
            lazy: '',
            limit: 6,
            double: true, // 推荐内容是否双层定位
        },
        vfed: {
            title: '',
            host: '',
            url: '/index.php/vod/show/id/fyclass/page/fypage.html',
            searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
            searchable: 2,//是否启用全局搜索,
            quickSearch: 0,//是否启用快速搜索,
            filterable: 0,//是否启用分类筛选,
            headers: {
                'User-Agent': 'UC_UA',
            },
            // class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
            class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
            play_parse: true,
            lazy: '',
            limit: 6,
            推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
            double: true, // 推荐内容是否双层定位
            一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
            二级: {
                "title": "h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text",
                "img": ".fed-list-info&&a&&data-original",
                "desc": ".fed-deta-content&&.fed-part-rows&&li:eq(1)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(2)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(3)&&Text",
                "content": ".fed-part-esan&&Text",
                "tabs": ".fed-drop-boxs&&.fed-part-rows&&li",
                "lists": ".fed-play-item:eq(#id)&&ul:eq(1)&&li"
            },
            搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text',
        },
        海螺3: {
            title: '',
            host: '',
            searchUrl: '/v_search/**----------fypage---.html',
            url: '/vod_____show/fyclass--------fypage---.html',
            headers: {
                'User-Agent': 'MOBILE_UA'
            },
            timeout: 5000,
            class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html',
            cate_exclude: '明星|专题|最新|排行',
            limit: 40,
            play_parse: true,
            lazy: '',
            推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
            double: true,
            一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
            二级: {
                "title": ".hl-infos-title&&Text;.hl-text-conch&&Text",
                "img": ".hl-lazy&&data-original",
                "desc": ".hl-infos-content&&.hl-text-conch&&Text",
                "content": ".hl-content-text&&Text",
                "tabs": ".hl-tabs&&a",
                "lists": ".hl-plays-list:eq(#id)&&li"
            },
            搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
            searchable: 2,//是否启用全局搜索,
            quickSearch: 0,//是否启用快速搜索,
            filterable: 0,//是否启用分类筛选,
        },
        海螺2: {
            title: '',
            host: '',
            searchUrl: '/index.php/vod/search/page/fypage/wd/**/',
            url: '/index.php/vod/show/id/fyclass/page/fypage/',
            headers: {
                'User-Agent': 'MOBILE_UA'
            },
            timeout: 5000,
            class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/',
            limit: 40,
            play_parse: true,
            lazy: '',
            推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
            double: true,
            一级: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href',
            二级: {
                "title": "h2&&Text;.deployment&&Text",
                "img": ".lazy&&data-original",
                "desc": ".deployment&&Text",
                "content": ".ec-show&&Text",
                "tabs": "#tag&&a",
                "lists": ".play_list_box:eq(#id)&&li"
            },
            搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href',
            searchable: 2,//是否启用全局搜索,
            quickSearch: 0,//是否启用快速搜索,
            filterable: 0,//是否启用分类筛选,
        },
        短视: {
            title: '',
            host: '',
            // homeUrl:'/',
            url: '/channel/fyclass-fypage.html',
            searchUrl: '/search.html?wd=**',
            searchable: 2,//是否启用全局搜索,
            quickSearch: 0,//是否启用快速搜索,
            filterable: 0,//是否启用分类筛选,
            headers: {//网站的请求头,完整支持所有的,常带ua和cookies
                'User-Agent': 'MOBILE_UA',
                // "Cookie": "searchneed=ok"
            },
            class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html',
            cate_exclude: '解析|动态',
            play_parse: true,
            lazy: '',
            limit: 6,
            推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
            double: true, // 推荐内容是否双层定位
            一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
            二级: {
                "title": "h1&&Text;.content-rt&&p:eq(0)&&Text",
                "img": ".img&&img&&data-src",
                "desc": ".content-rt&&p:eq(1)&&Text;.content-rt&&p:eq(2)&&Text;.content-rt&&p:eq(3)&&Text;.content-rt&&p:eq(4)&&Text;.content-rt&&p:eq(5)&&Text",
                "content": ".zkjj_a&&Text",
                "tabs": ".py-tabs&&option",
                "lists": ".player:eq(#id) li"
            },
            搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href',
        }

    };
    return JSON.parse(JSON.stringify(mubanDict));
}
var mubanDict = getMubans();
var muban = getMubans();
export default {muban,getMubans};


code:
var rule = {
    title:'短视频',
    host:'http://www.sharenice.net',
    url:'/fyclass?page=fypage',
    //searchUrl:'/video/search?search_key=**',
    searchable:0,
    quickSearch:0,
    headers:{
        'User-Agent':'PC_UA'
    },
    timeout:5000,
    class_name:'抖音&快手&微视&火山&场库&体育&美拍&秒拍&全民&梨&好兔&美女&正能量&搞笑&社会&游戏&娱乐&旅游&萌系&生活&音乐&美食&明星&动漫&影视&时尚',
    class_url:'douyin&kuaishou&weishi&huoshan&changku&tags/t-5L2T6IKy.html&meipai&miaopai&quanmin&lishipin&haotu&tags/t-576O5aWz.html&tags/t-5q2j6IO96YeP.html&tags/t-5pCe56yR.html&tags/t-56S+5Lya.html&tags/t-5ri45oiP.html&tags/t-5aix5LmQ.html&tags/t-5peF5ri4.html&tags/t-6JCM57O7.html&tags/t-55Sf5rS7.html&tags/t-6Z+z5LmQ.html&tags/t-576O6aOf.html&tags/t-5piO5pif.html&tags/t-5Yqo5ryr.html&tags/t-5b2x6KeG.html&tags/t-5pe25bCa.html',
    play_parse:true,
    lazy:'',
    limit:6,
    double:false,
    推荐:'*',
    一级:'.item-box&&ul&&li;a&&title;img&&data-original;;a&&href',
    二级:'*',
}


code:
var rule={
    title:'石榴影院',
    host:'https://hei19.com',
    // homeUrl:'/',
    url:'/catalog?column=fyclass&sort=1&per_page=72&page=fypage',
    searchUrl:'/search?type=1&keywords=**&page=fypage',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{//网站的请求头,完整支持所有的,常带ua和cookies
        'User-Agent':'MOBILE_UA',
        // "Cookie": "searchneed=ok"
    },
    //class_parse:'.conch-nav&&ul&&li;a&&Text;a&&href;./(\\d+).html',
    //cate_exclude:'',
    class_name:'电影&电视剧&综艺&动漫',
    class_url:'1&2&3&4',
    play_parse:true,
    lazy:'',
    limit:6,
    推荐:'.media-list-1;ul&&li;a&&title;img&&src;.tag&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'.media-list-2&&ul&&li;a&&title;img&&src;.tag&&Text;a&&href',
    二级:{"title":".hl-dc-title&&Text;.hl-col-xs-12&&em&&.hl-text-muted:eq(-2)&&Text","img":".hl-lazy&&data-original","desc":";;.hl-col-xs-12:eq(2)&&Text;.hl-col-xs-12:eq(3)&&Text;.hl-col-xs-12:eq(4)&&Text","content":".video-desc-single&&Text","tabs":".play-box-mobile h2","lists":".play-list&&.item-box&&li a"},
    搜索:'.hl-list-wrap&&ul&&li;.hl-item-thumb&&title;.hl-lazy&&data-original;.hl-pic-text&&Text;a&&href',
}

path: js/不良帅/石榴影院.js


code:
function netease(packages) {
    const { axios, CryptoJs, qs, bigInt, dayjs } = packages;

    /** 内部的函数 */

    function a() {
        var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
        for (d = 0; 16 > d; d += 1)
            e = Math.random() * b.length,
                e = Math.floor(e),
                c += b.charAt(e);
        return c
    }

    function b(a, b) {
        var c = CryptoJs.enc.Utf8.parse(b)
            , d = CryptoJs.enc.Utf8.parse("0102030405060708")
            , e = CryptoJs.enc.Utf8.parse(a)
            , f = CryptoJs.AES.encrypt(e, c, {
                iv: d,
                mode: CryptoJs.mode.CBC
            });
        return f.toString()
    }

    function c(text) {
        text = text.split('').reverse().join('');
        const d = '010001';
        const e = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7';
        const hexText = text.split('').map(_ => _.charCodeAt(0).toString(16)).join('');
        const res = bigInt(hexText, 16).modPow(bigInt(d, 16), bigInt(e, 16)).toString(16);

        return Array(256 - res.length).fill('0').join('').concat(res);
    }

    function getParamsAndEnc(text) {
        const first = b(text, '0CoJUm6Qyw8W8jud');
        const rand = a();
        const params = b(first, rand);

        const encSecKey = c(rand);
        return {
            params,
            encSecKey
        }
    }

    function formatMusicItem(_) {
        const album = _.al || _.album;
        return ({
            id: _.id,
            artwork: album.picUrl,
            title: _.name,
            artist: (_.ar || _.artists)[0].name,
            album: album.name
        })
    }

    function formatAlbumItem(_) {
        return ({
            id: _.id,
            artist: _.artist.name,
            title: _.name,
            artwork: _.picUrl,
            description: '',
            date: dayjs.unix(_.publishTime / 1000).format("YYYY-MM-DD"),
        });
    }

    function musicCanPlayFilter(_) {
        return ((_.fee === 0) || _.fee === 8) && _.privilege.st >= 0;
    }

    const pageSize = 30;
    async function searchBase(query, page, type) {
        const data = {
            's': query,
            'limit': pageSize,
            'type': type,
            'offset': (page - 1) * pageSize,
            'csrf_token': ''
        }
        const pae = getParamsAndEnc(JSON.stringify(data));
        const paeData = qs.stringify(pae);

        const headers = {
            'authority': 'music.163.com',
            'user-agent':
                'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36',
            'content-type': 'application/x-www-form-urlencoded',
            'accept': '*/*',
            'origin': 'https://music.163.com',
            'sec-fetch-site': 'same-origin',
            'sec-fetch-mode': 'cors',
            'sec-fetch-dest': 'empty',
            'referer': 'https://music.163.com/search/',
            'accept-language': 'zh-CN,zh;q=0.9',
        }

        const res = (await axios({
            method: 'post',
            url: 'https://music.163.com/weapi/cloudsearch/get/web?csrf_token=',
            headers,
            data: paeData
        })).data;

        return res;
    }

    async function searchMusic(query, page) {

        const res = await searchBase(query, page, 1);

        const songs = res.result.songs.filter(musicCanPlayFilter).map(formatMusicItem)

        return {
            isEnd: res.result.songCount <= page * pageSize,
            data: songs
        }

    }

    async function searchAlbum(query, page) {
        const res = await searchBase(query, page, 10);

        const albums = res.result.albums.map(formatAlbumItem)

        return {
            isEnd: res.result.albumCount <= page * pageSize,
            data: albums
        }
    }

    async function searchArtist(query, page) {
        const res = await searchBase(query, page, 100);

        const artists = res.result.artists.map(_ => ({
            name: _.name,
            id: _.id,
            avatar: _.img1v1Url,
            worksNum: _.albumSize
        }))

        return {
            isEnd: res.result.artistCount <= page * pageSize,
            data: artists
        }
    }

    async function getArtistWorks(artistItem, page, type) {
        const data = {
            'csrf_token': ''
        }
        const pae = getParamsAndEnc(JSON.stringify(data));
        const paeData = qs.stringify(pae);

        const headers = {
            'authority': 'music.163.com',
            'user-agent':
                'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36',
            'content-type': 'application/x-www-form-urlencoded',
            'accept': '*/*',
            'origin': 'https://music.163.com',
            'sec-fetch-site': 'same-origin',
            'sec-fetch-mode': 'cors',
            'sec-fetch-dest': 'empty',
            'referer': 'https://music.163.com/search/',
            'accept-language': 'zh-CN,zh;q=0.9',
        }

        if (type === 'music') {
            const res = (await axios({
                method: 'post',
                url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,
                headers,
                data: paeData
            })).data;
            return {
                isEnd: true,
                data: res.hotSongs.filter(musicCanPlayFilter).map(formatMusicItem)
            }
        } else if (type === 'album') {
            const res = (await axios({
                method: 'post',
                url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,
                headers,
                data: paeData
            })).data;
            return {
                isEnd: true,
                data: res.hotAlbums.map(formatAlbumItem)
            }
        }

    }

    async function getLyric(musicItem) {
        const headers = {
            'Referer': 'https://y.music.163.com/',
            'Origin': 'https://y.music.163.com/',
            'authority': 'music.163.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36',
            'Content-Type': 'application/x-www-form-urlencoded',
        };
        const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: '' }
        const pae = getParamsAndEnc(JSON.stringify(data));
        const paeData = qs.stringify(pae);

        const result = (await axios({
            method: 'post',
            url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,
            headers,
            data: paeData
        })).data;

        return {
            rawLrc: result.lrc.lyric
        }
    }

    async function getAlbumInfo(albumItem) {
        const headers = {
            'Referer': 'https://y.music.163.com/',
            'Origin': 'https://y.music.163.com/',
            'authority': 'music.163.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36',
            'Content-Type': 'application/x-www-form-urlencoded',
        };
        const data = { "resourceType": 3, "resourceId": albumItem.id, "limit": 15, "csrf_token": "" }
        const pae = getParamsAndEnc(JSON.stringify(data));
        const paeData = qs.stringify(pae);

        const res = (await axios({
            method: 'post',
            url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,
            headers,
            data: paeData
        })).data;

        return {
            ...albumItem,
            description: res.album.description,
            musicList: (res.songs || []).filter(musicCanPlayFilter).map(formatMusicItem)
        }

    }

    async function getValidMusicItems(trackIds) {
        const headers = {
            'Referer': 'https://y.music.163.com/',
            'Origin': 'https://y.music.163.com/',
            'authority': 'music.163.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36',
            'Content-Type': 'application/x-www-form-urlencoded'
        };
        try {
            const data = { csrf_token: '', ids: `[${trackIds.join(',')}]`, level: 'standard', encodeType: 'flac' }
            const pae = getParamsAndEnc(JSON.stringify(data));
            const urlencoded = qs.stringify(pae);
            const res = (await axios({
                method: 'post',
                url: `https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=`,
                headers,
                data: urlencoded
            })).data;

            const validTrackIds = res.data.filter(_ => _.url).map(_ => _.id);
            const songDetails = (await axios.get(`https://music.163.com/api/song/detail/?id=${validTrackIds[0]}&ids=[${validTrackIds.join(',')}]`, { headers })).data;
            const validMusicItems = songDetails.songs.filter(_ => ((_.fee === 0) || _.fee === 8)).map(formatMusicItem);
            return validMusicItems;
        } catch(e) {
            return []
         }

    }

    async function importMusicSheet(urlLike) {
        const matchResult = urlLike.match(/(?:https:\/\/y\.music\.163.com\/m\/playlist\?id=([0-9]+))|(?:https?:\/\/music\.163\.com\/playlist\/([0-9]+)\/.*)/);
        const id = matchResult[1] || matchResult[2];
        const headers = {
            'Referer': 'https://y.music.163.com/',
            'Origin': 'https://y.music.163.com/',
            'authority': 'music.163.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36',
        };
        const sheetDetail = (await axios.get(`https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`, {
            headers
        })).data;
        const trackIds = sheetDetail.playlist.trackIds.map(_ => _.id);
        let result = [];
        let idx = 0;
        while((idx * 200) < trackIds.length) {
            const res = await getValidMusicItems(trackIds.slice(idx * 200, (idx + 1) * 200));
            result = result.concat(res);
            ++idx;
        }
        return result;
    }

    return {
        platform: '网易云',
        version: '0.0.6',
        srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/master/netease.js',
        cacheControl: 'no-store',
        async search(query, page, type) {
            if (type === 'music') {
                return await searchMusic(query, page);
            }
            if (type === 'album') {
                return await searchAlbum(query, page);
            }
            if (type === 'artist') {
                return await searchArtist(query, page);
            }
        },
        getMediaSource(musicItem) {
            return {
                url: `https://music.163.com/song/media/outer/url?id=${musicItem.id}.mp3`
            };
        },
        getAlbumInfo,
        getLyric,
        getArtistWorks,
        importMusicSheet

    }
}


code:
var rule={
title:'艾斯影院',
host:'http://www.acedyy.com',
url:'/vodshow/fyclass--------fypage---/',
searchUrl:'/vodsearch/**----------fypage---/',
searchable:2,
quickSearch:0,
filterable:0,
headers:{'User-Agent':'MOBILE_UA', },
class_name:'电影&电视剧&综艺&动漫',
class_url:'dianying&dianshiju&zongyi&donghuapian',
play_parse:true,
lazy:'',
limit:6,
推荐:'.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
double:true, // 推荐内容是否双层定位
一级:'.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
二级:{"title":"h1&&Text;.video-info-aux&&div&&a:eq(0)&&Text","img":".module-item-pic&&img&&data-src","desc":";.video-info-aux&&a:eq(1)&&Text;.video-info-aux&&a:eq(2)&&Text;.video-info-items:eq(1) a&&Text;.video-info-items:eq(0) a&&Text","content":".video-info-content&&Text","tabs":".module-tab-item.tab-item","lists":".module-player-list:eq(#id)&&.scroll-content&&a"},
搜索:'.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
}

path: js/不良帅/艾斯影院.js


code:
var rule = {
    title:'落攻阁影视',
    host:'https://www.mfxs0.cn',
    // homeUrl:'/',
    url:'/index.php/vod/show/id/fyclass/page/fypage.html',
    searchUrl:'/index.php/vod/search/page/fypage/wd/**.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{//网站的请求头,完整支持所有的,常带ua和cookies
        'User-Agent':'MOBILE_UA',
        // "Cookie": "searchneed=ok"
    },
    //class_parse:'.nav-menu-items&&li;a&&title;a&&href;/(\\d+).html',
    class_name:'电影&电视剧&综艺&动漫',
    class_url:'1&2&3&4',
    play_parse:true,
    lazy:'',
    limit:6,
    //推荐:'a.module-poster-item.module-item;a&&title;img&&data-original;.module-item-note&&Text;a&&href',
    推荐:'.tab-list.active;.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'.module-poster-item.module-item;a&&title;img&&data-original;.module-item-note&&Text;a&&href',
    二级:{"title":"h1&&Text;.module-info-tag-link:eq(2)&&Text","img":".module-item-pic&&img&&data-original","desc":".module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(-4)&&Text;.module-info-content&&.module-info-item:eq(5)&&Text;.module-info-content&&.module-info-item:eq(3)&&.module-info-item-content&&Text;.module-info-content&&.module-info-item:eq(1)&&.module-info-item-content&&Text","content":".module-info-introduction-content&&Text","tabs":".module-tab-items-box:eq(0)&&.module-tab-item","lists":".module-list:eq(#id)&&.module-play-list-content a"},
    搜索:'.module-card-item.module-item;.module-card-item-title&&Text;img&&data-original;.module-item-note&&Text;a.play-btn-o&&href',
}


code:
var rule = {
    title:'蜻蜓FM',
    host:'http://www.qingting.fm',
    url:'/radiopage/fyclass/fypage',
    searchUrl:'',
    searchable:0,
    quickSearch:0,
    class_name:'广东&浙江&北京&天津&河北&上海&山西&内蒙古&辽宁&吉林&黑龙江&江苏&安徽&福建&江西&山东&河南&湖北&湖南&广西&海南&重庆&四川&贵州&云南&陕西&甘肃&宁夏&新疆&西藏&青海&资讯&音乐&交通&经济&文艺&都市&体育&双语&综合&生活&旅游&曲艺&方言',
    class_url:'217&99&3&5&7&83&19&31&44&59&69&85&111&129&139&151&169&187&202&239&254&257&259&281&291&316&327&351&357&308&342&433&442&429&439&432&441&430&431&440&438&435&436&434',
    headers:{
        'User-Agent':'PC_UA'
    },
    timeout:5000,
    play_parse:true,
    play_json:0,
    lazy:'js:input=input.replace("www.qingting.fm/radios/","lhttp.qingting.fm/live/")+"/64k.mp3"',
    limit:6,
    double:false,
    //推荐:'*',
    一级:'.contentSec&&.radio;span&&Text;img&&src;.descRadio&&Text;a&&href',
    二级:'*',
    搜索:'',
}


code:
function kuwo(packages) {
    const { axios, he, CookieManager } = packages;

    const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    const pageSize = 30;
    function getRandomCsrf() {
        return Array(11).fill(0).map(_ => alphabet[Math.floor(Math.random() * 36)]).join('');
    }

    async function getHeaders() {
        await CookieManager.flush();
        const csrfToken = (await CookieManager.get('www.kuwo.cn'))?.kw_token?.value ?? getRandomCsrf();

        return {
            "user-agent":
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63",
            accept: "application/json, text/plain, */*",
            "accept-encoding": "gzip, deflate, br",
            csrf: csrfToken,
            cookie: `kw_token=${csrfToken}`,
            referer: "http://www.kuwo.cn/",
            host: 'www.kuwo.cn',
            "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
        };
    }

    function formatMusicItem(_){
        return {
            id: _.rid,
            artwork: _.pic || _.albumpic || _.pic120,
            title: he.decode(_.name || ''),
            artist: he.decode(_.artist || ''),
            album: he.decode(_.album || '')
        }
    }

    function formatAlbumItem(_) {
        return {
            id: _.albumid,
            artist: he.decode(_.artist || ''),
            title: he.decode(_.album || ''),
            artwork: _.pic,
            description: he.decode(_.albuminfo || ''),
            date: _.releaseDate,
        }
    }

    async function searchMusic(query, page) {
        const headers = await getHeaders();
        const res = (await axios({
            method: 'get',
            url: `http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key=${query}&pn=${page}&rn=${pageSize}&httpStatus=1`,
            headers,
        }));
        const songs = res.data.data.list.filter(_ => !_.isListenFee).map(formatMusicItem)

        return {
            isEnd: res.data.data.total <= page * pageSize,
            data: songs
        }
    }

    async function searchAlbum(query, page) {
        const headers = await getHeaders();
        const res = (await axios.get('http://www.kuwo.cn/api/www/search/searchAlbumBykeyWord', {
            headers,
            params: {
                key: query,
                pn: page,
                rn: pageSize,
                httpStatus: 1
            }
        })).data;
        const albums = res.data.albumList.map(formatAlbumItem)

        return {
            isEnd: res.data.total <= page * pageSize,
            data: albums
        }

    }

    async function searchArtist(query, page) {
        const headers = await getHeaders();
        const res = (await axios.get('http://www.kuwo.cn/api/www/search/searchArtistBykeyWord', {
            headers,
            params: {
                key: query,
                pn: page,
                rn: pageSize,
                httpStatus: 1
            }
        })).data;
        const artists = res.data.list.map(_ => ({
            name: he.decode(_.name),
            id: _.id,
            avatar: _.pic || _.pic120 || _.pic700 || _.pic70,
            worksNum: _.musicNum
        }))

        return {
            isEnd: res.data.total <= page * pageSize,
            data: artists
        }
    }

    async function getArtistMusicWorks (artistItem, page) {
        const headers = await getHeaders();
        const res = (await axios.get('http://www.kuwo.cn/api/www/artist/artistMusic', {
            headers: {
                ...headers,
                referer: `http://www.kuwo.cn/singer_detail/${artistItem.id}`
            },
            params: {
                artistid: artistItem.id,
                pn: page,
                rn: pageSize,
                httpStatus: 1
            }
        })).data;
        const musicList = res.data.list.filter(_ => !_.isListenFee).map(formatMusicItem);
        return {
            isEnd: res.data.total <= page * pageSize,
            data: musicList
        }
    }

    async function getArtistAlbumWorks (artistItem, page) {
        const headers = await getHeaders();
        const res = (await axios.get('http://www.kuwo.cn/api/www/artist/artistAlbum', {
            headers: {
                ...headers,
                referer: `http://www.kuwo.cn/singer_detail/${artistItem.id}`
            },
            params: {
                artistid: artistItem.id,
                pn: page,
                rn: pageSize,
                httpStatus: 1
            }
        })).data;
        const albumList = res.data.albumList.map(formatAlbumItem);
        return {
            isEnd: res.data.total <= page * pageSize,
            data: albumList
        }
    }

    async function getArtistWorks(artistItem, page, type) {
        if(type === 'music') {
            return getArtistMusicWorks(artistItem, page);
        } else if (type === 'album') {
            return getArtistAlbumWorks(artistItem, page);
        }
    }

    async function getLyric(musicItem) {
        const headers = await getHeaders();
        const res = (await axios.get('http://m.kuwo.cn/newh5/singles/songinfoandlrc', {
            headers,
            params: {
                musicId: musicItem.id,
                httpStatus: 1
            }
        })).data;
        const list = res.data.lrclist;
        return {
            rawLrc: list.map(_ => `[${_.time}]${_.lineLyric}`).join('\n')
        }
    }

    async function getAlbumInfo(albumItem) {

        const headers = await getHeaders();
        const res = (await axios.get('http://www.kuwo.cn/api/www/album/albumInfo', {
            headers,
            params: {
                albumId: albumItem.id,
                httpStatus: 1
            }
        })).data;

        return {
            ...albumItem,
            musicList: res.data.musicList.filter(_ => !_.isListenFee).map(formatMusicItem)
        }
    }

    return {
        platform: '酷我',
        version: '0.0.0',
        appVersion: '>0.0.1-alpha.3',
        srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/master/kuwo.js',
        cacheControl: 'no-cache',
        async search(query, page, type) {
            if (type === 'music') {
                return await searchMusic(query, page);
            }
            if (type === 'album') {
                return await searchAlbum(query, page);
            }
            if (type === 'artist') {
                return await searchArtist(query, page);
            }
        },
        async getMediaSource(musicItem) {
            const headers = await getHeaders();
            const res = (await axios.get('http://www.kuwo.cn/api/v1/www/music/playUrl', {
                headers,
                params: {
                    mid: musicItem.id,
                    type: 'music',
                    httpStatus: 1
                }
            })).data;

            return {
                url: res.data.url
            };
        },
        getAlbumInfo,
        getLyric,
        getArtistWorks

    }
}


code:
function kugou(packages) {
    const { axios } = packages;
    const pageSize = 20;

    function formatMusicItem(_) {
        return {
            id: _.hash,
            title: _.songname,
            artist: _.singername,
            album: _.album_name,
            album_id: _.album_id,
            album_audio_id: _.album_audio_id
        }
    }

    const headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
        'Accept': '*/*',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9',
    }

    async function searchMusic(query, page) {
        const res = (await axios.get('http://mobilecdn.kugou.com/api/v3/search/song', {
            headers,
            params: {
                format: 'json',
                keyword: query,
                page,
                pagesize: pageSize,
                showtype: 1,
            }
        })).data;
        const songs = res.data.info.filter(_ => _.privilege === 0 || _.privilege === 8).map(formatMusicItem);
        return {
            isEnd: page * pageSize >= res.data.total,
            data: songs
        }
    }

    async function getMediaSource(musicItem) {
        const res = (await axios.get('https://wwwapi.kugou.com/yy/index.php', {
            headers,
            params: {
                r: 'play/getdata',
                hash: musicItem.id,
                appid: '1014',
                mid: '56bbbd2918b95d6975f420f96c5c29bb',
                album_id: musicItem.album_id,
                album_audio_id: musicItem.album_audio_id,
                _: Date.now()
            }
        })).data.data;

        return {
            url: res.play_url || res.play_backup_url,
            rawLrc: res.lyrics,
            artwork: res.img
        };
    }

    return {
        platform: '酷狗',
        version: '0.0.0',
        srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/master/kugou.js',
        cacheControl: 'no-cache',
        primaryKey: ['id', 'album_id', 'album_audio_id'],
        async search(query, page, type) {
            if (type === 'music') {
                return await searchMusic(query, page);
            }
        },
        getMediaSource,
        getLyric: getMediaSource,

    }
}


code:
var rule={
    title:'饭团',
    模板:'首图',
    host:'https://fositv.com',
    url:'/vod____type/fyclass-fypage.html',
    二级:{"title":".text-fff&&Text;.myui-player__data p&&Text","img":"","desc":".myui-player__data p&&Text;;;.text-collapse p:eq(1)&&Text;.text-collapse p:eq(0)&&Text","content":".data&&Text","tabs":".nav-tabs:eq(0) li","lists":".myui-content__list:eq(#id) li"},
    searchUrl:'/vod_search/-------------.html?wd=**',
}


code:
var rule = {
    title:'麻花影视',
    host:'https://www.mhyyy.com',
    // homeUrl:'/',
    url:'/show/fyclass/page/fypage.html',
    searchUrl:'/search/page/fypage/wd/**.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{//网站的请求头,完整支持所有的,常带ua和cookies
        'User-Agent':'MOBILE_UA',
        // "Cookie": "searchneed=ok"
    },
    class_name:'电影&电视剧&综艺&动漫',
    class_url:'mhdy&mhds&mhzy&mhdm',
    play_parse:true,
    lazy:'',
    limit:6,
    推荐:'.module-items;.module-poster-item;a&&title;img&&data-original;.module-item-note&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'.module-poster-item;a&&title;img&&data-original;.module-item-note&&Text;a&&href',
    二级:{"title":"h1&&Text;.module-info-tag-link:eq(2)&&Text","img":".ls-is-cached.lazy.lazyload&&data-original","desc":".module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(-2)&&Text;.module-info-content&&.module-info-item:eq(2)&&.module-info-item-content&&Text;.module-info-content&&.module-info-item:eq(1)&&.module-info-item-content&&Text","content":".module-info-introduction-content&&Text","tabs":".module-tab-items-box:eq(0)&&.module-tab-item","lists":".module-list:eq(#id)&&.module-play-list-content a"},
    搜索:'.module-card-item.module-item;.module-card-item-title&&Text;img&&data-original;.module-item-note&&Text;a.play-btn-o&&href',
}

path: js/不良帅/麻花影视.js


code:
var title:'乐猪TV',
    host:'http://www.lezhutv.com',
    // homeUrl:'/',
    url:'/type/fyclass-fypage.html',
    url:'/list/fyclassfyfilter.html',
    filterable:1,//是否启用分类筛选,
    filter_url:'_fypage_desc_{{fl.by}}_0_0___',
    filter: {"1":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"2":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"4":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"3":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"14":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"15":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]},
    // searchUrl:'/search-pg-fypage-wd-**.html',
    searchUrl:'/index.php?m=vod-search#wd=**&search=;post',
    searchable:2,
        // 'Cookie':'test',
    },
    timeout:5000,
    class_parse:'div.nav a;a&&Text;a&&href;/(\\d.+).html',
    // class_parse:'div.nav a;a&&Text;a&&href;/(\\d.+).html',
    class_parse:'div.nav a;a&&Text;a&&href;/(\\d+)-1.html',
    play_parse:true,
    lazy:'',
    limit:5,

    推荐:'ul.tbox_m2;li;*;*;*;*',
    double:true, // 推荐内容是否双层定位
    一级:'ul.tbox_m2 li;a&&title;a&&data-original;span&&Text;a&&href',
    二级:{"title":".data h4&&Text","img":".item-lazy&&data-original","desc":".cr3.starLink&&Text","content":".tbox_js&&Text","tabs":"js:pdfa=jsp.pdfa;TABS=pdfa(html,'.tbox_t h3').map(function(it,idex){return '线路'+(idex+1)})","lists":"ul.list_block:eq(#id) li"},
    搜索:'ul.tbox_m li;*;*;*;*',

}


code:
var rule = {
    title: '九酷',
    host: 'https://jiuku.site',
    class_name:'电影&电视剧&综艺&动漫',
    class_url:'1&2&3&4',
    homeUrl: '',
    searchUrl: '/index.php/ajax/suggest?mid=1&wd=**',
    searchable: 2,
    quickSearch: 0,
    headers:{'User-Agent':'MOBILE_UA'},
    // 分类链接fypage参数支持1个()表达式
    // url: '/index.php/api/vod#type=fyclass&page=fypage',
	url: '/index.php/api/vod#type=fyfilter&page=fypage',
	filterable:1,//是否启用分类筛选,
	filter_url:'{{fl.cateId}}',
	filter: {"1":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"}]}],"2":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"}]}]},
	filter_def:{
		1:{cateId:'1'},
		2:{cateId:'2'},
		3:{cateId:'3'},
		4:{cateId:'4'}
	},
    detailUrl:'/index.php/vod/detail/id/fyid.html',
    推荐:'.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href',
    一级:'',
    一级:'js:let body=input.split("#")[1];let t=Math.round(new Date/1e3).toString();let key=md5("DS"+t+"DCC147D11943AF75");let url=input.split("#")[0];body=body+"&time="+t+"&key="+key;print(body);fetch_params.body=body;let html=post(url,fetch_params);let data=JSON.parse(html);VODS=data.list;',
    二级:{
		"title":".slide-info-title&&Text;.slide-info:eq(3)--strong&&Text",
		"img":".detail-pic&&data-original",
		"desc":".fraction&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(2)--strong&&Text;.slide-info:eq(1)--strong&&Text",
		"content":"#height_limit&&Text",
		"tabs":".anthology&&.swiper-slide",
		"tab_text":".swiper-slide--i&&Text",
		"lists":".anthology-list-box:eq(#id) li"
	},
    搜索:'json:list;name;pic;;id',
}


code:
var rule={
title:'TVA云播',
host:'http://www.tvyb03.com',
url:'/vod/type/id/fyclass/page/fypage.html',
searchUrl:'/vod/search.html?wd=**&submit=',
searchable:2,//是否启用全局搜索,
quickSearch:0,//是否启用快速搜索,
filterable:0,//是否启用分类筛选,
class_name:'电影&电视剧&综艺&动漫&日韩剧&国产剧&欧美剧&港台剧',
class_url:'1&2&3&4&16&13&15&14',
play_parse:true,
lazy:'',
limit:6,
// 推荐:'ul.myui-vodlist;ul li;*;*;*;*',
推荐:'ul.myui-vodlist;li;*;*;*;*',
// 推荐:'ul.myui-vodlist;ul&&li;*;*;*;*', // 此写法本地js无效
double:true, // 推荐内容是否双层定位
一级:'.myui-vodlist__box;a&&title;.lazyload&&data-original;.tag&&Text;a&&href',
二级:{"title":"h1&&Text;.data:eq(0) a:eq(0)&&Text","img":".lazyload&&data-original","desc":";.data:eq(0) a:eq(2)&&Text;.data:eq(0) a:eq(1)&&Text;.data:eq(2)&&Text;.data:eq(3)&&Text","content":".text-collapse span&&Text","tabs":".myui-panel__head h3","lists":".myui-content__list:eq(#id) li"},
搜索:'ul.myui-vodlist__media li;*;*;*;*',
}


code:
muban.首图2.二级.tabs = '.stui-pannel__head h3';
var rule = Object.assign(muban.首图2,{
    title:'人人影视',
    host:'https://www.rttks.com',
    url:'/rrtop/fyclass/page/fypage.html',
    searchUrl:'/rrso**/page/fypage.html',
    class_parse:'.stui-header__menu li;a&&Text;a&&href;.*/(.*?).html',
    // cate_exclude:'解说',
    play_parse:true,
    lazy:'',
});


code:
var rule={
    title:'伊人追剧',
    host:'https://yrzj.vip',
    url:'/index.php/vod/show/id/fyclass/page/fypage.html',
    searchUrl:'/index.php/vod/search/page/fypage/wd/**.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    //class_parse:'.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
    //cate_exclude:'演员',
    class_name:'电影&电视剧&综艺&动漫',
    class_url:'1&2&3&4',
推荐:'.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
double:true, // 推荐内容是否双层定位
一级:'.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
二级:{"title":"h1&&Text;.video-info-aux&&div&&a:eq(0)&&Text","img":".module-item-pic&&img&&data-src","desc":";.video-info-aux&&a:eq(1)&&Text;.video-info-aux&&a:eq(2)&&Text;.video-info-items:eq(1) a&&Text;.video-info-items:eq(0) a&&Text","content":".vod_content&&Text","tabs":".module-tab-content&& span","lists":".module-player-list:eq(#id)&&.scroll-content&&a"},
搜索:'.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
}


code:
var rule = {
    title:'兔小贝',
    host:'https://www.tuxiaobei.com',
    homeUrl:'',
    url:'/list/mip-data?typeId=fyclass&page=fypage&callback=',
    detailUrl:'/play/fyid',
    searchUrl:'/search/index?key=**',
    searchable:2,
    headers:{
        'User-Agent':'MOBILE_UA'
    },
    timeout:5000,
    class_url:'2&3&4&25',
    class_name:'儿歌&故事&国学&启蒙',
    //class_name:'#page-viewport&&ul&&li;.text&&Text;a&&href;/(.*)',
    cate_exclude:'应用',
    推荐:'.pic-list.list-box;.items;.text&&Text;mip-img&&src;.all&&Text;a&&href',
    double:true,
    limit:5,
    play_parse:true,
    lazy:'js:fetch_params.headers["user-agent"] = IOS_UA;let html=fetch(input,fetch_params);let src = jsp.pdfh(html,"body&&#videoWrap&&video-src");input=src;',
    // 一级:'json:data.items;name;image;collect_num;category_id+video_id',
    一级:'json:data.items;name;image;duration_string;video_id',
    二级:'*',
    搜索:'.list-con&&.items;.text&&Text;mip-img&&src;.time&&Text;a&&href',
}


code:
var rule={
    title:'八蛋影视',
    host:'http://www.badanyy.com',
    url:'/index.php/vod/show/id/fyclass/page/fypage.html',
    searchUrl:'/index.php/vod/search/page/fypage/wd/**.html',
    searchable:2,//是否启用全局搜索,
    quickSearch:0,//是否启用快速搜索,
    filterable:0,//是否启用分类筛选,
    headers:{
        'User-Agent':'UC_UA',
    },
    // class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
    //class_parse:'.top_nav&&ul li:gt(0):lt(25);a&&Text;a&&href;.*/(.*?).html',
    class_name:'电影&电视剧&综艺&动漫&国产剧&港台剧&日韩剧&欧美剧',
    class_url:'1&2&3&4&13&14&15&16',
    play_parse:true,
    lazy:'',
    limit:6,
    推荐:'ul.vodlist.vodlist_wi;li;a&&title;a&&data-original;.pic_text.text_right&&Text;a&&href',
    double:true, // 推荐内容是否双层定位
    一级:'li.vodlist_item;a&&title;a&&data-original;.pic_text.text_right&&Text;a&&href',
    //二级:{"title":"h2&&Text;.content_detail.content_min.fl .data_style&&Text","img":".content_thumb .vodlist_thumb&&data-original","desc":".content_detail.content_min.fl li:eq(0)&&Text;.content_detail.content_min.fl li:eq(2)&&Text;.content_detail.content_min.fl li:eq(3)&&Text","content":".content&&Text","tabs":".play_source_tab:eq(0) a","lists":".content_playlist:eq(#id) li"},
    二级:{"title":"h2&&Text;.text-muted:eq(-1)&&Text","img":".content_thumb .vodlist_thumb&&data-original","desc":".content_detail.content_min.fl li:eq(-1)&&Text;.content_detail.content_min.fl li:eq(-1)&&Text;.content_detail.content_min.fl&&ul&&li:eq(1)&&Text;.content_detail.content_min.fl&&ul&&li:eq(2)&&Text;.content_detail.content_min.fl&&ul&&li:eq(3)&&Text","content":".content&&Text","tabs":".play_source_tab:eq(0) a","lists":".play_list_box:eq(#id)&&.content_playlist&&li a"},
    搜索:'body .searchlist_item;a&&title;.vodlist_thumb&&data-original;.pic_text.text_right&&Text;a&&href;.vodlist_sub&&Text',
}