tvbox_config/open/netease_music_open.js
liushiquan 36ab603d34 init
2024-06-01 22:41:46 +08:00

203 lines
5.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Crypto, load, _ } from './lib/cat.js';
//let siteUrl = 'https://m.xiangdao.me';
let siteUrl ='https://v.nmvod.cn/api.php';
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';
let headers = {
'User-Agent': MOBILE_UA,
'Referer': siteUrl + '/'
};
let jxUrl = ['https://api.cnmcom.com/webcloud/nmsvip.php?url=','https://api.cnmcom.com/webcloud/nmsssvip.php?vid=', 'https://api.cnmcom.com/webcloud/nmssvip.php?url=', 'https://api.cnmcom.com/webcloud/m3u8.php?url='];
async function request(reqUrl, postData) {
let res = await req(reqUrl, {
method: 'post',
headers: headers,
data: postData || {},
postType: '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) {
let classes = [{
type_id: '3778678',
type_name: '热歌榜',
},{
type_id: '19723756',
type_name: '飙升榜',
},{
type_id: '3779629',
type_name: '新歌榜',
},{
type_id: '2884035',
type_name: '原创歌曲榜',
},{
type_id: '5213356842',
type_name: '新说唱热歌榜',
},{
type_id: '991319590',
type_name: '说唱榜',
},{
type_id: '2250011882',
type_name: '抖音排行榜',
},{
type_id: '745956260',
type_name: '韩语榜',
},{
type_id: '2809513713',
type_name: '欧美热歌榜',
},{
type_id: '2809577409',
type_name: '欧美新歌榜',
},{
type_id: '5059644681',
type_name: '日语榜',
},{
type_id: '3112516681',
type_name: '中国新乡村音乐排行榜',
}];
return JSON.stringify({
class: classes,
});
}
async function homeVod() {
}
async function category(tid, pg, filter, ext) {
let playList = JSON.parse(await request(siteUrl, {
'types': 'playlist',
'id': tid,
})).playlist;
let videos = _.map(playList.tracks, n => {
return {
vod_id: n.id,
vod_name: n.name,
vod_pic: n.al.picUrl,
vod_remarks: n.ar[0].name
}
});
return JSON.stringify({
list: videos,
page: pg,
total: videos.length
});
}
async function detail(id) {
try {
let playUrl = JSON.parse(await request(siteUrl, {
'types': 'url',
'id': id,
'source': 'netease',
})).url;
const video = {
vod_play_from: 'Leospring',
vod_play_url: playUrl,
vod_content: '该作品由leospring采集分享公众号【蚂蚁科技杂谈】请勿传播分享仅供技术学习使用请在学习后24小时内删除由此产生的任何法律风险自行承担与本作者无关',
};
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 playList = JSON.parse(await request(siteUrl, {
'types': 'search',
'name': wd,
'source':'netease',
'count': '20',
'pages': pg
}));
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
let videos = _.map(playList, n => {
return {
vod_id: n.id,
vod_name: n.name,
vod_pic: js2Base + base64Encode(n.pic_id),
vod_remarks: ''
}
});
return JSON.stringify({
list: videos,
page: pg,
total: videos.length
});
}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
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') {
let picUrl = JSON.parse(await request(siteUrl, {
'types': 'pic',
'id': url,
'source': 'netease',
})).url
var resp = await req(picUrl, {
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,
};
}