From 086948838d03da55cf736cc108b6611a1cf6e63e Mon Sep 17 00:00:00 2001 From: XC-Pro <19840+xc-pro@noreply.example.org> Date: Thu, 13 Aug 2026 09:13:59 +0200 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=20js/=E5=8E=82=E9=95=BF.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/厂长.js | 315 ----------------------------------------------------- 1 file changed, 315 deletions(-) delete mode 100644 js/厂长.js diff --git a/js/厂长.js b/js/厂长.js deleted file mode 100644 index c1a52c6..0000000 --- a/js/厂长.js +++ /dev/null @@ -1,315 +0,0 @@ -/* -title: '厂长资源', author: '小可乐/v6.1.1' -说明:可以不写ext,也可以写ext,ext支持的参数和格式参数如下 -"ext": { - "host": "xxxx", //站点网址 - "timeout": 6000 //请求超时,单位毫秒 -} -*/ - -const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36'; -const DefHeader = {'User-Agent': MOBILE_UA}; -var HOST; -var KParams = { - headers: {'User-Agent': MOBILE_UA}, - timeout: 5000 -}; - -async function init(cfg) { - try { - HOST = (cfg.ext?.host?.trim() || 'https://www.cz01.org').replace(/\/$/, ''); - KParams.headers['Referer'] = HOST; - let parseTimeout = parseInt(cfg.ext?.timeout?.trim(), 10); - if (parseTimeout > 0) {KParams.timeout = parseTimeout;} - } catch (e) { - console.error('初始化参数失败:', e.message); - } -} - -async function home(filter) { - try { - let kclassName = '全部$movie_bt&电影$movie_bt_series/dyy&剧集$movie_bt_series/dianshiju&动画$movie_bt_series/dohua'; - let classes = kclassName.split('&').map(it => { - let [cName, cId] = it.split('$'); - return {type_name: cName, type_id: cId}; - }); - let filters = {}; - try { - const nameObj = { cateId: 'cateId,分类', area: 'area,地区', year: 'year,年份', class: 'class,影片类型', series: 'series,子类'}; - const flValues = { - cateId: {'movie_bt_series/dyy': '全部$movie_bt_series/dyy&豆瓣电影Top250$dbtop250&最新电影$zuixindianying&高分影视$gaofenyingshi&热映中$reyingzhong&会员专区$movie_bt_series/huiyuanzhuanqu&站长推荐$movie_bt_series/zhanchangtuijian&华语电影$movie_bt_series/huayudianying&欧美电影$movie_bt_series/meiguodianying&韩国电影$movie_bt_series/hanguodianying&日本电影$movie_bt_series/ribendianying&印度电影$movie_bt_series/yindudianying&俄罗斯电影$movie_bt_series/eluosidianying&加拿大电影$movie_bt_series/jianadadianying', 'movie_bt_series/dianshiju': '全部$movie_bt_series/dianshiju&国产剧$gcj&美剧$meijutt&韩剧$hanjutv&日剧$movie_bt_series/rj&海外剧$movie_bt_series/hwj', 'movie_bt_series/dohua': '全部$movie_bt_series/dohua&剧场版$dongmanjuchangban&番剧$fanju'}, - area: {'movie_bt': '全部$&中国台湾$tw&中国大陆$zh&中国香港$hk&丹麦$dm&乌克兰$wukelan&以色列$ysl&伊朗$yilang&俄罗斯$els&保加利亚$baojialiya&其他$qt&冰岛$冰岛&利比里亚$libiliya&加拿大$jnd&匈牙利$xiongyali&南非$nanfei&卡塔尔$kataer&卢森堡$lusenbao&印度$yidu&印度尼西亚$yindunixiya&哈萨克斯坦$hasakesitan&哥伦比亚$gelunbiya&土耳其$tuerqi&埃及$aiji&塞尔维亚$塞尔维亚&塞浦路斯$saipulusi&墨西哥$mxg&奥地利$aodili&巴哈马$bahama&巴基斯坦$bajisitan&巴西$bx&希腊$xila&德国$dg&意大利$ydl&拉脱维亚$拉脱维亚&挪威$nuewei&捷克$jieke&摩洛哥$moluoge&摩纳哥$monage&新加坡$xinjiapo&新西兰$xinxilan&日本$riben&柬埔寨$jianpuzhai&比利时$bilishi&法国$fg&波兰$bolan&泰国$taiguo&澳大利亚$adly&爱尔兰$aierlan&瑞典$ruidian&瑞士$ruishi&白俄罗斯$baieluosi&立陶宛$立陶宛&罗马尼亚$luomaniya&美国$meiguo&芬兰$fenlan&英国$yinguo&荷兰$hnwe&蒙古$menggu&西德$xide&西班牙$xby&越南$yuenan&阿根廷$agenting&阿联酋$alianqiu&韩国$hggggg&马来西亚$malaixiya&马耳他$maerta&黎巴嫩$libanen'}, - year: {'movie_bt': '全部$&1900~2000年代$19002000nd&2001~2010年代$20012010nd&2011$2011nd&2012$2012&2013$2013&2014$2014&2015$2015&2016$2016&2017$2017&2018$2018&2019$2019&2020$2020&2021$2021&2022$2022&2023$2023&2024$2024&2025$2025&2026$2026'}, - class: {'movie_bt': '全部$&传记$chuanji&儿童$etet&冒险$maoxian&剧情$juqing&动作$dozuo&动漫$doman&动画$dhh&历史$lishi&古装$guzhuang&同性$tongxing&喜剧$xiju&奇幻$qihuan&家庭$jiating&恐怖$kubu&悬疑$xuanyi&情色$qingse&惊悚$kingsong&战争$zhanzheng&歌舞$gw&武侠$wuxia&灾难$zainan&爱情$aiqing&犯罪$fanzui&真人秀$zrx&短片$dp&科幻$kh&纪录片$jlpp&西部$xb&运动$yd&音乐$yy&鬼怪$鬼怪'}, - series: {'movie_bt': '全部$&会员专区$huiyuanzhuanqu&站长推荐$zhanchangtuijian&电影$dyy&华语电影$huayudianying&欧美电影$meiguodianying&韩国电影$hanguodianying&日本电影$ribendianying&印度电影$yindudianying&俄罗斯电影$eluosidianying&加拿大电影$jianadadianying&电视剧$dianshiju&国产剧$guochanju&美剧$mj&韩剧$hj&日剧$rj&海外剧(其他)$hwj&动画$dohua'} - }; - for (let item of classes) { - filters[item.type_id] = Object.entries(nameObj).map(([nObjk, nObjv]) => { - let [kkey, kname] = nObjv.split(','); - let fvalue = flValues[kkey]?.[item.type_id]?.split('&') || []; - let kvalue = fvalue.map(it => { - let [n, v] = it.split('$'); - return {n: n, v: v}; - }); - return {key: kkey, name: kname, value: kvalue}; - }).filter(flt => flt.key && flt.value.length); - } - } catch (e) { - filters = {}; - } - return JSON.stringify({class: classes, filters: filters}); - } catch (e) { - console.error('获取分类失败:', e.message); - return JSON.stringify({class: [], filters: {}}); - } -} - -async function homeVod() { - try { - let resHtml = await request(HOST); - let VODS = getVodList(resHtml); - return JSON.stringify({list: VODS}); - } catch (e) { - console.error('推荐页获取失败:', e.message); - return JSON.stringify({list: []}); - } -} - -async function category(tid, pg, filter, extend) { - try { - pg = parseInt(pg, 10), pg = pg > 0 ? pg : 1; - let fl = extend ? extend : {}; - let cateUrl = `${HOST}/${fl.cateId || tid}${fl.area ? `/movie_bt_cat/${fl.area}` : ''}${fl.year ? `/year/${fl.year}` : ''}${fl.class ? `/movie_bt_tags/${fl.class}` : ''}${fl.series ? `/movie_bt_series/${fl.series}` : ''}/page/${pg}`; - let resHtml = await request(cateUrl); - let VODS = getVodList(resHtml); - let limit = VODS.length; - let hasMore = cutStr(resHtml, 'pagenavi_txt">', '').includes('>'); - let pagecount = hasMore ? pg + 1 : pg; - return JSON.stringify({list: VODS, page: pg, pagecount: pagecount, limit: limit, total: limit*pagecount}); - } catch (e) { - console.error('类别页获取失败:', e.message); - return JSON.stringify({list: [], page: 1, pagecount: 0, limit: 30, total: 0}); - } -} - -async function search(wd, quick, pg) { - try { - pg = parseInt(pg, 10), pg = pg > 0 ? pg : 1; - let VODS = []; - let searchStop = false, cPage = 1, pgMax = 228; - while (!searchStop && cPage < pgMax) { - let batchEnd = Math.min(cPage + 10, pgMax); - let batchUrlList = []; - for (let page = cPage; page < batchEnd; page++) { - batchUrlList.push(`${HOST}/movie_bt/page/${page}`); - } - let resHtmlList = await Promise.all( - batchUrlList.map(async (burl) => { - try {return await request(burl);} catch (sErr) {return '';} - }) - ); - for (let resHtml of resHtmlList) { - let svods = getVodList(resHtml).filter(it => it.vod_name.includes(wd)); - if (svods.length) {VODS.push(...svods)}; - } - if (VODS.length) {searchStop = true;} - cPage = batchEnd; - } - return JSON.stringify({list: VODS, page: pg, pagecount: 10, limit: 30, total: 300}); - } catch (e) { - console.error('搜索页获取失败:', e.message); - return JSON.stringify({list: [], page: 1, pagecount: 0, limit: 30, total: 0}); - } -} - -function getVodList(khtml) { - try { - if (!khtml) {throw new Error('源码为空');} - let kvods = []; - let listArr = cutStr(khtml, '
  • ', '
  • ', '', false, 0, true); - for (let it of listArr) { - let kname = cutStr(it, 'alt="', '"', '名称'); - let kpic = cutStr(it, 'data-original="', '"', '图片'); - let kremarks = cutStr(it, 'jidi">', '', '', '', '', false); - let [ktabs, kurls] = [[], []]; - let zxArr = cutStr(resHtml, 'paly_list_btn', '', '', false, 0, true); - zxArr.forEach((item,idx) => { - let siglUrl = cutStr(item, '', '', false, 0, true).map(it => { return cutStr(it, '>', '<', 'noEpi') + '$' + cutStr(it, 'href="', '"', 'noUrl'); }).join('#'); - ktabs.push(`厂长在线${idx+1}`); - kurls.push(siglUrl); - }); - let twoCut = cutStr(resHtml, 'dwonBT">', '', '', false); - if (twoCut) { - let xzArr = cutStr(twoCut, '
  • ', '
  • ', '', false, 0, true); - xzArr.forEach((item,idx) => { - let siglUrl = cutStr(item, '', '', false, 0, true).map(it => { - let eUrl = cutStr(it, 'href="', '"', 'noUrl'); - if (!/^magnet:/.test(eUrl)) { eUrl = eUrl.replace(/#/g, '@');} - return `${cutStr(it, 'title="', '"', 'noEpi')}$${eUrl}`; - }).join('#'); - if (/magnet:/.test(siglUrl)) { - ktabs.push(`下载线${idx+1}磁力`); - } else { - ktabs.push(`下载线${idx+1}网盘`); - } - kurls.push(siglUrl); - }); - } - let VOD = { - vod_id: detailUrl, - vod_name: kname, - vod_pic: kpic, - vod_remarks: kremarks, - type_name: cutStr(intros, '类型:', '', '类型'), - vod_year: cutStr(intros, '年份:', '', '1000'), - vod_area: cutStr(intros, '地区:', '', '地区'), - vod_lang: cutStr(intros, '语言:', '', '语言'), - vod_director: cutStr(intros, '导演:', '', '导演'), - vod_actor: cutStr(intros, '主演:', '', '主演'), - vod_content: cutStr(intros, 'yp_context">', '', kname), - vod_play_from: ktabs.join('$$$'), - vod_play_url: kurls.join('$$$') - }; - return JSON.stringify({list: [VOD]}); - } catch (e) { - console.error('详情页获取失败:', e.message); - return JSON.stringify({list: []}); - } -} - -async function play(flag, ids, flags) { - try { - let playUrl = ids; - let kp = 0, kurl = ''; - if (/磁力/.test(flag)) { - kurl = playUrl; - } else if (/网盘/.test(flag)) { - kurl = playUrl.replace(/@/g, '#'); - kurl = `push://${kurl}`; - } else { - let resHtml = await request(playUrl); - kurl = cutStr(resHtml, ' String(cs).replace(/<[^>]*?>/g, ' ').replace(/( |[\u0020\u00A0\u3000\s])+/g, ' ').trim().replace(/\s+/g, ' '); - const esc = s => String(s).replace(/[.*+?${}()|[\]\\/^]/g, '\\$&'); - let pre = esc(prefix).replace(/£/g, '[^]*?'), end = esc(suffix); - const regex = new RegExp(`${pre || '^'}([^]*?)${end || '$'}`, 'g'); - const matchIter = str.matchAll(regex); - if (all) { - let matchArr = [...matchIter]; - if (!matchArr.length) {return [defVal];} - return matchArr.map(ela => ela[1] !== undefined ? (clean ? cleanStr(ela[1]) : ela[1]) : defVal); - } - const idx = parseInt(i, 10); - if (isNaN(idx)) {throw new Error('序号必须为整数');} - let tgResult, matchIdx = 0; - if (idx >= 0) { - for (let elt of matchIter) { - if (matchIdx++ === idx) { - tgResult = elt[1]; - break; - } - } - } else { - let absI = Math.abs(idx), ringBuf = new Array(absI), ringPtr = 0, ringCnt = 0; - for (let elt of matchIter) { - ringBuf[ringPtr] = elt[1]; - ringPtr = (ringPtr + 1) % absI; - ringCnt = Math.min(ringCnt + 1, absI); - matchIdx++; - } - tgResult = (matchIdx >= absI && ringCnt > 0) ? ringBuf[ringPtr % ringCnt] : undefined; - } - return tgResult !== undefined ? (clean ? (cleanStr(tgResult) || defVal) : tgResult) : defVal; - } catch (e) { - console.error(`字符串截取错误:`, e.message); - return all ? ['cutErr'] : 'cutErr'; - } -} - -async function request(reqUrl, options = {}) { - try { - if (typeof reqUrl !== 'string' || !reqUrl.trim()) { throw new Error('reqUrl需为字符串且非空非全空白'); } - if (typeof options !== 'object' || Array.isArray(options) || options === null) { throw new Error('options类型需为非null对象'); } - options.method = options.method?.toUpperCase() || 'GET'; - if (['GET', 'HEAD'].includes(options.method)) { - delete options.body; - delete options.data; - delete options.postType; - } - let {headers, timeout, ...restOpts} = options; - const optObj = { - headers: (typeof headers === 'object' && !Array.isArray(headers) && headers) ? headers : KParams.headers, - timeout: parseInt(timeout, 10) > 0 ? parseInt(timeout, 10) : KParams.timeout, - ...restOpts - }; - const res = await req(reqUrl, optObj); - if (options.withHeaders) { - const resHeaders = typeof res.headers === 'object' && !Array.isArray(res.headers) && res.headers ? res.headers : {}; - const resWithHeaders = { ...resHeaders, body: res?.content ?? '' }; - return JSON.stringify(resWithHeaders); - } - return res?.content ?? ''; - } catch (e) { - console.error(`${reqUrl}→请求失败:`, e.message); - return options?.withHeaders ? JSON.stringify({ body: '' }) : ''; - } -} - -export function __jsEvalReturn() { - return { - init, - home, - homeVod, - category, - search, - detail, - play, - proxy: null - }; -} \ No newline at end of file