123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- 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,
- };
- }
|