添加蓝光、高清、标清

This commit is contained in:
test
2025-08-08 20:29:29 +08:00
parent 4bfd7e64f8
commit c762d1e0b9
12 changed files with 1592 additions and 352 deletions

116
utils/EncryUtils.js Normal file
View File

@@ -0,0 +1,116 @@
import crypto from 'crypto'
import CryptoJS from 'crypto-js';
const KEY_AES = "MQDUjI19MGe3BhaqTlpc9g==";
const IV = "abcdefghijklmnop";
const RSA_PRIVATE_KEY_PKCS8 = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOhvWsrglBpQGpjB\r8okxLUCaaiKKOytn9EtvytB5tKDchmgkSaXpreWcDy/9imsuOiVCSdBr6hHjrTN7\rQKkA4/QYS8ptiFv1ap61PiAyRFDI1b8wp2haJ6HF1rDShG2XdfWIhLk4Hj6efVZA\rSfa3taM7C8NseWoWh05Cp26g4hXZAgMBAAECgYBzqZXghsisH1hc04ZBRrth/nT6\rIxc2jlA+ia6+9xEvSw2HHSeY7COgsnvMQbpzg1lj2QyqLkkYBdfWWmrerpa/mb7j\rm6w95YKs5Ndii8NhFWvC0eGK8Ygt02DeLohmkQu3B+Yq8JszjB7tQJRR2kdG6cPt\rKp99ZTyyPom/9uD+AQJBAPxCwajHAkCuH4+aKdZhH6n7oDAxZoMH/mihDRxHZJof\rnT+K662QCCIx0kVCl64s/wZ4YMYbP8/PWDvLMNNWC7ECQQDr4V23KRT9fAPAN8vB\rq2NqjLAmEx+tVnd4maJ16Xjy5Q4PSRiAXYLSr9uGtneSPP2fd/tja0IyawlP5UPL\rl76pAkAeXqMWAK+CvfPKxBKZXqQDQOnuI2RmDgZQ7mK3rtirvXae+ciZ4qc4Bqt7\r7yJ3s68YRlHQR+OMzzeeKz47kzZhAkAPteH1ChJw06q4Sb8TdiPX++jbkFiCxgiN\rCsaMTfGVU/Y8xGSSYCgPelEHxu1t2wwVa/tdYs505zYmkSGT1NaJAkBCS5hymXsA\rB92Fx8eGW5WpLfnpvxl8nOcP+eNXobi8Sc6q1FmoHi8snbcmBhidcDdcieKn+DbX\rGG3BQE/OCOkM\r";
// MD5标准加密
function getStringMD5(str) {
// 创建 MD5 哈希对象
const md5 = crypto.createHash("md5");
// 更新数据(默认 UTF-8 编码)
md5.update(str);
// 生成十六进制哈希值并转为小写
return md5.digest("hex").toLowerCase();
}
/**
* base64加密
*/
function Base64encrypt(str) {
// create a buffer
const buff = Buffer.from(str, 'utf-8');
// encode buffer as Base64
return buff.toString('base64')
}
/**
* base64解密
*/
function Base64decrypt(str) {
// create a buffer
const buff = Buffer.from(str, 'base64');
// encode buffer as Base64
return buff.toString('utf-8')
}
// AES 解密方法
function AESdecrypt(encryptedText, base64Key) {
// 解码 Base64 密钥和密文
const keyBytes = CryptoJS.enc.Base64.parse(base64Key);
const encryptedBytes = CryptoJS.enc.Base64.parse(encryptedText);
// 处理 IV
const iv = CryptoJS.enc.Utf8.parse(IV);
// 配置解密参数
const decryptOptions = {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
};
// 执行 AES 解密
const decrypted = CryptoJS.AES.decrypt(
{ ciphertext: encryptedBytes },
keyBytes,
decryptOptions
);
// 将解密结果转为 UTF-8 字符串
return decrypted.toString(CryptoJS.enc.Utf8);
}
// AES 加密方法
function AESencrypt(str, base64Key) {
// 解码 Base64 密钥
const keyBytes = CryptoJS.enc.Base64.parse(base64Key);
// 处理 IV 和明文
const iv = CryptoJS.enc.Utf8.parse(IV);
const plainBytes = CryptoJS.enc.Utf8.parse(str);
// 配置加密参数
const encryptOptions = {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
};
// 执行 AES 加密
const encrypted = CryptoJS.AES.encrypt(
plainBytes,
keyBytes,
encryptOptions
);
// 返回 Base64 编码的密文
return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
}
/**
*RSA 加密
*/
function RSAencrypt(str) {
// 处理密钥:移除 \r 并解码 Base64
const keyBytes = Buffer.from(RSA_PRIVATE_KEY_PKCS8.replace(/\r/g, ''), 'base64');
// 创建私钥对象
const privateKey = crypto.createPrivateKey({
key: keyBytes,
format: 'der',
type: 'pkcs8'
});
// 使用私钥加密
const encrypted = crypto.privateEncrypt(
{ key: privateKey, padding: crypto.constants.RSA_PKCS1_PADDING },
Buffer.from(str)
);
return encrypted.toString('base64');
}
export { getStringMD5, KEY_AES, AESdecrypt, AESencrypt, Base64decrypt, Base64encrypt, RSAencrypt }

