diff --git a/js/凤凰FM.js b/js/凤凰FM.js new file mode 100644 index 0000000..edfd823 --- /dev/null +++ b/js/凤凰FM.js @@ -0,0 +1,99 @@ +globalThis.h_ost = 'https://s.fm.renbenai.com'; +var rule = { + title: '凤凰FM', + host: h_ost, + url: '/fm/read/fmd/android/600/getProgramList.html&cid=fyclass&pagenum=fypage', + homeUrl: '/fm/read/fmd/static/categoryTvGet_100.html', + detailUrl: '/fm/read/fmd/android/getProgramAudioList_620.html&pid=fyid', + searchUrl: '/fm/read/fmd/public/search_720.html&keyWord=**&searchType=1&pageNum=fypage', + searchable: 2, + quickSearch: 1, + filterable: 0, + headers: { + 'User-Agent': 'okhttp/3.12.11', + 'Cookie': 'KLBRSID=9b9dd35888924d7c870dd3474e89cab6|1753290568|1753290499' + }, + play_parse: true, + search_match: true, + class_parse: $js.toString(() => { + let html = request(input); + let classes = []; + let data = JSON.parse(html).data.list[0].channelContent; + data.forEach((it) => { + let typeName = it.nodeName; + let typeId = it.id; + classes.push({ + type_name: typeName, + type_id: typeId, + }); + }); + input = classes; + }), + 一级: $js.toString(() => { + let d = []; + let html = request(input); + let data = JSON.parse(html).data.hotList; + data.forEach(item => { + let title = item.programName; + if (!/名称|排除/.test(title)) { + d.push({ + title: title, + desc: item.resourceTitle, + img: item.img640_640, + url: item.id, + }); + } + }); + setResult(d); + }), + 二级: $js.toString(() => { + let html = request(input); + let list = JSON.parse(html).data.list; + VOD = { + vod_name: list[0]['title'] || '暂无名称', + type_name: list[0]['vod_class'] || '暂无类型', + vod_pic: list[0]['img370_370'] || '暂无图片', + vod_remarks: list[0]['tags'] || '暂无备注', + vod_content: list[0]['programDetails'] || '暂无剧情介绍' + }; + let playlist = list[0]['audiolist']; + let playForm = []; + let playUrls = []; + list.forEach(item => { + const title = item.title; + const firstUrl = item.audiolist && item.audiolist[0] ? item.audiolist[0].filePath : ''; + playUrls.push(`${title}$${firstUrl}`); + }); + VOD.vod_play_from = '凤凰FM'; + VOD.vod_play_url = playUrls.join('#'); + }), + 搜索: $js.toString(() => { + let d = []; + let html = request(input); + let data = JSON.parse(html).data.program; + if (rule.search_match) { + data = data.filter(it => { + let title = it.programName; + return title && new RegExp(KEY, "i").test(title); + }); + } + data.forEach(item => { + let title = item.programName; + if (!/名称|排除/.test(title)) { + d.push({ + title: title, + desc: item.programName, + img: item.img640_640, + url: item.id, + }); + } + }); + setResult(d); + }), + lazy: $js.toString(() => { + input = { + parse: 0, + url: input + }; + }), +} \ No newline at end of file diff --git a/js/果果.js b/js/果果.js new file mode 100644 index 0000000..4211ef0 --- /dev/null +++ b/js/果果.js @@ -0,0 +1,243 @@ +//小心儿悠悠// +var rule = { + title: '百忙无果[官]', + host: 'https://pianku.api.mgtv.com', + homeUrl: '', + searchUrl: 'https://mobileso.bz.mgtv.com/msite/search/v2?q=**&pn=fypage&pc=10', + detailUrl: 'https://pcweb.api.mgtv.com/episode/list?page=1&size=50&video_id=fyid', + searchable: 2, + quickSearch: 0, + filterable: 1, + multi: 1, + url: '/rider/list/pcweb/v3?platform=pcweb&channelId=fyclass&pn=fypage&pc=80&hudong=1&_support=10000000&kind=a1&area=a1', + filter_url: 'year={{fl.year or "all"}}&sort={{fl.sort or "all"}}&chargeInfo={{fl.chargeInfo or "all"}}', + headers: { + 'User-Agent': 'PC_UA' + }, + timeout: 5000, + class_name: '电视剧&电影&综艺&动漫&纪录片&教育&少儿', + class_url: '2&3&1&50&51&115&10', + filter: { + "1": getCommonFilter(), + "2": getCommonFilter(), + "3": getCommonFilter(), + "50": getCommonFilter(), + "51": getCommonFilter(), + "115": getCommonFilter() + }, + limit: 20, + play_parse: true, + lazy: $js.toString(() => { + try { + let api = input.split("?")[0]; + let response = fetch(api, { + method: 'get', + headers: { + 'User-Agent': 'okhttp/3.14.9', + 'Content-Type': 'application/x-www-form-urlencoded' + } + }); + let bata = JSON.parse(response); + input = { + parse: 0, + url: bata.url.includes("mgtv") ? bata.url : input.split("?")[0], + jx: bata.url.includes("mgtv") ? 0 : 1, + danmaku: "http://103.36.220.166:98/tvbox/zh.php?url=" + input.split("?")[0] + }; + } catch { + input = { + parse: 0, + url: input.split("?")[0], + jx: 1, + danmaku: "http://103.36.220.166:98/tvbox/zh.php?url=" + input.split("?")[0] + }; + } + }), + 一级: 'json:data.hitDocs;title;img;updateInfo||rightCorner.text;playPartId', + 二级: $js.toString(() => { + fetch_params.headers.Referer = "https://www.mgtv.com"; + fetch_params.headers["User-Agent"] = MOBILE_UA; + + let videoId = input.split('video_id=')[1].split('&')[0]; + let infoUrl = `https://pcweb.api.mgtv.com/video/info?allowedRC=1&vid=${videoId}&type=b&_support=10000000`; + let infoData = JSON.parse(request(infoUrl)); + + if (infoData && infoData.data && infoData.data.info) { + let detail = infoData.data.info.detail || {}; + VOD = { + vod_name: infoData.data.info.title || "", + type_name: detail.kind || "", + vod_year: detail.releaseTime || "", + vod_area: detail.area || "", + vod_actor: detail.leader || "", + vod_director: detail.director || "", + vod_content: detail.story || "", + vod_remarks: detail.updateInfo || "" + }; + if (detail.img) VOD.vod_pic = detail.img; + } + + let d = []; + let html = request(input); + let json = JSON.parse(html); + let host = "https://www.mgtv.com"; + let ourl = json.data.list.length > 0 ? json.data.list[0].url : json.data.series[0].url; + if (!/^http/.test(ourl)) ourl = host + ourl; + + fetch_params.headers["User-Agent"] = MOBILE_UA; + html = request(ourl); + if (html.includes("window.location =")) { + ourl = pdfh(html, "meta[http-equiv=refresh]&&content").split("url=")[1]; + html = request(ourl); + } + + try { + let details = pdfh(html, ".m-details&&Html").replace(/h1>/, "h6>").replace(/div/g, "br"); + let actor = "", director = "", time = ""; + if (/播出时间/.test(details)) { + actor = pdfh(html, "p:eq(5)&&Text").substr(0, 25); + director = pdfh(html, "p:eq(4)&&Text"); + time = pdfh(html, "p:eq(3)&&Text"); + } else { + actor = pdfh(html, "p:eq(4)&&Text").substr(0, 25); + director = pdfh(html, "p:eq(3)&&Text"); + time = "已完结"; + } + let _img = pd(html, ".video-img&&img&&src"); + let JJ = pdfh(html, ".desc&&Text").split("牛马简介:")[1]; + VOD.vod_name = VOD.vod_name || pdfh(html, ".vt-txt&&Text"); + VOD.type_name = VOD.type_name || pdfh(html, "p:eq(0)&&Text").substr(0, 6); + VOD.vod_area = VOD.vod_area || pdfh(html, "p:eq(1)&&Text"); + VOD.vod_actor = VOD.vod_actor || actor; + VOD.vod_director = VOD.vod_director || director; + VOD.vod_remarks = VOD.vod_remarks || time; + VOD.vod_pic = VOD.vod_pic || _img; + VOD.vod_content = VOD.vod_content || JJ; + if (!VOD.vod_name) VOD.vod_name = VOD.type_name; + } catch (e) { + log("获取影片信息发生错误:" + e.message); + } + + function getRjpg(imgUrl, xs) { + xs = xs || 3; + let picSize = /jpg_/.test(imgUrl) ? imgUrl.split("jpg_")[1].split(".")[0] : false; + let rjpg = false; + if (picSize) { + let a = parseInt(picSize.split("x")[0]) * xs; + let b = parseInt(picSize.split("x")[1]) * xs; + rjpg = a + "x" + b + ".jpg"; + } + return /jpg_/.test(imgUrl) && rjpg ? imgUrl.replace(imgUrl.split("jpg_")[1], rjpg) : imgUrl; + } + + if (json.data.total === 1 && json.data.list.length === 1) { + let data = json.data.list[0]; + d.push({ + title: data.t4, + desc: data.t2, + pic_url: getRjpg(data.img), + url: "https://www.mgtv.com" + data.url + }); + } else if (json.data.list.length > 1) { + for (let i = 1; i <= json.data.total_page; i++) { + if (i > 1) json = JSON.parse(fetch(input.replace("page=1", "page=" + i), {})); + json.data.list.forEach(function(data) { + if (data.isIntact == "1") { + d.push({ + title: data.t4, + desc: data.t2, + pic_url: getRjpg(data.img), + url: "https://www.mgtv.com" + data.url + }); + } + }); + } + } else { + print(input + "暂无片源"); + } + VOD.vod_play_from = "芒果TV"; + VOD.vod_play_url = d.map(function(it) { + return it.title + "$" + it.url; + }).join("#"); + setResult(d); + }), + 搜索: $js.toString(() => { + fetch_params.headers.Referer = "https://www.mgtv.com"; + fetch_params.headers["User-Agent"] = MOBILE_UA; + let d = []; + let html = request(input); + let json = JSON.parse(html); + json.data.contents.forEach(function(data) { + if (data.type && data.type == 'media') { + let item = data.data[0]; + if (item.source === "imgo") { + let fyclass = ''; + try { + fyclass = item.rpt.match(/idx=(.*?)&/)[1] + '$'; + } catch (e) { + log(e.message); + } + d.push({ + title: item.title.replace(/|<\/B>/g, ''), + img: item.img || '', + content: '', + desc: item.desc.join(','), + url: fyclass + item.url.match(/.*\/(.*?)\.html/)[1] + }); + } + } + }); + setResult(d); + }) +}; + +function getCommonFilter() { + return [{ + "key": "chargeInfo", + "name": "付费类型", + "value": [ + {"n": "全部", "v": "all"}, + {"n": "免费", "v": "b1"}, + {"n": "vip", "v": "b2"}, + {"n": "VIP用券", "v": "b3"}, + {"n": "付费点播", "v": "b4"} + ] + }, { + "key": "sort", + "name": "排序", + "value": [ + {"n": "最新", "v": "c1"}, + {"n": "最热", "v": "c2"}, + {"n": "知乎高分", "v": "c4"} + ] + }, { + "key": "year", + "name": "年代", + "value": [ + {"n": "全部", "v": "all"}, + {"n": "2026", "v": "2026"}, + {"n": "2025", "v": "2025"}, + {"n": "2024", "v": "2024"}, + {"n": "2023", "v": "2023"}, + {"n": "2022", "v": "2022"}, + {"n": "2021", "v": "2021"}, + {"n": "2020", "v": "2020"}, + {"n": "2019", "v": "2019"}, + {"n": "2018", "v": "2018"}, + {"n": "2017", "v": "2017"}, + {"n": "2016", "v": "2016"}, + {"n": "2015", "v": "2015"}, + {"n": "2014", "v": "2014"}, + {"n": "2013", "v": "2013"}, + {"n": "2012", "v": "2012"}, + {"n": "2011", "v": "2011"}, + {"n": "2010", "v": "2010"}, + {"n": "2009", "v": "2009"}, + {"n": "2008", "v": "2008"}, + {"n": "2007", "v": "2007"}, + {"n": "2006", "v": "2006"}, + {"n": "2005", "v": "2005"}, + {"n": "2004", "v": "2004"} + ] + }]; +} diff --git a/js/电影港.js b/js/电影港.js new file mode 100644 index 0000000..03f2f66 --- /dev/null +++ b/js/电影港.js @@ -0,0 +1,159 @@ +var rule = { +author: '小可乐/v6.1.1', +title: '电影港', +类型: '影视', +host: 'https://www.dyg123.net', +headers: {'User-Agent': MOBILE_UA}, +编码: 'utf-8', +timeout: 5000, + +homeUrl: '/', +url: '/e/action/ListInfo.php?fyfilter', +filter_url: 'classid={{fl.cateId or "fyclass"}}&page=(fypage-1)&line=30&tempid=1&orderby={{fl.by or "newstime"}}', +searchUrl: '/e/search/index.php', +detailUrl: '', + +limit: 9, +double: false, +class_name: '电影&剧集&综艺&动画&短剧', +class_url: '1&20&31&30&32', + +推荐: '*', +一级: $js.toString(() => { + let resHtml = fetch(input); + VODS = rule.getVodList(resHtml); +}), +搜索: $js.toString(() => { + VODS = []; + let fbody = `keyboard=${KEY}&submit=搜索&show=title&tempid=1`; + let resHtml = fetch(input, { + headers: { + ...rule.headers, + "Content-Type": "application/x-www-form-urlencoded; charset=utf-8" + }, + method: 'POST', + body: fbody + }); + let fvods = rule.getVodList(resHtml); + VODS.push(...fvods); + let flagNum = rule.cutStr(resHtml, 'searchid=', '"', ''); + if (flagNum) { + let sUrl = `${HOST}/e/search/result/index.php?page=1&searchid=${flagNum}`; + resHtml = fetch(sUrl); + fvods = rule.getVodList(resHtml); + VODS.push(...fvods); + } +}), + +二级: $js.toString(() => { + let [id, kname, kpic, kremarks] = input.split('@'); + let resHtml = fetch(id); + let kdetail = pdfh(resHtml, '.ct-l').split('')[0].replace(/[\u3000\s]+/g, ''); + let [ktabs, kurls] = [[], []]; + let xz_tabs = pdfa(resHtml, 'strong:has(span)').map((it,idx) => rule.cutStr(it, '【', '】', `磁力线${idx+1}`)); + ktabs.push(...xz_tabs); + let zx_tabs = pdfa(resHtml, '#tab81').map((it,idx) => pdfh(it, 'body&&Text')); + ktabs.push(...zx_tabs); + let xz_urls = pdfa(resHtml, 'tbody').map(item => { + let xz_url = pdfa(item, 'a').map(it => { return pdfh(it, 'body&&Text') + '$' + pdfh(it, 'a&&href') }); + return xz_url.join('#') + }); + kurls.push(...xz_urls); + let zx_urls = pdfa(resHtml, '.videourl').map(item => { + let zx_url = pdfa(item, 'a').map(it => { return pdfh(it, 'body&&Text') + '$' + pd(it, 'a&&href', HOST) }); + return zx_url.join('#') + }); + kurls.push(...zx_urls); + VOD = { + vod_id: id, + vod_name: kname, + vod_pic: kpic, + type_name: rule.cutStr(kdetail, '◎类别', '◎', '类型'), + vod_remarks: rule.cutStr(kdetail, '◎集数', '◎', '状态'), + vod_year: rule.cutStr(kdetail, '◎年代', '◎', '1000'), + vod_area: rule.cutStr(kdetail, '◎产地', '◎', '地区'), + vod_lang: rule.cutStr(kdetail, '◎语言', '◎', '语言'), + vod_director: rule.cutStr(kdetail, '◎导演', '◎', '导演'), + vod_actor: rule.cutStr(kdetail, '◎演员', '

