Add files via upload

This commit is contained in:
newrecha 2024-08-25 20:51:37 +08:00 committed by GitHub
parent d711dd627e
commit 81130ed06a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
70 changed files with 5280 additions and 0 deletions

144
cat/js/MyCatBookan.js Normal file

@ -0,0 +1,144 @@
import { _ } from './lib/cat.js';
let key = 'bookan';
let url = 'https://api.bookan.com.cn';
let siteKey = '';
let siteType = 0;
async function request(reqUrl, agentSp) {
let res = await req(reqUrl, {
method: 'get',
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
return JSON.stringify({
class: [
{ type_id: '1305', type_name: '少年读物' },
{ type_id: '1304', type_name: '儿童文学' },
{ type_id: '1320', type_name: '国学经典' },
{ type_id: '1306', type_name: '文艺少年' },
{ type_id: '1309', type_name: '育儿心经' },
{ type_id: '1310', type_name: '心理哲学' },
{ type_id: '1307', type_name: '青春励志' },
{ type_id: '1312', type_name: '历史小说' },
{ type_id: '1303', type_name: '故事会' },
{ type_id: '1317', type_name: '音乐戏剧' },
{ type_id: '1319', type_name: '相声评书' },
],
});
}
async function homeVod() {
return JSON.stringify({
list: [],
});
}
async function category(tid, pg, filter, extend) {
pg = pg || 1;
if (pg == 0) pg = 1;
let content = await request(`${url}/voice/book/list?instance_id=25304&page=${pg}&category_id=${tid}&num=24`);
let data = JSON.parse(content).data;
let books = [];
for (const book of data.list) {
books.push({
vod_id: book.id,
vod_name: book.name,
vod_pic: book.cover,
vod_remarks: book.extra.author,
});
}
return JSON.stringify({
page: data.current_page,
pagecount: data.last_page,
limit: 24,
total: data.total,
list: books,
});
}
async function detail(id) {
let content = await request(`${url}/voice/album/units?album_id=${id}&page=1&num=200&order=1`);
let data = JSON.parse(content).data;
console.log(JSON.stringify(data));
let book = {
vod_id: id,
type_name: '',
vod_year: '',
vod_area: '',
vod_remarks: '',
vod_actor: '',
vod_director: '',
vod_content: '',
};
let us = _.map(data.list, function (b) {
return formatPlayUrl(b.title) + '$' + b.file;
}).join('#');
book.vod_play_from = '书卷';
book.vod_play_url = us;
return JSON.stringify({
list: [book],
});
}
function formatPlayUrl(name) {
return name
.trim()
.replace(/<|>|\.《.*?》/g, '. ')
.replace(/\$|#/g, ' ')
.trim();
}
async function proxy(segments, headers) {}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
async function search(wd, quick, pg) {
pg = pg || 1;
if (pg == 0) pg = 1;
let content = await request(`https://es.bookan.com.cn/api/v3/voice/book?instanceId=25304&keyword=${wd}&pageNum=${pg}&limitNum=20`);
let data = JSON.parse(content).data;
let books = [];
for (const book of data.list) {
books.push({
vod_id: book.id,
vod_name: book.name,
vod_pic: book.cover,
vod_remarks: book.extra.author,
});
}
return JSON.stringify({
page: data.current_page,
pagecount: data.last_page,
limit: 20,
total: data.total,
list: books,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

50
cat/js/README.md Normal file

@ -0,0 +1,50 @@
## Support using private Gitee or GitHub repositories as remote config.
* github://<your personal access token>@github.com/<owner>/<repo>/<ref>/<file path>
* gitee://<your access token>@gitee.com/<owner>/<repo>/<ref>/<file path>
* github://ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@github.com/omii/catvod/main/config_open.json
* gitee://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@gitee.com/omii/catvod/master/config_open.json
* https://omii%40qq.com:88888888@dav.jianguoyun.com/dav/cat/js/config_open.json
## personal access token
* Settings > Developer settings > Personal access tokens > Token (classic) > Generate new token
* Settings > Developer settings > Personal access tokens > Fine-grained tokens > Generate new token
## 远端配置:
* github://ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@github.com/omiitop/CatVod/main/js/config_open.json
* github://github_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@github.com/omiitop/CatVod/main/js/config_open.json
## 本地配置:
* assets://js/config_open.json
## 远程配置教程:
* https://omii.top/1296.html
## iOS签名教程
* https://omii.top/826.html
* https://omii.top/1498.html 推荐
## 自定义背景
"color": [
{
"light": { "bg": "https://i2.100024.xyz/2024/01/13/qrnuwt.webp", "bgMask": "0x50ffffff", "primary": "0xFF2B6C00", "onPrimary": "0xFFFFFFFF", "primaryContainer": "0xFFA6F779", "onPrimaryContainer": "0xFF082100", "secondary": "0xFF55624C", "onSecondary": "0xFFFFFFFF", "secondaryContainer": "0xFFD9E7CA", "onSecondaryContainer": "0xFF131F0D", "tertiary": "0xFF386666", "onTertiary": "0xFFFFFFFF", "tertiaryContainer": "0xFFBBEBEB", "onTertiaryContainer": "0xFF002020", "error": "0xFFBA1A1A", "onError": "0xFFFFFFFF", "errorContainer": "0xFFFFDAD6", "onErrorContainer": "0xFF410002", "background": "0xFFFDFDF5", "onBackground": "0xFF1A1C18", "surface": "0xFFFDFDF5", "onSurface": "0xFF1A1C18", "surfaceVariant": "0xFFE0E4D6", "onSurfaceVariant": "0xFF1A1C18", "inverseSurface": "0xFF2F312C", "onInverseSurface": "0xFFF1F1EA", "outline": "0xFF74796D", "outlineVariant": "0xFFC3C8BB", "shadow": "0xFF000000", "scrim": "0xFF000000", "inversePrimary": "0xFF8CDA60", "surfaceTint": "0xFF2B6C00" },
"dark": { "bg": "https://i2.100024.xyz/2024/01/13/qrc37o.webp", "bgMask": "0x50000000", "primary": "0xFF8CDA60", "onPrimary": "0xFF133800", "primaryContainer": "0xFF1F5100", "onPrimaryContainer": "0xFFA6F779", "secondary": "0xFFBDCBAF", "onSecondary": "0xFF283420", "secondaryContainer": "0xFF3E4A35", "onSecondaryContainer": "0xFFD9E7CA", "tertiary": "0xFFA0CFCF", "onTertiary": "0xFF003737", "tertiaryContainer": "0xFF1E4E4E", "onTertiaryContainer": "0xFFBBEBEB", "error": "0xFFFFB4AB", "errorContainer": "0xFF93000A", "onError": "0xFF690005", "onErrorContainer": "0xFFFFDAD6", "background": "0xFF1A1C18", "onBackground": "0xFFE3E3DC", "outline": "0xFF8D9286", "onInverseSurface": "0xFF1A1C18", "inverseSurface": "0xFFE3E3DC", "inversePrimary": "0xFF2B6C00", "shadow": "0xFF000000", "surfaceTint": "0xFF8CDA60", "outlineVariant": "0xFF43483E", "scrim": "0xFF000000", "surface": "0xFF1A1C18", "onSurface": "0xFFC7C7C0", "surfaceVariant": "0xFF43483E", "onSurfaceVariant": "0xFFC7C7C0" }
}
],
## 自助添加接口格式:
{
"key": "wogg",
"name": "🟢 玩偶",
"type": 3,
"api": "./wogg_open.js",
"ext": "填入阿里token"
},
"key"、"name" 内:与其他不重复的名称均可。
"type" 3为影视10为有声读物
"api" 填写js路径"ext" 填写扩展内容例如玩偶的token。
以上由omii.top提供

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

1
cat/js/mkz_open.js Normal file

File diff suppressed because one or more lines are too long

200
cat/js/mtsp_open.js Normal file

@ -0,0 +1,200 @@
import { Crypto, _ } from './lib/cat.js';
let key = 'mtsp';
let main = 'https://mt7886.sbs/';
let url = '';
let siteKey = '';
let siteType = 0;
let searchKeys = [];
let tags = 'JTVCJTIyJUU2JUI1JTkzJUU1JUFGJTg2JUU2JUJGJTgwJUU2JTgzJTg1JTIyJTJDJTIyJUU2JTkwJTlDJUU2JTlGJUE1JUU1JUFFJTk4JTIyJTJDJTIyJUU1JUE1JUIzJUU0JUJCJTg2JTIyJTJDJTIyJUU1JTkwJThFJUU1JTg1JUE1JTIyJTJDJTIyJUU3JUJFJThFJUU0JUI5JUIzJUU1JUI3JUE4JUU4JTgzJUI4JTIyJTJDJTIyJUU1JThGJUEzJUU0JUJBJUE0JUU1JThGJUEzJUU3JTg4JTg2JTIyJTJDJTIyJUU1JTg2JTg1JUU1JUIwJTg0JTIyJTJDJTIyJUU1JUE1JUIzJUU0JUI4JThBJTIyJTJDJTIyJUU3JUJFJThFJUU4JTg1JUJGJTIyJTJDJTIyJUU3JUIyJUJFJUU1JTkzJTgxJTIyJTJDJTIyJUU0JUI4JTlEJUU4JUEyJTlDJTIyJTJDJTIyJUU1JUIwJTkxJUU1JUE1JUIzJTIyJTJDJTIyJUU1JTg4JUI2JUU2JTlDJThEJTIyJTJDJTIyJUU3JUJFJUE0UCUyMiUyQyUyMiVFNyU5OSVCRCVFOCU5OSU4RSUyMiUyQyUyMiVFNiU4MyU4NSVFOCVCNiVBMyVFOCVBRiVCMSVFNiU4MyU5MSUyMiUyQyUyMiVFOSU4MSU5MyVFNSU4NSVCNyUyMiUyQyUyMiVFNSVBNSVCMyVFNyVBNSU5RSUyMiUyQyUyMiVFOSVCQSVCQiVFOCVCMSU4NiVFNCVCQyVBMCVFNSVBQSU5MiUyMiUyQyUyMiVFOSVBMiU5QyVFNSVCMCU4NCUyMiUyQyUyMiVFNSVBRCVBNiVFNyU5NCU5RiUyMiUyQyUyMiVFNCVCQSVCQSVFNSVBNiVCQiUyMiUyQyUyMiVFNyVCNCVBMCVFNCVCQSVCQSUyMiUyQyUyMiVFNiVCNSVCNCVFNSVBRSVBNCUyMiUyQyUyMiVFOSU4NSU5MiVFNSVCQSU5NyUyMiUyQyUyMiVFNyU4NiU5RiVFNSVBNSVCMyUyMiUyQyUyMiVFOCU4NyVBQSVFNiU4QiU4RCUyMiUyQyUyMiVFNSVCMCU5MSVFNSVBNiU4NyUyMiUyQyUyMiVFNSU4OSVBNyVFNiU4MyU4NSUyMiUyQyUyMiVFNCVCOSVCMyVFNCVCQSVBNCUyMiUyQyUyMiVFNiU4OCVCNyVFNSVBNCU5NiUyMiUyQyUyMlNXQUclMjIlMkMlMjIlRTUlQTUlQjMlRTQlQjglQkIlRTYlOTIlQUQlMjIlMkMlMjIlRTQlQjglQUQlRTYlOTYlODclRTUlQUQlOTclRTUlQjklOTUlMjIlMkMlMjIlRTQlQjklQjElRTQlQkMlQTYlMjIlMkMlMjIlRTglQjAlODMlRTYlOTUlOTklMjIlMkMlMjIlRTYlOEQlODYlRTclQkIlOTElMjIlMkMlMjIlRTYlQTglQTElRTclODklQjklMjIlMkMlMjIlRTclOUIlQjQlRTYlOTIlQUQlMjIlMkMlMjI5MSVFNSU4OCVCNiVFNyU4OSU4NyVFNSU4RSU4MiUyMiUyQyUyMiVFOSU4NyU4RSVFNiU4OCU5OCUyMiUyQyUyMiVFNSU4MSVCNyVFNiU4QiU4RCUyMiUyQyUyMiVFNSU4QiVCRSVFNiU5MCVBRCUyMiUyQyUyMiVFNiU5MSU4NCVFNSU4MyU4RiVFNSVBNCVCNCUyMiUyQyUyMiVFNSU4NyVCQSVFOCVCRCVBOCUyMiUyQyUyMiVFNyVCRCU5MSVFNyVCQSVBMiUyMiUyQyUyMiVFNSVCNyVBOCVFNiVBMCVCOSUyMiUyQyUyMiVFNiVBQyVBNyVFNyVCRSU4RSUyMiUyQyUyMmNvc3BsYXklMjIlMkMlMjIlRTUlQkMlQkElRTUlQTUlQjglMjIlMkMlMjIlRTUlQTQlQTklRTclQkUlOEUlRTQlQkMlQTAlRTUlQUElOTIlMjIlMkMlMjIlRTYlOEMlODklRTYlOTElQTklMjIlMkMlMjIzRCVFNSU4QSVBOCVFNiVCQyVBQiUyMiUyQyUyMiVFOCU5MCU5RCVFOCU4RSU4OSUyMiUyQyUyMiVFNSVBNyU5MCVFNSVBNiVCOSVFOCU4QSVCMSUyMiUyQyUyMiVFNSU4QSU5RSVFNSU4NSVBQyVFNSVBRSVBNCUyMiUyQyUyMiVFOCVCRCVBNiVFOSU5QyU4NyUyMiUyQyUyMiVFNSU4MSVCNyVFNiU4MyU4NSUyMiUyQyUyMiVFNiU5RSU5QyVFNSU4NiVCQiVFNCVCQyVBMCVFNSVBQSU5MiUyMiUyQyUyMiVFOCU4MiU5QiVFNCVCQSVBNCUyMiUyQyUyMlNNJTIyJTJDJTIyJUU5JTg3JThEJUU1JThGJUEzJTIyJTJDJTIyJUU2JUIzJUIzJUU4JUExJUEzJTIyJTJDJTIyU1BBJTIyJTJDJTIyJUU2JThFJUEyJUU4JThBJUIxJTIyJTJDJTIyJUU4JUI2JUIzJUU0JUJBJUE0JTIyJTJDJTIyJUU3JUE5JUJBJUU1JUE3JTkwJTIyJTJDJTIyJUU4JTlDJTlDJUU2JUExJTgzJUU0JUJDJUEwJUU1JUFBJTkyJTIyJTJDJTIyJUU2JTk1JTk5JUU1JUI4JTg4JTIyJTJDJTIyJUU2JUJEJUFFJUU1JTkwJUI5JTIyJTJDJTIyJUU5JTk3JUE4JUU0JUJBJThCJUU0JUJCJUI2JTIyJTJDJTIyJUU1JUE1JUIzJUU1JTkwJThDJTIyJTJDJTIyJUU2JThBJTgwJUU1JUI4JTg4JTIyJTJDJTIyJUU3JUIyJUJFJUU0JUI4JTlDJUU0JUJDJUEwJUU1JUFBJTkyJTIyJTJDJTIyJUU2JTk1JTk5JUU1JUFFJUE0JTIyJTJDJTIyJUU4JUJGJUI3JUU1JUE1JUI4JTIyJTJDJTIyJUU2JThEJUEyJUU1JUE2JUJCJTIyJTJDJTIyS1RWJTIyJTJDJTIyJUU2JTk4JTlGJUU3JUE5JUJBJUU0JUJDJUEwJUU1JUFBJTkyJTIyJTJDJTIyJUU2JThBJUE0JUU1JUEzJUFCJTIyJTJDJTIyJUU2JUFGJThEJUU1JUE1JUIzJTIyJTVE';
const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36';
async function request(reqUrl, agentSp) {
const res = await req(reqUrl, {
headers: {
'User-Agent': agentSp || UA,
},
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
// 获取url
let html = await request(main);
url = html.match(/location\.href="(.*)"/)[1].replace('https', 'http');
tags = JSON.parse(decodeURIComponent(base64Decode(tags)));
searchKeys = cfg.tags || [];
let mainJs = await request(url + '/main.js');
url = mainJs.match(/apiurl = '(.*)'/)[1].replace('https', 'http');
}
async function home(filter) {
let classes = [];
let filterObj = {};
let tagIdx = 1;
_.each(_.chunk(tags, 24), (array) => {
const subs = _.chunk(array, 8);
let tid = '';
let init = '';
for (let i = 0; i < subs.length; i++) {
let tt = {
key: 'tag',
name: '',
init: '',
value: _.map(subs[i], (e) => {
return { n: e, v: e };
}),
};
if (i == 0) {
init = tt.value[0].v;
tt['init'] = init;
tid = tt.value[0].v;
filterObj[tid] = [tt];
} else {
tt['init'] = init;
filterObj[tid].push(tt);
}
}
classes.push({
type_id: tid,
type_name: '综合' + tagIdx,
land: 1,
});
tagIdx++;
});
_.each(searchKeys, (s) => {
classes.push({
type_id: 'sc_' + s,
type_name: s,
land: 1,
});
});
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {
return '{}';
}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
let link = url;
if (tid.startsWith('sc_')) {
link = link + '/search?q=' + encodeURIComponent(tid.substr(3)) + '&page=' + pg + '&size=16';
} else {
link = link + '/vodList?&tag=' + (extend.tag || tid) + '&page=' + pg + '&size=16';
}
const data = decrypt(JSON.parse(await request(link)).data);
let videos = [];
for (const vod of data.movies) {
if (!vod.id) continue;
videos.push({
vod_id: vod.id,
vod_name: vod.name,
vod_pic: vod.thumb,
vod_remarks: vod.views,
});
}
return JSON.stringify({
page: parseInt(data.page),
pagecount: _.ceil(data.totals / 16),
limit: 16,
total: data.totals,
list: videos,
});
}
async function detail(id) {
const link = url + '/vodDetail?id=' + id;
const data = decrypt(JSON.parse(await request(link)).data).info;
let desc = data.name + '\n';
if (data.views) {
desc += '观看次数:' + data.views + '\n';
}
let vod = {
vod_id: id,
vod_name: data.name,
vod_pic: data.thumb,
type_name: (data.tag || []).join(','),
vod_year: data.date,
vod_content: desc,
};
vod.vod_play_from = 'm3u8';
let urls = [];
if (data.m3u8) {
urls.push('主力$' + data.m3u8);
}
if (data.m3u8bak) {
urls.push('备用$' + data.m3u8bak);
}
vod.vod_play_url = urls.join('#');
return JSON.stringify({
list: [vod],
});
}
async function proxy(segments, headers) {}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
async function search(wd, quick, pg) {
let page = pg || 1;
if (page == 0) page = 1;
let videos = [];
let link = url + '/search?q=' + encodeURIComponent(wd) + '&page=' + page + '&size=16';
const data = decrypt(JSON.parse(await request(link)).data);
for (const vod of data.movies) {
if (!vod.id) continue;
videos.push({
vod_id: vod.id,
vod_name: vod.name,
vod_pic: vod.thumb,
vod_remarks: vod.views,
});
}
return JSON.stringify({
page: parseInt(data.page),
pagecount: _.ceil(data.totals / 16),
land: 1,
list: videos,
});
}
function decrypt(content) {
return JSON.parse(aesX('AES/CBC/PKCS7', false, content, true, 'F31F2A75FBF94099', '12345BCA901ER456', false));
}
function base64Encode(text) {
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
}
function base64Decode(text) {
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

265
cat/js/mybili_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/mysp_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/nangua_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/ng_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/ng_open2.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/nivod_op.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/nivod_open.js Normal file

File diff suppressed because one or more lines are too long

207
cat/js/nkvod_open.js Normal file

@ -0,0 +1,207 @@
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
let key = 'nkvod';
let HOST = 'https://nkvod.pro';
let parseMap = {};
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';
async function request(reqUrl) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': UA,
'Referer': HOST
},
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
await initParseMap();
}
async function initParseMap() {
const date = new Date();
const t = '' + date.getFullYear() + (date.getMonth() + 1) + date.getDate();
const js = await request(HOST + '/static/js/playerconfig.js?t=' + t);
try {
const jsEval = js + '\nMacPlayerConfig';
const playerList = eval(jsEval).player_list;
const players = _.values(playerList);
_.each(players, (item) => {
if (!item.ps || item.ps == '0') return;
if (_.isEmpty(item.parse)) return;
parseMap[item.show] = item.parse;
});
} catch(e) {
}
}
async function home(filter) {
const classes = [{'type_id':'1','type_name':'电影'},{'type_id':'2','type_name':'电视剧'},{'type_id':'3','type_name':'综艺'},{'type_id':'4','type_name':'动漫'}];
const filterObj = {
'1':[{'key':'cateId','name':'类型','init':'1','value':[{'n':'全部','v':'1'},{'n':'动作片','v':'6'},{'n':'喜剧片','v':'7'},{'n':'爱情片','v':'8'},{'n':'科幻片','v':'9'},{'n':'恐怖片','v':'10'},{'n':'剧情片','v':'11'},{'n':'战争片','v':'12'}]},{'key':'year','name':'年代','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'2':[{'key':'cateId','name':'类型','init':'2','value':[{'n':'全部','v':'2'},{'n':'国产剧','v':'13'},{'n':'港台剧','v':'14'},{'n':'日韩剧','v':'15'},{'n':'欧美剧','v':'16'},{'n':'其他剧','v':'20'}]},{'key':'year','name':'年代','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'3':[{'key':'year','name':'年代','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'4':[{'key':'year','name':'年代','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}]
};
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
const link = HOST + '/show/' + (extend.cateId || tid) + '--' + (extend.by || '') + '-' + (extend.class || '') + '--' + (extend.letter || '') + '---' + pg + '---' + (extend.year || '') + '.html';
const html = await request(link);
const $ = load(html);
const items = $('a.module-item');
const videos = _.map(items, (item) => {
const $item = $(item);
const a = $item;
const img = $item.find('img:first');
const remarks = $item.find('div.module-item-note').text().trim();
return {
vod_id: a.attr('href').replace(/.*?\/detail\/(.*).html/g, '$1'),
vod_name: a.attr('title'),
vod_pic: img.attr('data-original'),
vod_remarks: remarks,
};
});
const limit = 72;
const hasMore = $('div#page > a:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos,
});
}
async function detail(id) {
const html = await request(HOST + '/detail/' + id + '.html');
const $ = load(html);
const vod = {
vod_id: id,
vod_name: $('h1:first').text().trim(),
vod_type: $('.module-info-tag a:eq(2)').text().trim(),
vod_year: $('.module-info-tag a:eq(0)').text().trim(),
vod_area: $('.module-info-tag a:eq(1)').text().trim(),
vod_actor: $('.module-info-item:contains(主演:)').text().trim().substring(3).replace(/\/$/, ''),
vod_director: $('.module-info-item:contains(导演:)').text().trim().substring(3).replace(/\/$/, ''),
vod_pic: $('.module-info-poster img:first').attr('data-original'),
vod_remarks : $('.module-info-item:contains(备注:)').text(),
vod_content: $('.module-info-introduction-content').text().trim(),
};
const playMap = {};
const tabs = $('.module-tab .module-tab-item span');
const playlists = $('.module-play-list');
_.each(tabs, (tab, i) => {
const $tab = $(tab);
const from = $tab.text().trim();
let list = playlists[i];
list = $(list).find('a');
_.each(list, (it) => {
const $it = $(it);
let title = $it.find('span').text();
const playUrl = $it.attr('href');
if (_.isEmpty(title)) title = $it.text();
if (!playMap.hasOwnProperty(from)) {
playMap[from] = [];
}
playMap[from].push(title + '$' + playUrl);
});
});
vod.vod_play_from = _.keys(playMap).join('$$$');
const urls = _.values(playMap);
const vod_play_url = _.map(urls, (urlist) => {
return urlist.join('#');
});
vod.vod_play_url = vod_play_url.join('$$$');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
const link = HOST + id;
const html = await request(link);
const $ = load(html);
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
let playUrl = js.url;
if (js.encrypt == 1) {
playUrl = unescape(playUrl);
} else if (js.encrypt == 2) {
playUrl = unescape(base64Decode(playUrl));
}
const parseUrl = parseMap[flag];
if (parseUrl) {
const reqUrl = parseUrl + playUrl;
const parseHtml = await request(reqUrl);
const matches = parseHtml.match(/let ConFig = {([\w\W]*)},box/);
if (!_.isEmpty(matches)) {
const configJson = '{' + matches[1].trim() + '}';
const config = JSON.parse(configJson);
playUrl = decryptUrl(config);
}
}
return JSON.stringify({
parse: 0,
url: playUrl,
header: {
'User-Agent': UA,
}
});
}
function decryptUrl(jsConfig) {
const key = Crypto.enc.Utf8.parse('2890' + jsConfig.config.uid + 'tB959C');
const iv = Crypto.enc.Utf8.parse('GZ4JgN2BdSqVWJ1z');
const mode = Crypto.mode.CBC;
const padding = Crypto.pad.Pkcs7;
const decrypted = Crypto.AES.decrypt(jsConfig.url, key, {
iv: iv,
mode: mode,
padding: padding
});
const decryptedUrl = Crypto.enc.Utf8.stringify(decrypted);
return decryptedUrl;
}
async function search(wd, quick) {
const data = JSON.parse(await request(HOST + '/index.php/ajax/suggest?mid=1&limit=50&wd=' + wd)).list;
const videos = _.map(data, (vod) => {
return {
vod_id: vod.id,
vod_name: vod.name,
vod_pic: vod.pic,
vod_remarks: '',
};
});
return JSON.stringify({
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/nm_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/nmddd_open.js Normal file

File diff suppressed because one or more lines are too long

204
cat/js/pan99_open.js Normal file

@ -0,0 +1,204 @@
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
import { log } from './lib/utils.js';
import { initAli, detailContentVodPlayFrom, detailContentVodPlayUrl, playContent } from './lib/ali.js';
let siteKey = 'pan99';
let siteType = 0;
const siteUrl = 'https://pan99.xyz';
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';
async function request(reqUrl) {
const res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': UA,
'Referer': siteUrl,
},
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
try {
siteKey = cfg.skey;
siteType = cfg.stype;
await initAli(cfg.ext);
} catch (e) {
await log('init:' + e.message + ' line:' + e.lineNumber);
}
}
async function home(filter) {
const classes = [{'type_id':'dy','type_name':'电影'},{'type_id':'tv','type_name':'完结剧集'},{'type_id':'tv/geng','type_name':'追更剧集'},{'type_id':'tv/netflix','type_name':'Netflix'}];
const filterObj = {};
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
let page = '';
if (pg > 1) {
page = 'page/' + pg + '/';
}
const cateUrl = siteUrl + '/category/' + tid + '/' + page;
const html = await request(cateUrl);
const $ = load(html);
const list = $('.post-item');
const jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
const videos = _.map(list, (vid) => {
const $vid = $(vid);
const $link = $vid.find('.media-img');
const $entry = $vid.find('.entry-cat-dot');
return {
vod_id: decodeURIComponent($link.attr('href').replace(/.*\/\/.*\/(.*\/.*)\//g, '$1')),
vod_name: $link.attr('title'),
vod_pic: jsBase + base64Encode($link.attr("data-bg")),
vod_remarks: $entry.text().trim(),
};
});
const limit = 50;
const curPage = parseInt(pg);
const hasMore = videos.length == limit;
const pgCount = hasMore ? curPage + 1 : curPage;
return JSON.stringify({
page: curPage,
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos,
});
}
async function detail(id) {
const detailUrl = siteUrl + '/' + id;
const html = await request(detailUrl);
const $ = load(html);
const $cards = $('.card p a:not([href*=quark])');
const shareLinks = _.map($cards, (card) => {
return $(card).attr('href').trim();
});
const content = $('.post-content').text();
const jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
const vod = {
vod_id: id,
vod_name: $('.post-title.mb-2.mb-lg-3').text().trim(),
vod_director: matchDetailContent(content, /◎导  演([\w\W]*?)◎/),
vod_actor: matchDetailContent(content, /◎演  员([\w\W]*?)◎/),
vod_year: matchDetailContent(content, /◎年  代(.*)/),
vod_area: matchDetailContent(content, /◎产  地(.*)/),
vod_type: matchDetailContent(content, /◎类  别(.*)/),
vod_pic: jsBase + base64Encode($('img.alignnone.size-medium').attr('src')),
vod_content: matchDetailContent(content, /◎简  介([\w\W]*)资源失效/),
vod_remarks: $('.meta-cat-dot').text().trim(),
};
try {
vod.vod_play_from = detailContentVodPlayFrom(shareLinks);
vod.vod_play_url = await detailContentVodPlayUrl(shareLinks);
} catch (e) {
await log('detail:' + e.message + ' line:' + e.lineNumber);
}
return JSON.stringify({
list: [vod],
});
}
function matchDetailContent(contentText, regex) {
const matches = contentText.match(regex);
if (!_.isEmpty(matches)) {
const index = matches.length - 1;
return matches[index].trim();
}
return '';
}
function base64Encode(text) {
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
}
function base64Decode(text) {
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
}
async function proxy(segments, headers) {
const what = segments[0];
const url = base64Decode(segments[1]);
if (what == 'img') {
const resp = await req(url, {
buffer: 2,
headers: {
'Referer': 'https://api.douban.com/',
'User-Agent': UA,
},
});
return JSON.stringify({
code: resp.code,
buffer: 2,
content: resp.content,
headers: resp.headers,
});
}
return JSON.stringify({
code: 500,
content: '',
});
}
async function play(flag, id, flags) {
try {
return await playContent(flag, id, flags);
} catch (e) {
await log('play:' + e.message + ' line:' + e.lineNumber);
}
}
async function search(wd, quick, pg) {
let page = '';
if (pg > 1) {
page = 'page/' + pg + '/';
}
const searchUrl = siteUrl + '/' + page + '?cat=&s=' + encodeURIComponent(wd);
const html = await request(searchUrl);
const $ = load(html);
const list = $('.post-item');
const jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
const videos = _.map(list, (vid) => {
const $vid = $(vid);
const $link = $vid.find('.media-img');
const $entry = $vid.find('.entry-cat-dot');
return {
vod_id: decodeURIComponent($link.attr('href').replace(/.*\/\/.*\/(.*\/.*)\//g, '$1')),
vod_name: $link.attr('title'),
vod_pic: jsBase + base64Encode($link.attr("data-bg")),
vod_remarks: $entry.text().trim(),
};
});
const limit = 50;
const curPage = parseInt(pg);
const hasMore = videos.length == limit;
const pgCount = hasMore ? curPage + 1 : curPage;
return JSON.stringify({
page: curPage,
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
proxy: proxy,
search: search,
};
}

1
cat/js/panghu_open.js Normal file

File diff suppressed because one or more lines are too long

150
cat/js/pansearch_open.js Normal file

@ -0,0 +1,150 @@
import { load, _ } from 'assets://js/lib/cat.js';
import { log } from './lib/utils.js';
import { initAli, detailContent, playContent } from './lib/ali.js';
let siteKey = 'pansearch';
let siteType = 0;
let siteUrl = 'https://www.pansearch.me';
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/
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';
async function requestRaw(reqUrl, headers) {
let res = await req(reqUrl, {
method: 'get',
headers: headers || {
'User-Agent': UA,
'Referer': siteUrl,
},
});
return res;
}
async function request(reqUrl) {
let resRaw = await requestRaw(reqUrl)
return resRaw.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
try {
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
await initAli(cfg);
} catch (e) {
await log('init:' + e.message + ' line:' + e.lineNumber);
}
}
async function home(filter) {
return '{}';
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
return '{}';
}
async function detail(id) {
try {
let matches = id.match(patternAli);
if (!_.isEmpty(matches)) return await detailContent(matches[0]);
return '';
} catch (e) {
await log('detail:' + e.message + ' line:' + e.lineNumber);
}
}
async function play(flag, id, flags) {
try {
return await playContent(flag, id, flags);
} catch (e) {
await log('play:' + e.message + ' line:' + e.lineNumber);
}
}
async function search(wd, quick, pg) {
if (pg <= 0) pg = 1;
const limit = 10;
let offsetParam = '';
const offset = (pg - 1) * limit;
if (offset > 0) {
offsetParam = '&offset=' + offset;
}
const html = await request(siteUrl);
const $ = load(html);
const script = $('script#__NEXT_DATA__')[0];
const data = script.children[0].data;
const buildId = JSON.parse(data).buildId;
const url = siteUrl + "/_next/data/" + buildId + "/search.json?keyword=" + encodeURIComponent(wd) + offsetParam + "&pan=aliyundrive";
const result = await requestRaw(url, getSearchHeader());
const json = JSON.parse(result.content).pageProps.data;
const total = json.total;
const videoIdSet = new Set();
const videos = [];
for (const item of json.data) {
const content = item.content;
const img = item.image || siteUrl + "/favicon.png";
const splits = content.split('\n');
if (_.isEmpty(splits)) continue;
if (content.includes('1、')) {
for (const line of splits) {
if (_.isEmpty(line)) continue;
const vodId = parseVideo(line, videoIdSet);
if (!vodId) continue;
videos.push({
vod_id: vodId,
vod_name: line.replaceAll(/<\/?[^>]+>/g, "").replace(/[0-9]*、/g, '').replace(/:http.*/g, ''),
vod_pic: img,
vod_remarks: item.time
});
}
} else {
const vodId = parseVideo(content, videoIdSet);
if (!vodId) continue;
videos.push({
vod_id: vodId,
vod_name: splits[0].replaceAll(/<\/?[^>]+>/g, "").replace('名称:', ''),
vod_pic: img,
vod_remarks: item.time
});
}
}
const pgCount = parseInt(total / limit) + 1;
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: total,
list: videos,
});
}
function parseVideo(content, videoIdSet) {
const matches = content.match(patternAli);
if (_.isEmpty(matches)) return;
const vodId = matches[1];
if (videoIdSet.has(vodId)) return;
videoIdSet.add(vodId);
return vodId;
}
function getSearchHeader() {
return {
"x-nextjs-data": "1",
"Referer": siteUrl,
};
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

123
cat/js/pansou_open.js Normal file

@ -0,0 +1,123 @@
import { load, _ } from 'assets://js/lib/cat.js';
import { log } from './lib/utils.js';
import { initAli, detailContent, playContent } from './lib/ali.js';
let siteKey = 'pansou';
let siteType = 0;
let siteUrl = 'https://www.alipansou.com';
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/
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';
async function requestRaw(reqUrl, headers, redirect) {
let res = await req(reqUrl, {
method: 'get',
headers: headers || {
'User-Agent': UA,
'Referer': siteUrl,
},
redirect: redirect,
});
return res;
}
async function request(reqUrl) {
let resRaw = await requestRaw(reqUrl);
return resRaw.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
try {
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
await initAli(cfg);
} catch (e) {
await log('init:' + e.message + ' line:' + e.lineNumber);
}
}
async function home(filter) {
return '{}';
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
return '{}';
}
async function detail(id) {
try {
let matches = id.match(patternAli);
if (!_.isEmpty(matches)) return await detailContent(matches[0]);
let url = siteUrl + id.replace("/s/", "/cv/");
const data = await requestRaw(url, getHeaders(id), 0);
const headers = data.headers;
const resp = data.content;
if (headers.hasOwnProperty('location')) {
url = headers['location'].replace('/redirect?visit=', 'https://www.aliyundrive.com/s/');
return await detailContent(url);
} else if (!_.isEmpty(resp)) {
const $ = load(resp);
url = $('a:first').attr('href').replace('/redirect?visit=', 'https://www.aliyundrive.com/s/');
return await detailContent(url);
}
return '';
} catch (e) {
await log('detail:' + e.message + ' line:' + e.lineNumber);
}
}
function getHeaders(id) {
return {
"User-Agent": UA,
"Referer": siteUrl + id,
"_bid": "6d14a5dd6c07980d9dc089a693805ad8",
};
}
async function play(flag, id, flags) {
try {
return await playContent(flag, id, flags);
} catch (e) {
await log('play:' + e.message + ' line:' + e.lineNumber);
}
}
async function search(wd, quick, pg) {
if (pg <= 0) pg = 1;
const limit = 10;
const html = await request(siteUrl + "/search?k=" + encodeURIComponent(wd) + "&page=" + pg + "&s=0&t=-1");
const $ = load(html);
const items = $('van-row > a');
const videos = _.map(items, (item) => {
let title = $(item).find('template:first').text().trim();
return {
vod_id: item.attribs.href,
vod_name: title,
vod_pic: 'https://inews.gtimg.com/newsapp_bt/0/13263837859/1000',
};
});
const pageCount = $('van-pagination').attr('page-count') || pg;
const pgCount = parseInt(pageCount);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/push_open.js Normal file

@ -0,0 +1 @@
(function(_0x5502de,_0x28ce57){const _0x3d8968=_0x1d20,_0x3846a8=_0x5502de();while(!![]){try{const _0x6da132=-parseInt(_0x3d8968(0xff))/0x1+-parseInt(_0x3d8968(0xec))/0x2+-parseInt(_0x3d8968(0xf2))/0x3+parseInt(_0x3d8968(0xea))/0x4*(-parseInt(_0x3d8968(0xf9))/0x5)+-parseInt(_0x3d8968(0xf6))/0x6+parseInt(_0x3d8968(0xf5))/0x7+parseInt(_0x3d8968(0xe4))/0x8;if(_0x6da132===_0x28ce57)break;else _0x3846a8['push'](_0x3846a8['shift']());}catch(_0x3bf5ae){_0x3846a8['push'](_0x3846a8['shift']());}}}(_0x23d9,0x242d0));const _0x989826=(function(){let _0x48deae=!![];return function(_0x299763,_0x2277f6){const _0x5f5716=_0x48deae?function(){if(_0x2277f6){const _0x217adc=_0x2277f6['apply'](_0x299763,arguments);return _0x2277f6=null,_0x217adc;}}:function(){};return _0x48deae=![],_0x5f5716;};}()),_0x17f8da=_0x989826(this,function(){const _0x34e035=_0x1d20;let _0x313e96;try{const _0x1ace3f=Function(_0x34e035(0xf4)+_0x34e035(0xeb)+(_0x34e035(0x100)+'ctor(\x22retu'+_0x34e035(0xef)+'\x20)')+');');_0x313e96=_0x1ace3f();}catch(_0x45e725){_0x313e96=window;}const _0x3fb422=_0x313e96[_0x34e035(0xf8)]=_0x313e96[_0x34e035(0xf8)]||{},_0xece77b=['log',_0x34e035(0xe6),_0x34e035(0xf1),_0x34e035(0xfc),_0x34e035(0x108),'table',_0x34e035(0xf3)];for(let _0x33f9b0=0x0;_0x33f9b0<_0xece77b['length'];_0x33f9b0++){const _0x55a52a=_0x989826[_0x34e035(0x103)+'r'][_0x34e035(0xed)][_0x34e035(0xe5)](_0x989826),_0x49eb74=_0xece77b[_0x33f9b0],_0x1e3c4b=_0x3fb422[_0x49eb74]||_0x55a52a;_0x55a52a[_0x34e035(0xf7)]=_0x989826[_0x34e035(0xe5)](_0x989826),_0x55a52a[_0x34e035(0xf0)]=_0x1e3c4b[_0x34e035(0xf0)][_0x34e035(0xe5)](_0x1e3c4b),_0x3fb422[_0x49eb74]=_0x55a52a;}});_0x17f8da();import{_}from'assets://js/lib/cat.js';import*as _0x210159 from'./lib/ali.js';import*as _0x432f53 from'./lib/quark.js';let siteKey='push_agent',siteType=0x0;async function init(_0x19d74a){const _0x523839=_0x1d20;try{siteKey=_0x19d74a[_0x523839(0xe3)],siteType=_0x19d74a['stype'];let _0x1aff0a=_0x19d74a['ext'];typeof _0x1aff0a==_0x523839(0xfa)&&_0x1aff0a[_0x523839(0xee)]('{')&&(_0x1aff0a=JSON['parse'](_0x1aff0a));let _0x13aacd=_0x1aff0a[_0x523839(0x102)],_0x4e1794=_0x1aff0a[_0x523839(0xfd)];await _0x210159['initAli'](_0x13aacd),await _0x432f53[_0x523839(0xe9)](_0x4e1794);}catch(_0x333994){console['debug'](_0x333994);}}async function support(_0x348c76){const _0x300331=_0x1d20;if(!_['isEmpty'](_0x348c76[_0x300331(0x101)](_0x210159[_0x300331(0x107)]))||!_[_0x300331(0xe8)](_0x348c76[_0x300331(0x101)](_0x432f53[_0x300331(0xe7)+'rn'])))return!![];return![];}async function detail(_0x3af4de){const _0x2bf575=_0x1d20;if(!_['isEmpty'](_0x3af4de[_0x2bf575(0x101)](_0x210159[_0x2bf575(0x107)])))return await _0x210159[_0x2bf575(0xe1)+_0x2bf575(0xe2)](_0x3af4de);if(!_[_0x2bf575(0xe8)](_0x3af4de[_0x2bf575(0x101)](_0x432f53[_0x2bf575(0xe7)+'rn'])))return await _0x432f53['detailCont'+_0x2bf575(0xe2)](_0x3af4de);return'{}';}function _0x23d9(){const _0x32888f=['265VXRnLB','string','detail','error','cookie','init','196130ZNashF','{}.constru','match','token','constructo','search','play','support','aliPattern','exception','detailCont','ent','skey','5549256yMZltv','bind','warn','quarkPatte','isEmpty','initQuark','20164Diufks','nction()\x20','122892uhCkuX','prototype','startsWith','rn\x20this\x22)(','toString','info','212574VZCmlY','trace','return\x20(fu','1147909UjKeSz','683166hmvbbu','__proto__','console'];_0x23d9=function(){return _0x32888f;};return _0x23d9();}function _0x1d20(_0x4c5477,_0x30049e){const _0x392059=_0x23d9();return _0x1d20=function(_0x17f8da,_0x989826){_0x17f8da=_0x17f8da-0xe1;let _0x14831b=_0x392059[_0x17f8da];return _0x14831b;},_0x1d20(_0x4c5477,_0x30049e);}async function play(_0x30754e,_0x35a4ec,_0x31bae4){if(_0x30754e['indexOf']('夸克')>-0x1)return await _0x432f53['playConten'+'t'](_0x30754e,_0x35a4ec,_0x31bae4);return await _0x210159['playConten'+'t'](_0x30754e,_0x35a4ec,_0x31bae4);}async function search(_0x3bf45f,_0x17ece4){return'{}';}export function __jsEvalReturn(){const _0x5514bd=_0x1d20,_0x8f8cb={};return _0x8f8cb[_0x5514bd(0xfe)]=init,_0x8f8cb[_0x5514bd(0x106)]=support,_0x8f8cb[_0x5514bd(0xfb)]=detail,_0x8f8cb[_0x5514bd(0x105)]=play,_0x8f8cb[_0x5514bd(0x104)]=search,_0x8f8cb;}

160
cat/js/qfys_open.js Normal file

@ -0,0 +1,160 @@
import { Crypto, load, _, jinja2 } from './lib/cat.js';
let key = 'qfys';
let HOST = 'https://fun.tvoled.net';
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';
async function request(reqUrl, agentSp) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': agentSp || UA,
'Referer': HOST
},
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
let classes = [{"type_id":1,"type_name":"电影"},{"type_id":2,"type_name":"追剧"},{"type_id":3,"type_name":"综艺"},{"type_id":4,"type_name":"动漫"}];
let filterObj = {
"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"灾难片","v":"20"},{"n":"冒险片","v":"21"},{"n":"同性片","v":"22"},{"n":"惊悚片","v":"23"},{"n":"悬疑片","v":"25"},{"n":"经典片","v":"26"},{"n":"犯罪片","v":"27"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"爱情","v":"/class/爱情"},{"n":"恐怖","v":"/class/恐怖"},{"n":"动作","v":"/class/动作"},{"n":"科幻","v":"/class/科幻"},{"n":"剧情","v":"/class/剧情"},{"n":"战争","v":"/class/战争"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动画","v":"/class/动画"},{"n":"奇幻","v":"/class/奇幻"},{"n":"武侠","v":"/class/武侠"},{"n":"冒险","v":"/class/冒险"},{"n":"恐怖","v":"/class/恐怖"},{"n":"悬疑","v":"/class/悬疑"},{"n":"惊悚","v":"/class/惊悚"},{"n":"历史","v":"/class/历史"},{"n":"运动","v":"/class/运动"},{"n":"儿童","v":"/class/儿童"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"意大利","v":"/area/意大利"},{"n":"西班牙","v":"/area/西班牙"},{"n":"加拿大","v":"/area/加拿大"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"泰新马","v":"24"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"剧情","v":"/class/剧情"},{"n":"爱情","v":"/class/爱情"},{"n":"古装","v":"/class/古装"},{"n":"悬疑","v":"/class/悬疑"},{"n":"战争","v":"/class/战争"},{"n":"喜剧","v":"/class/喜剧"},{"n":"家庭","v":"/class/家庭"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动作","v":"/class/动作"},{"n":"奇幻","v":"/class/奇幻"},{"n":"历史","v":"/class/历史"},{"n":"短剧","v":"/class/短剧"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"韩国","v":"/area/韩国"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"美国","v":"/area/美国"},{"n":"泰国","v":"/area/泰国"},{"n":"英国","v":"/area/英国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"选秀","v":"/class/选秀"},{"n":"情感","v":"/class/情感"},{"n":"访谈","v":"/class/访谈"},{"n":"播报","v":"/class/播报"},{"n":"旅游","v":"/class/旅游"},{"n":"音乐","v":"/class/音乐"},{"n":"美食","v":"/class/美食"},{"n":"纪实","v":"/class/纪实"},{"n":"曲艺","v":"/class/曲艺"},{"n":"生活","v":"/class/生活"},{"n":"游戏互动","v":"/class/游戏互动"},{"n":"财经","v":"/class/财经"},{"n":"求职","v":"/class/求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"欧美","v":"/area/欧美"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"/class/情感"},{"n":"科幻","v":"/class/科幻"},{"n":"热血","v":"/class/热血"},{"n":"推理","v":"/class/推理"},{"n":"搞笑","v":"/class/搞笑"},{"n":"冒险","v":"/class/冒险"},{"n":"萝莉","v":"/class/萝莉"},{"n":"校园","v":"/class/校园"},{"n":"动作","v":"/class/动作"},{"n":"机战","v":"/class/机战"},{"n":"运动","v":"/class/运动"},{"n":"战争","v":"/class/战争"},{"n":"少年","v":"/class/少年"},{"n":"少女","v":"/class/少女"},{"n":"社会","v":"/class/社会"},{"n":"原创","v":"/class/原创"},{"n":"亲子","v":"/class/亲子"},{"n":"益智","v":"/class/益智"},{"n":"励志","v":"/class/励志"},{"n":"其他","v":"/class/其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"/area/国产"},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
};
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
const link = HOST + '/index.php/vod/show' + (extend.area || '') + (extend.by || '/by/time') + (extend.class || '') + '/id/' + (extend.cateId || tid) + '/page/' + pg + (extend.year || '') + '.html';//https://fun.tvoled.net/index.php/vod/show/area/%E5%A4%A7%E9%99%86/by/hits/class/%E5%8F%A4%E8%A3%85/id/13/year/2022.html
const html = await request(link);
const $ = load(html);
const items = $('div.module a.module-poster-item');
let videos = _.map(items, (item) => {
const it = $(item)[0];
const k = $(item).find('img:first')[0];
const remarks = $($(item).find('div.module-item-note')[0]).text().trim();
return {
vod_id: it.attribs.href.replace(/.*?\/id\/(.*).html/g, '$1'),
vod_name: it.attribs.title,
vod_pic: k.attribs['data-original'],
vod_remarks: remarks || '',
};
});
const hasMore = $('div#page > a:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 24,
total: 24 * pgCount,
list: videos,
});
}
async function detail(id) {
var html = await request( HOST + '/index.php/vod/detail/id/' + id + '.html');
var $ = load(html);
var vod = {
vod_id: id,
vod_name: $('h1:first').text().trim(),
vod_type: $('.module-info-tag a').text(),
vod_actor: $('.module-info-items a').text(),
vod_pic: $('.video-cover img:first').attr('src'),
vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '',
vod_content: $('.show-desc p').text().trim(),
};
var playMap = {};
var tabs = $('div.module-tab-items-box div.module-tab-item');
var playlists = $('div.module-play-list-content');
_.each(tabs, (tab, i) => {
var from = $(tab).text();
var list = playlists[i];
list = $(list).find('a');
_.each(list, (it) => {
var title = $(it).text();
var playUrl = it.attribs.href.replace(/.*?\/id\/(.*).html/g, '$1');
if (title.length == 0) title = it.children[0].data.trim();
if (!playMap.hasOwnProperty(from)) {
playMap[from] = [];
}
playMap[from].push( title + '$' + playUrl);
});
});
vod.vod_play_from = _.keys(playMap).join('$$$');
var urls = _.values(playMap);
var vod_play_url = _.map(urls, (urlist) => {
return urlist.join('#');
});
vod.vod_play_url = vod_play_url.join('$$$');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
const link = HOST + '/index.php/vod/play/id/' + id + '.html';
const html = await request(link);
const $ = load(html);
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
const playUrl = js.url;
return JSON.stringify({
parse: 0,
url: playUrl,
});
}
async function search(wd, quick, pg) {
if (pg <= 0) pg = 1;
let data = await request(HOST + '/index.php/vod/search/page/' + pg + '/wd/' + wd + '.html');//https://fun.tvoled.net/index.php/vod/search/page/2/wd/%E6%88%91.html
const $ = load(data);
const items = $('div.module-items div.module-item');
let videos = _.map(items, (item) => {
const it = $(item).find('a:first')[0];
const k = $(item).find('img:first')[0];
const remarks = $($(item).find('div.module-item-note')[0]).text().trim();
return {
vod_id: it.attribs.href.replace(/.*?\/id\/(.*).html/g, '$1'),
vod_name: k.attribs.alt,
vod_pic: k.attribs['data-original'],
vod_remarks: remarks || '',
};
});
const hasMore = $('div#page > a:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 24,
total: 24 * pgCount,
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/qiao2_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/rbk_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/rbzj_open.js Normal file

File diff suppressed because one or more lines are too long

167
cat/js/rttks_open.js Normal file

@ -0,0 +1,167 @@
import { Crypto, load, _ } from './lib/cat.js';
let key = 'rttks';
let HOST = 'https://www.rttks.com';
let siteKey = '';
let siteType = 0;
const UA = 'Mozilla/5.0 (Linux; Android 10; HLK-AL00 Build/HONORHLK-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.93 Mobile Safari/537.36';
async function request(reqUrl, agentSp) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': agentSp || UA,
'Referer': HOST
},
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
let classes = [{"type_id":"dianying","type_name":"电影"},{"type_id":"dianshiju","type_name":"追剧"},{"type_id":"zongyi","type_name":"综艺"},{"type_id":"dongman","type_name":"动漫"},{"type_id":"jilupian","type_name":"动漫"}];
let filterObj = {
"dianying":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"dianying"},{"n":"剧情","v":"jqp"},{"n":"喜剧","v":"xjp"},{"n":"动作","v":"dzp"},{"n":"爱情","v":"aqp"},{"n":"科幻","v":"khp"},{"n":"恐怖","v":"kbp"},{"n":"战争","v":"zzp"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/大陆"},{"n":"中国香港","v":"/area/香港"},{"n":"中国台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"澳大利亚","v":"/area/澳大利亚"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"dianshiju":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"dianshiju"},{"n":"国产剧","v":"gcj"},{"n":"港台剧","v":"gtj"},{"n":"日韩剧","v":"rhj"},{"n":"海外剧","v":"hwj"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/大陆"},{"n":"中国香港","v":"/area/香港"},{"n":"中国台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"澳大利亚","v":"/area/澳大利亚"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"dongman":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/大陆"},{"n":"中国香港","v":"/area/香港"},{"n":"中国台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"澳大利亚","v":"/area/澳大利亚"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"zongyi":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/大陆"},{"n":"中国香港","v":"/area/香港"},{"n":"中国台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"澳大利亚","v":"/area/澳大利亚"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"jilupian":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/大陆"},{"n":"中国香港","v":"/area/香港"},{"n":"中国台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"澳大利亚","v":"/area/澳大利亚"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
};
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
const link = HOST + '/rrtop/' + (extend.cateId || tid) + (extend.area || '') + (extend.by || '/by/time') + '/page/' + pg + (extend.year || '') + '.html';//https://www.rttks.com/rrtop/dzp/area/%E7%BE%8E%E5%9B%BD/class//page/2/year/2022.html
const html = await request(link);
const $ = load(html);
const items = $('ul.stui-vodlist li');
let videos = _.map(items, (item) => {
const it = $(item).find('a:first')[0];
const remarks = $($(item).find('span.pic-text text-right')[0]).text().trim();
return {
vod_id: it.attribs.href.replace(/.*?\/rrtv\/(.*).html/g, '$1'),
vod_name: it.attribs.title,
vod_pic: it.attribs['data-original'],
vod_remarks: remarks || '',
};
});
const hasMore = $('ul.stui-page > li > a:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 24,
total: 24 * pgCount,
list: videos,
});
}
async function detail(id) {
const html = await request( HOST + '/rrtv/' + id + '.html');
const $ = load(html);
const vod = {
vod_id: id,
vod_name: $('.col-md-wide-75 h2').text().trim(),
vod_type: $('.stui-content__detail p:nth-child(4)').text(),
vod_actor: $('.stui-content__detail p:nth-child(2)').text().replace('上映:剧情:', ''),
vod_pic: $('.module-item-pic img:first').attr('data-src'),
vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '',
vod_content: $('.detail-content').text().trim(),
};
let playMap = {};
const tabs = $('body div.bottom-line h3.title');
const playlists = $('ul.stui-content__playlist');
_.each(tabs, (tab, i) => {
const from = tab.children[0].data;
let list = playlists[i];
list = $(list).find('a');
_.each(list, (it) => {
const title = it.children[0].data;
const playUrl = it.attribs.href.replace(/.*?\/rrplay\/(.*).html/g, '$1');
if (title.length == 0) title = it.children[0].data.trim();
if (!playMap.hasOwnProperty(from)) {
playMap[from] = [];
}
playMap[from].push( title + '$' + playUrl);
});
});
vod.vod_play_from = _.keys(playMap).join('$$$');
const urls = _.values(playMap);
let vod_play_url = _.map(urls, (urlist) => {
return urlist.join('#');
});
vod.vod_play_url = vod_play_url.join('$$$');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
const link = HOST + '/rrplay/' + id + '.html';
const html = await request(link);
const $ = load(html);
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
const playUrl = unescape(base64Decode(js.url));
return JSON.stringify({
parse: 0,
url: playUrl,
});
}
function base64Encode(text) {
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
}
function base64Decode(text) {
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
}
async function search(wd, quick, pg) {
if (pg <= 0) pg = 1;
let data = await request(HOST + '/rrcz' + wd + '/page/' + pg + '.html');//https://www.rttks.com/rrcz%E6%88%91/page/2.html
const $ = load(data);
const items = $('ul.stui-vodlist__media li');
let videos = _.map(items, (item) => {
const it = $(item).find('a:first')[0];
const remarks = $($(item).find('span.pic-text text-right')[0]).text().trim();
return {
vod_id: it.attribs.href.replace(/.*?\/rrtv\/(.*).html/g, '$1'),
vod_name: it.attribs.title,
vod_pic: it.attribs['data-original'],
vod_remarks: remarks || '',
};
});
const hasMore = $('ul.stui-page > li > a:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 24,
total: 24 * pgCount,
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

208
cat/js/sc1080_open.js Normal file

@ -0,0 +1,208 @@
import { load, _ } from 'assets://js/lib/cat.js';
let key = 'sc1080';
let HOST = 'https://sc1080.top';
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';
async function request(reqUrl, method, data) {
const res = await req(reqUrl, {
method: method || 'get',
headers: {
'User-Agent': UA,
'Referer': HOST,
},
data: data,
postType: method === 'post' ? 'form' : '',
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
let classes = [{'type_id':1,'type_name':'电影'},{'type_id':2,'type_name':'电视剧'},{'type_id':3,'type_name':'综艺'},{'type_id':4,'type_name':'动漫'},{'type_id':5,'type_name':'纪录片'},{'type_id':20,'type_name':'4K片库'},{'type_id':21,'type_name':'短剧片库'}];
let filterObj = {
'1':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'喜剧','v':'喜剧'},{'n':'爱情','v':'爱情'},{'n':'恐怖','v':'恐怖'},{'n':'动作','v':'动作'},{'n':'科幻','v':'科幻'},{'n':'剧情','v':'剧情'},{'n':'战争','v':'战争'},{'n':'警匪','v':'警匪'},{'n':'犯罪','v':'犯罪'},{'n':'动画','v':'动画'},{'n':'奇幻','v':'奇幻'},{'n':'武侠','v':'武侠'},{'n':'冒险','v':'冒险'},{'n':'枪战','v':'枪战'},{'n':'恐怖','v':'恐怖'},{'n':'悬疑','v':'悬疑'},{'n':'惊悚','v':'惊悚'},{'n':'经典','v':'经典'},{'n':'青春','v':'青春'},{'n':'文艺','v':'文艺'},{'n':'其他微电影','v':'其他微电影'},{'n':'古装','v':'古装'},{'n':'历史','v':'历史'},{'n':'运动','v':'运动'},{'n':'农村','v':'农村'},{'n':'儿童','v':'儿童'},{'n':'网络电影','v':'网络电影'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'大陆','v':'大陆'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'美国','v':'美国'},{'n':'法国','v':'法国'},{'n':'英国','v':'英国'},{'n':'日本','v':'日本'},{'n':'韩国','v':'韩国'},{'n':'德国','v':'德国'},{'n':'泰国','v':'泰国'},{'n':'印度','v':'印度'},{'n':'意大利','v':'意大利'},{'n':'西班牙','v':'西班牙'},{'n':'加拿大','v':'加拿大'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'类型','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'1999','v':'1999'},{'n':'1998','v':'1998'},{'n':'1997','v':'1997'},{'n':'1995','v':'1995'},{'n':'1994','v':'1994'},{'n':'1993','v':'1993'},{'n':'1992','v':'1992'},{'n':'1991','v':'1991'},{'n':'1990','v':'1990'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'2':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'古装','v':'古装'},{'n':'战争','v':'战争'},{'n':'青春偶像','v':'青春偶像'},{'n':'喜剧','v':'喜剧'},{'n':'家庭','v':'家庭'},{'n':'犯罪','v':'犯罪'},{'n':'动作','v':'动作'},{'n':'奇幻','v':'奇幻'},{'n':'剧情','v':'剧情'},{'n':'历史','v':'历史'},{'n':'经典','v':'经典'},{'n':'乡村','v':'乡村'},{'n':'情景','v':'情景'},{'n':'商战','v':'商战'},{'n':'网剧','v':'网剧'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'},{'n':'韩国','v':'韩国'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'日本','v':'日本'},{'n':'美国','v':'美国'},{'n':'泰国','v':'泰国'},{'n':'印度','v':'印度'},{'n':'英国','v':'英国'},{'n':'马来西亚','v':'马来西亚'},{'n':'加拿大','v':'加拿大'},{'n':'俄罗斯','v':'俄罗斯'},{'n':'新加坡','v':'新加坡'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'类型','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'1999','v':'1999'},{'n':'1998','v':'1998'},{'n':'1997','v':'1997'},{'n':'1995','v':'1995'},{'n':'1994','v':'1994'},{'n':'1993','v':'1993'},{'n':'1992','v':'1992'},{'n':'1991','v':'1991'},{'n':'1990','v':'1990'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'3':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'选秀','v':'选秀'},{'n':'情感','v':'情感'},{'n':'访谈','v':'访谈'},{'n':'播报','v':'播报'},{'n':'旅游','v':'旅游'},{'n':'音乐','v':'音乐'},{'n':'美食','v':'美食'},{'n':'纪实','v':'纪实'},{'n':'曲艺','v':'曲艺'},{'n':'生活','v':'生活'},{'n':'游戏互动','v':'游戏互动'},{'n':'财经','v':'财经'},{'n':'求职','v':'求职'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'},{'n':'港台','v':'港台'},{'n':'日韩','v':'日韩'},{'n':'欧美','v':'欧美'}]},{'key':'lang','name':'类型','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'1999','v':'1999'},{'n':'1998','v':'1998'},{'n':'1997','v':'1997'},{'n':'1995','v':'1995'},{'n':'1994','v':'1994'},{'n':'1993','v':'1993'},{'n':'1992','v':'1992'},{'n':'1991','v':'1991'},{'n':'1990','v':'1990'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'4':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'情感','v':'情感'},{'n':'科幻','v':'科幻'},{'n':'热血','v':'热血'},{'n':'推理','v':'推理'},{'n':'搞笑','v':'搞笑'},{'n':'冒险','v':'冒险'},{'n':'萝莉','v':'萝莉'},{'n':'校园','v':'校园'},{'n':'动作','v':'动作'},{'n':'机战','v':'机战'},{'n':'运动','v':'运动'},{'n':'战争','v':'战争'},{'n':'少年','v':'少年'},{'n':'少女','v':'少女'},{'n':'社会','v':'社会'},{'n':'原创','v':'原创'},{'n':'亲子','v':'亲子'},{'n':'益智','v':'益智'},{'n':'励志','v':'励志'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'国产','v':'国产'},{'n':'日本','v':'日本'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'类型','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'1999','v':'1999'},{'n':'1998','v':'1998'},{'n':'1997','v':'1997'},{'n':'1995','v':'1995'},{'n':'1994','v':'1994'},{'n':'1993','v':'1993'},{'n':'1992','v':'1992'},{'n':'1991','v':'1991'},{'n':'1990','v':'1990'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'5':[{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'20':[{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'21':[{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
};
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
const area = getFilterUrlPart(extend, 'area');
const clazz = getFilterUrlPart(extend, 'class');
const by = getFilterUrlPart(extend, 'by');
const lang = getFilterUrlPart(extend, 'lang');
const year = getFilterUrlPart(extend, 'year');
let page = '';
if (pg > 1) {
page = '/page/' + pg;
}
const link = HOST + '/index.php/vod/show' + area + by + clazz + '/id/' + tid + lang + page + year + '.html';
const html = await request(link);
const $ = load(html);
const items = $('.module .module-item');
let videos = _.map(items, (item) => {
const $item = $(item);
const it = $item.find('a:first')[0];
const img = $item.find('img:first')[0];
const remarks = $item.find('.module-item-text').text().trim();
return {
vod_id: it.attribs.href.replace(/.*?\/detail\/id\/(.*).html/g, '$1'),
vod_name: it.attribs.title,
vod_pic: img.attribs['data-src'],
vod_remarks: remarks || '',
};
});
const hasMore = $('div#page > a.page-next').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
const limit = 24;
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos,
});
}
function getFilterUrlPart(extend, part) {
let result = '';
if (extend[part]) {
result = '/' + part + '/' + extend[part];
}
return result;
}
async function detail(id) {
const html = await request(HOST + '/index.php/vod/detail/id/' + id + '.html');
const $ = load(html);
const vod = {
vod_id: id,
vod_name: $('.page-title').text(),
vod_area: $('a.tag-link:last').text(),
vod_year: $('a.tag-link:first').text(),
vod_director: $('.video-info-main .video-info-items:contains(导演:)').text().substring(3).replace(/(^\/|\/$)/g, ''),
vod_actor: $('.video-info-main .video-info-items:contains(主演:)').text().substring(3).replace(/(^\/|\/$)/g, ''),
vod_pic: $('.video-cover img:first').attr('data-src'),
vod_remarks : $('.stui-content__thumb span.pic-text').text(),
vod_content: $('.video-info-main .video-info-items:contains(剧情:)').text().substring(3),
};
const playMap = {};
const tabs = $('.module-player-tab .tab-item');
const playlists = $('.module-blocklist');
_.each(tabs, (tab, i) => {
const from = $(tab).find('span:first').text();
let list = playlists[i];
list = $(list).find('a');
_.each(list, (it) => {
const title = it.children[0].children[0].data;
const playUrl = it.attribs.href;
if (!playMap.hasOwnProperty(from)) {
playMap[from] = [];
}
playMap[from].push( title + '$' + playUrl);
});
});
vod.vod_play_from = _.keys(playMap).join('$$$');
const urls = _.values(playMap);
const vod_play_url = _.map(urls, (urlist) => {
return urlist.join('#');
});
vod.vod_play_url = vod_play_url.join('$$$');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
const link = HOST + id;
const html = await request(link);
let $ = load(html);
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
const parseHtml = await request('https://jx.sc1080.top/?url=' + js.url);
const htmlData = parseHtml.match(/var config = {([\w\W]*)}([\w\W]*)player/)[1];
const json = JSON.parse('{' + htmlData.trim().replace(/,$/, '') + '}');
const config = {
url: json.url,
key: json.key,
time: json.time,
};
const parseResp = await request('https://jx.sc1080.top/api_config.php', 'post', config);
const result = JSON.parse(parseResp);
return JSON.stringify({
parse: 0,
url: result.url,
header: {
'User-Agent': UA,
},
});
}
async function search(wd, quick, pg) {
if (pg <= 0) pg = 1;
const keyword = encodeURIComponent(wd);
let path = 'search';
if (pg == 1) {
path += '.html?wd=' + keyword;
} else {
path += '/page/' + pg + '/wd/' + keyword + '.html';
}
const html = await request(HOST + '/index.php/vod/' + path);
const $ = load(html);
const items = $('.module .module-search-item');
let videos = _.map(items, (item) => {
const $item = $(item);
const it = $item.find('.video-info a:first')[0];
const img = $item.find('.video-cover img:first')[0];
const remarks = $item.find('.video-info-header .video-serial').text().trim();
return {
vod_id: it.attribs.href.replace(/.*?\/detail\/id\/(.*).html/g, '$1'),
vod_name: it.attribs.title,
vod_pic: img.attribs['data-src'],
vod_remarks: remarks || '',
};
});
const hasMore = $('div#page > a.page-next').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
const limit = 24;
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

135
cat/js/sharenice_open.js Normal file

@ -0,0 +1,135 @@
// 搜索滑块验证
import { load, _ } from './lib/cat.js';
let key = '短视频';
let HOST = 'http://www.sharenice.net';
let siteKey = '';
let siteType = 0;
let PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36';
async function request(reqUrl, agentSp) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': agentSp || PC_UA,
},
});
return res.content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
function clsjoin(cls) {
_.each(cls, (s) => {
let typeId = s.attribs['href'];
typeId = typeId.substring(typeId.lastIndexOf('t/') + 2);
classes.push({
type_id: typeId,
type_name: s.children[0].data,
});
});
}
let classes = [];
async function home(filter) {
let filterObj = {};
let html = await request(HOST);
let $ = load(html);
let series = $('div.nav > ul > li > a[href*=net/]');
let tag = $('div.hot-tags-list > a[href*=net]');
clsjoin(series);
clsjoin(tag);
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {
let link = HOST + '/t-576O5aWz';
let html = await request(link);
let $ = load(html);
let items = $('div.item-box ul li');
let videos = _.map(items, (item) => {
let a = $(item).find('a:first')[0];
let img = $(item).find('img:first')[0];
return {
vod_id: a.attribs.href,
vod_name: a.attribs.title,
vod_pic: img.attribs['data-original'],
vod_remarks: '',
};
});
return JSON.stringify({
list: videos,
});
}
async function category(tid, pg, filter, extend) {
if (pg <= 0 || typeof(pg) == 'undefined') pg = 1;
let link = HOST + '/' + tid + '?page=' + pg;
let html = await request(link);
let $ = load(html);
let items = $('div.item-box ul li');
let videos = _.map(items, (item) => {
let a = $(item).find('a:first')[0];
let img = $(item).find('img:first')[0];
return {
vod_id: a.attribs.href,
vod_name: a.attribs.title,
vod_pic: img.attribs['data-original'],
vod_remarks: '',
};
});
let hasMore = $('ul.pagination > li > a:contains(»)').length > 0;
let pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 16,
total: 16 * pgCount,
list: videos,
});
}
async function detail(id) {
let vod = {
vod_id: id,
vod_remarks: '',
};
let playlist = ['观看视频' + '$' + id];
vod.vod_play_from = '道长在线';
vod.vod_play_url = playlist.join('#');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
let html = await request(id);
let $ = load(html);
let playUrl = $('div.video-play-box').find('video:first')[0].attribs.src + '#.mp4';
return JSON.stringify({
parse: 0,
url: playUrl,
});
}
async function search(wd, quick, pg) {
return '{}';
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

File diff suppressed because one or more lines are too long

1
cat/js/sssp_open.js Normal file

File diff suppressed because one or more lines are too long

277
cat/js/star_open.js Normal file

@ -0,0 +1,277 @@
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
let key = 'star';
let host = 'https://www.histar.tv';
let apiHost = 'https://aws.ulivetv.net';
let types = {};
// let ver = '';
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';
async function request(reqUrl, method, data) {
const headers = {
'User-Agent': UA,
};
if (method == 'post') {
headers['Content-Type'] = 'application/json';
} else {
headers['Cookie'] = 'userIP=127.0.0.1; aws-waf-token=';
headers['Referer'] = host;
}
const res = await req(reqUrl, {
method: method || 'get',
headers: headers,
data: data,
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
types = {
'movie': '电影',
'drama': '电视剧',
'animation': '动漫',
'variety': '综艺',
'documentary': '纪录片',
};
// ver = await getVer();
}
// async function getVer() {
// const html = await request(host);
// const $ = load(html);
// const srcAttr = $('script[src*=\'buildManifest.js\']').attr('src');
// return srcAttr.split('/')[3];
// }
async function home(filter) {
const typeList = _.keys(types);
const classes = _.map(typeList, (item) => {
return { type_id: item, type_name: types[item] };
});
const filterConfig = {};
const jsonData = JSON.stringify(typeList);
for (const typeId of typeList) {
const html = await request(host + '/' + typeId + '/all/all/all');
const $ = load(html);
const json = $('#__NEXT_DATA__')[0].children[0].data;
const obj = JSON.parse(json).props.pageProps.filterCondition;
const label = convertTypeData(obj, 'label', '类型');
const country = convertTypeData(obj, 'country', '地区');
const time = convertTypeData(obj, 'time', '年份');
const filterArray = [label, country, time];
filterConfig[typeId] = filterArray;
};
return JSON.stringify({
class: classes,
filters: filterConfig,
});
}
function convertTypeData(typeData, key, name) {
if (!typeData || !typeData[key] || typeData[key].length <= 2) {
return null;
}
let valueList = typeData[key];
if (key == 'time') {
valueList = valueList.sort((a, b) => { return b - a;});
valueList.pop();
}
const values = _.map(valueList, (item) => {
let name;
let value;
if (item instanceof Array) {
name = item[0];
value = item[0];
} else {
name = item.toString();
value = item.toString();
}
return {
n: name,
v: value,
};
});
values.unshift({
n: '全部',
v: '',
});
const typeClass = {
key: key,
name: name,
init: '',
value: values,
};
return typeClass;
}
async function homeVod() {
const html = await request(host);
const $ = load(html);
const json = $('#__NEXT_DATA__')[0].children[0].data;
const obj = JSON.parse(json).props.pageProps.cards;
const videos = [];
_.each(obj, (cards) => {
if (cards.name == '电视直播') return;
_.each(cards.cards, (card) => {
const v = {
vod_id: card.id,
vod_name: card.name,
vod_pic: card.img,
vod_remarks: card.countStr,
};
videos.push(v);
});
});
return JSON.stringify({
list: videos,
});
}
async function category(tid, pg, filter, extend) {
const limit = 16;
const param = {
chName: types[tid],
page: pg,
pageSize: limit,
label: extend.label,
country: extend.country,
};
if (extend.time) {
const year = parseInt(extend.time);
param.startTime = year;
param.endTime = year;
}
const json = await request(apiHost + '/v3/web/api/filter', 'post', JSON.stringify(param));
const data = JSON.parse(json).data;
const videos = _.map(data.list, (card) => {
return {
vod_id: card.id,
vod_name: card.name,
vod_pic: card.img,
vod_remarks: card.countStr,
};
});
const page = parseInt(pg);
const count = parseInt(data.total / limit);
return JSON.stringify({
page: page,
pagecount: count,
limit: limit,
total: data.total,
list: videos,
});
}
async function detail(id) {
const html = await request(host + '/vod/detail/' + id);
const $ = load(html);
const json = $('#__NEXT_DATA__')[0].children[0].data;
const obj = JSON.parse(json).props.pageProps;
const vObj = obj.pageData;
const vodAtom = {
vod_id: id,
vod_name: vObj.name,
vod_type: vObj.chname,
vod_pic: vObj.picurl,
vod_area: vObj.country,
vod_lang: vObj.language,
vod_remarks: vObj.countStr,
vod_actor: vObj.actor,
vod_director: vObj.director,
vod_content: vObj.desc,
}
const playInfo = obj.videosGroup;
const playVod = {};
_.each(playInfo, (info) => {
const sourceName = info.name;
let playList = '';
const videoInfo = info.videos;
const vodItems = _.map(videoInfo, (epObj) => {
const epName = epObj.epInfo;
const playUrl = epObj.purl
return epName + '$' + playUrl;
});
if (_.isEmpty(vodItems)) return;
playList = vodItems.join('#');
playVod[sourceName] = playList;
});
vodAtom.vod_play_from = _.keys(playVod).join('$$$');
vodAtom.vod_play_url = _.values(playVod).join('$$$');
return JSON.stringify({
list: [vodAtom],
});
}
async function play(flag, id, flags) {
let playUrl = id;
return JSON.stringify({
parse: 0,
url: playUrl,
});
}
async function search(wd, quick, pg) {
// const limit = 10;
// const json = await request(host + '/_next/data/' + ver + '/search.json?word=' + encodeURIComponent(wd) + '&page=' + pg);
// const data = JSON.parse(json).pageProps;
// const videos = _.map(data.initList, (card) => {
// return {
// vod_id: card.id,
// vod_name: card.name,
// vod_pic: card.picurl,
// vod_remarks: card.countStr,
// };
// });
// const page = parseInt(pg);
// const count = parseInt(data.total / limit);
// return JSON.stringify({
// page: page,
// pagecount: count,
// limit: limit,
// total: data.total,
// list: videos,
// });
const limit = 10;
const param = {
word: wd,
page: pg,
pageSize: limit,
};
const json = await request(apiHost + '/v3/web/api/search', 'post', JSON.stringify(param));
const data = JSON.parse(json).data;
const videos = _.map(data.list, (card) => {
return {
vod_id: card.id,
vod_name: card.name,
vod_pic: card.picurl,
vod_remarks: card.countStr,
};
});
const page = parseInt(pg);
const count = parseInt(data.total / limit);
return JSON.stringify({
page: page,
pagecount: count,
limit: limit,
total: data.total,
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

182
cat/js/subaibai_open.js Normal file

File diff suppressed because one or more lines are too long

58
cat/js/testVideo.js Normal file

@ -0,0 +1,58 @@
import { __jsEvalReturn } from './kunyu77_open.js';
var spider = __jsEvalReturn();
function jsonParse(obj) {
if (typeof obj === 'string') {
return JSON.parse(obj);
}
return obj;
}
async function test() {
var spType = null;
var spVid = null;
spType = '2';
// spVid = '95873';
await spider.init({ skey: 'siteKey', ext: '' });
var classes = jsonParse(await spider.home(true));
console.log(classes);
var homeVod = jsonParse(await spider.homeVod());
console.log(homeVod);
if (classes.class && classes.class.length > 0) {
var page = jsonParse(await spider.category(spType || classes.class[0].type_id, 0, undefined, {}));
console.log(page);
if (page.list && page.list.length > 0) {
for (const k in page.list) {
if (k >= 5) break;
var detail = jsonParse(await spider.detail(spVid || page.list[k].vod_id));
console.log(detail);
if (detail.list && detail.list.length > 0) {
var pFlag = detail.list[0].vod_play_from.split('$$$');
var pUrls = detail.list[0].vod_play_url.split('$$$');
if (pFlag.length > 0 && pUrls.length > 0) {
for (const i in pFlag) {
var flag = pFlag[i];
var urls = pUrls[i].split('#');
if (urls.length > 0) {
var url = urls[0].split('$')[1];
console.log(flag, url);
var playUrl = await spider.play(flag, url, []);
console.log(playUrl);
}
}
}
}
if (spVid) break;
}
}
}
var search = jsonParse(await spider.search('奥特曼'));
console.log(search);
search = jsonParse(await spider.search('喜欢'));
console.log(search);
}
export { test };

1
cat/js/tiantian_open.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
cat/js/tutu_open.js Normal file

File diff suppressed because one or more lines are too long

135
cat/js/tuxiaobei_open.js Normal file

@ -0,0 +1,135 @@
import { load, _ } from './lib/cat.js';
let key = '🐰兔小贝';
let HOST = 'https://www.tuxiaobei.com';
let siteKey = '';
let siteType = 0;
const IOS_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';
async function request(reqUrl, agentSp) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': agentSp || IOS_UA,
},
});
return res.content
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype
}
async function home(filter) {
const classes = [{ type_id: '', type_name: '🐰全部' }, { type_id: 2, type_name: '🐰儿歌' }, { type_id: 3, type_name: '🐰故事' }, { type_id: 27, type_name: '🐰公益' }, { type_id: 9, type_name: '🐰十万个为什么' }, { type_id: 28, type_name: '🐰安全教育' }, { type_id: 29, type_name: '🐰动物奇缘' }, { type_id: 7, type_name: '🐰弟子规' }, { type_id: 5, type_name: '🐰古诗' }, { type_id: 6, type_name: '🐰三字经' }, { type_id: 8, type_name: '🐰千字文' }, { type_id: 11, type_name: '🐰数学' }, { type_id: 25, type_name: '🐰英语' }, { type_id: 24, type_name: '🐰折纸' }];
const filterObj = {};
return JSON.stringify({
class: _.map(classes, (cls) => {
cls.land = 1;
cls.ratio = 1.78;
return cls;
}),
filters: filterObj,
})
}
async function homeVod() {
const link = await request(HOST + '/list/mip-data?typeId=9&page=1&callback=');
const html = link.match(/\((.*?)\);/)[1];
const data = JSON.parse(html).data;
let videos = _.map(data.items, (it) => {
return {
vod_id: it.video_id,
vod_name: it.name,
vod_pic: it.image,
vod_remarks: it.root_category_name + ' | ' + it.duration_string || '',
}
});
return JSON.stringify({
list: videos,
})
}
async function category(tid, pg, filter, extend) {
if (pg <= 0 || typeof pg == 'undefined') pg = 1;
const link = await request(HOST + '/list/mip-data?typeId=' + tid + '&page=' + pg + '&callback=');
const html = link.match(/\((.*?)\);/)[1];
const data = JSON.parse(html).data;
let videos = _.map(data.items, (it) => {
return {
vod_id: it.video_id,
vod_name: it.name,
vod_pic: it.image,
vod_remarks: it.root_category_name + ' | ' + it.duration_string || '',
}
});
const pgCount = pg * 30 > data.totalCount ? parseInt(pg) : parseInt(pg) + 1;
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 30,
total: data.totalCount,
list: videos,
})
}
async function detail(id) {
const vod = {
vod_id: id,
vod_remarks: '',
};
const playlist = ['点击播放' + '$' + HOST + '/play/' + id];
vod.vod_play_from = "道长在线";
vod.vod_play_url = playlist.join('#');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
const html = await request(id);
const $ = load(html);
const pvideo = $("body mip-search-video[video-src*=http]");
const purl = pvideo[0].attribs['video-src'];
// console.debug('兔小贝 purl =====>' + purl); // js_debug.log
return JSON.stringify({
parse: 0,
url: purl,
});
}
async function search(wd, quick) {
const link = HOST + "/search/" + wd;
const html = await request(link);
const $ = load(html);
const list = $("div.list-con > div.items");
let videos = _.map(list, (it) => {
const a = $(it).find("a:first")[0];
const img = $(it).find("mip-img:first")[0];
const tt = $(it).find("p:first")[0];
const remarks = $(it).find("p")[1];
return {
vod_id: a.attribs.href.replace(/.*?\/play\/(.*)/g, '$1'),
vod_name: tt.children[0].data,
vod_pic: img.attribs["src"],
vod_remarks: remarks.children[0].data || "",
};
});
return JSON.stringify({
list: videos,
land: 1,
ratio: 1.78,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
}
}

118
cat/js/ubestkid_open.js Normal file

@ -0,0 +1,118 @@
// 无搜索功能
import { _ } from './lib/cat.js';
let key = '🐯贝乐虎';
let HOST = 'https://vd.ubestkid.com';
let siteKey = '';
let siteType = 0;
const MOBILE_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';
async function request(reqUrl, referer, mth, data, hd) {
const headers = {
"User-Agent": MOBILE_UA,
};
if (referer) headers.referer = encodeURIComponent(referer);
let res = await req(reqUrl, {
method: mth || "get",
headers: headers,
data: data,
postType: mth === "post" ? "json" : "",
});
return res.content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype
}
async function home(filter) {
const classes = [{ type_id: 65, type_name: '🐯最新上架' }, { type_id: 113, type_name: '🐯人气热播' }, { type_id: 56, type_name: '🐯经典童谣' }, { type_id: 137, type_name: '🐯开心贝乐虎' }, { type_id: 53, type_name: '🐯律动儿歌' }, { type_id: 59, type_name: '🐯经典儿歌' }, { type_id: 101, type_name: '🐯超级汽车1' }, { type_id: 119, type_name: '🐯超级汽车第二季' }, { type_id: 136, type_name: '🐯超级汽车第三季' }, { type_id: 95, type_name: '🐯三字经' }, { type_id: 133, type_name: '🐯幼儿手势舞' }, { type_id: 117, type_name: '🐯哄睡儿歌' }, { type_id: 70, type_name: '🐯英文儿歌' }, { type_id: 116, type_name: '🐯节日与节气' }, { type_id: 97, type_name: '🐯恐龙世界' }, { type_id: 55, type_name: '🐯动画片儿歌' }, { type_id: 57, type_name: '🐯流行歌曲' }, { type_id: 118, type_name: '🐯贝乐虎入园记' }, { type_id: 106, type_name: '🐯贝乐虎大百科' }, { type_id: 62, type_name: '🐯经典古诗' }, { type_id: 63, type_name: '🐯经典故事' }, { type_id: 128, type_name: '🐯萌虎学功夫' }, { type_id: 100, type_name: '🐯绘本故事' }, { type_id: 121, type_name: '🐯开心贝乐虎英文版' }, { type_id: 96, type_name: '🐯嗨贝乐虎情商动画' }, { type_id: 108, type_name: '🐯动物音乐派对' }, { type_id: 126, type_name: '🐯动物音乐派对英文版' }, { type_id: 105, type_name: '🐯奇妙的身体' }, { type_id: 124, type_name: '🐯奇妙的身体英文版' }, { type_id: 64, type_name: '🐯认知卡片' }, { type_id: 109, type_name: '🐯趣味简笔画' }, { type_id: 78, type_name: '🐯数字儿歌' }, { type_id: 120, type_name: '🐯识字体验版' }, { type_id: 127, type_name: '🐯启蒙系列体验版' }];
const filterObj = {};
return JSON.stringify({
class: _.map(classes, (cls) => {
cls.land = 1;
cls.ratio = 1.78;
return cls;
}),
filters: filterObj,
})
}
async function homeVod() {
const link = HOST + "/api/v1/bv/video";
const pdata = { age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: 56, "p": 1 };
const jo = JSON.parse(await request(link, "", "post", pdata)).result;
const videos = [];
_.each(jo.items, (it) => {
videos.push({
vod_id: it.url,
vod_name: it.title,
vod_pic: it.image,
vod_remarks: '👀' + it.viewcount || '',
})
});
return JSON.stringify({
list: videos,
})
}
async function category(tid, pg, filter, extend) {
if (pg <= 0 || typeof pg == 'undefined') pg = 1;
const link = HOST + "/api/v1/bv/video";
const pdata = { age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: tid, "p": pg };
const jo = JSON.parse(await request(link, "", "post", pdata)).result;
const videos = [];
_.each(jo.items, (it) => {
videos.push({
vod_id: it.url,
vod_name: it.title,
vod_pic: it.image,
vod_remarks: '👀' + it.viewcount || '',
})
});
const pgCount = pg * 60 > jo.total ? parseInt(pg) : parseInt(pg) + 1;
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 60,
total: jo.total,
list: videos,
})
}
async function detail(id) {
const vod = {
vod_id: id,
vod_remarks: '',
};
const playlist = ['点击播放' + '$' + id];
vod.vod_play_from = "道长在线";
vod.vod_play_url = playlist.join('#');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
// console.debug('贝乐虎 id =====>' + id); // js_debug.log
return JSON.stringify({
parse: 0,
url: id,
});
}
async function search(wd, quick) {
return '{}'
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
}
}

1
cat/js/ufc_open.js Normal file

File diff suppressed because one or more lines are too long

114
cat/js/upyun_open.js Normal file

@ -0,0 +1,114 @@
import { Crypto, _ } from 'assets://js/lib/cat.js';
import { log } from './lib/utils.js';
import { initAli, detailContent, playContent } from './lib/ali.js';
let siteKey = 'upyun';
let siteType = 0;
let siteUrl = 'https://zyb.upyunso.com';
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/
async function request(reqUrl) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'Referer': siteUrl,
},
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
try {
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
await initAli(cfg);
} catch (e) {
await log('init:' + e.message + ' line:' + e.lineNumber);
}
}
async function home(filter) {
return '{}';
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
return '{}';
}
async function detail(id) {
try {
return await detailContent(id);
} catch (e) {
await log('detail:' + e.message + ' line:' + e.lineNumber);
}
}
async function play(flag, id, flags) {
try {
return await playContent(flag, id, flags);
} catch (e) {
await log('play:' + e.message + ' line:' + e.lineNumber);
}
}
async function search(wd, quick, pg) {
if (pg <= 0) pg = 1;
const limit = 25;
const resp = await request(siteUrl + "/v15/search?keyword=" + encodeURIComponent(wd) + '&page=' + pg + '&s_type=2');
const data = decrypt(resp);
const items = JSON.parse(data).result.items;
const videos = [];
for(const item of items) {
const url = decrypt(item.page_url);
const matches = url.match(patternAli);
if (_.isEmpty(matches)) continue;
const title = _.isEmpty(item.content) ? item.title : item.content[0].title;
videos.push({
vod_id: url,
vod_name: title.replaceAll(/<\/?[^>]+>/g, ""),
vod_pic: "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000",
vod_remarks: item.insert_time,
});
}
const hasMore = !_.isEmpty(items);
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos,
});
}
function decrypt(text) {
const data = {
ciphertext: Crypto.enc.Hex.parse(text.toUpperCase()),
};
const key = Crypto.enc.Utf8.parse('qq1920520460qqzz');
const iv = Crypto.enc.Utf8.parse('qq1920520460qqzz');
const mode = Crypto.mode.CBC;
const padding = Crypto.pad.Pkcs7;
const decrypted = Crypto.AES.decrypt(data, key, {
'iv': iv,
'mode': mode,
'padding': padding
});
const decryptedData = Crypto.enc.Utf8.stringify(decrypted);
return decryptedData;
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/voflix_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/vsdj_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/wf_open.js Normal file

File diff suppressed because one or more lines are too long

171
cat/js/wobg_open.js Normal file

@ -0,0 +1,171 @@
import {load, _, Uri} from 'assets://js/lib/cat.js';
import {log} from './lib/utils.js';
import {initAli, detailContent, playContent} from './lib/ali.js';
let siteKey = 'wobg';
let siteType = 0;
let siteUrl = 'https://wobge.run.goorm.io';
let 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";
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/
async function init(cfg) {
try {
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
await initAli(cfg.ext);
} catch (e) {
console.debug('init:' + e.message + ' line:' + e.lineNumber);
}
}
async function request(reqUrl, agentSp) {
let header = {
'user-agent': agentSp || 'okhttp/3.12.0',
};
let uri = new Uri(reqUrl);
let res = await req(uri.toString(), {
headers: header,
timeout: 10000
});
let content = res.content;
return content;
}
function getHeader() {
let header = {};
header['User-Agent'] = UA;
return header;
}
async function getString(url) {
let res = await req(url, {
headers: getHeader()
});
return res.content;
}
async function home(filter) {
let classes = [{'type_id':'1','type_name':'自营电影'},{'type_id':'2','type_name':'自营剧集'},{'type_id':'3','type_name':'动漫'},{'type_id':'4','type_name':'综艺'},{'type_id':'5','type_name':'音乐'},{'type_id':'44','type_name':'自营短剧'}];
let filterObj = {
'1':[{'key':'cateId','name':'类型','init':'1','value':[{'n':'全部','v':'1'},{'n':'大陆自营电影','v':'6'},{'n':'香港自营电影','v':'7'},{'n':'台湾自营电影','v':'8'},{'n':'美国自营电影','v':'9'},{'n':'法国自营电影','v':'10'},{'n':'英国自营电影','v':'11'},{'n':'日本自营电影','v':'12'},{'n':'韩国自营电影','v':'20'},{'n':'德国自营电影','v':'21'}]},{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'喜剧','v':'喜剧'},{'n':'爱情','v':'爱情'},{'n':'恐怖','v':'恐怖'},{'n':'动作','v':'动作'},{'n':'科幻','v':'科幻'},{'n':'剧情','v':'剧情'},{'n':'战争','v':'战争'},{'n':'警匪','v':'警匪'},{'n':'犯罪','v':'犯罪'},{'n':'动画','v':'动画'},{'n':'奇幻','v':'奇幻'},{'n':'武侠','v':'武侠'},{'n':'冒险','v':'冒险'},{'n':'枪战','v':'枪战'},{'n':'恐怖','v':'恐怖'},{'n':'悬疑','v':'悬疑'},{'n':'惊悚','v':'惊悚'},{'n':'经典','v':'经典'},{'n':'青春','v':'青春'},{'n':'文艺','v':'文艺'},{'n':'微电影','v':'微电影'},{'n':'古装','v':'古装'},{'n':'历史','v':'历史'},{'n':'运动','v':'运动'},{'n':'农村','v':'农村'},{'n':'儿童','v':'儿童'},{'n':'网络电影','v':'网络电影'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'大陆','v':'大陆'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'美国','v':'美国'},{'n':'法国','v':'法国'},{'n':'英国','v':'英国'},{'n':'日本','v':'日本'},{'n':'韩国','v':'韩国'},{'n':'德国','v':'德国'},{'n':'泰国','v':'泰国'},{'n':'印度','v':'印度'},{'n':'意大利','v':'意大利'},{'n':'西班牙','v':'西班牙'},{'n':'加拿大','v':'加拿大'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'2':[{'key':'cateId','name':'类型','init':'2','value':[{'n':'全部','v':'2'},{'n':'大陆自营剧集','v':'13'},{'n':'香港自营剧集','v':'14'},{'n':'台湾自营剧集','v':'15'},{'n':'美国自营剧集','v':'16'},{'n':'法国自营剧集','v':'22'},{'n':'英国自营剧集','v':'23'},{'n':'日本自营剧集','v':'24'},{'n':'韩国自营剧集','v':'25'},{'n':'德国自营剧集','v':'26'}]},{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'古装','v':'古装'},{'n':'战争','v':'战争'},{'n':'青春偶像','v':'青春偶像'},{'n':'喜剧','v':'喜剧'},{'n':'家庭','v':'家庭'},{'n':'犯罪','v':'犯罪'},{'n':'动作','v':'动作'},{'n':'奇幻','v':'奇幻'},{'n':'剧情','v':'剧情'},{'n':'历史','v':'历史'},{'n':'经典','v':'经典'},{'n':'乡村','v':'乡村'},{'n':'情景','v':'情景'},{'n':'商战','v':'商战'},{'n':'网剧','v':'网剧'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'},{'n':'韩国','v':'韩国'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'日本','v':'日本'},{'n':'美国','v':'美国'},{'n':'泰国','v':'泰国'},{'n':'英国','v':'英国'},{'n':'新加坡','v':'新加坡'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'3':[{'key':'cateId','name':'类型','init':'3','value':[{'n':'全部','v':'3'},{'n':'大陆动漫','v':'27'},{'n':'香港动漫','v':'28'},{'n':'台湾动漫','v':'29'},{'n':'美国动漫','v':'30'},{'n':'法国动漫','v':'31'},{'n':'英国动漫','v':'32'},{'n':'日本动漫','v':'33'},{'n':'韩国动漫','v':'34'},{'n':'德国动漫','v':'35'}]},{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'选秀','v':'选秀'},{'n':'情感','v':'情感'},{'n':'访谈','v':'访谈'},{'n':'播报','v':'播报'},{'n':'旅游','v':'旅游'},{'n':'音乐','v':'音乐'},{'n':'美食','v':'美食'},{'n':'纪实','v':'纪实'},{'n':'曲艺','v':'曲艺'},{'n':'生活','v':'生活'},{'n':'游戏互动','v':'游戏互动'},{'n':'财经','v':'财经'},{'n':'求职','v':'求职'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'},{'n':'港台','v':'港台'},{'n':'日韩','v':'日韩'},{'n':'欧美','v':'欧美'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'4':[{'key':'cateId','name':'类型','init':'4','value':[{'n':'全部','v':'4'},{'n':'大陆综艺','v':'36'},{'n':'香港综艺','v':'37'},{'n':'台湾综艺','v':'38'},{'n':'美国综艺','v':'39'},{'n':'法国综艺','v':'40'},{'n':'英国综艺','v':'41'},{'n':'日本综艺','v':'42'},{'n':'韩国综艺','v':'43'}]},{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'情感','v':'情感'},{'n':'科幻','v':'科幻'},{'n':'热血','v':'热血'},{'n':'推理','v':'推理'},{'n':'搞笑','v':'搞笑'},{'n':'冒险','v':'冒险'},{'n':'萝莉','v':'萝莉'},{'n':'校园','v':'校园'},{'n':'动作','v':'动作'},{'n':'机战','v':'机战'},{'n':'运动','v':'运动'},{'n':'战争','v':'战争'},{'n':'少年','v':'少年'},{'n':'少女','v':'少女'},{'n':'社会','v':'社会'},{'n':'原创','v':'原创'},{'n':'亲子','v':'亲子'},{'n':'益智','v':'益智'},{'n':'励志','v':'励志'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'国产','v':'国产'},{'n':'日本','v':'日本'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'5':[{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'44':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'情感','v':'情感'},{'n':'科幻','v':'科幻'},{'n':'热血','v':'热血'},{'n':'推理','v':'推理'},{'n':'搞笑','v':'搞笑'},{'n':'冒险','v':'冒险'},{'n':'萝莉','v':'萝莉'},{'n':'校园','v':'校园'},{'n':'动作','v':'动作'},{'n':'机战','v':'机战'},{'n':'运动','v':'运动'},{'n':'战争','v':'战争'},{'n':'少年','v':'少年'},{'n':'少女','v':'少女'},{'n':'社会','v':'社会'},{'n':'原创','v':'原创'},{'n':'亲子','v':'亲子'},{'n':'益智','v':'益智'},{'n':'励志','v':'励志'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
};
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {
return '{}';
}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
const clazz = getFilterUrlPart(extend, 'class');
const area = getFilterUrlPart(extend, 'area');
const by = getFilterUrlPart(extend, 'by');
const lang = getFilterUrlPart(extend, 'lang');
const letter = getFilterUrlPart(extend, 'letter');
const year = getFilterUrlPart(extend, 'year');
let reqUrl = siteUrl + '/index.php/vod/show' + area + by + clazz + '/id/' + (extend.cateId || tid) + lang + '/page/' + pg + letter + year + '.html';
let con = await request(reqUrl, UA);
const $ = load(con);
let items = $('.module:eq(0) > .module-list > .module-items > .module-item');
let videos = [];
for(var item of items) {
let oneA = $(item).find('.module-item-cover .module-item-pic a').first();
let href = oneA.attr('href');
let name = oneA.attr('title');
let oneImg = $(item).find('.module-item-cover .module-item-pic img').first();
let pic = oneImg.attr('data-src');
let remark = $(item).find('.module-item-text').first().text();
videos.push({
vod_id: href,
vod_name: name,
vod_pic: pic,
vod_remarks: remark,
});
}
const hasMore = $('#page > a:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 72,
total: 72 * pgCount,
list: videos,
});
}
function getFilterUrlPart(extend, part) {
let result = '';
if (extend[part]) {
result = '/' + part + '/' + extend[part];
}
return result;
}
async function detail(id) {
try {
await log('detail:id:' + id);
let preMatches = id.match(patternAli);
if (!_.isEmpty(preMatches)) return await detailContent(preMatches[1]);
let url = siteUrl + id;
let aliUrl = await getString(url);
let matches = aliUrl.match(patternAli);
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
return '';
} catch (e) {
console.debug( 'detail:' + e.message + ' line:' + e.lineNumber);
}
}
async function play(flag, id, flags) {
try {
return await playContent(flag, id, flags);
} catch (e) {
console.debug( 'play:' + e.message + ' line:' + e.lineNumber);
}
}
async function search(wd, quick) {
await log('search' + wd);
let searchUrl = siteUrl + '/index.php/vod/search.html?wd=' + wd;
let html = await getString(searchUrl);
let $ = load(html);
let items = $('.module-search-item');
let videos = [];
for(var item of items) {
let vodId = $(item).find(".video-serial")[0].attribs.href;
let name = $(item).find(".video-serial")[0].attribs.title;
let pic = $(item).find(".module-item-pic > img")[0].attribs['data-src'];
let remark = '';
videos.push({
vod_id: vodId,
vod_name: name,
vod_pic: pic,
vod_remarks: remark,
});
}
return JSON.stringify({
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/wogg.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/wogg_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/wpian_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/xiaoya.js Normal file

@ -0,0 +1 @@
import{Crypto,load,_}from"assets://js/lib/cat.js";let key="xiaoya-tv",url="",siteKey="",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",cookie={};async function request(reqUrl,referer,mth,data,hd){var headers={"User-Agent":UA,Cookie:_.map(cookie,(value,key)=>key+"="+value).join(";")},referer=(referer&&(headers.referer=encodeURIComponent(referer)),await req(reqUrl,{method:mth||"get",headers:headers,data:data,postType:"post"===mth?"form":""}));return referer.content}async function init(cfg){siteKey=cfg.skey,siteType=cfg.stype,url=cfg.ext}async function home(filter){return(await request(url)).replaceAll("1$/$1","1$/$0")}async function homeVod(){return"{}"}async function category(tid,pg,filter,extend){pg<=0&&(pg=1);let api=url+"?t="+tid+"&pg="+pg;return extend&&(tid=Object.entries(extend).map(([key,val]=entry)=>"&"+key+"="+val),api=(api+=tid)+("&f="+encodeURIComponent(JSON.stringify(extend)))),request(api)}async function detail(id){id=id.split("$");return request(url+"?ids="+id[0]+"$"+id[1])}async function play(flag,id,flags){return request(url.replace("/vod1","/play")+"?id="+id+"&from=open")}async function search(wd,quick){return request(url+"?wd="+wd)}function __jsEvalReturn(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export{__jsEvalReturn};

1
cat/js/xiaoya_open.js Normal file

File diff suppressed because one or more lines are too long

148
cat/js/xiaozhitiao_open.js Normal file

@ -0,0 +1,148 @@
import { load, _ } from 'assets://js/lib/cat.js';
import { log } from './lib/utils.js';
import { initAli, detailContent, playContent } from './lib/ali.js';
let siteKey = 'xiaozhitiao';
let siteType = 0;
let siteUrl = 'https://gitcafe.net/tool/alipaper/';
let aliUrl = "https://www.aliyundrive.com/s/";
let token = '';
let date = new Date();
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';
async function request(reqUrl, data) {
let res = await req(reqUrl, {
method: 'post',
headers: {
'User-Agent': UA,
},
data: data,
postType: 'form',
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
try {
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
await initAli(cfg.ext);
} catch (e) {
await log('init:' + e.message + ' line:' + e.lineNumber);
}
}
async function home(filter) {
const classes = [{'type_id':'1','type_name':'电视'},{'type_id':'2','type_name':'电影'},{'type_id':'3','type_name':'动漫'},{'type_id':'4','type_name':'视频'},{'type_id':'5','type_name':'音乐'}];
const filterObj = {
'1':[{'key':'class','name':'类型','init':'hyds','value':[{'n':'华语','v':'hyds'},{'n':'日韩','v':'rhds'},{'n':'欧美','v':'omds'},{'n':'其他','v':'qtds'}]}],
'2':[{'key':'class','name':'类型','init':'hydy','value':[{'n':'华语','v':'hydy'},{'n':'日韩','v':'rhdy'},{'n':'欧美','v':'omdy'},{'n':'其他','v':'qtdy'}]}],
'3':[{'key':'class','name':'类型','init':'hydm','value':[{'n':'国漫','v':'hydm'},{'n':'日本','v':'rhdm'},{'n':'欧美','v':'omdm'}]}],
'4':[{'key':'class','name':'类型','init':'jlp','value':[{'n':'纪录','v':'jlp'},{'n':'综艺','v':'zyp'},{'n':'教育','v':'jypx'},{'n':'其他','v':'qtsp'}]}],
'5':[{'key':'class','name':'类型','init':'hyyy','value':[{'n':'华语','v':'hyyy'},{'n':'日韩','v':'rhyy'},{'n':'欧美','v':'omyy'},{'n':'其他','v':'qtyy'}]}],
};
return {
class: classes,
filters: filterObj,
};
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
const params = {
action: "viewcat",
cat: extend.class,
num: pg,
token: await getToken(),
};
const resp = await request(siteUrl, params);
const json = JSON.parse(resp);
const videos = _.map(json.data, (item) => {
return {
vod_id: aliUrl + item.alikey,
vod_name: item.title,
vod_pic: "https://i2.100024.xyz/2024/01/31/xp4o7o.webp",
vod_remarks: item.creatime
};
});
const pgCount = _.isEmpty(videos) ? pg : pg + 1;
const limit = 50;
return {
page: pg,
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos,
};
}
async function detail(id) {
try {
return await detailContent(id);
} catch (e) {
await log('detail:' + e.message + ' line:' + e.lineNumber);
}
}
async function play(flag, id, flags) {
try {
return await playContent(flag, id, flags);
} catch (e) {
await log('play:' + e.message + ' line:' + e.lineNumber);
}
}
async function search(wd, quick, pg) {
if (pg <= 0) pg = 1;
const params = {
action: "search",
from: "web",
keyword: wd,
token: await getToken(),
};
const resp = await request(siteUrl, params);
const json = JSON.parse(resp);
const videos = _.map(json.data, (item) => {
return {
vod_id: aliUrl + item.alikey,
vod_name: item.title,
vod_pic: "https://i2.100024.xyz/2024/01/31/xp4o7o.webp",
vod_remarks: item.creatime
};
});
return {
list: videos,
};
}
async function getToken() {
const newDate = new Date();
if (_.isEmpty(token) || newDate > date) {
const params = {
action: "get_token",
};
const resp = await request(siteUrl, params);
const json = JSON.parse(resp);
if (json.success) {
token = json.data;
date = newDate;
}
}
return token;
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

195
cat/js/xinshijue_open.js Normal file

@ -0,0 +1,195 @@
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
let key = 'xinshijue';
let HOST = 'https://www.hdmyy.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';
async function request(reqUrl, timeout = 20000) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': UA,
'Referer': HOST
},
timeout: timeout,
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
let classes = [{'type_id':1,'type_name':'电影'},{'type_id':2,'type_name':'电视剧'},{'type_id':3,'type_name':'综艺'},{'type_id':4,'type_name':'动漫'},{'type_id':63,'type_name':'纪录片'}];
let filterObj = {
'1':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'喜剧','v':'喜剧'},{'n':'爱情','v':'爱情'},{'n':'恐怖','v':'恐怖'},{'n':'动作','v':'动作'},{'n':'科幻','v':'科幻'},{'n':'剧情','v':'剧情'},{'n':'战争','v':'战争'},{'n':'警匪','v':'警匪'},{'n':'犯罪','v':'犯罪'},{'n':'动画','v':'动画'},{'n':'奇幻','v':'奇幻'},{'n':'武侠','v':'武侠'},{'n':'冒险','v':'冒险'},{'n':'枪战','v':'枪战'},{'n':'恐怖','v':'恐怖'},{'n':'悬疑','v':'悬疑'},{'n':'惊悚','v':'惊悚'},{'n':'经典','v':'经典'},{'n':'青春','v':'青春'},{'n':'文艺','v':'文艺'},{'n':'微电影','v':'微电影'},{'n':'古装','v':'古装'},{'n':'历史','v':'历史'},{'n':'运动','v':'运动'},{'n':'农村','v':'农村'},{'n':'儿童','v':'儿童'},{'n':'网络电影','v':'网络电影'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'中国大陆','v':'中国大陆'},{'n':'中国香港','v':'中国香港'},{'n':'中国台湾','v':'中国台湾'},{'n':'美国','v':'美国'},{'n':'法国','v':'法国'},{'n':'英国','v':'英国'},{'n':'日本','v':'日本'},{'n':'韩国','v':'韩国'},{'n':'德国','v':'德国'},{'n':'泰国','v':'泰国'},{'n':'印度','v':'印度'},{'n':'意大利','v':'意大利'},{'n':'西班牙','v':'西班牙'},{'n':'加拿大','v':'加拿大'},{'n':'其他','v':'其他'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'2':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'爱情','v':'爱情'},{'n':'古装','v':'古装'},{'n':'悬疑','v':'悬疑'},{'n':'都市','v':'都市'},{'n':'喜剧','v':'喜剧'},{'n':'战争','v':'战争'},{'n':'剧情','v':'剧情'},{'n':'青春','v':'青春'},{'n':'历史','v':'历史'},{'n':'网剧','v':'网剧'},{'n':'奇幻','v':'奇幻'},{'n':'冒险','v':'冒险'},{'n':'励志','v':'励志'},{'n':'犯罪','v':'犯罪'},{'n':'商战','v':'商战'},{'n':'恐怖','v':'恐怖'},{'n':'穿越','v':'穿越'},{'n':'农村','v':'农村'},{'n':'人物','v':'人物'},{'n':'商业','v':'商业'},{'n':'生活','v':'生活'},{'n':'短剧','v':'短剧'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'中国大陆','v':'中国大陆'},{'n':'中国香港','v':'中国香港'},{'n':'中国台湾','v':'中国台湾'},{'n':'韩国','v':'韩国'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'日本','v':'日本'},{'n':'美国','v':'美国'},{'n':'泰国','v':'泰国'},{'n':'英国','v':'英国'},{'n':'新加坡','v':'新加坡'},{'n':'其他','v':'其他'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'3':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'音乐','v':'音乐'},{'n':'情感','v':'情感'},{'n':'生活','v':'生活'},{'n':'职场','v':'职场'},{'n':'真人秀','v':'真人秀'},{'n':'搞笑','v':'搞笑'},{'n':'公益','v':'公益'},{'n':'艺术','v':'艺术'},{'n':'访谈','v':'访谈'},{'n':'益智','v':'益智'},{'n':'体育','v':'体育'},{'n':'少儿','v':'少儿'},{'n':'时尚','v':'时尚'},{'n':'人物','v':'人物'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'中国大陆','v':'中国大陆'},{'n':'港台','v':'港台'},{'n':'韩国','v':'韩国'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'4':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'冒险','v':'冒险'},{'n':'战斗','v':'战斗'},{'n':'搞笑','v':'搞笑'},{'n':'经典','v':'经典'},{'n':'科幻','v':'科幻'},{'n':'玄幻','v':'玄幻'},{'n':'魔幻','v':'魔幻'},{'n':'武侠','v':'武侠'},{'n':'恋爱','v':'恋爱'},{'n':'推理','v':'推理'},{'n':'日常','v':'日常'},{'n':'校园','v':'校园'},{'n':'悬疑','v':'悬疑'},{'n':'真人','v':'真人'},{'n':'历史','v':'历史'},{'n':'竞技','v':'竞技'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'中国大陆','v':'中国大陆'},{'n':'日本','v':'日本'},{'n':'韩国','v':'韩国'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'63':[{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
};
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
let page = '';
if (pg > 1) {
page = pg;
}
const link = HOST + '/vodshow/' + tid + '-' + (extend.area || '') + '-' + (extend.by || '') + '-' + (extend.class || '') + '-' + (extend.lang || '') + '-' + (extend.letter || '') + '---' + page + '---' + (extend.year || '') + '.html';
const html = await request(link);
const $ = load(html);
const items = $('.module-list .module-item');
const videos = _.map(items, (item) => {
const $item = $(item);
const link = $item.find('.module-item-content a:first').attr('href');
const title = $item.find('.video-name').text().trim();
const img = $item.find('.module-item-pic img:first').attr('data-src');
const remarks = $item.find('.module-item-text').text().trim();
return {
vod_id: link.replace(/.*?\/video\/(.*).html/g, '$1'),
vod_name: title,
vod_pic: img,
vod_remarks: remarks || '',
};
});
const hasMore = $('#page a.page-next:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
const limit = 40;
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos,
});
}
async function detail(id) {
const html = await request(HOST + '/video/' + id + '.html');
const $ = load(html);
const vod = {
vod_id: id,
vod_name: $('h1.page-title').text().trim(),
vod_type: $('.video-info-aux a.tag-link:first').text().trim(),
vod_area: $('.video-info-aux a.tag-link:eq(2)').text().trim(),
vod_year: $('.video-info-aux a.tag-link:eq(1)').text().trim(),
vod_director: $('.video-info-main .video-info-items:contains(导演:)').text().substring(3).trim().replace(/(^\/|\/$)/g, '').trim(),
vod_actor: $('.video-info-main .video-info-items:contains(主演:)').text().substring(3).trim().replace(/(^\/|\/$)/g, '').trim(),
vod_pic: $('.video-cover img:first').attr('data-src'),
vod_remarks : $('.video-info-main .video-info-items:contains(备注:)').text().substring(3) || '',
vod_content: $('.video-info-main .video-info-items:contains(剧情:)').text().substring(3).trim().replace(/收起$/g, ''),
};
const playMap = {};
const tabs = $('.module-player-tab .module-tab-item');
const playlists = $('.module-player-list > .module-blocklist');
_.each(tabs, (tab, i) => {
const $tab = $(tab);
const from = $tab.find('span:first').text().trim();
if (from.includes('夸克')) return;
let list = playlists[i];
list = $(list).find('a');
_.each(list, (it) => {
const $it = $(it);
const title = $it.find('span:first').text().trim();
const playUrl = $it.attr('href');
if (!playMap.hasOwnProperty(from)) {
playMap[from] = [];
}
playMap[from].push(title + '$' + playUrl);
});
});
vod.vod_play_from = _.keys(playMap).join('$$$');
const urls = _.values(playMap);
const vod_play_url = _.map(urls, (urlist) => {
return urlist.join('#');
});
vod.vod_play_url = vod_play_url.join('$$$');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
const link = HOST + id;
const html = await request(link);
let $ = load(html);
let json = $('script:contains(player_aaaa)').text().replace('var player_aaaa=','');
let js = JSON.parse(json);
let playUrl = js.url;
if (js.encrypt == 1) {
playUrl = unescape(playUrl);
} else if (js.encrypt == 2) {
playUrl = unescape(base64Decode(playUrl));
}
let playHtml = await request('https://jx3.xn--1lq90i13mxk5bolhm8k.xn--fiqs8s/player/ec.php?code=ak&if=1&url=' + playUrl);
json = playHtml.match(/let ConFig = {([\w\W]*)},box/)[1];
const jsConfig = JSON.parse('{' + json.trim() + '}');
playUrl = decryptUrl(jsConfig);
return JSON.stringify({
parse: 0,
url: playUrl,
header: {
'User-Agent': UA,
}
});
}
function decryptUrl(jsConfig) {
const key = Crypto.enc.Utf8.parse('2890' + jsConfig.config.uid + 'tB959C');
const iv = Crypto.enc.Utf8.parse('2F131BE91247866E');
const mode = Crypto.mode.CBC;
const padding = Crypto.pad.Pkcs7;
const decrypted = Crypto.AES.decrypt(jsConfig.url, key, {
'iv': iv,
'mode': mode,
'padding': padding
});
const decryptedUrl = Crypto.enc.Utf8.stringify(decrypted);
return decryptedUrl;
}
function base64Decode(text) {
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
}
async function search(wd, quick, pg) {
let data = JSON.parse(await request(HOST + '/index.php/ajax/suggest?mid=1&limit=50&wd=' + wd)).list;
let videos = [];
for (const vod of data) {
videos.push({
vod_id: vod.id,
vod_name: vod.name,
vod_pic: vod.pic,
vod_remarks: '',
});
}
return JSON.stringify({
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

127
cat/js/yiso_open.js Normal file

@ -0,0 +1,127 @@
import { Crypto, _ } from 'assets://js/lib/cat.js';
import { log } from './lib/utils.js';
import { initAli, detailContent, playContent } from './lib/ali.js';
let siteKey = 'yiso';
let siteType = 0;
let siteUrl = 'https://yiso.fun';
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/;
let cookie = '';
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';
async function request(reqUrl) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': UA,
'Referer': siteUrl,
'Cookie': cookie,
},
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
try {
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
const ext = _.isEmpty(cfg.ext) ? '' : cfg.ext;
const configs = ext.split('$$$');
if (configs.length == 2) {
cookie = configs[1];
}
const token = {
ext: configs[0]
};
await initAli(token);
} catch (e) {
await log('init:' + e.message + ' line:' + e.lineNumber);
}
}
async function home(filter) {
return '{}';
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
return '{}';
}
async function detail(id) {
try {
let matches = id.match(patternAli);
if (!_.isEmpty(matches)) return await detailContent(matches[0]);
return '';
} catch (e) {
await log('detail:' + e.message + ' line:' + e.lineNumber);
}
}
async function play(flag, id, flags) {
try {
return await playContent(flag, id, flags);
} catch (e) {
await log('play:' + e.message + ' line:' + e.lineNumber);
}
}
async function search(wd, quick, pg) {
if (pg <= 0) pg = 1;
const limit = 10;
const resp = await request(siteUrl + "/api/search?name=" + encodeURIComponent(wd) + '&pageNo=' + pg + '&from=ali');
const json = JSON.parse(resp).data;
const total = json.total;
const videos = _.map(json.list, (item) => {
const name = item.fileInfos[0].fileName;
const remark = item.gmtCreate;
const url = decryptUrl(item.url);
return {
vod_id: url,
vod_name: name,
vod_pic: "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000",
vod_remarks: remark,
};
});
const pgCount = parseInt(total / limit) + 1;
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: total,
list: videos,
});
}
function decryptUrl(url) {
const data = {
ciphertext: Crypto.enc.Base64.parse(url),
};
const key = Crypto.enc.Utf8.parse('4OToScUFOaeVTrHE');
const iv = Crypto.enc.Utf8.parse('9CLGao1vHKqm17Oz');
const mode = Crypto.mode.CBC;
const padding = Crypto.pad.Pkcs7;
const decrypted = Crypto.AES.decrypt(data, key, {
'iv': iv,
'mode': mode,
'padding': padding
});
const decryptedUrl = Crypto.enc.Utf8.stringify(decrypted);
return decryptedUrl;
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

149
cat/js/yjys_open.js Normal file

@ -0,0 +1,149 @@
import { Crypto, load, _, jinja2 } from './lib/cat.js';
let key = 'yjys';
let HOST = 'https://m.7caa.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';
async function request(reqUrl, agentSp) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': agentSp || UA,
'Referer': HOST
},
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
let classes = [{"type_id":1,"type_name":"电影"},{"type_id":2,"type_name":"追剧"},{"type_id":3,"type_name":"综艺"},{"type_id":4,"type_name":"动漫"}];
let filterObj = {
"1":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}],
"2":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春偶像","v":"青春偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}],
"3":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"选秀","v":"选秀"},{"n":"情感","v":"情感"},{"n":"访谈","v":"访谈"},{"n":"播报","v":"播报"},{"n":"旅游","v":"旅游"},{"n":"音乐","v":"音乐"},{"n":"美食","v":"美食"},{"n":"纪实","v":"纪实"},{"n":"曲艺","v":"曲艺"},{"n":"生活","v":"生活"},{"n":"游戏互动","v":"游戏互动"},{"n":"财经","v":"财经"},{"n":"求职","v":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}],
"4":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"情感","v":"情感"},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":"社会","v":"社会"},{"n":"原创","v":"原创"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}]
};
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
const link = HOST + '/vshow/' + tid + '-' + (extend.area || '') + '--' + (extend.class || '') + '-----' + pg + '---' + (extend.year || '') + '.html';//https://m.7caa.com/vshow/1-%E7%BE%8E%E5%9B%BD--%E7%88%B1%E6%83%85-----2---2020.html
const html = await request(link);
const $ = load(html);
const items = $('ul.stui-vodlist > li');
let videos = _.map(items, (item) => {
const it = $(item).find('a:first')[0];
const remarks = $($(item).find('span.pic-text text-right')[0]).text().trim();
return {
vod_id: it.attribs.href.replace(/.*?\/vod\/(.*).html/g, '$1'),
vod_name: it.attribs.title,
vod_pic: it.attribs['data-original'],
vod_remarks: remarks || '',
};
});
const hasMore = $('ul.stui-page > li > a:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 24,
total: 24 * pgCount,
list: videos,
});
}
async function detail(id) {
var html = await request( HOST + '/play/' + id + '-1-1' + '.html');
var $ = load(html);
var vod = {
vod_id: id,
vod_name: $('h1:first').text().trim(),
vod_type: $('.stui-content__detail p:first a').text(),
vod_actor: $('.stui-content__detail p:nth-child(3)').text().replace('主演:',''),
vod_pic: $('.stui-content__thumb img:first').attr('data-original'),
vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '',
vod_content: $('span.detail-content').text().trim(),
};
var playMap = {};
var tabs = $('ul.dropdown-menu > li > a');
var playlists = $('ul.stui-content__playlist');
_.each(tabs, (tab, i) => {
var from = tab.children[0].data;
var list = playlists[i];
list = $(list).find('a');
_.each(list, (it) => {
var title = it.children[0].data;
var playUrl = it.attribs.href.replace(/\/play\/(.*).html/g, '$1');
if (title.length == 0) title = it.children[0].data.trim();
if (!playMap.hasOwnProperty(from)) {
playMap[from] = [];
}
playMap[from].push( title + '$' + playUrl);
});
});
vod.vod_play_from = _.keys(playMap).join('$$$');
var urls = _.values(playMap);
var vod_play_url = _.map(urls, (urlist) => {
return urlist.join('#');
});
vod.vod_play_url = vod_play_url.join('$$$');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
const link = HOST + '/play/' + id + '.html';
const html = await request(link);
const $ = load(html);
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
const playurl = js.url;
const playUrl = unescape(playurl);
return JSON.stringify({
parse: 0,
url: playUrl,
});
}
async function search(wd, quick) {
let data = JSON.parse(await request(HOST + '/index.php/ajax/suggest?mid=1&wd=' + wd)).list;
let videos = [];
for (const vod of data) {
videos.push({
vod_id: vod.id,
vod_name: vod.name,
vod_pic: vod.pic,
vod_remarks: '',
});
}
return JSON.stringify({
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/ym_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/yqktv_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/yqktv_open2.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/yrzj.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/yrzj_open.js Normal file

File diff suppressed because one or more lines are too long

272
cat/js/ys996_open.js Normal file

@ -0,0 +1,272 @@
import { Crypto, load, _ } from './lib/cat.js';
let siteUrl = 'https://www.cs1369.com';
let siteKey = '';
let siteType = 0;
let headers = {};
async function request(reqUrl, postData, agentSp, get) {
let res = await req(reqUrl, {
method: get ? 'get' : 'post',
headers: headers,
data: postData || {},
postType: get ? '' : 'form',
});
let content = res.content;
return content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
let classes = [{
type_id: '1',
type_name: '电影',
},{
type_id: '2',
type_name: '电视',
},{
type_id: '3',
type_name: '动漫',
}];
let filterObj = genFilterObj();
return JSON.stringify({
class: classes,
filters: filterObj
});
}
async function homeVod() {
let videos = await getVideos(siteUrl);
return JSON.stringify({
list: videos,
});
}
async function category(tid, pg, filter, extend) {
let url = siteUrl;
if (filter) {
url = url + '/show';
let area = extend['area'];
if (area && area != '') {
url = url + '/area/' + area;
}
let clazz = extend['class']
if (clazz && clazz != '') {
url = url + '/class/' + clazz;
}
let id = extend['id'];
if(id && id != '') {
url = url + '/id/' + id;
} else {
url = url + '/id/' + tid;
}
let year = extend['year'];
if (year && year != '') {
url = url + '/year/' + year;
}
if (pg && pg > 1) {
url = url + '/page/' + pg;
}
url = url + '.html';
} else {
url = url + '/vod/type';
url = url + '/id/' + tid;
if (pg && pg > 1) {
url = url + '/page/' + pg;
}
url = url + '.html';
}
//console.log('cate page url:', url);
let videos = await getVideos(url);
return JSON.stringify({
list: videos,
page: pg
});
}
async function detail(id) {
try {
let url = siteUrl + id;
const html = await request(url);
const $ = load(html);
let actors = _.map($('div.stui-content__detail > p:nth-child(3) > a'), (n) => {
return $(n).text();
});
let actor = actors.join(' ');
let director = $('div.stui-content__detail > p:nth-child(4) > a').text();
let title = $('div.stui-content__detail > h1.title').text();
let content = $('div.stui-pannel_bd > p').text();
const cards = $('div.stui-pannel_bd.col-pd.clearfix > ul > li > a');
let playUrls = _.map(cards, (n) => {
return $(n).text() + '$' + n.attribs['href'];
});
const video = {
vod_actor: actor,
vod_play_from: 'Leospring',
vod_play_url: playUrls.join('#'),
vod_director: director,
vod_content: content,
};
const list = [video];
const result = { list };
return JSON.stringify(result);
} catch (e) {
//console.log('err', e);
}
return null;
}
async function search(wd, quick, pg) {
let url = siteUrl + '/search/wd/' + wd + '.html';
//console.log('search url:', url);
const html = await request(url);
const $ = load(html);
const cards = $('div.stui-pannel_bd > ul.stui-vodlist__media.col-pd.clearfix > li');
let videos = _.map(cards, (n) => {
let id = $($(n).find('div.thumb > a')[0]).attr('href');
let name = $($(n).find('div.thumb > a')[0]).attr('title');
let pic = $($(n).find('div.thumb > a')[0]).attr('data-original');
let remark = $($(n).find('div.thumb > a > span:nth-child(2)')[0]).text();
return {
vod_id: id,
vod_name: name,
vod_pic: pic,
vod_remarks: remark,
};
});
return JSON.stringify({
list: videos,
});
}
async function play(flag, id, flags) {
let url = siteUrl + id;
const html = await request(url);
const $ = load(html);
let info = '';
for(const n of $('script')) {
if($(n).text().indexOf('player_aaaa=') > 0) {
info = $(n).text().split('player_aaaa=')[1];
break;
}
}
//console.log('info', info);
let obj = JSON.parse(info);
let playUrl = obj.url;
if(obj.encrypt == 1) {
playUrl = unescape(playUrl);
} else if (obj.encrypt == 2) {
playUrl = unescape(base64Decode(playUrl))
}
return JSON.stringify({
parse: 0,
url: playUrl,
});
}
function genFilterObj() {
return {
'1':[
{
key: 'id',
name: '类型',
value: [{n:'全部',v:''},{n:'动作片',v:'6'},{n:'喜剧片',v:'7'},{n:'爱情片',v:'8'},{n:'科幻片',v:'9'},{n:'恐怖片',v:'10'},{n:'剧情片',v:'11'},{n:'战争片',v:'12'},{n:'动画片',v:'13'},{n:'纪录片',v:'14'}]
},{
key: 'class',
name: '剧情',
value: [{n:'全部',v:''},{n:'喜剧',v:'喜剧'},{n:'爱情',v:'爱情'},{n:'恐怖',v:'恐怖'},{n:'动作',v:'动作'},{n:'科幻',v:'科幻'},{n:'剧情',v:'剧情'},{n:'战争',v:'战争'},{n:'警匪',v:'警匪'},{n:'犯罪',v:'犯罪'},{n:'动画',v:'动画'},{n:'奇幻',v:'奇幻'},{n:'武侠',v:'武侠'},{n:'冒险',v:'冒险'},{n:'枪战',v:'枪战'},{n:'悬疑',v:'悬疑'},{n:'惊悚',v:'惊悚'},{n:'经典',v:'经典'},{n:'青春',v:'青春'},{n:'文艺',v:'文艺'},{n:'微电影',v:'微电影'},{n:'古装',v:'古装'},{n:'历史',v:'历史'},{n:'运动',v:'运动'},{n:'农村',v:'农村'},{n:'儿童',v:'儿童'},{n:'网络电影',v:'网络电影'}]
},{
key: 'area',
name: '地区',
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
},{
key: 'year',
name: '年份',
value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
}],
'2':[{
key: 'id',
name: '类型',
value: [{n:'全部',v:''},{n:'内地',v:'15'},{n:'美国',v:'16'},{n:'英国',v:'17'},{n:'韩国',v:'18'},{n:'泰国',v:'20'},{n:'日本',v:'21'},{n:'香港',v:'22'},{n:'台湾',v:'23'}]
},{
key: 'class',
name: '剧情',
value: [{n:'全部',v:''},{n:'古装',v:'古装'},{n:'战争',v:'战争'},{n:'青春偶像',v:'青春偶像'},{n:'喜剧',v:'喜剧'},{n:'家庭',v:'家庭'},{n:'犯罪',v:'犯罪'},{n:'动作',v:'动作'},{n:'奇幻',v:'奇幻'},{n:'剧情',v:'剧情'},{n:'历史',v:'历史'},{n:'经典',v:'经典'},{n:'乡村',v:'乡村'},{n:'情景',v:'情景'},{n:'商战',v:'商战'},{n:'网剧',v:'网剧'}]
},{
key: 'area',
name: '地区',
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
},{
key: 'year',
name: '年份',
value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
}],
'3':[{
key: 'id',
name: '类型',
value: [{n:'全部',v:''},{n:'内地',v:'25'},{n:'日漫',v:'26'},{n:'欧美',v:'27'},{n:'其他',v:'28'}]
},{
key: 'class',
name: '剧情',
value: [{n:'全部',v:''},{n:'情感',v:'情感'},{n:'科幻',v:'科幻'},{n:'热血',v:'热血'},{n:'推理',v:'推理'},{n:'搞笑',v:'搞笑'},{n:'冒险',v:'冒险'},{n:'萝莉',v:'萝莉'},{n:'校园',v:'校园'},{n:'动作',v:'动作'},{n:'机战',v:'机战'},{n:'运动',v:'运动'},{n:'战争',v:'战争'},{n:'少年',v:'少年'},{n:'少女',v:'少女'},{n:'社会',v:'社会'},{n:'原创',v:'原创'},{n:'亲子',v:'亲子'},{n:'益智',v:'益智'},{n:'励志',v:'励志'}]
},{
key: 'area',
name: '地区',
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
},{
key: 'year',
name: '年份',
value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
}]
}
}
async function getVideos(url) {
const html = await request(url);
const $ = load(html);
const cards = $('div.stui-vodlist__box > a')
let videos = _.map(cards, (n) => {
let id = n.attribs['href'];
let name = n.attribs['title'];
let pic = n.attribs['data-original'];
let remark = $($(n).find('span:nth-child(2)')[0]).text();
return {
vod_id: id,
vod_name: name,
vod_pic: pic,
vod_remarks: remark,
};
});
return videos;
}
function base64Encode(text) {
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
}
function base64Decode(text) {
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/yt.js Normal file

File diff suppressed because one or more lines are too long

133
cat/js/yunpan4k_open.js Normal file

@ -0,0 +1,133 @@
import { load, _ } from 'assets://js/lib/cat.js';
import { log } from './lib/utils.js';
import { initAli, detailContent, playContent } from './lib/ali.js';
let siteKey = 'yunpan4k';
let siteType = 0;
let siteUrl = 'https://www.codelicence.cn';
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/;
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';
async function requestRaw(reqUrl, method, data, redirect) {
let res = await req(reqUrl, {
method: method || 'get',
headers: {
'User-Agent': UA,
'Referer': siteUrl,
},
data: data,
postType: method === 'post' ? 'form' : '',
redirect: redirect == 0 ? 0 : 1,
});
return res;
}
async function request(reqUrl, method, data) {
let resRaw = await requestRaw(reqUrl, method, data);
return resRaw.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
try {
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
await initAli(cfg.ext);
} catch (e) {
await log('init:' + e.message + ' line:' + e.lineNumber);
}
}
async function home(filter) {
return '{}';
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
return '{}';
}
async function detail(id) {
try {
let matches = id.match(patternAli);
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
const html = await request(siteUrl + id);
const $ = load(html);
const href = $('div.down a:first').attr('href');
const data = await requestRaw(siteUrl + href, 'get', null, 0);
const headers = data.headers;
let url = '';
if (headers.hasOwnProperty('location')) {
url = headers['location'];
}
matches = url.match(patternAli);
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
return '';
} catch (e) {
await log('detail:' + e.message + ' line:' + e.lineNumber);
}
}
async function play(flag, id, flags) {
try {
return await playContent(flag, id, flags);
} catch (e) {
await log('play:' + e.message + ' line:' + e.lineNumber);
}
}
async function search(wd, quick, pg) {
if (pg <= 0) pg = 1;
const limit = 20;
const param = {
keyboard: wd,
};
const data = await requestRaw(siteUrl + '/search', 'post', param);
let html = '';
const headers = data.headers;
if (headers.hasOwnProperty('location')) {
const url = headers['location'] + '?p=' + pg;
html = await request(url);
}
const $ = load(html);
const elements = $('ul#url');
const videos = _.map(elements, (item) => {
const element = $(item);
const href = element.find('a.l').attr('href');
if (!href) return undefined;
const name = element.text().trim();
const remark = element.find('li.r').attr('data_size');
console.debug('vod_id:' + href);
return {
vod_id: href,
vod_name: name,
vod_pic: "https://pic.rmb.bdstatic.com/bjh/6a2278365c10139b5b03229c2ecfeea4.jpeg",
vod_remarks: remark,
};
});
const nextPage = $('.pages_search .nex:contains(下一页)');
const hasMore = !_.isEmpty(nextPage);
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos.filter(item => item !== undefined),
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/yzys.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/yzys_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/yzz_open.js Normal file

File diff suppressed because one or more lines are too long

153
cat/js/zhaozy_open.js Normal file

@ -0,0 +1,153 @@
import { load, _ } from 'assets://js/lib/cat.js';
import { log } from './lib/utils.js';
import { initAli, detailContent, playContent } from './lib/ali.js';
let siteKey = 'zhaozy';
let siteType = 0;
let siteUrl = 'https://zhaoziyuan.pw';
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/;
let patternVid = /(\\S+)/;
let username = '';
let password = '';
let cookie = '';
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';
async function requestRaw(reqUrl, headers, method, data) {
let res = await req(reqUrl, {
method: method || 'get',
headers: headers,
data: data,
postType: method === 'post' ? 'form' : '',
});
return res;
}
async function request(reqUrl, headers) {
let resRaw = await requestRaw(reqUrl, headers);
return resRaw.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
try {
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
const ext = _.isEmpty(cfg.ext) ? '' : cfg.ext;
const configs = ext.split('$$$');
if (configs.length == 3) {
username = configs[1];
password = configs[2];
}
await initAli(configs[0]);
} catch (e) {
await log('init:' + e.message + ' line:' + e.lineNumber);
}
}
async function home(filter) {
return '{}';
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
return '{}';
}
async function detail(id) {
try {
let matches = id.match(patternAli);
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
const headers = await getHeaders();
const data = await request(siteUrl + '/' + id, headers);
matches = data.match(patternAli);
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
return '';
} catch (e) {
await log('detail:' + e.message + ' line:' + e.lineNumber);
}
}
async function play(flag, id, flags) {
try {
return await playContent(flag, id, flags);
} catch (e) {
await log('play:' + e.message + ' line:' + e.lineNumber);
}
}
async function search(wd, quick, pg) {
if (pg <= 0) pg = 1;
const limit = 15;
const headers = await getHeaders();
const html = await request(siteUrl + '/so?filename=' + encodeURIComponent(wd) + '&page=' + pg, headers);
const $ = load(html);
const elements = $('div.li_con div.news_text');
const videos = _.map(elements, (item) => {
const element = $(item);
const href = element.find('div.news_text a').attr('href');
if (!href) return undefined;
const matches = href.match(patternVid);
if (!_.isEmpty(matches)) return undefined;
const name = element.find("div.news_text a h3").text();
const remark = element.find("div.news_text a p").text().split("|")[1].split("")[1];
return {
vod_id: href,
vod_name: name,
vod_pic: "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000",
vod_remarks: remark
};
});
const nextPage = $('.page a li:contains(下一页)');
const hasMore = _.isEmpty(nextPage) ? false : nextPage.attr('class') != 'disabled';
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos.filter(item => item !== undefined),
});
}
async function getHeaders() {
if (!cookie) {
cookie = await getCookie();
}
return {
'User-Agent': UA,
'Referer': siteUrl,
'Cookie': cookie,
};
}
async function getCookie() {
const params = {
"username": username,
"password": password,
};
const headers = {
"User-Agent": UA,
"Referer": siteUrl + "/stop.html",
"Origin": siteUrl,
};
const res = await requestRaw(siteUrl + "/logiu.html", headers, 'post', params);
let result = '';
for (const cookie of res.headers['set-cookie']) {
result += cookie.split(";")[0] + ";";
}
return result;
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/zjdr_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/zjm_open.js Normal file

File diff suppressed because one or more lines are too long

267
cat/js/zxzj_open.js Normal file

@ -0,0 +1,267 @@
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
let key = 'zxzj';
let HOST = 'https://www.zxzj.site'; // 地址发布页
let host = 'https://www.zxzja.com';
let siteKey = '';
let siteType = 0;
const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
async function request(reqUrl, extHeader) {
let headers = {
'User-Agent': MOBILE_UA,
'Referer': host,
};
if (extHeader) {
headers = _.merge(headers, extHeader);
}
const res = await req(reqUrl, {
method: 'get',
headers: headers,
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
const html = await request(HOST);
const $ = load(html);
host = $('div.content-top > ul > li').find('a:first')[0].attribs.href;
console.debug('在线之家 跳转地址 =====>' + host); // js_debug.log
}
async function home(filter) {
const html = await request(host);
const $ = load(html);
const class_parse = $('ul.stui-header__menu > li > a[href*=list]');
let classes = _.map(class_parse, (cls) => {
let typeId = cls.attribs['href'];
typeId = typeId.substring(typeId.lastIndexOf('/') + 1).replace('.html', '');
return {
type_id: typeId,
type_name: cls.children[0].data,
};
});
const filterObj = {
1: [{ key: 'class', name: '剧情', init: '', value: [{ n: '全部', v: '' }, { n: '喜剧', v: '喜剧' }, { n: '爱情', v: '爱情' }, { n: '恐怖', v: '恐怖' }, { n: '动作', v: '动作' }, { n: '科幻', v: '科幻' }, { n: '剧情', v: '剧情' }, { n: '战争', v: '战争' }, { n: '警匪', v: '警匪' }, { n: '犯罪', v: '犯罪' }, { n: '动画', v: '动画' }, { n: '奇幻', v: '奇幻' }, { n: '冒险', v: '冒险' }] }, { key: 'area', name: '地区', init: '', value: [{ n: '全部', v: '' }, { n: '大陆', v: '大陆' }, { n: '香港', v: '香港' }, { n: '台湾', v: '台湾' }, { n: '欧美', v: '欧美' }, { n: '韩国', v: '韩国' }, { n: '日本', v: '日本' }, { n: '泰国', v: '泰国' }, { n: '印度', v: '印度' }, { n: '俄罗斯', v: '俄罗斯' }, { n: '其他', v: '其他' }] }],
2: [{ key: 'class', name: '剧情', init: '', value: [{ n: '全部', v: '' }, { n: '剧情', v: '剧情' }, { n: '喜剧', v: '喜剧' }, { n: '爱情', v: '爱情' }, { n: '动作', v: '动作' }, { n: '悬疑', v: '悬疑' }, { n: '恐怖', v: '恐怖' }, { n: '奇幻', v: '奇幻' }, { n: '惊悚', v: '惊悚' }, { n: '犯罪', v: '犯罪' }, { n: '科幻', v: '科幻' }, { n: '音乐', v: '音乐' }, { n: '其他', v: '其他' }] }],
3: [{ key: 'class', name: '剧情', init: '', value: [{ n: '全部', v: '' }, { n: '剧情', v: '剧情' }, { n: '喜剧', v: '喜剧' }, { n: '爱情', v: '爱情' }, { n: '动作', v: '动作' }, { n: '悬疑', v: '悬疑' }, { n: '恐怖', v: '恐怖' }, { n: '奇幻', v: '奇幻' }, { n: '惊悚', v: '惊悚' }, { n: '犯罪', v: '犯罪' }, { n: '科幻', v: '科幻' }, { n: '音乐', v: '音乐' }, { n: '其他', v: '其他' }] }],
4: [{ key: 'class', name: '剧情', init: '', value: [{ n: '全部', v: '' }, { n: '剧情', v: '剧情' }, { n: '喜剧', v: '喜剧' }, { n: '爱情', v: '爱情' }, { n: '动作', v: '动作' }, { n: '悬疑', v: '悬疑' }, { n: '恐怖', v: '恐怖' }, { n: '奇幻', v: '奇幻' }, { n: '惊悚', v: '惊悚' }, { n: '犯罪', v: '犯罪' }, { n: '科幻', v: '科幻' }, { n: '音乐', v: '音乐' }, { n: '其他', v: '其他' }] }],
6: [{ key: 'class', name: '剧情', init: '', value: [{ n: '全部', v: '' }, { n: '情感', v: '情感' }, { n: '科幻', v: '科幻' }, { n: '热血', v: '热血' }, { n: '推理', v: '推理' }, { n: '搞笑', v: '搞笑' }, { n: '冒险', v: '冒险' }, { n: '萝莉', v: '萝莉' }, { n: '校园', v: '校园' }, { n: '动作', v: '动作' }, { n: '机战', v: '机战' }, { n: '运动', v: '运动' }, { n: '战争', v: '战争' }, { n: '少年', v: '少年' }] }, { key: 'area', name: '地区', init: '', value: [{ n: '全部', v: '' }, { n: '国产', v: '国产' }, { n: '日本', v: '日本' }, { n: '欧美', v: '欧美' }, { n: '其他', v: '其他' }] }]
};
let filYer = { key: 'year', name: '年份', init: '', value: [{ n: '全部', v: '' }, { n: '2024', v: '2024' }, { n: '2023', v: '2023' }, { n: '2022', v: '2022' }, { n: '2021', v: '2021' }, { n: '2020', v: '2020' }, { n: '2019', v: '2019' }, { n: '2018', v: '2018' }, { n: '2017', v: '2017' }, { n: '2016', v: '2016' }, { n: '2015', v: '2015' }, { n: '2014', v: '2014' }, { n: '2013', v: '2013' }, { n: '2012', v: '2012' }, { n: '2011', v: '2011' }] };
let filBy = { key: 'by', name: '排序', value: [{ n: '时间', v: 'time' }, { n: '人气', v: 'hits' }, { n: '评分', v: 'score' }] };
return JSON.stringify({
class: _.map(classes, (cls) => {
if (filterObj[cls.type_id]) {
filterObj[cls.type_id].push(filYer, filBy);
filterObj[cls.type_id][0]['init'] = filterObj[cls.type_id][0].value[0].v;
} else {
filterObj[cls.type_id] = [];
filterObj[cls.type_id].push(filYer, filBy)
}
return cls;
}),
filters: filterObj,
});
}
async function homeVod() {
const link = host + '/vodshow/1--hits---------2023.html';
const html = await request(link);
const $ = load(html);
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
const items = $('ul.stui-vodlist > li');
let videos = _.map(items, (item) => {
const a = $(item).find('a:first')[0];
const remarks = $($(item).find('span.pic-text')[0]).text().trim();
return {
vod_id: a.attribs.href.replace(/.*?\/detail\/(.*).html/g, '$1'),
vod_name: a.attribs.title,
vod_pic: js2Base + base64Encode(a.attribs['data-original']),
vod_remarks: remarks || '',
};
});
return JSON.stringify({
list: videos,
});
}
async function category(tid, pg, filter, extend) {
if (pg <= 0 || typeof (pg) == 'undefined') pg = 1;
const link = host + '/vodshow/' + tid + '-' + (extend.area || '') + '-' + (extend.by || 'time') + '-' + (extend.class || '') + '-' + (extend.lang || '') + '-' + (extend.letter || '') + '---' + pg + '---' + (extend.year || '') + '.html';
const html = await request(link);
const $ = load(html);
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
const items = $('ul.stui-vodlist > li');
let videos = _.map(items, (item) => {
const a = $(item).find('a:first')[0];
const remarks = $($(item).find('span.pic-text')[0]).text().trim();
return {
vod_id: a.attribs.href.replace(/.*?\/detail\/(.*).html/g, '$1'),
vod_name: a.attribs.title,
vod_pic: js2Base + base64Encode(a.attribs['data-original']),
vod_remarks: remarks || '',
};
});
const hasMore = $('ul.stui-page__item > li > a:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 24,
total: 24 * pgCount,
list: videos,
});
}
async function detail(id) {
const html = await request(host + '/detail/' + id + '.html');
const $ = load(html);
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
const vod = {
vod_id: id,
vod_name: $('h1:first').text().trim(),
vod_type: $('.stui-content__detail p:first a').text(),
vod_actor: $('.stui-content__detail p:nth-child(3)').text().replace('主演:', ''),
vod_director: $('.stui-content__detail p:nth-child(4)').text().replace('导演:', ''),
vod_pic: js2Base + base64Encode($('.stui-content__thumb img:first').attr('data-original')),
vod_remarks: $('.stui-content__detail p:nth-child(5)').text() || '',
vod_content: $('span.detail-content').text().trim(),
};
let playMap = {};
const tabs = $('div.stui-vodlist__head > h3');
const playlists = $('ul.stui-content__playlist');
_.each(tabs, (tab, i) => {
const from = tab.children[0].data;
let list = playlists[i];
list = $(list).find('a');
_.each(list, (it) => {
const title = it.children[0].data;
const playUrl = it.attribs.href;
if (title.length == 0) title = it.children[0].data.trim();
if (!playMap.hasOwnProperty(from)) {
playMap[from] = [];
}
playMap[from].push(title + '$' + playUrl);
});
});
vod.vod_play_from = _.keys(playMap).join('$$$');
const urls = _.values(playMap);
let vod_play_url = _.map(urls, (urlist) => {
return urlist.join('#');
});
vod.vod_play_url = vod_play_url.join('$$$');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
const html = await request(host + id);
const mhtml = html.match(/r player_.*?=(.*?)</)[1];
const json = JSON.parse(mhtml);
const url = json.url;
const from = json.from;
if (json.encrypt == '1') {
url = unescape(url)
} else if (json.encrypt == '2') {
url = unescape(base64Decode(url))
}
if (url.includes('m3u8') || url.includes('mp4')) {
// console.debug('在线之家url =====>' + url); // js_debug.log
return JSON.stringify({
parse: 0,
url: url,
});
} else if (from.includes('line3') || from.includes('line4') || from.includes('line5')) {
const extHeader = {
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'cross-site',
'sec-fetch-dest': 'iframe',
'upgrade-insecure-requests': 1,
};
const ifrwy = await request(url, extHeader);
const resultv2 = ifrwy.match(/var result_v2 = {(.*?)};/)[1];
const data = JSON.parse('{' + resultv2 + '}').data;
const code = data.split('').reverse();
let temp = '';
for (let i = 0x0; i < code.length; i = i + 0x2) {
temp += String.fromCharCode(parseInt(code[i] + code[i + 0x1], 0x10))
}
const purl = temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7);
// console.debug('在线之家purl =====>' + purl); // js_debug.log
return JSON.stringify({
parse: 0,
url: purl,
});
} else {
// console.debug('在线之家url =====>' + '空'); // js_debug.log
return '{}';
}
}
async function search(wd, quick) {
var data = JSON.parse(await request(host + '/index.php/ajax/suggest?mid=1&wd=' + wd + '&limit=50')).list;
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
let videos = _.map(data, (it) => {
return {
vod_id: it.id,
vod_name: it.name,
vod_pic: js2Base + base64Encode(it.pic),
vod_remarks: '',
}
});
return JSON.stringify({
list: videos,
limit: 50,
});
}
function base64Encode(text) {
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
}
function base64Decode(text) {
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
}
async function proxy(segments, headers) {
let what = segments[0];
let url = base64Decode(segments[1]);
if (what == 'img') {
var resp = await req(url, {
buffer: 2,
headers: {
Referer: 'https://api.douban.com/',
'User-Agent': MOBILE_UA,
},
});
return JSON.stringify({
code: resp.code,
buffer: 2,
content: resp.content,
headers: resp.headers,
});
}
return JSON.stringify({
code: 500,
content: '',
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
proxy: proxy,
search: search,
};
}

File diff suppressed because one or more lines are too long

162
cat/js/zzmusic_book_open.js Normal file

@ -0,0 +1,162 @@
import { Crypto, load, _ } from './lib/cat.js';
let siteUrl = 'https://gh.7761.cf/https://zz123.com';
let imgUrl = 'https://music.jsbaidu.com';
let siteKey = '';
let siteType = 0;
let headers = {};
async function request(reqUrl, postData, agentSp, get) {
let res = await req(reqUrl, {
method: get ? 'get' : 'post',
headers: headers,
data: postData || {},
postType: get ? '' : 'form',
});
let content = res.content;
return content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
if (cfg.ext) {
siteUrl = cfg.ext;
}
}
async function home(filter) {
const html = await request(siteUrl);
const $ = load(html);
const cates = $('ul.aside-menu-list.channel > li')
let classes = _.map(cates, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('a > span')[0]).text();
return {
type_id: id,
type_name: name,
};
});
return JSON.stringify({
class: classes,
});
}
async function homeVod() {
const html = await request(siteUrl);
const $ = load(html);
const cards = $('div.page-main-wrap > div > div > div.card-list.d-none.d-md-block > div')
let videos = _.map(cards, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
return {
book_id: id,
book_name: name,
book_pic: pic,
book_remarks: remark,
};
});
return JSON.stringify({
list: videos,
});
}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
let url = siteUrl + '/ajax/';
let res = await req(url, {
method: 'post',
data: {
act: 'tag_music',
type: 'tuijian',
tid: tid,
page: pg,
lang: '',
},
postType: 'form',
});
//console.log('catedata:', res);
let data = JSON.parse(res.content).data;
let videos = [];
for(let i=0;i<data.length;i++){
const item = data[i];
videos.push({
book_id: item['mp3'],
book_name: item['mname'],
book_pic: item['pic'].replace('/img', imgUrl),
book_remarks: item['play_time'],
})
}
return JSON.stringify({
list: videos,
});
}
async function detail(id) {
try {
let playUrl = id;
if(!id.startsWith('http')) {
playUrl = siteUrl + '/xplay/?act=songplay&id=' + id;
}
const video = {
book_id: id,
book_actor: 'Leospring',
book_play_from: 'Leospring',
urls: '播放$' + playUrl,
book_director: 'Leospring',
book_content: '该音乐由公众号【蚂蚁科技杂谈】用爱发电制作,欢迎收听!',
};
const list = [video];
const result = { list };
return JSON.stringify(result);
} catch (e) {}
return null;
}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
async function search(wd, quick, pg) {
let url = siteUrl + '/search/?key=' + wd;
const html = await request(url);
const $ = load(html);
const cards = $('div.tab-item.tab-song > div.card-list.d-none.d-md-block > div')
let videos = _.map(cards, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
return {
book_id: id,
book_name: name,
book_pic: pic,
book_remarks: remark,
};
});
return JSON.stringify({
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

163
cat/js/zzmusic_open.js Normal file

@ -0,0 +1,163 @@
import { Crypto, load, _ } from './lib/cat.js';
//代理地址
let siteUrl = 'https://gh.7761.cf/https://zz123.com';
let imgUrl = 'https://music.jsbaidu.com';
let siteKey = '';
let siteType = 0;
let headers = {};
async function request(reqUrl, postData, agentSp, get) {
let res = await req(reqUrl, {
method: get ? 'get' : 'post',
headers: headers,
data: postData || {},
postType: get ? '' : 'form',
});
let content = res.content;
return content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
if (cfg.ext) {
siteUrl = cfg.ext;
}
}
async function home(filter) {
const html = await request(siteUrl);
const $ = load(html);
const cates = $('ul.aside-menu-list.channel > li')
let classes = _.map(cates, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('a > span')[0]).text();
return {
type_id: id,
type_name: name
};
});
return JSON.stringify({
class: classes
});
}
async function homeVod() {
const html = await request(siteUrl);
const $ = load(html);
const cards = $('div.page-main-wrap > div > div > div.card-list.d-none.d-md-block > div');
let videos = _.map(cards, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
return {
vod_id: id,
vod_name: name,
vod_pic: pic,
vod_remarks: remark
};
});
return JSON.stringify({
list: videos
});
}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
let url = siteUrl + '/ajax/';
let res = await req(url, {
method: 'post',
data: {
act: 'tag_music',
type: 'tuijian',
tid: tid,
page: pg,
lang: ''
},
postType: 'form'
});
//console.log('catedata:', res);
let data = JSON.parse(res.content).data;
let videos = [];
for(let i=0;i<data.length;i++){
const item = data[i];
videos.push({
vod_id: item['mp3'],
vod_name: item['mname'],
vod_pic: item['pic'].replace('/img', imgUrl),
vod_remarks: item['play_time']
})
}
return JSON.stringify({
list: videos
});
}
async function detail(id) {
try {
let playUrl = id;
if(!id.startsWith('http')) {
playUrl = siteUrl + '/xplay/?act=songplay&id=' + id;
}
const video = {
vod_id: id,
vod_actor: 'Leospring',
vod_play_from: 'Leospring',
vod_play_url: '播放$' + playUrl,
vod_director: 'Leospring',
vod_content: '该音乐由公众号【蚂蚁科技杂谈】用爱发电制作,欢迎收听!',
};
const list = [video];
const result = { list };
return JSON.stringify(result);
} catch (e) {}
return null;
}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
async function search(wd, quick, pg) {
let url = siteUrl + '/search/?key=' + wd;
const html = await request(url);
const $ = load(html);
const cards = $('div.tab-item.tab-song > div.card-list.d-none.d-md-block > div')
let videos = _.map(cards, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
return {
vod_id: id,
vod_name: name,
vod_pic: pic,
vod_remarks: remark,
};
});
return JSON.stringify({
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}