Files
tvbox_collect/jaychouqq/yingshi/js1/Jie_cms2.js
T
2026-06-29 03:41:14 +00:00

262 lines
7.1 KiB
JavaScript

//@name:[解] 金蝉
//@version:4
//@webSite:https://zy.jinchancaiji.com/api.php/provide/vod
//@remark:通用官采解析2,需配合网盘解析工具使用。在环境变量配置 采集解析地址。
//@env:采集解析地址##内置两个,失效不要反馈。格式:名称1@地址1;名称2@地址2
//@order: D2
// ignore
// 不支持导入,这里只是本地开发用于代码提示
// 如需添加通用依赖,请联系 https://t.me/uzVideoAppbot
import {
FilterLabel,
FilterTitle,
VideoClass,
VideoSubclass,
VideoDetail,
RepVideoClassList,
RepVideoSubclassList,
RepVideoList,
RepVideoDetail,
RepVideoPlayUrl,
UZArgs,
UZSubclassVideoListArgs,
} from '../../core/core/uzVideo.js'
import {
UZUtils,
ProData,
ReqResponseType,
ReqAddressType,
req,
getEnv,
setEnv,
goToVerify,
openWebToBindEnv,
toast,
kIsDesktop,
kIsAndroid,
kIsIOS,
kIsWindows,
kIsMacOS,
kIsTV,
kLocale,
kAppVersion,
formatBackData,
} from '../../core/core/uzUtils.js'
import { cheerio, Crypto, Encrypt, JSONbig } from '../../core/core/uz3lib.js'
// ignore
const appConfig = {
_webSite: 'https://zy.jinchancaiji.com/api.php/provide/vod',
/**
* 网站主页,uz 调用每个函数前都会进行赋值操作
* 如果不想被改变 请自定义一个变量
*/
get webSite() {
return this._webSite
},
set webSite(value) {
this._webSite = value
},
_uzTag: '',
/**
* 扩展标识,初次加载时,uz 会自动赋值,请勿修改
* 用于读取环境变量
*/
get uzTag() {
return this._uzTag
},
set uzTag(value) {
this._uzTag = value
},
ignoreClassName: ['短剧', '资讯', '明星资讯', '影视资讯', '演员', '内地', '港台', '欧美', '日韩'],
jiexiMap:{}
}
/**
* 异步获取分类列表的方法。
* @param {UZArgs} args
* @returns {@Promise<JSON.stringify(new RepVideoClassList())>}
*/
async function getClassList(args) {
var backData = new RepVideoClassList()
try {
let response = await req(appConfig.webSite)
let data = JSON.parse(response.data)
backData.data = data.class.filter((item) => {
const typeName = item.type_name.toLowerCase()
return !appConfig.ignoreClassName.some((keyword) =>
typeName.includes(keyword.toLowerCase())
)
})
} catch (error) {
backData.error = error.toString()
}
return JSON.stringify(backData)
}
/**
* 获取二级分类列表筛选列表的方法。
* @param {UZArgs} args
* @returns {@Promise<JSON.stringify(new RepVideoSubclassList())>}
*/
async function getSubclassList(args) {
var backData = new RepVideoSubclassList()
try {
} catch (error) {
backData.error = error.toString()
}
return JSON.stringify(backData)
}
/**
* 获取分类视频列表
* @param {UZArgs} args
* @returns {@Promise<JSON.stringify(new RepVideoList())>}
*/
async function getVideoList(args) {
var backData = new RepVideoList()
try {
let response = await req(
`${appConfig.webSite}?ac=detail&t=${args.url}&pg=${args.page}`
)
let data = JSON.parse(response.data)
backData.data = data.list
} catch (error) {
backData.error = error.toString()
}
return JSON.stringify(backData)
}
/**
* 获取二级分类视频列表 或 筛选视频列表
* @param {UZSubclassVideoListArgs} args
* @returns {@Promise<JSON.stringify(new RepVideoList())>}
*/
async function getSubclassVideoList(args) {
var backData = new RepVideoList()
try {
} catch (error) {
backData.error = error.toString()
}
return JSON.stringify(backData)
}
/**
* 获取视频详情
* @param {UZArgs} args
* @returns {@Promise<JSON.stringify(new RepVideoDetail())>}
*/
async function getVideoDetail(args) {
var backData = new RepVideoDetail()
try {
let response = await req(
`${appConfig.webSite}?ac=detail&ids=${args.url}`
)
let data = JSON.parse(response.data)
let video = data.list[0]
let allUrls = await getEnv(appConfig.uzTag, '采集解析地址')
if (allUrls.length < 1) {
allUrls =
'钓鱼@http://8.129.30.117:8117/diaoyu.php?url=;乌贼@http://jx.dedyn.io/?url='
await setEnv(appConfig.uzTag, '采集解析地址', allUrls)
}
const jxLinks = allUrls.split(';')
const singleFrom = video.vod_play_url.replace(/\${3}/g, '#')
let allFrom = ""
let fromNames = ""
for (let i = 0; i < jxLinks.length; i++) {
allFrom += singleFrom + "$$$"
const fromName = jxLinks[i].split('@')[0]
const fromUrl = jxLinks[i].split('@')[1]
fromNames += fromName + "$$$"
appConfig.jiexiMap[fromName] = fromUrl
}
if (allFrom.endsWith('$$$')) {
allFrom = allFrom.slice(0, -3)
}
if (fromNames.endsWith('$$$')) {
fromNames = fromNames.slice(0, -3)
}
video.vod_play_url = allFrom
video.vod_play_from = fromNames
backData.data = video
} catch (error) {
backData.error = error.toString()
}
return JSON.stringify(backData)
}
/**
* 获取视频的播放地址
* @param {UZArgs} args
* @returns {@Promise<JSON.stringify(new RepVideoPlayUrl())>}
*/
async function getVideoPlayUrl(args) {
var backData = new RepVideoPlayUrl()
try {
const api = appConfig.jiexiMap[args.flag]
const response = await req(api + args.url)
if (response.code === 200) {
let item
try {
item = JSON.parse(response.data)
} catch (error) {
item = response.data
}
if (item) {
for (let key in item) {
if (item.hasOwnProperty(key)) {
let value = item[key]
if (value && typeof value === 'string') {
if (
value.includes('http') &&
(value.includes('m3u8') ||
value.includes('mp4'))
) {
backData.data = value
break
}
}
}
}
}
}
} catch (error) {
backData.error = error.toString()
}
return JSON.stringify(backData)
}
/**
* 搜索视频
* @param {UZArgs} args
* @returns {@Promise<JSON.stringify(new RepVideoList())>}
*/
async function searchVideo(args) {
var backData = new RepVideoList()
try {
const response = await req(
`${appConfig.webSite}?ac=detail&wd=${args.searchWord}&pg=${args.page}`
)
const data = JSON.parse(response.data)
backData.data = data.list
} catch (error) {
backData.error = error.toString()
}
return JSON.stringify(backData)
}