174 lines
5.3 KiB
JavaScript
174 lines
5.3 KiB
JavaScript
/*
|
||
* @File : jiujiuliu.js
|
||
* @Author : jade
|
||
* @Date : 2024/1/4 14:15
|
||
* @Email : jadehh@1ive.com
|
||
* @Software : Samples
|
||
* @Desc : 996影视
|
||
*/
|
||
|
||
import {Spider} from "./spider.js";
|
||
import {_, Crypto, load} from "../lib/cat.js";
|
||
import {VodDetail, VodShort} from "../lib/vod.js";
|
||
import * as Utils from "../lib/utils.js";
|
||
|
||
class JiuJiuLiuSpider extends Spider {
|
||
constructor() {
|
||
super();
|
||
this.siteUrl = "https://www.x9s8x.icu" // https://www.cs1369.com
|
||
}
|
||
|
||
getName() {
|
||
return "🔞┃九九六影视┃🔞"
|
||
}
|
||
|
||
getAppName() {
|
||
return "九九六影视"
|
||
}
|
||
getJSName() {
|
||
return "jiujiuliu"
|
||
}
|
||
|
||
getType() {
|
||
return 3
|
||
}
|
||
|
||
async parseVodShortListFromDoc($) {
|
||
let vod_list = []
|
||
let vodElements = $('[class="content-item"]')
|
||
for (const vodElement of vodElements) {
|
||
let vodShort = new VodShort()
|
||
let videoElement = $(vodElement).find("a")[0]
|
||
vodShort.vod_id = videoElement.attribs["href"]
|
||
vodShort.vod_name = videoElement.attribs["title"]
|
||
vodShort.vod_pic = $(videoElement).find("img")[0].attribs["data-original"]
|
||
vodShort.vod_remarks = $($(vodElement).find('[class="note text-bg-r"]')).text()
|
||
vod_list.push(vodShort)
|
||
}
|
||
return vod_list
|
||
}
|
||
|
||
|
||
|
||
async parseVodDetailFromDoc($) {
|
||
let vodDetail = new VodDetail()
|
||
let detailElement = $('[class="row film_info clearfix"]')
|
||
vodDetail.vod_pic = $(detailElement).find("img")[0].attribs["data-original"]
|
||
vodDetail.vod_name = $($(detailElement).find('[class="c_pink text-ellipsis"]')).text()
|
||
let content = $( $(detailElement).find('[class="row"]')).text()
|
||
vodDetail.type_name = Utils.getStrByRegex(/视频类型(.*?)\n/,content).replaceAll(":","")
|
||
vodDetail.vod_area = Utils.getStrByRegex(/更新时间(.*?)\n/,content).replaceAll(":","")
|
||
let playVod = {}
|
||
let playElement = $('[class="btn btn-m btn-default"]')[0]
|
||
|
||
let vodItems = []
|
||
const epName = vodDetail.vod_name;
|
||
const playUrl = playElement.attribs.href
|
||
vodItems.push(epName + '$' + playUrl)
|
||
playVod[playElement.attribs.title] = vodItems.join('#')
|
||
vodDetail.vod_play_from = _.keys(playVod).join('$$$');
|
||
vodDetail.vod_play_url = _.values(playVod).join('$$$');
|
||
return vodDetail
|
||
}
|
||
|
||
async setClasses() {
|
||
let $ = await this.getHtml(this.siteUrl,true);
|
||
let menuElements = $('[class="row-item-title bg_red"]').find("a")
|
||
for (const menuElement of menuElements) {
|
||
let type_name = $(menuElement).text()
|
||
let type_id = menuElement.attribs["href"]
|
||
if (type_name.indexOf("小说") === -1){
|
||
this.classes.push(this.getTypeDic(type_name, type_id))
|
||
}
|
||
}
|
||
}
|
||
|
||
async getFilter($,index) {
|
||
let html = $.html()
|
||
let extend_list = []
|
||
let extendElement = $($($($('[class="row-item-content"]')[index])).find('[class="item"]')).find("a")
|
||
let extend_dic = {"name":"排序","key":"sort","value":[]}
|
||
for (const element of extendElement){
|
||
let type_name = $(element).text()
|
||
let type_id = element.attribs["href"]
|
||
extend_dic["value"].push(this.getFliterDic(type_name,type_id))
|
||
|
||
}
|
||
extend_list.push(extend_dic)
|
||
return extend_list
|
||
|
||
}
|
||
|
||
async setFilterObj() {
|
||
let index = 0
|
||
for (const type_dic of this.classes) {
|
||
let type_id = type_dic["type_id"]
|
||
if ( type_id !== "最近更新") {
|
||
let $ = await this.getHtml(this.siteUrl,true)
|
||
this.filterObj[type_id] = await this.getFilter($,index)
|
||
index = index + 1
|
||
}
|
||
}
|
||
}
|
||
|
||
async setHomeVod() {
|
||
let $ = await this.getHtml(this.siteUrl,true)
|
||
this.homeVodList = await this.parseVodShortListFromDoc($)
|
||
}
|
||
|
||
|
||
|
||
async setCategory(tid, pg, filter, extend) {
|
||
let $ = await this.getHtml(this.siteUrl + tid.replaceAll(".html",`/page/${pg}.html`),true)
|
||
this.vodList = await this.parseVodShortListFromDoc($)
|
||
}
|
||
|
||
async setDetail(id) {
|
||
let $ = await this.getHtml(this.siteUrl + id,true)
|
||
this.vodDetail = await this.parseVodDetailFromDoc($)
|
||
}
|
||
|
||
|
||
async setPlay(flag, id, flags) {
|
||
let $ = await this.getHtml(this.siteUrl+id,true)
|
||
let playerConfig = JSON.parse(Utils.getStrByRegex(/var player_aaaa=(.*?)<\/script>/,$.html()))
|
||
this.playUrl = playerConfig["url"]
|
||
}
|
||
}
|
||
|
||
let spider = new JiuJiuLiuSpider()
|
||
|
||
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} |