', '') || rule.cutStr(kdetail, '◎主演', '

', '主演'), + vod_content: rule.cutStr(kdetail, '◎简介£>', '

', '') || kname, + vod_play_from: ktabs.join('$$$'), + vod_play_url: kurls.join('$$$') + }; +}), + +play_parse: true, +lazy: $js.toString(() => { + let kp = 0, kurl = ''; + if (/^magnet/.test(input)) { + kurl = input; + } else { + let resHtml = fetch(input); + let jurl = rule.cutStr(resHtml, "a:'", "'", ''); + if (/m3u8|mp4|mkv/.test(jurl)) { + kurl = jurl; + } else { + jurl = rule.cutStr(resHtml, '', '

', '状态'); + kvods.push({ + vod_name: kname, + vod_pic: kpic, + vod_remarks: kremarks, + vod_id: `${rule.cutStr(it, 'href="', '"', 'Id')}@${kname}@${kpic}@${kremarks}` + }); + } + return kvods; + } catch (e) { + console.error(`生成视频列表失败:`, e.message); + return []; + } +}, + +cutStr: function(str, prefix = '', suffix = '', defaultVal = 'cutFaile', clean = true, i = 1, all = false) { + try { + if (!str || typeof str !== 'string') {throw new Error('被截取对象需为非空字符串');} + const cleanStr = cs => String(cs).replace(/<[^>]*?>/g, ' ').replace(/( |\u00A0|\s)+/g, ' ').trim().replace(/\s+/g, ' '); + const esc = s => String(s).replace(/[.*+?${}()|[\]\\/^]/g, '\\$&'); + let pre = esc(prefix).replace(/£/g, '[^]*?'); + let end = esc(suffix); + let regex = new RegExp(`${pre ? pre : '^'}([^]*?)${end ? end : '$'}`, 'g'); + let matchArr = [...str.matchAll(regex)]; + if (matchArr.length === 0) {return all ? [defaultVal] : defaultVal} + if (all) { + return matchArr.map(it => { + const val = it[1] ?? defaultVal; + return clean && val !== defaultVal ? cleanStr(val) : val; + }); + } + i = parseInt(i, 10); + if (isNaN(i) || i < 1) {throw new Error('序号需为大于0的整数');} + i = i - 1; + if (i >= matchArr.length) {throw new Error('序号越界');} + let result = matchArr[i][1] ?? defaultVal; + return clean && result !== defaultVal ? cleanStr(result) : result; + } catch (e) { + console.error(`字符串截取失败:`, e.message); + return all ? ['cutErr'] : 'cutErr'; + } +}, + +filter: 'H4sIAAAAAAAAA6vmUgACJUMlq2gwCwSqlbJTK5WslJITS1I9U5R0lPISc1OB/Ocbdz+d1w3klyXmlAIFoquV8oDCT1tXvGxeARIGcgyVanWgwl0rnuyd87yzHSpjhJCZNudp53KEjDFc5nnHxmfNrQgZE4TM8olPd+5GyJgiTOtcjqLHDC7zrHHCs4ZpCBlzhEzHjCe7OhEyhgip57tWPd07FUnKQqk2tlYHI3CSKhEB86xv0tNd/RgB82xOw7NpG6Dm5KWWF5dkApXDLHqya9ezDVOgsvl5yTmZydkgq8A2xUIsVDIyoFbEAE2Ch9jsvcBAg4kjYuzZ9KUv569EkkJEzLM1y5/v60OSMhnIUDHGmlzpZDfWGKGT3UYDYDdXLQAMhqvHJAQAAA==' +} \ No newline at end of file diff --git a/js/第一故事.js b/js/第一故事.js new file mode 100644 index 0000000..f5ffc8f --- /dev/null +++ b/js/第一故事.js @@ -0,0 +1,96 @@ +var rule = { +author: '小可乐/v5.12.2', +title: '第一故事', +类型: '影视', +host: 'https://m.yigushi.com', +hostJs: '', +headers: {'User-Agent': MOBILE_UA}, +编码: 'utf-8', +timeout: 5000, + +homeUrl: '/', +url: '/fyclass/index-htm-page-fypage.html', +searchUrl: '/', +detailUrl: '', + +limit: 9, +double: false, +class_parse: $js.toString(() => { + rule.classes = pdfa(fetch(`${HOST}/channel.php`), '.list-set&&a').slice(0,5).map(it => { + let kName = pdfh(it, 'body&&Text').slice(0,2); + let kId = pdfh(it, 'a&&href').match(/com\/(.*?)\//)?.[1] ?? 'Id'; + return {type_name: kName, type_id: kId}; + }); + input = rule.classes; +}), + +addPics: { + "评书下载": "https://img3.jiemian.com/101/original/20180916/153710102319049900_a700x398.jpg", + "戏曲下载": "https://img95.699pic.com/photo/50762/7523.jpg_wh860.jpg", + "有声小说": "https://q2.itc.cn/q_70/images03/20251221/546f34ca117c43c6978cbe6a3dcdabd6.png", + "儿童故事": "https://img.alicdn.com/bao/uploaded/i3/2617663089/O1CN01yy76Uf1Ygo9eSLT5c_!!0-item_pic.jpg", + "相声小品": "https://gd-filems.dancf.com/gaoding/cms/mcm79j/mcm79j/59385/6a211035-3658-45ce-a476-79f6f5dc02b71172884.png?x-oss-process=image/resize,h_1308/interlace,1", + "其它": "https://bpic.588ku.com/element_origin_min_pic/23/02/19/f13e41c70e75e82999f929072543ca7e.jpg" +}, + +getVodList: function(url) { + let khtml = fetch(url); + let klists = pdfa(khtml, 'li:has(strong)'); + let kremarks = pdfh(khtml, '.head-bar-title&&Text') || '状态'; + let item = Object.keys(rule.addPics).find(key => kremarks.includes(key)) ?? '其它'; + let kpic = rule.addPics[item] || '图片'; + let kvods = []; + klists.forEach(it => { + let kname = pdfh(it, 'strong&&Text') || '名称'; + kvods.push({ + vod_name: kname, + vod_pic: kpic, + vod_remarks: kremarks, + vod_id: `${pdfh(it, 'a&&href')}@${kname}@${kpic}@${kremarks}` + }); + }); + return kvods; +}, + +推荐: '*', +一级: $js.toString(() => { + VODS = rule.getVodList(input); +}), +搜索: $js.toString(() => { + VODS = []; + rule.classes.forEach(it => { + input = `${HOST}/${it.type_id}/search.php?kw=${KEY}&page=${MY_PAGE}`; + let fvods = rule.getVodList(input); + if (fvods.length) {VODS.push(...fvods);} + }); +}), +二级: $js.toString(() => { + let [kid, kname, kpic, kremarks] = input.split('@'); + let khtml = fetch(kid); + let [eName, eUrl] = [pdfh(khtml, '.content&&a&&Text').match(/【(.*?)】/)?.[1] ?? '无标题', pdfh(khtml, '.content&&a&&href') || 'noUrl']; + let kurls = `${eName}$${eUrl}`; + VOD = { + vod_id: kid, + vod_name: kname, + vod_pic: kpic, + type_name: pdfh(khtml, '.head-bar-title&&Text') || '类型', + vod_remarks: kremarks, + vod_year: '2025', + vod_area: '中国', + vod_lang: '国语', + vod_director: '导演', + vod_actor: '主演', + vod_content: pdfh(khtml, '.content--span--a&&Text') || '简介', + vod_play_from: '网盘线路', + vod_play_url: kurls + }; +}), + +play_parse: true, +lazy: $js.toString(() => { + let kurl = `push://${input}`; + input = {parse: 0, url: kurl, header: rule.headers}; +}), + +filter: {} +} \ No newline at end of file diff --git a/js/酷酷.js b/js/酷酷.js new file mode 100644 index 0000000..bd8152e --- /dev/null +++ b/js/酷酷.js @@ -0,0 +1,184 @@ +//小心儿悠悠// +var rule = { + title: '优酷视频', + host: 'https://www.%79%6f%75%6b%75.com', + homeUrl: '', + searchUrl: 'https://search.%79%6f%75%6b%75.com/api/search?pg=fypage&keyword=**', + searchable: 2, + quickSearch: 0, + filterable: 1, + multi: 1, + url: '/category/data?optionRefresh=1&pageNo=fypage¶ms=fyfilter', + filter_url: '{{fl}}', + filter: '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', + headers: { + 'User-Agent': 'PC_UA', + 'Cookie': 'cna=VvNvGX3e0ywCAavVEXlnA2bg; __ysuid=1626676228345Rl1; __ayft=1652434048647; __arycid=dm-1-00; __arcms=dm-1-00; __ayvstp=85; __arpvid=1667204023100cWWdgM-1667204023112; __ayscnt=10; __aypstp=60; isg=BBwcqxvvk3BxkWQGugbLpUSf7TrOlcC_U7GAj_YdfYfvQbzLHqYGT4Hgp6m5TvgX; tfstk=c3JOByYUH20ilVucLOhh0pCtE40lZfGc-PjLHLLfuX7SWNyAiQvkeMBsIw7PWDC..; l=eBQguS-PjdJFGJT-BOfwourza77OSIRA_uPzaNbMiOCPOb1B5UxfW6yHp4T6C3GVhsGJR3rp2umHBeYBqQd-nxvOF8qmSVDmn', + 'Referer': 'https://www.youku.com', + }, + timeout: 5000, + class_name: '电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏', + class_url: '电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏', + limit: 20, + play_parse: true, + lazy: `js: +const blockedLinks = [ + '' +]; + +if (/\.m3u8$/.test(input)) { + input = { jx: 0, parse: 0, url: input }; +} else if (/\.mp4$/.test(input)) { + input = blockedLinks.includes(input) ? null : { jx: 0, parse: 0, url: input }; +} else if (/qq|iqiyi|youku|mgtv|NBY/.test(input)) { + let kurl ='' + encodeURIComponent(input); + kurl = JSON.parse(request(kurl)).url; + input = blockedLinks.includes(kurl) ? null : { jx: 0, parse: 0, url: kurl }; +} else { + input = { jx: 0, parse: 1, url: input }; +}`, + 一级: `js: +let d = []; +MY_FL.type = MY_CATE; +let fl = stringify(MY_FL); +fl = encodeUrl(fl); +input = input.split("{")[0] + fl; +if (MY_PAGE > 1) { + let old_session = getItem("yk_session_" + MY_CATE, "{}"); + input = input.replace("optionRefresh=1", "session=" + encodeUrl(old_session)); +} +let html = fetch(input, fetch_params); +try { + html = JSON.parse(html); + let lists = html.data.filterData.listData; + let session = html.data.filterData.session; + session = stringify(session); + if (session !== getItem("yk_session_" + MY_CATE, "{}")) { + setItem("yk_session_" + MY_CATE, session); + } + lists.forEach(function(it) { + let vid = it.videoLink.includes("id_") ? it.videoLink.split("id_")[1].split(".html")[0] : "msearch:"; + d.push({ + title: it.title, + img: it.img, + desc: it.summary, + url: "https://search.youku.com/api/search?appScene=show_episode&showIds=" + vid, + content: it.subTitle + }); + }); +} catch (e) { + log("一级列表解析发生错误:" + e.message); +} +setResult(d);`, + 二级: `js: +var d = []; +VOD = {}; +let html = request(input); +let json = JSON.parse(html); +if (/keyword/.test(input)) { + input = "https://search.youku.com/api/search?appScene=show_episode&showIds=" + json.pageComponentList[0].commonData.showId; + json = JSON.parse(fetch(MY_URL, fetch_params)); +} +let video_lists = json.serisesList; +var name = json.sourceName; +if (/优酷/.test(name) && video_lists.length > 0) { + let ourl = "https://v.youku.com/v_show/id_" + video_lists[0].videoId + ".html"; + let _img = video_lists[0].thumbUrl; + + let detailInfo = null; + try { + let detailUrl = "https://v.youku.com/v_getvideo_info/?showId=" + json.showId; + detailInfo = JSON.parse(fetch(detailUrl, { + headers: { + Referer: "https://v.youku.com/", + "User-Agent": PC_UA + } + })); + } catch (e) { + log("详情接口请求失败:" + e.message); + } + + if (detailInfo && detailInfo.data) { + let v = detailInfo.data; + VOD.vod_type = v.showVideotype; + VOD.vod_year = v.lastUpdate; + VOD.vod_remarks = v.rc_title; + VOD.vod_actor = v._personNameStr; + VOD.vod_content = v.showdesc; + VOD.vod_pic = v.showLogo || _img; + VOD.vod_name = v.showTitle; + } else { + let html = fetch(ourl, { + headers: { + Referer: "https://v.youku.com/", + "User-Agent": PC_UA + } + }); + let jsonData = /__INITIAL_DATA__/.test(html) ? html.split("window.__INITIAL_DATA__ =")[1].split(";")[0] : "{}"; + if (jsonData === "{}") { + VOD.vod_remarks = ourl; + VOD.vod_pic = _img; + VOD.vod_name = video_lists[0].title.replace(/(\d+)/g, ""); + VOD.vod_content = "触发了优酷人机验证,本次未获取详情,但不影响播放(" + ourl + ")"; + } else { + try { + jsonData = JSON.parse(jsonData); + let data = jsonData.data.data; + let data_extra = data.data.extra; + let img = data_extra.showImgV; + let model = jsonData.data.model; + let m = model.detail.data.nodes[0].nodes[0].nodes[0].data; + VOD.vod_pic = img; + VOD.vod_name = m.introTitle; + VOD.vod_type = m.showGenre; + VOD.vod_remarks = m.updateInfo || m.subtitle; + VOD.vod_content = m.desc; + } catch (e) { + VOD.vod_remarks = name; + } + } + } +} else if (!/优酷/.test(name)) { + VOD.vod_content = "非自家播放源,暂无视频简介及海报"; + VOD.vod_remarks = name; +} + +play_url = play_url.replace("&play_url=", "&type=json&play_url="); +video_lists.forEach(function(it) { + let url = "https://v.youku.com/v_show/id_" + it.videoId + ".html"; + if (it.thumbUrl) { + d.push({ + desc: it.showVideoStage ? it.showVideoStage.replace("期", "集") : it.displayName, + pic_url: it.thumbUrl, + title: it.title, + url: play_url + urlencode(url) + }); + } else if (name !== "优酷") { + d.push({ + title: it.displayName ? it.displayName : it.title, + url: play_url + urlencode(it.url) + }); + } +}); +VOD.vod_play_from = name; +VOD.vod_play_url = d.map(function(it) { + return it.title + "$" + it.url; +}).join("#");`, + 搜索: `js: +var d = []; +let html = request(input); +let json = JSON.parse(html); +json.pageComponentList.forEach(function(it) { + if (it.hasOwnProperty("commonData")) { + it = it.commonData; + d.push({ + title: it.titleDTO.displayName, + img: it.posterDTO.vThumbUrl, + desc: it.stripeBottom, + content: it.updateNotice + " " + it.feature, + url: "https://search.youku.com/api/search?appScene=show_episode&showIds=" + it.showId + "&appCaller=h5" + }); + } +}); +setResult(d);` +}; \ No newline at end of file