184 lines
7.0 KiB
JavaScript
184 lines
7.0 KiB
JavaScript
|
/*
|
||
|
* @File : vodSpider.js
|
||
|
* @Author : jade
|
||
|
* @Date : 2024/2/6 16:53
|
||
|
* @Email : jadehh@1ive.com
|
||
|
* @Software : Samples
|
||
|
* @Desc :
|
||
|
*/
|
||
|
import {_, load} from '../lib/cat.js';
|
||
|
import {VodDetail, VodShort} from "../lib/vod.js"
|
||
|
import * as Utils from "../lib/utils.js";
|
||
|
import {Spider} from "./spider.js";
|
||
|
|
||
|
class VodSpider extends Spider {
|
||
|
constructor() {
|
||
|
super();
|
||
|
this.siteUrl = "http://cj.ffzyapi.com"
|
||
|
this.remove18 = false
|
||
|
this.type_id_18 = 34
|
||
|
}
|
||
|
|
||
|
async spiderInit(inReq) {
|
||
|
if (inReq !== null) {
|
||
|
this.detailProxy = await js2Proxy(inReq, "detail", this.getHeader());
|
||
|
} else {
|
||
|
this.detailProxy = await js2Proxy(true, this.siteType, this.siteKey, 'detail/', this.getHeader());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async init(cfg) {
|
||
|
await super.init(cfg);
|
||
|
await this.spiderInit(null)
|
||
|
}
|
||
|
|
||
|
async parseVodShortListFromJson(obj, isSearch = false) {
|
||
|
let vod_list = []
|
||
|
let vodShort;
|
||
|
for (const vod_data of obj["list"]) {
|
||
|
if (!isSearch) {
|
||
|
vodShort = this.parseVodDetail(vod_data)
|
||
|
} else {
|
||
|
vodShort = new VodShort();
|
||
|
vodShort.vod_pic = this.detailProxy + Utils.base64Encode(vod_data["vod_id"])
|
||
|
vodShort.vod_id = vod_data["vod_id"]
|
||
|
vodShort.vod_name = vod_data["vod_name"]
|
||
|
vodShort.vod_remarks = vod_data["vod_remarks"]
|
||
|
}
|
||
|
if (this.remove18 && vod_data["type_id"] !== this.type_id_18) {
|
||
|
vod_list.push(vodShort)
|
||
|
}
|
||
|
if (!this.remove18 && vod_data["type_id"] === this.type_id_18) {
|
||
|
vod_list.push(vodShort)
|
||
|
}
|
||
|
|
||
|
}
|
||
|
return vod_list
|
||
|
}
|
||
|
|
||
|
|
||
|
parseVodDetail(vod_data) {
|
||
|
let vodDetail = new VodDetail()
|
||
|
vodDetail.vod_id = vod_data["vod_id"]
|
||
|
vodDetail.vod_name = vod_data["vod_name"]
|
||
|
vodDetail.vod_pic = vod_data["vod_pic"]
|
||
|
vodDetail.vod_remarks = vod_data["vod_remarks"]
|
||
|
vodDetail.vod_area = vod_data["vod_area"]
|
||
|
vodDetail.vod_year = vod_data["vod_year"]
|
||
|
vodDetail.vod_actor = vod_data["vod_actor"]
|
||
|
vodDetail.vod_director = vod_data["vod_director"]
|
||
|
let $ = load(vod_data['vod_content'])
|
||
|
vodDetail.vod_content = $.text()
|
||
|
vodDetail.vod_play_from = vod_data["vod_play_from"]
|
||
|
vodDetail.vod_play_url = vod_data["vod_play_url"]
|
||
|
vodDetail.type_name = vod_data["type_name"]
|
||
|
return vodDetail
|
||
|
}
|
||
|
|
||
|
async parseVodDetailfromJson(obj) {
|
||
|
let vodDetail;
|
||
|
let vod_data_list = obj["list"]
|
||
|
if (vod_data_list.length > 0) {
|
||
|
let vod_data = vod_data_list[0]
|
||
|
vodDetail = this.parseVodDetail(vod_data)
|
||
|
}
|
||
|
return vodDetail
|
||
|
}
|
||
|
|
||
|
async setClasses() {
|
||
|
let content = await this.fetch(this.siteUrl + "/api.php/provide/vod/from", {"ac": "list"}, this.getHeader())
|
||
|
let content_json = JSON.parse(content)
|
||
|
for (const class_dic of content_json["class"]) {
|
||
|
if (class_dic["type_pid"] !== 0) {
|
||
|
this.classes.push(this.getTypeDic(class_dic["type_name"], class_dic["type_id"]))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async setFilterObj() {
|
||
|
let content = await this.fetch(this.siteUrl + "/api.php/provide/vod/from", {"ac": "list"}, this.getHeader())
|
||
|
let content_json = JSON.parse(content)
|
||
|
for (const root_class_dic of this.classes) {
|
||
|
let type_id = root_class_dic["type_id"].toString()
|
||
|
if (type_id !== "最近更新") {
|
||
|
let extend_dic = {"key": "1", "name": "分类", "value": [{"n": "全部", "v": type_id}]}
|
||
|
for (const class_dic of content_json["class"]) {
|
||
|
let type_name = class_dic["type_name"]
|
||
|
if (type_name === this.type_name_18) {
|
||
|
this.type_id_18 = class_dic["type_id"].toString()
|
||
|
}
|
||
|
if (this.remove18) {
|
||
|
if (class_dic["type_pid"] === root_class_dic["type_id"] && type_name !== this.type_name_18) {
|
||
|
extend_dic["value"].push({"n": type_name, "v": class_dic["type_id"].toString()})
|
||
|
}
|
||
|
} else {
|
||
|
if (class_dic["type_pid"] === root_class_dic["type_id"] && type_name === this.type_name_18) {
|
||
|
extend_dic["value"].push({"n": type_name, "v": class_dic["type_id"].toString()})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
if (!this.remove18) {
|
||
|
this.classes = [this.getTypeDic("最近更新", "最近更新"), this.getTypeDic(this.type_name_18, this.type_id_18)]
|
||
|
} else {
|
||
|
this.filterObj[type_id] = [extend_dic]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async setHomeVod() {
|
||
|
let content = await this.fetch(this.siteUrl + "/index.php/ajax/data", {
|
||
|
"mid": "1"
|
||
|
}, this.getHeader())
|
||
|
this.homeVodList = await this.parseVodShortListFromJson(JSON.parse(content))
|
||
|
}
|
||
|
|
||
|
async setDetail(id) {
|
||
|
let content = await this.fetch(this.siteUrl + "/api.php/provide/vod", {
|
||
|
"ac": "detail", "ids": id
|
||
|
}, this.getHeader())
|
||
|
this.vodDetail = await this.parseVodDetailfromJson(JSON.parse(content))
|
||
|
}
|
||
|
|
||
|
async setCategory(tid, pg, filter, extend) {
|
||
|
tid = extend["1"] ?? tid
|
||
|
let url = this.siteUrl + `/index.php/ajax/data?mid=1&tid=${tid}&page=${pg}&limit=20`
|
||
|
await this.jadeLog.debug(`分类URL:${url}`)
|
||
|
let content = await this.fetch(url, null, this.getHeader())
|
||
|
await this.jadeLog.debug(`分类内容为:${content}`)
|
||
|
this.vodList = await this.parseVodShortListFromJson(JSON.parse(content))
|
||
|
}
|
||
|
|
||
|
async setSearch(wd, quick) {
|
||
|
let content = await this.fetch(this.siteUrl + "/api.php/provide/vod/", {"wd": wd}, this.getHeader())
|
||
|
this.vodList = await this.parseVodShortListFromJson(JSON.parse(content), true)
|
||
|
}
|
||
|
|
||
|
async proxy(segments, headers) {
|
||
|
await this.jadeLog.debug(`正在设置反向代理 segments = ${segments.join(",")},headers = ${JSON.stringify(headers)}`)
|
||
|
let what = segments[0];
|
||
|
let url = Utils.base64Decode(segments[1]);
|
||
|
await this.jadeLog.debug(`反向代理参数为:${url}`)
|
||
|
if (what === 'detail') {
|
||
|
let content = await this.fetch(this.siteUrl + "/api.php/provide/vod", {
|
||
|
"ac": "detail", "ids": url
|
||
|
}, this.getHeader())
|
||
|
let vod_detail = await this.parseVodDetailfromJson(JSON.parse(content))
|
||
|
let pic_content = await this.fetch(vod_detail.vod_pic, null, this.getHeader(), false, false, 2)
|
||
|
if (!_.isEmpty(pic_content)) {
|
||
|
return JSON.stringify({
|
||
|
code: 200, buffer: 2, content: pic_content, headers: {},
|
||
|
});
|
||
|
} else {
|
||
|
return JSON.stringify({
|
||
|
code: 500, buffer: 2, content: "", headers: {},
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
export {VodSpider}
|