mirror of
https://github.com/qist/tvbox.git
synced 2026-05-05 05:52:55 +00:00
update HQ
This commit is contained in:
403
cat/js/missav.js
Normal file
403
cat/js/missav.js
Normal file
@@ -0,0 +1,403 @@
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
|
||||
let key = 'misaav';
|
||||
let url = 'https://missav789.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = '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';
|
||||
|
||||
const cookie = {};
|
||||
const default_filter=[
|
||||
{
|
||||
key:'filters',
|
||||
name:'过滤',
|
||||
init:'',
|
||||
value:[
|
||||
{n:'所有',v:''},
|
||||
{n:'单人作品',v:'individual'},
|
||||
{n:'中文字幕',v:'chinese-subtitle'},
|
||||
]
|
||||
},
|
||||
{
|
||||
key:'sort',
|
||||
name:'排序',
|
||||
init:'',
|
||||
value:[
|
||||
{n:'發行日期',v:'released_at'},
|
||||
{n:'最近更新',v:'published_at'},
|
||||
{n:'收藏數',v:'saved'},
|
||||
{n:'今日瀏覽數',v:'today_views'},
|
||||
{n:'本週瀏覽數',v:'weekly_views'},
|
||||
{n:'本月瀏覽數',v:'monthly_views'},
|
||||
{n:'瀏覽數',v:'views'},
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
async function request(reqUrl, referer, mth, data, hd) {
|
||||
const headers = {
|
||||
'User-Agent': UA,
|
||||
Cookie: _.map(cookie, (value, key) => {
|
||||
return `${key}=${value}`;
|
||||
}).join(';'),
|
||||
};
|
||||
if (referer) headers.referer = encodeURIComponent(referer);
|
||||
let res = await req(reqUrl, {
|
||||
method: mth || 'get',
|
||||
headers: headers,
|
||||
data: data,
|
||||
postType: mth === 'post' ? 'form' : '',
|
||||
});
|
||||
if (res.headers['set-cookie']) {
|
||||
const set_cookie = _.isArray(res.headers['set-cookie']) ? res.headers['set-cookie'].join(';') : res.headers['set-cookie'];
|
||||
const cks = set_cookie.split(';');
|
||||
for (const c of cks) {
|
||||
const tmp = c.trim();
|
||||
if (tmp.startsWith('result=')) {
|
||||
cookie.result = tmp.substring(7);
|
||||
return await request(reqUrl, reqUrl, 'post', {
|
||||
result: cookie.result,
|
||||
});
|
||||
} else if (tmp.startsWith('esc_search_captcha=1')) {
|
||||
cookie.esc_search_captcha = 1;
|
||||
delete cookie.result;
|
||||
return await request(reqUrl);
|
||||
}
|
||||
}
|
||||
// console.log(res.headers['set-cookie']);
|
||||
}
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
//let html=await request(url)
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
|
||||
let type_list="最近更新=new+新作上市=release+今日热门=today-hot+本周热门=weekly-hot+本月热门=monthly-hot+专题=tags+女优大全=actresses+女优排行榜=actresses/ranking+类型=genres+发行商=makers".split('+')
|
||||
let filter_list="无码流出=uncensored-leak+中文字幕=chinese-subtitle+素人SIRO=siro+LUXU=luxu+GANA=gana+PrestigePremium=maan+S-CUTE=scute+ARA=ara+无码FC2=fc2+HEYZO=heyzo+东京热=tokyohot+一本道=1pondo+Caribbeancom=caribbeancom+Caribbeancompr=caribbeancompr+10musume=10musume+pacopacomama=pacopacomama+Gachinco=gachinco+XXX-AV=xxxav+人妻斩=marriedslash+顽皮4610=naughty4610+顽皮0930=naughty0930+麻豆传媒=madou+TWAV=twav+Furuke=furuke".split('+')
|
||||
let classes = _.map(type_list, (s) => {
|
||||
let typeId = s.split('=')
|
||||
return {
|
||||
type_id: typeId[1],
|
||||
type_name: typeId[0],
|
||||
};
|
||||
|
||||
});
|
||||
let filterss = _.map(filter_list, (s) => {
|
||||
let fobj = s.split('=')
|
||||
return {
|
||||
v: fobj[1],
|
||||
n: fobj[0],
|
||||
};
|
||||
});
|
||||
let filterObj = {
|
||||
"tags":[
|
||||
{
|
||||
key:'tag',
|
||||
name:'主題',
|
||||
init:'uncensored-leak',
|
||||
value:filterss
|
||||
}
|
||||
],
|
||||
"actresses":default_filter,
|
||||
"genres":default_filter,
|
||||
"makers":default_filter,
|
||||
"actresses/ranking":default_filter,
|
||||
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const min=1
|
||||
const max=100
|
||||
const range =max-min
|
||||
const random= Math.random()
|
||||
const result=min + Math.round(range*random)
|
||||
|
||||
const html=await request(url+'/random/'+result)
|
||||
const $ =load(html)
|
||||
const items = $('div.thumbnail')
|
||||
let videos=_.map(items,(item)=>{
|
||||
const a = $(item).find('a')[0]
|
||||
const aa=$($(item).find('a')[1]).text()
|
||||
// console.log(a)
|
||||
const vid= a.attribs.href
|
||||
const img =$(a).find('img')[0].attribs.src
|
||||
const title=$(a).find('img')[0].attribs.alt
|
||||
return {
|
||||
vod_id: vid,
|
||||
vod_name: title,
|
||||
vod_pic:img,
|
||||
vod_remarks:aa
|
||||
}
|
||||
} )
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
})
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
let html=null,$=null,items=null,videos=null
|
||||
switch(tid){
|
||||
case 'makers':
|
||||
html = await request(url+'/'+ tid+'?page='+pg)
|
||||
$=load(html)
|
||||
items = $('div.grid.grid-cols-2.gap-4 > div')
|
||||
videos=_.map(items,(item)=>{
|
||||
const a = $(item).find('a')
|
||||
console.log(a)
|
||||
const vid= a[0].attribs.href
|
||||
const rem =$(a[1]).text().replaceAll('\n','')
|
||||
const title=$(a[0]).text().replaceAll('\n','')
|
||||
|
||||
return {
|
||||
vod_id: vid,
|
||||
vod_name: title,
|
||||
vod_remarks:rem,
|
||||
vod_tag:'folder'
|
||||
}
|
||||
} )
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: 9999,
|
||||
limit: 20,
|
||||
total: 99999,
|
||||
list: videos,
|
||||
})
|
||||
break
|
||||
case 'genres':
|
||||
html = await request(url+'/'+ tid+'?page='+pg)
|
||||
$=load(html)
|
||||
items = $('div.grid.grid-cols-2.gap-4 > div')
|
||||
videos=_.map(items,(item)=>{
|
||||
const a = $(item).find('a')
|
||||
console.log(a)
|
||||
const vid= a[0].attribs.href
|
||||
const rem =$(a[1]).text().replaceAll('\n','')
|
||||
const title=$(a[0]).text().replaceAll('\n','')
|
||||
|
||||
return {
|
||||
vod_id: vid,
|
||||
vod_name: title,
|
||||
vod_remarks:rem,
|
||||
vod_tag:'folder'
|
||||
}
|
||||
} )
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: 9999,
|
||||
limit: 20,
|
||||
total: 99999,
|
||||
list: videos,
|
||||
})
|
||||
break
|
||||
case 'actresses/ranking':
|
||||
html = await request(url+'/'+ tid+'?page='+pg)
|
||||
$=load(html)
|
||||
items = $('ul.grid.grid-cols-2.gap-4 > li')
|
||||
videos=_.map(items,(item)=>{
|
||||
const a = $(item).find('a')
|
||||
const vid= a[0].attribs.href
|
||||
const imgs=$(a[0]).find('img')[0]
|
||||
const img=imgs?imgs.attribs.src:''
|
||||
const rem =$($(item).find('span')[0]).text().replaceAll('\n','')
|
||||
const title=$($(item).find('h4')[0]).text().replaceAll('\n','')
|
||||
|
||||
return {
|
||||
vod_id: vid,
|
||||
vod_name: title,
|
||||
vod_remarks: rem,
|
||||
vod_pic:img,
|
||||
vod_tag:'folder'
|
||||
}
|
||||
} )
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: 9999,
|
||||
limit: 20,
|
||||
total: 99999,
|
||||
list: videos,
|
||||
style: {
|
||||
type: "list",
|
||||
"ratio": 0.68
|
||||
}
|
||||
})
|
||||
break
|
||||
case 'actresses':
|
||||
html = await request(url+'/'+ tid+'?page='+pg)
|
||||
$=load(html)
|
||||
items = $('ul.grid.grid-cols-2.gap-4 > li')
|
||||
videos=_.map(items,(item)=>{
|
||||
const a = $(item).find('a')
|
||||
const vid= a[0].attribs.href
|
||||
const imgs=$(a[0]).find('img')[0]
|
||||
const img=imgs?imgs.attribs.src:''
|
||||
const rem =$($(item).find('p')[0]).text().replaceAll('\n','')
|
||||
const title=$($(item).find('h4')[0]).text().replaceAll('\n','')
|
||||
|
||||
return {
|
||||
vod_id: vid,
|
||||
vod_name: title,
|
||||
vod_remarks: rem,
|
||||
vod_pic:img,
|
||||
vod_tag:'folder'
|
||||
}
|
||||
} )
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: 9999,
|
||||
limit: 20,
|
||||
total: 99999,
|
||||
list: videos,
|
||||
})
|
||||
break
|
||||
default:
|
||||
let ttid=''
|
||||
if(tid=='tags')
|
||||
{
|
||||
ttid=extend.tag
|
||||
}else{
|
||||
ttid=tid
|
||||
}
|
||||
let urls=''
|
||||
if(tid.startsWith('http')){
|
||||
urls=tid+'?page='+pg+'&filters='+extend.filters+'&sort='+extend.sort
|
||||
|
||||
}else{
|
||||
urls=url+'/'+ ttid+'?page='+pg
|
||||
}
|
||||
|
||||
html = await request(urls)
|
||||
$=load(html)
|
||||
items = $('div.thumbnail')
|
||||
videos=_.map(items,(item)=>{
|
||||
const a = $(item).find('a')[0]
|
||||
const aa=$($(item).find('a')[1]).text()
|
||||
// console.log(a)
|
||||
const vid= a.attribs.href
|
||||
const img =$(a).find('img')[0].attribs['data-src']
|
||||
const title=$(a).find('img')[0].attribs.alt
|
||||
return {
|
||||
vod_id: vid,
|
||||
vod_name: title,
|
||||
vod_pic:img,
|
||||
vod_remarks:aa
|
||||
}
|
||||
} )
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: 9999,
|
||||
limit: 20,
|
||||
total: 99999,
|
||||
list: videos,
|
||||
})
|
||||
break
|
||||
|
||||
}
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 20,
|
||||
total: 20 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
function stripHtmlTag(src) {
|
||||
return src
|
||||
.replace(/<\/?[^>]+(>|$)/g, '')
|
||||
.replace(/&.{1,5};/g, '')
|
||||
.replace(/\s{2,}/g, ' ');
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(id);
|
||||
const $ = load(html);
|
||||
let script=html.match(/let source[\s\S]+?eval.+/)[0];
|
||||
let sourceFhd=""
|
||||
let source842=''
|
||||
let source1280=''
|
||||
let source=''
|
||||
eval(script);
|
||||
let list=[];
|
||||
let items=[];
|
||||
list.push({name:"默认",url:sourceFhd||source||""})
|
||||
list.push({name:"720p",url:source1280||""})
|
||||
list.push({name:"480p",url:source842||""})
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_pic: '',
|
||||
vod_remarks: '',
|
||||
vod_content: '',
|
||||
};
|
||||
|
||||
const playlist = []
|
||||
_.map(list, (a) => {
|
||||
if (a.url!=''){
|
||||
playlist.push(a.name +'$' + a.url);
|
||||
|
||||
}
|
||||
});
|
||||
vod.vod_play_from = 'missav';
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
async function search(wd, quick,pg) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const html = await request(url + '/search/' + wd+"?page="+pg);
|
||||
const $=load(html)
|
||||
const items = $('div.thumbnail')
|
||||
let videos=_.map(items,(item)=>{
|
||||
const a = $(item).find('a')[0]
|
||||
// console.log(a)
|
||||
const vid= a.attribs.href
|
||||
const img =$(a).find('img')[0].attribs['data-src']
|
||||
const title=$(a).find('img')[0].attribs.alt
|
||||
return {
|
||||
vod_id: vid,
|
||||
vod_name: title,
|
||||
vod_pic:img
|
||||
}
|
||||
} )
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: 9999,
|
||||
limit: 20,
|
||||
total: 99999,
|
||||
list: videos,
|
||||
})
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user