mirror of
https://github.com/qist/tvbox.git
synced 2025-10-26 01:32:18 +00:00
update ALL
This commit is contained in:
@@ -481,5 +481,5 @@
|
||||
"logo": "https://epg.112114.xyz/logo/{name}.png"
|
||||
}
|
||||
],
|
||||
"wallpaper": "http://饭太硬.top/深色壁纸/api.php"
|
||||
"wallpaper": "https://api.likepoems.com/img/bing"
|
||||
}
|
||||
348
cat/tjs/js/cntv.js
Normal file
348
cat/tjs/js/cntv.js
Normal file
@@ -0,0 +1,348 @@
|
||||
/*
|
||||
* @File : cntv.js
|
||||
* @Author : jade
|
||||
* @Date : 2024/4/25 10:26
|
||||
* @Email : jadehh@1ive.com
|
||||
* @Software : Samples
|
||||
* @Desc :
|
||||
*/
|
||||
import {Spider} from "./spider.js";
|
||||
import {_} from "../lib/cat.js";
|
||||
import * as Utils from "../lib/utils.js";
|
||||
import {VodDetail, VodShort} from "../lib/vod.js";
|
||||
import * as util from "util";
|
||||
import {it} from "node:test";
|
||||
|
||||
class CNTVSpider extends Spider {
|
||||
constructor() {
|
||||
super();
|
||||
this.siteUrl = "https://tv.cctv.com/m/index.shtml"
|
||||
this.apiUrl = "https://api.app.cctv.com"
|
||||
|
||||
}
|
||||
|
||||
getName() {
|
||||
return "🤵♂️┃中央影视┃🤵♂️"
|
||||
}
|
||||
|
||||
getAppName() {
|
||||
return "中央影视"
|
||||
}
|
||||
|
||||
getJSName() {
|
||||
return "cntv"
|
||||
}
|
||||
|
||||
getType() {
|
||||
return 3
|
||||
}
|
||||
|
||||
|
||||
async getFilterByLive(dataList) {
|
||||
let extend_list = []
|
||||
let extend_dic = {"key": "live", "name": "直播", "value": []}
|
||||
for (const data of dataList) {
|
||||
if (data["appBarTitle"] !== "最近常看") {
|
||||
extend_dic["value"].push({"n": data["appBarTitle"], "v": data["pageId"]})
|
||||
}
|
||||
}
|
||||
extend_list.push(extend_dic)
|
||||
return extend_list
|
||||
}
|
||||
|
||||
arrayIsinclude(str,items){
|
||||
let isInclude = false
|
||||
for (const data of items){
|
||||
if (str === data["title"]){
|
||||
return true
|
||||
}
|
||||
}
|
||||
return isInclude
|
||||
}
|
||||
|
||||
async getFilterByTv(dataList) {
|
||||
let extend_list = []
|
||||
for (const data of dataList) {
|
||||
let add_year_status = false
|
||||
let extend_dic = {"key": data["classname"], "name": data["title"], "value": []}
|
||||
for (const extendData of data["items"]) {
|
||||
if (data["classname"] === "nianfen") {
|
||||
if (!this.arrayIsinclude("2024",data["items"]) && extendData["title"] !== "全部" && !add_year_status) {
|
||||
extend_dic["value"].push({"n": "2024", "v": "2024"})
|
||||
add_year_status = true
|
||||
}
|
||||
}
|
||||
extend_dic["value"].push({"n": extendData["title"], "v":extendData["title"]})
|
||||
}
|
||||
extend_list.push(extend_dic)
|
||||
}
|
||||
return extend_list
|
||||
}
|
||||
|
||||
async setClasses() {
|
||||
let liveTypeId = "cctvlive"
|
||||
let liveApi = this.apiUrl + `/api/navigation/iphone/AppStore/7.9.4/${liveTypeId}`
|
||||
let liveJson = JSON.parse(await this.fetch(liveApi, null, this.getHeader()))
|
||||
let extend_list = await this.getFilterByLive(liveJson["data"]["templates"])
|
||||
let defaultLiveId = extend_list[0]["value"][0]["v"]
|
||||
this.classes.push(this.getTypeDic("直播", defaultLiveId))
|
||||
this.filterObj[defaultLiveId] = extend_list
|
||||
let tvApi = "https://cbox.cctv.com/cboxpcvip/online2022/yxg/data1.jsonp?=pk"
|
||||
let tvContent = await this.fetch(tvApi, null, this.getHeader())
|
||||
let tvJSon = JSON.parse(tvContent.replaceAll("pk(", "").replaceAll(")", ""))
|
||||
for (const data of tvJSon["data"]) {
|
||||
let typeName = data["title"]
|
||||
this.classes.push(this.getTypeDic(typeName, typeName))
|
||||
this.filterObj[typeName] = await this.getFilterByTv(data["templates"])
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
parseVodShortByJson(items) {
|
||||
let vod_list = []
|
||||
for (const item of items) {
|
||||
let vodShort = new VodShort()
|
||||
vodShort.vod_pic = item["img1"]
|
||||
if (_.isEmpty(vodShort.vod_pic)) {
|
||||
vodShort.vod_pic = item["epgHorizontalPic"]
|
||||
vodShort.vod_id = "live-" + item["epgChnlChar"] + "-" + vodShort.vod_pic
|
||||
} else {
|
||||
vodShort.vod_id = "play-" + item["playid"] + "-" + vodShort.vod_pic
|
||||
vodShort.vod_pic = item["img1"]
|
||||
}
|
||||
vodShort.vod_name = item["title"]
|
||||
vod_list.push(vodShort)
|
||||
}
|
||||
return vod_list
|
||||
}
|
||||
|
||||
parseVodShortByTvJson(items) {
|
||||
let vod_list = []
|
||||
for (const item of items) {
|
||||
let vodShort = new VodShort()
|
||||
//关键是如何获取GUID 2d3224585904496ea837f682da0c4aa6
|
||||
vodShort.vod_id = "url-" + item["vsetid"]
|
||||
vodShort.vod_name = item["title"]
|
||||
vodShort.vod_pic = item["image"]
|
||||
vodShort.vod_remarks = item["sc"]
|
||||
vod_list.push(vodShort)
|
||||
}
|
||||
return vod_list
|
||||
}
|
||||
|
||||
async parseVodShortListFromJson(objList) {
|
||||
let vod_list = []
|
||||
let top_status = false
|
||||
for (const data of objList) {
|
||||
if (data["title"] === "今日热点") {
|
||||
top_status = true
|
||||
} else if (!_.isEmpty(data["title"])) {
|
||||
if (top_status) {
|
||||
break
|
||||
}
|
||||
}
|
||||
if (top_status) {
|
||||
vod_list = [...vod_list, ...this.parseVodShortByJson(data["items"])]
|
||||
}
|
||||
}
|
||||
return vod_list
|
||||
}
|
||||
|
||||
async getLiveUrl(channel_id, obj) {
|
||||
let liveApiUrl = `https://vdn.live.cntv.cn/api2/live.do?channel=pd://cctv_p2p_hd${channel_id}&client=iosapp`
|
||||
let liveResponse = await req(liveApiUrl, {"headers": this.getHeader()})
|
||||
let liveJson = JSON.parse(liveResponse["content"])
|
||||
let playList = {}
|
||||
playList["直播"] = ["点击播放$" + liveJson["hls_url"]["hls2"]]
|
||||
await this.jadeLog.info(`liveJson:${JSON.stringify(liveJson)}`)
|
||||
let vod_items = []
|
||||
for (const data of obj["program"]) {
|
||||
let episodeName = data["showTime"] + "-" + data["t"]
|
||||
let episodeUrl = liveJson["hls_url"]["hls1"] + `?begintimeabs=${data["st"] * 1000}&endtimeabs=${data["et"] * 1000}`
|
||||
vod_items.push(episodeName + "$" + episodeUrl)
|
||||
}
|
||||
playList["点播"] = vod_items.join("#")
|
||||
return playList
|
||||
}
|
||||
|
||||
|
||||
async getVideoUrl(guid) {
|
||||
return {"中央影视": ['点击播放' + '$' + guid].join("#")}
|
||||
}
|
||||
|
||||
async parseVodDetailfromJson(id, obj, pic) {
|
||||
let vodDetail = new VodDetail()
|
||||
let $;
|
||||
let guid;
|
||||
if (obj["url"] !== undefined) {
|
||||
vodDetail.vod_name = obj["title"]
|
||||
vodDetail.vod_pic = obj["img"]
|
||||
vodDetail.type_name = obj["tags"]
|
||||
vodDetail.vod_year = obj["time"]
|
||||
vodDetail.vod_content = obj["vset_brief"]
|
||||
vodDetail.vod_director = obj["vset_title"]
|
||||
$ = await this.getHtml(obj["url"])
|
||||
} else {
|
||||
if (_.isEmpty(obj["lvUrl"])) {
|
||||
vodDetail.vod_name = obj["channelName"]
|
||||
vodDetail.vod_pic = pic
|
||||
} else {
|
||||
$ = await this.getHtml(obj["lvUrl"])
|
||||
vodDetail.vod_name = $('[property$=title]')[0].attribs.content
|
||||
vodDetail.vod_content = $('[property$=description]')[0].attribs.content
|
||||
let pic = $('[property$=image]')[0].attribs.content
|
||||
if (!pic.startsWith("http")) {
|
||||
pic = "https:" + pic
|
||||
}
|
||||
vodDetail.vod_pic = pic
|
||||
}
|
||||
|
||||
}
|
||||
if (!_.isEmpty($)) {
|
||||
guid = Utils.getStrByRegex(/var guid = "(.*?)"/, $.html())
|
||||
}
|
||||
let playlist
|
||||
if (_.isEmpty(guid) && obj["url"] === undefined) {
|
||||
playlist = await this.getLiveUrl(id, obj)
|
||||
} else {
|
||||
playlist = await this.getVideoUrl(guid)
|
||||
}
|
||||
vodDetail.vod_play_url = _.values(playlist).join('$$$');
|
||||
vodDetail.vod_play_from = _.keys(playlist).join('$$$');
|
||||
return vodDetail
|
||||
}
|
||||
|
||||
async parseVodDetailFromJsonByTv(obj) {
|
||||
let vodDetail = new VodDetail()
|
||||
vodDetail.vod_name = obj["videoSetInfo"]["title"]
|
||||
vodDetail.type_name = obj["videoSetInfo"]["sc"]
|
||||
vodDetail.vod_pic = obj["videoSetInfo"]["image"]
|
||||
vodDetail.vod_content = obj["videoSetInfo"]["brief"]
|
||||
vodDetail.vod_area = obj["videoSetInfo"]["area"]
|
||||
let playlist = {}
|
||||
let vodItems = []
|
||||
for (const data of obj["videoRoughCut"]) {
|
||||
let title = data["title"].split("》").slice(-1)[0]
|
||||
vodItems.push(title + "$" + data["guid"])
|
||||
}
|
||||
playlist["中央影视"] = vodItems.join("#")
|
||||
vodDetail.vod_play_url = _.values(playlist).join('$$$');
|
||||
vodDetail.vod_play_from = _.keys(playlist).join('$$$');
|
||||
return vodDetail
|
||||
}
|
||||
|
||||
async setHomeVod() {
|
||||
let resJson = JSON.parse(await this.fetch(this.apiUrl + "/api/page/iphone/HandheldApplicationSink/7.0.0/158", null, this.getHeader()))
|
||||
this.homeVodList = await this.parseVodShortListFromJson(resJson["data"]["templates"])
|
||||
}
|
||||
|
||||
getExtendValue(extend,key){
|
||||
if (extend[key] !== undefined && extend[key] !== "全部"){
|
||||
return extend[key]
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
async setCategory(tid, pg, filter, extend) {
|
||||
if (Utils.isNumeric(tid)) {
|
||||
tid = extend["live"] ?? tid
|
||||
let url = this.apiUrl + `/api/page/iphone/HandheldApplicationSink/7.0.0/${tid}`
|
||||
let response = JSON.parse(await this.fetch(url, null, this.getHeader()))
|
||||
this.vodList = this.parseVodShortByJson(response["data"]["templates"][0]["items"])
|
||||
} else {
|
||||
let letter = this.getExtendValue(extend,"zimu")
|
||||
let area = this.getExtendValue(extend,"diqu")
|
||||
let type = this.getExtendValue(extend,"leixing")
|
||||
let year = this.getExtendValue(extend,"nianfen")
|
||||
const limit = 12
|
||||
let url = "https://api.cntv.cn" + `/newVideoset/getCboxVideoAlbumList`
|
||||
let params = {
|
||||
"channelid": "",
|
||||
"sc": type,
|
||||
"fc": tid,
|
||||
"p": pg,
|
||||
"n": limit,
|
||||
"fl": letter,
|
||||
"area": area,
|
||||
"year": year,
|
||||
"serviceId": "cbox"
|
||||
}
|
||||
let resJson = JSON.parse(await this.fetch(url, params, this.getHeader()))
|
||||
this.vodList = this.parseVodShortByTvJson(resJson["data"]["list"])
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async setDetail(id) {
|
||||
//区分直播还是点播
|
||||
let aList = id.split("-")
|
||||
let playType = aList[0]
|
||||
let pic = aList[2]
|
||||
id = aList[1]
|
||||
if (playType === "play") {
|
||||
let resJson = JSON.parse(await this.fetch(`https://api.cntv.cn/video/videoinfoByGuid?serviceId=cbox&guid=${id}`, null, this.getHeader()))
|
||||
this.vodDetail = await this.parseVodDetailfromJson(id, resJson, pic)
|
||||
} else if (playType === "url") {
|
||||
let url = `https://api.app.cctv.com/api/getVideoPageDetail?videoSetContentId=${id}`
|
||||
let resJson = JSON.parse(await this.fetch(url, null, this.getHeader()))
|
||||
this.vodDetail = await this.parseVodDetailFromJsonByTv(resJson["data"])
|
||||
} else {
|
||||
let content = (await this.fetch(`https://api.cntv.cn/epg/epginfo3?serviceId=shiyi&c=${id}&cb=LiveTileShow.prototype.getEpg`, null, this.getHeader())).replaceAll("LiveTileShow.prototype.getEpg(", "").replaceAll(");", "")
|
||||
this.vodDetail = await this.parseVodDetailfromJson(id, JSON.parse(content)[id], pic)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async setSearch(wd, quick, pg) {
|
||||
|
||||
}
|
||||
|
||||
async setPlay(flag, id, flags) {
|
||||
if (id.startsWith("http")) {
|
||||
this.playUrl = id
|
||||
let headers = this.getHeader()
|
||||
headers["Referer"] = "https://tv.cctv.com/"
|
||||
this.result.header = headers
|
||||
} else {
|
||||
this.playUrl = 'https://hls.cntv.myhwcdn.cn/asp/hls/2000/0303000a/3/default/' + id + '/2000.m3u8'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let spider = new CNTVSpider()
|
||||
|
||||
async function init(cfg) {
|
||||
await spider.init(cfg)
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
return await spider.home(filter)
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
return await spider.homeVod()
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
return await spider.category(tid, pg, filter, extend)
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
return await spider.detail(id)
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return await spider.play(flag, id, flags)
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
return await spider.search(wd, quick)
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init, home: home, homeVod: homeVod, category: category, detail: detail, play: play, search: search,
|
||||
};
|
||||
}
|
||||
|
||||
export {spider, CNTVSpider}
|
||||
@@ -13,7 +13,7 @@ class DuboSpider extends TianTianSpider {
|
||||
super();
|
||||
this.siteUrl = "http://v.rbotv.cn"
|
||||
this.cookie = ""
|
||||
this.extendObj = {"extend": "类型", "area": "地区", "lang": "语言", "year": "年代"}
|
||||
this.extendObj = {"extend": "类型", "area": "地区", "year": "年代"}
|
||||
this.parseMap = {};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import {__jsEvalReturn} from './tiantian.js';
|
||||
import {__jsEvalReturn} from './cntv.js';
|
||||
|
||||
import * as Utils from "../lib/utils.js";
|
||||
|
||||
|
||||
@@ -50,20 +51,21 @@ async function testMusicPlay(vodDetail) {
|
||||
}
|
||||
|
||||
async function test() {
|
||||
let siteKey = 'tiantian';
|
||||
let siteType = 0;
|
||||
let siteKey = 'cntv';
|
||||
let siteType = 3;
|
||||
await spider.init({
|
||||
skey: siteKey, stype: siteType, ext: {
|
||||
"token": "6827db23e5474d02a07fd7431d3d5a5a",
|
||||
"box": "TV",
|
||||
"code": "1",
|
||||
"from": "tiantian",
|
||||
"from": "cntv",
|
||||
"danmu": true,
|
||||
"cookie": "buvid3=02675249-8ED3-C418-87F5-59E18316459714816infoc; b_nut=1704421014; _uuid=5D435F74-F574-D9AB-62C1-B9294DE465D913102infoc; buvid_fp=e8c5650c749398e9b5cad3f3ddb5081e; buvid4=007E85D1-52C1-7E6E-07CF-837FFBC9349516677-024010502-J5vTDSZDCw4fNnXRejbSVg%3D%3D; rpdid=|()kYJmulRu0J'u~|RRJl)JR; PVID=1; SESSDATA=3be091d3%2C1720332009%2C699ed%2A11CjAcCdwXG5kY1umhCOpQHOn_WP7L9xFBfWO7KKd4BPweodpR6VyIfeNyPiRmkr5jCqsSVjg0R0dZOVVHRUo3RnhPRTZFc3JPbGdiUjFCdHpiRDhiTkticmdKTjVyS1VhbDdvNjFMSDJlbUJydUlRdjFUNGFBNkJlV2ZTa0N1Q1BEVi1QYTQzTUh3IIEC; bili_jct=b0ee7b5d3f27df893545d811d95506d4; DedeUserID=78014638; DedeUserID__ckMd5=4c8c5d65065e468a; enable_web_push=DISABLE; header_theme_version=CLOSE; home_feed_column=5; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; b_lsid=75E916AA_18EA1A8D995; bsource=search_baidu; FEED_LIVE_VERSION=V_HEADER_LIVE_NO_POP; browser_resolution=1507-691; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTIzNjk5MTMsImlhdCI6MTcxMjExMDY1MywicGx0IjotMX0.8zQW_fNTCSBlK_JkHnzu3gDw62wuTK1qgKcbGec3swM; bili_ticket_expires=171236985"
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
let classes = JSON.parse(await spider.home(true));
|
||||
console.debug(JSON.stringify(classes))
|
||||
|
||||
@@ -71,56 +73,20 @@ async function test() {
|
||||
let homeVod = JSON.parse(await spider.homeVod())
|
||||
console.debug(JSON.stringify(homeVod));
|
||||
|
||||
|
||||
//测试分类
|
||||
let catePage = JSON.parse(await spider.category("1", "2", undefined, {"extend":"动作"}));
|
||||
// 测试分类
|
||||
let catePage = JSON.parse(await spider.category("72", "1", undefined, {}));
|
||||
console.debug(JSON.stringify(catePage));
|
||||
|
||||
// 测试搜索
|
||||
let search_page = JSON.parse(await spider.search("万相之王",false,1))
|
||||
console.debug(JSON.stringify(search_page))
|
||||
|
||||
// 测试详情
|
||||
let detail1 = JSON.parse(await spider.detail("/diyi/2449/"))
|
||||
let play = JSON.parse(await spider.play("全卷","闻萱-/diyi/2449/43822990.html"))
|
||||
// 测试详情
|
||||
let detail1 = JSON.parse(await spider.detail("live-cctv2-https://app.cctv.com/special/appchannellogo/rectangle/l/cctv2.png?q=75"))
|
||||
await testPlay(detail1)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 测试搜索
|
||||
let search_page = JSON.parse(await spider.search("万相之王",false,1))
|
||||
console.debug(JSON.stringify(search_page))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -16,9 +16,8 @@ class TianTianSpider extends Spider {
|
||||
super();
|
||||
this.siteUrl = "http://op.ysdqjs.cn"
|
||||
this.cookie = ""
|
||||
this.extendObj = {"extend": "类型", "area": "地区", "lang": "语言", "year": "年代"}
|
||||
this.extendObj = {"extend": "类型", "area": "地区", "year": "年代"}
|
||||
this.parseMap = {};
|
||||
|
||||
}
|
||||
|
||||
async request(reqUrl, method, data) {
|
||||
@@ -74,7 +73,7 @@ class TianTianSpider extends Spider {
|
||||
|
||||
async init(cfg) {
|
||||
await super.init(cfg);
|
||||
this.danmuStaus = false
|
||||
this.danmuStaus = true
|
||||
}
|
||||
|
||||
generateParam(tid, pg, extend, limit) {
|
||||
@@ -100,22 +99,24 @@ class TianTianSpider extends Spider {
|
||||
let extend_list = []
|
||||
Object.keys(data).forEach(key => {
|
||||
if (Array.isArray(data[key])) {
|
||||
let extend_dic = {"key": key, "name": this.extendObj[key], "value": []}
|
||||
let add_year_status = false
|
||||
for (const extend_data of data[key]) {
|
||||
if (key === "year") {
|
||||
if (!data[key].includes("2024") && extend_data !== "全部" && !add_year_status) {
|
||||
extend_dic["value"].push({"n": "2024", "v": "2024"})
|
||||
add_year_status = true
|
||||
if (!_.isEmpty(this.extendObj[key])) {
|
||||
let extend_dic = {"key": key, "name": this.extendObj[key], "value": []}
|
||||
let add_year_status = false
|
||||
for (const extend_data of data[key]) {
|
||||
if (key === "year") {
|
||||
if (!data[key].includes("2024") && extend_data !== "全部" && !add_year_status) {
|
||||
extend_dic["value"].push({"n": "2024", "v": "2024"})
|
||||
add_year_status = true
|
||||
}
|
||||
}
|
||||
if (!_.isEmpty(extend_data)) {
|
||||
extend_dic["value"].push({"n": extend_data, "v": extend_data})
|
||||
}
|
||||
}
|
||||
if (!_.isEmpty(extend_data)) {
|
||||
extend_dic["value"].push({"n": extend_data, "v": extend_data})
|
||||
}
|
||||
|
||||
}
|
||||
if (extend_dic["value"].length > 1) {
|
||||
extend_list.push(extend_dic)
|
||||
}
|
||||
if (extend_dic["value"].length > 1) {
|
||||
extend_list.push(extend_dic)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -210,7 +211,6 @@ class TianTianSpider extends Spider {
|
||||
async setPlay(flag, id, flags) {
|
||||
const parsers = this.parseMap[flag];
|
||||
if (flag.indexOf("芒果") > -1 || flag.indexOf("腾讯") > -1 || flag.indexOf("爱奇艺") > -1) {
|
||||
this.danmuStaus = true
|
||||
if (!this.catOpenStatus) {
|
||||
this.danmuUrl = await this.danmuSpider.downloadDanmu("https://dmku.thefilehosting.com/?ac=dm&url=" + id)
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* @Date : 2024/3/19 18:45
|
||||
* @Email : jadehh@1ive.com
|
||||
* @Software : Samples
|
||||
* @Desc : 一起看
|
||||
* @Desc : 一起看 (已失效)
|
||||
*/
|
||||
import * as Utils from "../lib/utils.js";
|
||||
import {_, load} from "../lib/cat.js";
|
||||
@@ -35,7 +35,7 @@ class YiQiKanSpider extends Spider {
|
||||
|
||||
|
||||
getName() {
|
||||
return "🛫┃一起看┃🛫"
|
||||
return `🛫┃一起看┃🛫`
|
||||
}
|
||||
|
||||
getAppName() {
|
||||
|
||||
@@ -46,6 +46,17 @@
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
},
|
||||
{
|
||||
"key": "cntv",
|
||||
"name": "🤵♂️┃中央影视┃🤵♂️",
|
||||
"api": "./js/cntv.js",
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "CatOpen"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
},
|
||||
{
|
||||
"key": "kuaikan",
|
||||
"name": "🛥︎┃快看视频┃🛥︎",
|
||||
@@ -215,17 +226,6 @@
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
},
|
||||
{
|
||||
"key": "yiqikan",
|
||||
"name": "🛫┃一起看┃🛫",
|
||||
"api": "./js/yiqikan.js",
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "CatOpen"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
},
|
||||
{
|
||||
"key": "aiyingshi",
|
||||
"name": "🚀┃爱影视┃🚀",
|
||||
|
||||
@@ -45,6 +45,17 @@
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
},
|
||||
{
|
||||
"key": "cntv",
|
||||
"name": "🤵♂️┃中央影视┃🤵♂️",
|
||||
"api": "./js/cntv.js",
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "TVBox"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
},
|
||||
{
|
||||
"key": "kuaikan",
|
||||
"name": "🛥︎┃快看视频┃🛥︎",
|
||||
@@ -214,17 +225,6 @@
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
},
|
||||
{
|
||||
"key": "yiqikan",
|
||||
"name": "🛫┃一起看┃🛫",
|
||||
"api": "./js/yiqikan.js",
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "TVBox"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
},
|
||||
{
|
||||
"key": "aiyingshi",
|
||||
"name": "🚀┃爱影视┃🚀",
|
||||
@@ -721,5 +721,5 @@
|
||||
"logo": "https://epg.112114.xyz/logo/{name}.png"
|
||||
}
|
||||
],
|
||||
"wallpaper": "http://饭太硬.top/深色壁纸/api.php"
|
||||
"wallpaper": "https://api.likepoems.com/img/bing"
|
||||
}
|
||||
Reference in New Issue
Block a user