Files
tvbox_collect/aa999ok/CK/18022/lib/SupJav.js
T
2026-06-29 03:41:14 +00:00

259 lines
6.7 KiB
JavaScript

const cheerio = createCheerio()
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_2 like Mac OS X) AppleWebKit/604.1.14 (KHTML, like Gecko)'
const appConfig = {
ver: 1,
title: 'SupJav',
site: 'https://supjav.com/zh',
tabs: [
{
name: '热门',
ext: {
id: 'popular',
},
ui: 1,
},
{
name: '有码',
ext: {
id: 'category/censored-jav',
},
ui: 1,
},
{
name: '无码',
ext: {
id: 'category/uncensored-jav',
},
ui: 1,
},
{
name: '素人',
ext: {
id: 'category/amateur',
},
ui: 1,
},
{
name: '中文字幕',
ext: {
id: 'category/chinese-subtitles',
},
ui: 1,
},
{
name: '无码破解',
ext: {
id: 'category/reducing-mosaic',
},
ui: 1,
},
],
}
async function getConfig() {
return jsonify(appConfig)
}
async function getCards(ext) {
ext = argsify(ext)
let cards = []
let { page = 1, id } = ext
const url = appConfig.site + `/${id}/page/${page}`
const { data } = await $fetch.get(url, {
headers: {
'User-Agent': UA,
},
})
const $ = cheerio.load(data)
const t1 = $('title').text()
if (t1 === 'Just a moment...') {
$utils.openSafari(appConfig.site, UA)
}
const videos = $('.post')
videos.each((_, e) => {
const href = $(e).find('a').attr('href')
const title = $(e).find('a').attr('title')
const cover = $(e).find('a img').attr('src').replace('!320x216.jpg', '')
const remarks = $(e).find('.con .meta .date').text()
cards.push({
vod_id: href,
vod_name: title,
vod_pic: cover,
vod_remarks: '',
ext: {
url: href,
},
})
})
return jsonify({
list: cards,
})
}
async function getTracks(ext) {
ext = argsify(ext)
let tracks = []
let url = ext.url
const { data } = await $fetch.get(url, {
headers: {
'User-Agent': UA,
},
})
const $ = cheerio.load(data)
const btns = $('a.btn-server')
btns.each((_, e) => {
const name = $(e).text()
const data_link = $(e).attr('data-link')
tracks.push({
name,
pan: '',
ext: {
data: data_link,
name,
},
})
})
return jsonify({
list: [
{
title: '默认分组',
tracks,
},
],
})
}
async function getPlayinfo(ext) {
ext = argsify(ext)
const { data, name } = ext
const param = data.split('').reverse().join('')
const url = `https://lk1.supremejav.com/supjav.php?c=${param}`
const res = await $fetch.get(url, {
headers: {
'User-Agent': UA,
Referer: `https://lk1.supremejav.com/supjav.php?l=${data}&bg=undefined`,
},
})
let playUrl = ''
if (name === 'TV') {
const config = res.data
.match(/decodeURIComponent\(escape\(r\)\)\}(.*)\)/)[1]
.replace(/["\(\)]/g, '')
.split(',')
const decrypted = decrypt(...config)
playUrl = decrypted.match(/var urlPlay = '(.*?)';/)[1]
function decrypt(h, u, n, t, e, r) {
r = ''
for (var i = 0, len = h.length; i < len; i++) {
var s = ''
while (h[i] !== n[e]) {
s += h[i]
i++
}
for (var j = 0; j < n.length; j++) s = s.replace(new RegExp(n[j], 'g'), j)
r += String.fromCharCode(_0xe99c(s, e, 10) - t)
}
return decodeURIComponent(escape(r))
}
function _0xe99c(d, e, f) {
let str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'
var g = str.split('')
var h = g.slice(0, e)
var i = g.slice(0, f)
var j = d
.split('')
.reverse()
.reduce(function (a, b, c) {
if (h.indexOf(b) !== -1) return (a += h.indexOf(b) * Math.pow(e, c))
}, 0)
var k = ''
while (j > 0) {
k = i[j % f] + k
j = (j - (j % f)) / f
}
return k || '0'
}
} else if (name === 'FST') {
const $ = cheerio.load(res.data)
$('script').each((_, e) => {
if ($(e).text().includes('eval')) {
const script = $(e).text().replace('eval', '')
const result = eval(script)
playUrl = result.match(/sources:\[\{file:"(.*?)"\}\]/)[1]
}
})
} else if (name === 'ST') {
const $ = cheerio.load(res.data)
let robot = $('#robotlink').text()
robot = robot.substring(0, robot.indexOf('&token=') + 7)
$('script').each((_, e) => {
let script = $(e).text()
if (script.includes("getElementById('robotlink')")) {
let token = script.split('&token=')[1].split("'")[0]
playUrl = 'https:/' + robot + token + '&stream=1'
}
})
} else if (name === 'VOE') {
const location = res.data.match(/window\.location\.href = '(.*?)';/)[1]
const locres = await $fetch.get(location, {
headers: {
'User-Agent': UA,
},
})
playUrl = locres.data.match(/prompt\("Node", "(.*?)"\);/)[1]
}
return jsonify({ urls: [playUrl] })
}
async function search(ext) {
ext = argsify(ext)
let cards = []
let text = encodeURIComponent(ext.text)
let page = ext.page || 1
let url = `${appConfig.site}/page/${page}?s=${text}`
const { data } = await $fetch.get(url, {
headers: {
'User-Agent': UA,
},
})
const $ = cheerio.load(data)
$('.post').each((_, e) => {
const href = $(e).find('a').attr('href')
const title = $(e).find('a').attr('title')
const cover = $(e).find('a img').attr('data-original')
const remarks = $(e).find('.con .meta .date').text()
cards.push({
vod_id: href,
vod_name: title,
vod_pic: cover,
vod_remarks: remarks,
ext: {
url: href,
},
})
})
return jsonify({
list: cards,
})
}