132
utils/androidURL.js Normal file
View File

@@ -0,0 +1,132 @@
import axios from "axios";
import { getStringMD5 } from "./EncryUtils.js";
import { getEncryptURL } from "./getddCalcuURL.js";
import { changedDdCalcu } from "./datas.js";
function getSaltAndSign(md5) {
const salt = 1230024
const suffix = "3ce941cc3cbc40528bfd1c64f9fdf6c0migu0123"
const sign = getStringMD5(md5 + suffix)
return {
salt: salt,
sign: sign
}
}
function replaceChars(url, pid, rateType) {
// 参数为空或者不符条件
if (!url || rateType <= 1 || rateType >= 5 || !pid) {
return ""
}
const spl = url.split("&ddCalcu=")
const prefix = spl[0]
let suffix = spl[1]
suffix = suffix.replace("sv=10000&ct=www", "sv=10004&ct=android")
// 默认替换方式
let defaultChange = ["x", "a", "y", "a"]
let index = [5, 8, 11, 14]
// 一些标清不需要改
let noChangeStandard = false
// 替换自定义替换方式
if (changedDdCalcu[pid] != undefined) {
noChangeStandard = changedDdCalcu[pid].noChangeStandard
if (changedDdCalcu[pid]["all"] != undefined) {
defaultChange = changedDdCalcu[pid]["all"].data
index = changedDdCalcu[pid]["all"].index
}
if (changedDdCalcu[pid][rateType]) {
// 若相邻两个重复可以写另一个的rateType
if (!isNaN(changedDdCalcu[pid][rateType])) {
const rate = changedDdCalcu[pid][rateType]
defaultChange = changedDdCalcu[pid][rate].data
index = changedDdCalcu[pid][rate].index
} else {
defaultChange = changedDdCalcu[pid][rateType].data
index = changedDdCalcu[pid][rateType].index
}
}
}
// 一些标清需要改
if (rateType == 2 && !noChangeStandard) {
defaultChange[0] = "v"
}
// 替换
let suffixSplit = suffix.split("")
for (let i = 0; i < index.length; i++) {
suffixSplit[index[i] - 1] = defaultChange[i]
}
return `${prefix}&ddCalcu=${suffixSplit.join("")}`
}
async function getAndroidVideoURL(userId, token, exports, pid, rateType) {
if (rateType <= 1 || rateType >= 5) {
return {
url: "",
rateType: 0
}
}
if (!exports) {
return {
url: "",
rateType: 0
}
}
// 获取url
const timestramp = Date.now()
const appVersion = "26000370"
let headers = {
AppVersion: 2600037000,
TerminalId: "android",
"X-UP-CLIENT-CHANNEL-ID": "2600037000-99000-200300220100002"
}
if (rateType != 2) {
headers.UserId = userId
headers.UserToken = token
}
// console.log(headers)
const str = timestramp + pid + appVersion
const md5 = getStringMD5(str)
const result = getSaltAndSign(md5)
// 请求
const baseURL = "https://play.miguvideo.com/playurl/v1/play/playurl"
const params = "?sign=" + result.sign + "&rateType=" + rateType
+ "&contId=" + pid + "&timestamp=" + timestramp + "&salt=" + result.salt
const respData = await axios.get(baseURL + params, {
headers: headers
}).then(r => r.data)
// console.log(respData)
const url = respData.body.urlInfo?.url
// console.log(rateType)
// console.log(url)
if (!url) {
return {
url: "",
rateType: 0
}
}
rateType = parseInt(respData.body.urlInfo?.rateType)
// 将URL加密
const encryURL = getEncryptURL(exports, url)
// console.log("加密后:" + encryURL)
// 替换字符,拼接结果
const resURL = replaceChars(encryURL, pid, rateType)
// console.log("app替换后的链接" + resURL)
// console.log("播放画质:" + rateType)
return {
url: resURL,
rateType: rateType
}
}
export default getAndroidVideoURL

