6/18/ds/18js/js/4kysxz.js

238 lines
7.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @File : 4kysxz.js.js
* @Author : jade
* @Date : 2024/1/24 16:47
* @Email : jadehh@1ive.com
* @Software : Samples
* @Desc : 4k高清网 (已失效)
*/
import {_} from '../lib/cat.js';
import {VodDetail, VodShort} from "../lib/vod.js"
import * as Utils from "../lib/utils.js";
import {Spider} from "./spider.js";
class YSXZSpider extends Spider {
constructor() {
super();
this.siteUrl = "https://4kysxz.top"
}
getAppName() {
return `4K高清网`
}
getName() {
return `🚄┃4K高清网┃🚄`
}
getJSName() {
return "4kysxz"
}
getType() {
return 3
}
async init(cfg) {
await super.init(cfg);
}
async parseVodShortListFromDoc($) {
const cards = $('div.row.posts-wrapper >div > article > div.entry-media > div > a')
return _.map(cards, (n) => {
let id = n.attribs['href'];
let name = $($(n).find('img')[0]).attr('alt').replaceAll('<strong>', '').replaceAll('</strong>', '').split(' ')[0];
let pic = $($(n).find('img')[0]).attr('data-src');
return {
vod_id: id, vod_name: name, vod_pic: pic, vod_remarks: '',
};
});
}
async parseVodDetailFromDoc($) {
let vodDetail = new VodDetail();
let vodElement = $("[class=\"entry-content u-text-format u-clearfix\"]")
let text = "";
for (const vodEle of vodElement) {
text = text + $(vodEle).text().replaceAll("", ":") + "\n"
}
vodDetail.vod_name = $($("[class=\"article-title\"]")).text()
vodDetail.vod_pic = $($("[class=\"entry-content u-text-format u-clearfix\"]")).find("img")[0].attribs["src"]
vodDetail.vod_area = Utils.getStrByRegex(/上映地区(.*?)\n/, text).replaceAll(":", "")
vodDetail.vod_director = Utils.getStrByRegex(/导演(.*?)\n/, text).replaceAll(":", "")
vodDetail.vod_actor = Utils.getStrByRegex(/主演(.*?)\n/, text).replaceAll(":", "")
vodDetail.vod_content = Utils.getStrByRegex(/剧情简介(.*?)\n/, text).replaceAll(":", "").replaceAll("·", "")
let actors = _.map($('div.entry-content.u-text-format.u-clearfix > div:nth-child(10) > div > span > span'), (n) => {
return $(n).text().split(' ')[0];
});
vodDetail.vod_actor = actors.join('/');
let directors = _.map($('div.entry-content.u-text-format.u-clearfix > div:nth-child(6) > div > span'), (n) => {
return $(n).text().split(' ')[0];
});
vodDetail.vod_director = directors.join('/');
vodDetail.vod_name = $('div.site-content > section > div > header > h1').text().trim();
let playUrlStr = '';
let playFromStr = '';
//高清直播
const cards = $('div.entry-content.u-text-format.u-clearfix > custag > ul > li > a');
if (cards.length > 0) {
let playUrls = _.map(cards, (n) => {
let playUrl = n.attribs['href'];
if (playUrl.indexOf('url=') > 0) {
playUrl = playUrl.split('url=')[1].split('&name')[0];
}
return $(n).text() + '$' + playUrl;
});
playUrlStr = playUrls.join('#');
playFromStr = '高清直播';
}
if (!this.catOpenStatus) {
//磁力链接
const tbs = $('loginshow > table');
let playFrom = '';
let nameUrls = [];
for (let i = 0; i < tbs.length; i++) {
if (i % 2 == 0) {
playFrom = $(tbs[i]).find('tbody > tr >td').text().replaceAll('WEB', '磁力');
} else if (i % 2 == 1) {
const tds = $(tbs[i]).find('tbody > tr >td');
let nameUrl = '';
for (let j = 0; j < tds.length; j++) {
if (j % 2 == 0) {
nameUrl = $(tds[j]).text().split('.')[0].split(' ')[0];
} else if (j % 2 == 1) {
nameUrl = nameUrl + '$' + $(tds[j]).text().split('【')[0];
nameUrls.push(nameUrl);
}
}
if (playFromStr.length > 0) {
playFromStr += '$$$';
playUrlStr += '$$$';
}
playFromStr += playFrom;
playUrlStr += nameUrls.join('#');
}
}
}
vodDetail.vod_play_from = playFromStr
vodDetail.vod_play_url = playUrlStr
return vodDetail
}
async setClasses() {
this.classes = []
this.classes.push(this.getTypeDic("首页", "/#"))
}
async getFilter(typeElements) {
let value_list = []
value_list.push({
"n": "全部", "v": "全部",
})
for (const typeElement of typeElements) {
value_list.push({
"n": typeElement.attribs["title"],
"v": typeElement.attribs["href"].split("/").slice(-1)[0].split(".")[0],
})
}
return [{"key": "1", "name": "类型", "value": value_list}]
}
async setFilterObj() {
let $ = await this.getHtml()
let navElements = $("[class=\"navbar-item menu-item-has-children\"]")
let extent_list = []
for (const navElement of navElements) {
let type_name = $($(navElement).find("a")[0]).text()
if (type_name.indexOf("影视") > -1) {
let extend_dic = {"key": "1", "name": type_name, "value": []}
let type_elements = $($(navElement).find("ul")).find("a")
for (const type_element of type_elements) {
extend_dic["value"].push({"n": $(type_element).text(), "v": type_element.attribs["href"]})
}
extent_list.push(extend_dic)
}
}
this.filterObj["/#"] = extent_list
}
async setCategory(tid, pg, filter, extend) {
let url;
if (extend["1"] === undefined) {
url = this.siteUrl + tid
} else {
if (extend["1"].indexOf("category") > -1) {
url = this.siteUrl + extend["1"].split(".")[0] + "_" + pg + ".html"
} else {
url = this.siteUrl + extend["1"]
}
}
let $ = await this.getHtml(url)
this.vodList = await this.parseVodShortListFromDoc($)
}
async setHomeVod() {
let $ = await this.getHtml()
this.homeVodList = await this.parseVodShortListFromDoc($)
}
async setDetail(id) {
const $ = await this.getHtml(id);
this.vodDetail = await this.parseVodDetailFromDoc($)
}
async setSearch(wd, quick) {
let $ = await this.getHtml(this.siteUrl + '/search.php?q=' + wd)
this.vodList = await this.parseVodShortListFromDoc($)
}
}
let spider = new YSXZSpider()
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)
}
async function proxy(segments, headers) {
return await spider.proxy(segments, headers)
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
proxy: proxy
};
}
export {spider}