cs
This commit is contained in:
49
utils/fetchList.js
Normal file
49
utils/fetchList.js
Normal file
@@ -0,0 +1,49 @@
|
||||
import axios from "axios"
|
||||
|
||||
// 获取分类集合
|
||||
async function cate_list() {
|
||||
try {
|
||||
let resp = await axios.get("https://program-sc.miguvideo.com/live/v2/tv-data/a5f78af9d160418eb679a6dd0429c920")
|
||||
let liveList = resp.data.body.liveList
|
||||
// 印象天下没有内容
|
||||
liveList = liveList.filter((item) => {
|
||||
return item.name != "印象天下"
|
||||
})
|
||||
return liveList
|
||||
} catch (error) {
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
// 所有数据
|
||||
async function data_list() {
|
||||
try {
|
||||
let cates = await cate_list()
|
||||
|
||||
for (let cate in cates) {
|
||||
let resp = await axios.get("https://program-sc.miguvideo.com/live/v2/tv-data/" + cates[cate].vomsID)
|
||||
cates[cate].dataList = resp.data.body.dataList;
|
||||
}
|
||||
// console.log(cates)
|
||||
return cates
|
||||
} catch (error) {
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
// 获取电视链接
|
||||
async function getUrlInfo(contId) {
|
||||
try {
|
||||
let resp = await axios.get(`https://webapi.miguvideo.com/gateway/playurl/v2/play/playurlh5?contId=${contId}&rateType=3&startPlay=true&xh265=false&channelId=0131_200300220100002`)
|
||||
// console.log(resp.data.body.urlInfo.url)
|
||||
// console.log(resp.data)
|
||||
if (resp.data?.body?.urlInfo?.url) {
|
||||
return resp.data.body.urlInfo.url
|
||||
}
|
||||
return ""
|
||||
} catch (error) {
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
export { cate_list, data_list, getUrlInfo }
|
||||
198
utils/getSign.js
Normal file
198
utils/getSign.js
Normal file
@@ -0,0 +1,198 @@
|
||||
const playURLImport = {
|
||||
wbg: {
|
||||
__wbindgen_string_new: (t, e) => 0,
|
||||
__wbg_buffer_085ec1f694018c4f: (t) => 0,
|
||||
__wbg_call_01734de55d61e11d: () => 0,
|
||||
__wbg_call_cb65541d95d71282: () => 0,
|
||||
__wbg_crypto_1d1f22824a6a080c: (t) => 0,
|
||||
__wbg_getRandomValues_3aa56aa6edec874c: () => 0,
|
||||
__wbg_globalThis_1d39714405582d3c: () => 0,
|
||||
__wbg_global_651f05c6a0944d1c: () => 0,
|
||||
__wbg_msCrypto_eb05e62b530a1508: (t) => 0,
|
||||
__wbg_new_8125e318e6245eed: (t) => 0,
|
||||
__wbg_newnoargs_581967eacc0e2604: (t, e) => 0,
|
||||
__wbg_newwithbyteoffsetandlength_6da8e527659b86aa: (t, e, n) => 0,
|
||||
__wbg_newwithlength_e5d69174d6984cd7: (t) => 0,
|
||||
__wbg_node_104a2ff8d6ea03a2: (t) => 0,
|
||||
__wbg_process_4a72847cc503995b: (t) => 0,
|
||||
__wbg_randomFillSync_5c9c955aa56b6049: () => 0,
|
||||
__wbg_require_cca90b1a94a0255b: () => 0,
|
||||
__wbg_self_1ff1d729e9aae938: () => { },
|
||||
__wbg_set_5cf90238115182c3: (t, e, n) => 0,
|
||||
__wbg_subarray_13db269f57aa838d: (t, e, n) => 0,
|
||||
__wbg_versions_f686565e586dd935: (t) => 0,
|
||||
__wbg_window_5f4faef6c12b79ec: () => 0,
|
||||
__wbindgen_is_function: (t) => 0,
|
||||
__wbindgen_is_object: (t) => 0,
|
||||
__wbindgen_is_string: (t) => 0,
|
||||
__wbindgen_is_undefined: (t) => 0,
|
||||
__wbindgen_memory: () => 0,
|
||||
__wbindgen_object_clone_ref: (t) => 0,
|
||||
__wbindgen_object_drop_ref: (t) => { },
|
||||
__wbindgen_throw: (t, e) => { throw new Error() },
|
||||
}
|
||||
}
|
||||
|
||||
const gatewayImport = {
|
||||
wbg: {
|
||||
__wbindgen_debug_string: (t, e) => { },
|
||||
__wbindgen_object_drop_ref: (t) => { },
|
||||
__wbindgen_string_new: (t, e) => "",
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化wasm
|
||||
* @param {string} masmURL - wasm地址
|
||||
* @param {object} objImport - 必要的导入方法
|
||||
* @returns {object} - wasm导出的内容
|
||||
*/
|
||||
async function init_wasm(masmURL, objImport) {
|
||||
// 获取wasm文件
|
||||
const resp = await fetch(masmURL);
|
||||
// 初始化
|
||||
const { instance } = await WebAssembly.instantiateStreaming(resp, objImport)
|
||||
return instance.exports;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const O = new TextEncoder("utf-8");
|
||||
const _ = new TextDecoder('utf-8', { fatal: !0, ignoreBOM: !0 });
|
||||
// wasm导出方法对象
|
||||
const o = await init_wasm("https://cdnm.miguvideo.com/mgs/common/miguvendor/prd/playurl-crypto.wasm", playURLImport)
|
||||
|
||||
// 内存
|
||||
var g = null;
|
||||
function y() {
|
||||
return null !== g && 0 !== g.byteLength || (g = new Uint8Array(o.memory.buffer)),
|
||||
g
|
||||
}
|
||||
|
||||
// 编码为字符
|
||||
function b(t, e) {
|
||||
console.log("解码")
|
||||
return t >>>= 0,
|
||||
_.decode(y().subarray(t, t + e))
|
||||
}
|
||||
|
||||
var k
|
||||
function I(t, e, n) {
|
||||
if (void 0 === n) {
|
||||
var r = O.encode(t)
|
||||
, o = e(r.length, 1) >>> 0;
|
||||
return y().subarray(o, o + r.length).set(r),
|
||||
k = r.length,
|
||||
o
|
||||
}
|
||||
for (var i = t.length, a = e(i, 1) >>> 0, c = y(), s = 0; s < i; s++) {
|
||||
var u = t.charCodeAt(s);
|
||||
if (u > 127)
|
||||
break;
|
||||
c[a + s] = u
|
||||
}
|
||||
if (s !== i) {
|
||||
// 0 !== s && (t = p()(t).call(t, s)),
|
||||
// a = n(a, i, i = s + 3 * t.length, 1) >>> 0;
|
||||
// var f = y().subarray(a + s, a + i);
|
||||
// s += T(t, f).written
|
||||
}
|
||||
return k = s,
|
||||
a
|
||||
}
|
||||
|
||||
// 内存
|
||||
var R = null;
|
||||
function P() {
|
||||
return null !== R && 0 !== R.byteLength || (R = new Int32Array(o.memory.buffer)),
|
||||
R
|
||||
}
|
||||
|
||||
function $(t, e) {
|
||||
var n, r;
|
||||
try {
|
||||
var i = o.__wbindgen_add_to_stack_pointer(-16)
|
||||
, a = I(t, o.__wbindgen_malloc, o.__wbindgen_realloc)
|
||||
, c = k
|
||||
, s = e == null ? 0 : I(e, o.__wbindgen_malloc, o.__wbindgen_realloc)
|
||||
, u = k;
|
||||
|
||||
console.log("i:" + i)
|
||||
console.log("a:" + a)
|
||||
console.log("c:" + c)
|
||||
console.log("s:" + s)
|
||||
console.log("u:" + u)
|
||||
o.base64AesCBC_encrypt(i, a, c, s, u);
|
||||
var f = P()[i / 4 + 0]
|
||||
, l = P()[i / 4 + 1]
|
||||
, p = P()[i / 4 + 2]
|
||||
, d = P()[i / 4 + 3]
|
||||
, h = f
|
||||
, v = l;
|
||||
|
||||
console.log("f:" + f)
|
||||
console.log("l:" + l)
|
||||
console.log("p:" + p)
|
||||
console.log("d:" + d)
|
||||
// 测试不会抛出
|
||||
// if (d)
|
||||
// throw h = 0,
|
||||
// v = 0,
|
||||
// A(p);
|
||||
return n = h,
|
||||
r = v,
|
||||
b(h, v)
|
||||
} finally {
|
||||
o.__wbindgen_add_to_stack_pointer(16),
|
||||
o.__wbindgen_free(n, r, 1)
|
||||
}
|
||||
}
|
||||
function M(t, e) {
|
||||
var n, r;
|
||||
try {
|
||||
var i = o.__wbindgen_add_to_stack_pointer(-16)
|
||||
, a = I(t, o.__wbindgen_malloc, o.__wbindgen_realloc)
|
||||
, c = k
|
||||
, s = e == null ? 0 : I(e, o.__wbindgen_malloc, o.__wbindgen_realloc)
|
||||
, u = k;
|
||||
o.md5_encrypt(i, a, c, s, u);
|
||||
var f = P()[i / 4 + 0]
|
||||
, l = P()[i / 4 + 1]
|
||||
, p = P()[i / 4 + 2]
|
||||
, d = P()[i / 4 + 3]
|
||||
, h = f
|
||||
, v = l;
|
||||
// 测试不会抛出
|
||||
// if (d)
|
||||
// throw h = 0,
|
||||
// v = 0,
|
||||
// A(p);
|
||||
return n = h,
|
||||
r = v,
|
||||
b(h, v)
|
||||
} finally {
|
||||
o.__wbindgen_add_to_stack_pointer(16),
|
||||
o.__wbindgen_free(n, r, 1)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function playurlEncrypt() {
|
||||
let t = {
|
||||
sent: ""
|
||||
}
|
||||
// const base = $("c1c19c14-58ef-41ed-9387-5139dfd8ebe6", "0e00b1070eba0f0b000b0e020abbbbb1")
|
||||
// console.log("第一个base:" + base)
|
||||
|
||||
const md5 = M("17474923438226088074209907828", "babb0bb7ba0bb1ba0cbb0a0b0a010abf")
|
||||
console.log("第二个md5:" + md5)
|
||||
// const exports = await init_wasm("https://cdnm.miguvideo.com/mgs/common/miguvendor/prd/gateway-crypto.wasm")
|
||||
// console.log(exports)
|
||||
|
||||
}
|
||||
|
||||
playurlEncrypt()
|
||||
|
||||
// const exports = await init_wasm("https://cdnm.miguvideo.com/mgs/common/miguvendor/prd/gateway-crypto.wasm", gatewayImport)
|
||||
// console.log(exports)
|
||||
38
utils/getURL.js
Normal file
38
utils/getURL.js
Normal file
@@ -0,0 +1,38 @@
|
||||
import puppeteer from 'puppeteer';
|
||||
|
||||
// 打开浏览器
|
||||
async function get_browser(path) {
|
||||
return await puppeteer.launch({
|
||||
args: [
|
||||
"--no-sandbox"
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
// 创建页面
|
||||
async function get_page(browser) {
|
||||
return await browser.newPage();
|
||||
}
|
||||
|
||||
// 获取url
|
||||
async function get_url(page, video_id) {
|
||||
let url = ""
|
||||
let base_url = ""
|
||||
page.on("requestfinished", request => {
|
||||
if (request.url().startsWith("https://hlszymgsplive.miguvideo.com/")) {
|
||||
url = request.url()
|
||||
}
|
||||
if (request.url().startsWith("https://h5live.gslb.cmvideo.cn/")) {
|
||||
base_url = request.url()
|
||||
}
|
||||
})
|
||||
await page.goto('https://m.miguvideo.com/m/liveDetail/' + video_id, { waitUntil: "networkidle2" });
|
||||
return url, base_url
|
||||
}
|
||||
|
||||
// 关闭浏览器
|
||||
async function close_browser(browser) {
|
||||
await browser.close()
|
||||
}
|
||||
|
||||
export { get_browser, get_page, get_url, close_browser }
|
||||
74
utils/getddCalcuURL.js
Normal file
74
utils/getddCalcuURL.js
Normal file
@@ -0,0 +1,74 @@
|
||||
const importObj = {
|
||||
a: {
|
||||
a: (a, b, c) => { },
|
||||
b: (a) => { return 0 },
|
||||
c: () => { },
|
||||
d: (a, b, c, d) => { return 0 },
|
||||
e: (a) => { return 0 },
|
||||
f: (a, b, c, d, e) => { return 0 },
|
||||
g: (a, b) => { return 0 },
|
||||
h: (a, b) => { return 0 },
|
||||
i: (a) => { return 0 },
|
||||
j: (a, b, c, d, e) => { return 0 }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 加密url
|
||||
* @param {string} videoURL - 视频url
|
||||
* @param {Uint8Array} memoryView - 内存
|
||||
* @param {Function} getEncrypt - 加密方法
|
||||
* @returns {string} - 加密地址
|
||||
*/
|
||||
function encrypt(videoURL, memoryView, getEncrypt) {
|
||||
// 将地址写入内存
|
||||
let i;
|
||||
for (i = 0; i < videoURL.length; ++i) {
|
||||
memoryView[i] = videoURL.charCodeAt(i)
|
||||
}
|
||||
memoryView[i] = 0
|
||||
|
||||
// 加密内存中的url
|
||||
let start = getEncrypt(0)
|
||||
|
||||
// 从内存中读取加密后的url
|
||||
let encryptedURL = ""
|
||||
for (let i = start; memoryView[i] != 0; ++i) {
|
||||
encryptedURL += String.fromCharCode(memoryView[i])
|
||||
}
|
||||
return encryptedURL
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 初始化wasm
|
||||
* @param {string} masmURL - wasm地址
|
||||
* @returns {object} - wasm导出的内容
|
||||
*/
|
||||
async function init_wasm(masmURL) {
|
||||
// 获取wasm文件
|
||||
let resp = await fetch(masmURL);
|
||||
// 初始化
|
||||
let { instance } = await WebAssembly.instantiateStreaming(resp, importObj)
|
||||
return instance.exports;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取加密url
|
||||
* @param {object} exports - wasm导出的内容
|
||||
* @param {string} videoURL - 视频地址
|
||||
* @returns {string} - 播放地址
|
||||
*/
|
||||
function getEncryptURL(exports, videoURL) {
|
||||
// 获得内存
|
||||
const memory = exports.k
|
||||
const memoryView = new Uint8Array(memory.buffer)
|
||||
|
||||
// 获取加密方法
|
||||
const getEncrypt = exports.m
|
||||
return encrypt(videoURL, memoryView, getEncrypt)
|
||||
}
|
||||
|
||||
export { init_wasm, getEncryptURL }
|
||||
Reference in New Issue
Block a user