826
utils/datas.js Normal file
View File

@@ -0,0 +1,826 @@
// 频道信息
const channelName = [
{
cateName: "央视",
data: [
{ name: "CCTV1综合", pid: "608807420", },
{ name: "CCTV2财经", pid: "631780532", },
{ name: "CCTV3综艺", pid: "624878271", },
{ name: "CCTV4中文国际", pid: "631780421", },
{ name: "CCTV5体育", pid: "641886683", },
{ name: "CCTV5+体育赛事", pid: "641886773", },
{ name: "CCTV6电影", pid: "624878396", },
{ name: "CCTV7国防军事", pid: "673168121", },
{ name: "CCTV8电视剧", pid: "624878356", },
{ name: "CCTV9纪录", pid: "673168140", },
{ name: "CCTV10科教", pid: "624878405", },
{ name: "CCTV11戏曲", pid: "667987558", },
{ name: "CCTV12社会与法", pid: "673168185", },
{ name: "CCTV13新闻", pid: "608807423", },
{ name: "CCTV14少儿", pid: "624878440", },
{ name: "CCTV15音乐", pid: "673168223", },
{ name: "CCTV17农业农村", pid: "673168256", },
{ name: "CCTV4欧洲", pid: "608807419", },
{ name: "CCTV4美洲", pid: "608807416", },
{ name: "CGTN外语记录", pid: "609006487", },
{ name: "CGTN阿拉伯语", pid: "609154345", },
{ name: "CGTN西班牙语", pid: "609006450", },
{ name: "CGTN法语", pid: "609006476", },
{ name: "CGTN俄语", pid: "609006446", },
{ name: "老故事", pid: "884121956", },
{ name: "发现之旅", pid: "624878970", },
{ name: "中学生", pid: "708869532", },
{ name: "CGTN", pid: "609017205", },
]
},
{
cateName: "卫视",
data: [
{ name: "东方卫视", pid: "651632648", },
{ name: "江苏卫视", pid: "623899368", },
{ name: "广东卫视", pid: "608831231", },
{ name: "江西卫视", pid: "783847495", },
{ name: "河南卫视", pid: "790187291", },
{ name: "陕西卫视", pid: "738910838", },
{ name: "大湾区卫视", pid: "608917627", },
{ name: "湖北卫视", pid: "947472496", },
{ name: "吉林卫视", pid: "947472500", },
{ name: "青海卫视", pid: "947472506", },
{ name: "东南卫视", pid: "849116810", },
{ name: "海南卫视", pid: "947472502", },
{ name: "海峡卫视", pid: "849119120", },]
},
{
cateName: "地方",
data: [
{ name: "上海新闻综合", pid: "651632657", },
{ name: "上视东方影视", pid: "617290047", },
{ name: "上海第一财经", pid: "608780988", },
{ name: "南京新闻综合频道", pid: "838109047", },
{ name: "南京教科频道", pid: "838153729", },
{ name: "南京十八频道", pid: "838151753", },
{ name: "体育休闲频道", pid: "626064707", },
{ name: "江苏城市频道", pid: "626064714", },
{ name: "江苏国际", pid: "626064674", },
{ name: "江苏教育", pid: "628008321", },
{ name: "江苏影视频道", pid: "626064697", },
{ name: "江苏综艺频道", pid: "626065193", },
{ name: "公共新闻频道", pid: "626064693", },
{ name: "淮安新闻综合", pid: "639731826", },
{ name: "泰州新闻综合", pid: "639731818", },
{ name: "连云港新闻综合", pid: "639731715", },
{ name: "宿迁新闻综合", pid: "639731832", },
{ name: "徐州新闻综合", pid: "639731747", },
{ name: "优漫卡通频道", pid: "626064703", },
],
},
{
cateName: "影视",
data: [
{ name: "中国航天“逆袭”之路", pid: "617432318", },
{ name: "新片放映厅", pid: "619495952", },
{ name: "CHC影迷电影", pid: "952383261", },
{ name: "CHC动作电影", pid: "644368714", },
{ name: "CHC家庭影院", pid: "644368373", },
{ name: "和美乡途轮播台", pid: "713591450", },
{ name: "高清大片", pid: "629943678", },
{ name: "南方影视", pid: "614961829", },
{ name: "红色轮播台", pid: "713600957", },
{ name: "华语乐坛最强音", pid: "707671890", },
{ name: "周杰伦现场", pid: "625133682", },
{ name: "最强综艺趴", pid: "629942228", },
{ name: "嘉佳卡通", pid: "614952364", },
{ name: "经典动画大集合", pid: "629942219", },
{ name: "深度对话", pid: "625703337", },
{ name: "CETV1", pid: "923287154", },
{ name: "CETV2", pid: "923287211", },
{ name: "CETV4", pid: "923287339", },
{ name: "新动解码在一线", pid: "713589837", },
],
},
{
cateName: "体育",
data: [
{ name: "赛事最经典", pid: "646596895", },
{ name: "掼蛋精英赛", pid: "631354620", },
{ name: "体坛名栏汇", pid: "629943305", },
{ name: "咪咕24小时体育台", pid: "654102378", },
]
},
{
cateName: "熊猫",
data: [
{ name: "熊猫频道1", pid: "608933610", },
{ name: "熊猫频道2", pid: "608933640", },
{ name: "熊猫频道3", pid: "608934619", },
{ name: "熊猫频道4", pid: "608934721", },
{ name: "熊猫频道5", pid: "608935104", },
{ name: "熊猫频道6", pid: "608935797", },
{ name: "熊猫频道7", pid: "609169286", },
{ name: "熊猫频道8", pid: "609169287", },
{ name: "熊猫频道9", pid: "609169226", },
{ name: "熊猫频道10", pid: "609169285", },
]
},
]
// 加密字符串替换规则
// index 替换字符串位置从1开始
// data 与index一一对应修改字符为
// noChangeStandard 标清下第一个字符是否不需要修改
const changedDdCalcu = {
// 分类:央视 频道名:CCTV1综合
// "608807420": {
// "all": {
// index: [5, 8, 11, 14],
// data: ["x", "a", "a", "a"]
// },
// },
// 分类:央视 频道名:CCTV2财经
"631780532": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "z", "a"]
},
},
// 分类:央视 频道名:CCTV3综艺
"624878271": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
},
// 分类:央视 频道名:CCTV4中文国际
"631780421": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
},
// 分类:央视 频道名:CCTV5体育
"641886683": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
},
// 分类:央视 频道名:CCTV5+体育赛事
"641886773": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
},
// 分类:央视 频道名:CCTV6电影
"624878396": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
},
// 分类:央视 频道名:CCTV7国防军事
"673168121": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "d", "a"]
},
},
// 分类:央视 频道名:CCTV8电视剧
"624878356": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
},
// 分类:央视 频道名:CCTV9纪录
"673168140": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "d", "a"]
},
},
// 分类:央视 频道名:CCTV10科教
"624878405": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
},
// 分类:央视 频道名:CCTV11戏曲
"667987558": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "z", "a"]
},
},
// 分类:央视 频道名:CCTV12社会与法
"673168185": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "d", "a"]
},
},
// 分类:央视 频道名:CCTV13新闻
"608807423": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
},
// 分类:央视 频道名:CCTV14少儿
"624878440": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
},
// 分类:央视 频道名:CCTV15音乐
"673168223": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
},
// 分类:央视 频道名:CCTV17农业农村
"673168256": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
},
// 分类:央视 频道名:CCTV4欧洲
"608807419": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
},
// 分类:央视 频道名:CCTV4美洲
"608807416": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
},
// 分类:央视 频道名:CGTN外语记录
"609006487": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
noChangeStandard: true,
},
// 分类:央视 频道名:CGTN阿拉伯语
"609154345": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
noChangeStandard: true,
},
// 分类:央视 频道名:CGTN西班牙语
"609006450": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
noChangeStandard: true,
},
// 分类:央视 频道名:CGTN法语
"609006476": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
noChangeStandard: true,
},
// 分类:央视 频道名:CGTN俄语
"609006446": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
noChangeStandard: true,
},
// 分类:央视 频道名:老故事
"884121956": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "l", "a"]
},
noChangeStandard: true,
},
// 分类:央视 频道名:发现之旅
"624878970": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "l", "a"]
},
},
// 分类:央视 频道名:中学生
"708869532": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "z", "a"]
},
},
// 分类:央视 频道名:CGTN
"609017205": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
noChangeStandard: true,
},
// 分类:卫视 频道名:东方卫视
"651632648": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
},
// 分类:卫视 频道名:江苏卫视
"623899368": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
},
// 分类:卫视 频道名:广东卫视
"608831231": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
},
// 分类:卫视 频道名:江西卫视
"783847495": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
},
// 分类:卫视 频道名:河南卫视
"790187291": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
noChangeStandard: true,
},
// 分类:卫视 频道名:陕西卫视
"738910838": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "k", "a"]
},
},
// 分类:卫视 频道名:大湾区卫视
"608917627": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
noChangeStandard: true,
},
// 分类:卫视 频道名:湖北卫视
"947472496": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
},
// 分类:卫视 频道名:吉林卫视
"947472500": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "z", "a"]
},
noChangeStandard: true,
},
// 分类:卫视 频道名:青海卫视
"947472506": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "z", "a"]
},
noChangeStandard: true,
},
// 分类:卫视 频道名:东南卫视
"849116810": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "k", "a"]
},
},
// 分类:卫视 频道名:海南卫视
"947472502": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "z", "a"]
},
noChangeStandard: true,
},
// 分类:卫视 频道名:海峡卫视
"849119120": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "d", "a"]
},
},
// 分类:地方 频道名:上海新闻综合
"651632657": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
},
// 分类:地方 频道名:上视东方影视
"617290047": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "c", "a"]
},
},
// 分类:地方 频道名:上海第一财经
"608780988": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "l", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:南京新闻综合频道
"838109047": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "c", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:南京教科频道
"838153729": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:南京十八频道
"838151753": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:体育休闲频道
"626064707": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:江苏城市频道
"626064714": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:江苏国际
"626064674": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:江苏教育
"628008321": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:江苏影视频道
"626064697": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:江苏综艺频道
"626065193": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "d", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:公共新闻频道
"626064693": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:淮安新闻综合
"639731826": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "k", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:泰州新闻综合
"639731818": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "k", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:连云港新闻综合
"639731715": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:宿迁新闻综合
"639731832": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "k", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:徐州新闻综合
"639731747": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
noChangeStandard: true,
},
// 分类:地方 频道名:优漫卡通频道
"626064703": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
noChangeStandard: true,
},
// 分类:影视 频道名:中国航天“逆袭”之路
"617432318": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
},
// 分类:影视 频道名:新片放映厅
"619495952": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "l", "a"]
},
},
// 分类:影视 频道名:CHC影迷电影
"952383261": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
},
// 分类:影视 频道名:CHC动作电影
"644368714": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
},
// 分类:影视 频道名:CHC家庭影院
"644368373": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
},
// 分类:影视 频道名:和美乡途轮播台
"713591450": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "y", "a"]
},
},
// 分类:影视 频道名:高清大片
"629943678": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
},
// 分类:影视 频道名:南方影视
"614961829": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "k", "a"]
},
noChangeStandard: true,
},
// 分类:影视 频道名:红色轮播台
"713600957": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "l", "a"]
},
},
// 分类:影视 频道名:华语乐坛最强音
"707671890": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "k", "a"]
},
},
// 分类:影视 频道名:周杰伦现场
"625133682": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
},
// 分类:影视 频道名:最强综艺趴
"629942228": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
},
// 分类:影视 频道名:嘉佳卡通
"614952364": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
noChangeStandard: true,
},
// 分类:影视 频道名:经典动画大集合
"629942219": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
},
// 分类:影视 频道名:深度对话
"625703337": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
},
// 分类:影视 频道名:CETV1
"923287154": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "d", "a"]
},
},
// 分类:影视 频道名:CETV2
"923287211": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
},
// 分类:影视 频道名:CETV4
"923287339": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
},
// 分类:影视 频道名:新动解码在一线
"713589837": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "k", "a"]
},
},
// 分类:体育 频道名:赛事最经典
"646596895": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "k", "a"]
},
},
// 分类:体育 频道名:掼蛋精英赛
"631354620": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
},
// 分类:体育 频道名:体坛名栏汇
"629943305": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
},
// 分类:体育 频道名:咪咕24小时体育台
"654102378": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "b", "a"]
},
},
// 分类:熊猫 频道名:熊猫频道1
"608933610": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
noChangeStandard: true,
},
// 分类:熊猫 频道名:熊猫频道2
"608933640": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
noChangeStandard: true,
},
// 分类:熊猫 频道名:熊猫频道3
"608934619": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "w", "a"]
},
noChangeStandard: true,
},
// 分类:熊猫 频道名:熊猫频道4
"608934721": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
noChangeStandard: true,
},
// 分类:熊猫 频道名:熊猫频道5
"608935104": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "d", "a"]
},
noChangeStandard: true,
},
// 分类:熊猫 频道名:熊猫频道6
"608935797": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "x", "a"]
},
noChangeStandard: true,
},
// 分类:熊猫 频道名:熊猫频道7
"609169286": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
noChangeStandard: true,
},
// 分类:熊猫 频道名:熊猫频道8
"609169287": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
noChangeStandard: true,
},
// 分类:熊猫 频道名:熊猫频道9
"609169226": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
noChangeStandard: true,
},
// 分类:熊猫 频道名:熊猫频道10
"609169285": {
"all": {
index: [5, 8, 11, 14],
data: ["x", "a", "a", "a"]
},
noChangeStandard: true,
},
}
export { changedDdCalcu, channelName }

