123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- /*
- * @File : nivid_object.js
- * @Author : jade
- * @Date : 2023/12/20 9:50
- * @Email : jadehh@1ive.com
- * @Software : Samples
- * @Desc :
- */
- import {Crypto} from "./cat.js";
- let DesKey = "diao.com"
- class ChannelResponse {
- // classes
- constructor() {
- this.channelMsg = ""
- this.channelStatus = 0
- this.channelList = []
- this.channelFilters = {}
- }
- fromJsonString(json_str, remove18ChannelCode = 0) {
- let json_dic = JSON.parse(json_str)
- this.channelMsg = json_dic.msg
- this.channelStatus = json_dic.status
- let channel_list = []
- for (const channel_info of json_dic.list) {
- let new_channel_info = new ChannelInfo()
- switch (remove18ChannelCode) {
- case 0:
- new_channel_info.fromJson(channel_info)
- channel_list.push(new_channel_info)
- break
- case 1:
- if (channel_info.channelName !== "午夜场" && channel_info.channelName !== "午夜直播") {
- new_channel_info.fromJson(channel_info)
- channel_list.push(new_channel_info)
- }
- break
- case 2:
- if (channel_info.channelName === "午夜场" || channel_info.channelName === "午夜直播") {
- new_channel_info.fromJson(channel_info)
- channel_list.push(new_channel_info)
- }
- break
- }
- }
- this.channelList = channel_list
- this.channelFilters = json_dic.filter
- }
- setChannelFilters(filter_str) {
- this.channelFilters = JSON.parse(filter_str)
- }
- getValues(typeList, name_key, id_key) {
- let values = []
- values.push({"n": "全部", "v": "0"})
- for (const obj of typeList) {
- values.push({"n": obj[name_key], "v": obj[id_key].toString()})
- }
- return values
- }
- getFilters() {
- let filters = {}
- for (const channel_info of this.channelList) {
- filters[channel_info.channelId] = []
- let sortMapList = this.channelFilters["sortsMap"][parseInt(channel_info.channelId)]
- let sortValues = this.getValues(sortMapList, "title", "id")
- filters[channel_info.channelId].push({"key": "1", "name": "排序", "value": sortValues})
- let typeMapList = this.channelFilters["typesMap"][parseInt(channel_info.channelId)]
- let typeValues = this.getValues(typeMapList, "showTypeName", "showTypeId")
- filters[channel_info.channelId].push({"key": "2", "name": "类型", "value": typeValues})
- let areaValues = this.getValues(this.channelFilters["regions"], "regionName", "regionId")
- filters[channel_info.channelId].push({"key": "3", "name": "地区", "value": areaValues})
- let langValues = this.getValues(this.channelFilters["langs"], "langName", "langId")
- filters[channel_info.channelId].push({"key": "4", "name": "语言", "value": langValues})
- let yearValues = this.getValues(this.channelFilters["yearRanges"], "name", "code")
- filters[channel_info.channelId].push({"key": "5", "name": "年份", "value": yearValues})
- }
- return filters
- }
- getChannelFilters() {
- return this.channelFilters
- }
- getChannelMsg() {
- return this.channelMsg
- }
- getChannelStatus() {
- return this.channelStatus
- }
- getChannelList() {
- return this.channelList
- }
- getClassList() {
- let classes = []
- for (const channel_info of this.channelList) {
- classes.push({"type_id": channel_info.channelId, "type_name": channel_info.channelName})
- }
- return classes
- }
- async save() {
- await local.set("niba", "niba_channel", this.toString());
- return this;
- }
- clear() {
- this.channelMsg = ""
- this.channelStatus = 0
- this.channelList = []
- }
- async clearCache() {
- this.clear()
- await local.set("niba", "niba_channel", "{}");
- }
- toString() {
- const params = {
- msg: this.getChannelMsg(),
- status: this.getChannelStatus(),
- list: this.getChannelList(),
- filter: this.getChannelFilters()
- };
- return JSON.stringify(params);
- }
- }
- async function getChannelCache() {
- return await local.get("niba", "niba_channel");
- }
- class ChannelInfo {
- constructor() {
- this.channelId = 0
- this.channelName = ""
- }
- fromJsonString(json_str) {
- let json_dic = JSON.parse(json_str)
- this.channelId = json_dic.channelId
- this.channelName = json_dic.channelName
- }
- fromJson(json) {
- this.channelId = json.channelId
- this.channelName = json.channelName
- }
- getChannelName() {
- return this.channelName
- }
- getChannelId() {
- return this.channelId
- }
- }
- function isNumeric(str) {
- return !isNaN(parseInt(str));
- }
- function getVod(video_dic_list, play_foramt_list, showIdCode) {
- let episode_list = [], episode_str_list = [];
- for (const video_dic of video_dic_list) {
- let video_name = ""
- if (isNumeric((video_dic['episodeName']))) {
- video_name = "第" + video_dic["episodeName"] + "集"
- } else {
- video_name = video_dic["episodeName"]
- }
- episode_list.push(video_name + "$" + video_dic["playIdCode"] + "@" + showIdCode);
- }
- for (let index = 0; index < play_foramt_list.length; index++) {
- episode_str_list.push(episode_list.join("#"));
- }
- return {
- vod_play_url: episode_str_list.join("$$$"),
- vod_play_from: play_foramt_list.map(item => item).join("$$$"),
- };
- }
- function getHeader() {
- return {
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
- "Referer": "https://m.nivod.tv/",
- "Content-Type": "application/x-www-form-urlencoded"
- }
- }
- function md5(text) {
- return Crypto.MD5(text).toString()
- }
- //加密
- async function createSign(body = null) {
- let params = {
- "_ts": Date.now(), "app_version": "1.0",
- "platform": "3", "market_id": "web_nivod",
- "device_code": "web", "versioncode": 1,
- "oid": "8ca275aa5e12ba504b266d4c70d95d77a0c2eac5726198ea"
- }
- /**
- * __QUERY::_ts=1702973558399&app_version=1.0&device_code=web&market_id=web_nivod&oid=8ca275aa5e12ba504b266d4c70d95d77a0c2eac5726198ea&platform=3&versioncode=1&__BODY::__KEY::2x_Give_it_a_shot
- */
- let params_list = []
- for (const key of Object.keys(params).sort()) {
- params_list.push(`${key}=${params[key]}`)
- }
- let body_str = "&__BODY::"
- if (body !== null) {
- let body_list = []
- for (const key of Object.keys(body).sort()) {
- body_list.push(`${key}=${body[key]}`)
- }
- body_str = body_str + body_list.join("&") + "&"
- }
- let params_str = "__QUERY::" + params_list.join("&") + body_str + "__KEY::2x_Give_it_a_shot"
- let sign_code = md5(params_str)
- params_list.push(`sign=${sign_code}`)
- return "?" + params_list.join("&")
- }
- //解密
- function desDecrypt(content) {
- // 定义密钥
- const key = Crypto.enc.Utf8.parse(DesKey); // 密钥需要进行字节数转换
- /*
- const encrypted = Crypto.DES.encrypt(content, key, {
- mode: Crypto.mode.ECB, // 使用ECB模式
- padding: Crypto.pad.Pkcs7, // 使用Pkcs7填充
- }).ciphertext.toString();
- */
- return Crypto.DES.decrypt({ciphertext: Crypto.enc.Hex.parse(content)}, key, {
- mode: Crypto.mode.ECB,
- padding: Crypto.pad.Pkcs7,
- }).toString(Crypto.enc.Utf8);
- }
- export {getChannelCache, desDecrypt, createSign, ChannelResponse, getHeader, getVod};
|