View File

@@ -1,5 +1,12 @@
import axios from "axios"
// 睡眠
function delay(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms)
})
}
// 获取分类集合
async function cate_list() {
try {
@@ -46,4 +53,4 @@ async function getUrlInfo(contId) {
}
}
export { cate_list, data_list, getUrlInfo }
export { cate_list, data_list, getUrlInfo, delay }

51
utils/refreshToken.js Normal file
View File

@@ -0,0 +1,51 @@
import axios from "axios"
import { AESencrypt, getStringMD5, KEY_AES, RSAencrypt } from "./EncryUtils.js"
// 类似URLEncoder.encode()的效果
function encodeURLEncoder(str) {
return encodeURIComponent(str)
.replace(/[!'()*]/g, (c) =>
'%' + c.charCodeAt(0).toString(16).toUpperCase()
)
.replace(/%20/g, '+');
}
// 刷新token
async function refreshToken(userId, token) {
// 请求体data加密前
const time = Math.floor(Date.now() / 1000)
const baseData = `{"userToken":"${token}","autoDelay":true,"deviceId":"","userId":"${userId}","timestamp":"${time}"}`
// 请求体加密
const encryData = AESencrypt(baseData, KEY_AES)
const data = '{"data":"' + encryData.substring(0, encryData.length - 2) + '\\u003d\\u003d"}'
// 签名
const str = getStringMD5(data)
const sign = encodeURLEncoder(RSAencrypt(str))
const headers = {
userId: userId,
userToken: token,
"Content-Type": "appsication/json; charset=utf-8"
}
const baseURL = "https://migu-app-umnb.miguvideo.com/login/token_refresh_migu_plus"
const params = `?clientId=27fb3129-5a54-45bc-8af1-7dc8f1155501&sign=${sign}&signType=RSA`
// 发送请求
const respResult = await axios.post(baseURL + params, data, {
headers: headers
}).then(r => r.data)
// 处理响应结果
if (respResult.resultCode == "REFRESH_TOKEN_SUCCESS") {
// console.log(respResult)
return true
}
return false
}
export default refreshToken