6/18/ds/18js/js/sehuatang.js

252 lines
8.5 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 : sehuatang
* @Author : jade
* @Date : 2024/1/24 16:47
* @Email : jadehh@1ive.com
* @Software : Samples
* @Desc : 色花堂BT
*/
import * as Utils from "../lib/utils.js";
import {Spider} from "./spider.js";
import {VodDetail, VodShort} from "../lib/vod.js";
import {_} from "../lib/cat.js";
class SHTSpider extends Spider {
constructor() {
super();
this.siteUrl = "https://www.sehuatang.net"
}
getAppName() {
return "色花堂BT"
}
getName() {
return "🔞┃色花堂BT┃🔞"
}
getJSName() {
return "sehuatang"
}
getType() {
return 3
}
async init(cfg) {
await super.init(cfg);
this.jsBaseDetail = await js2Proxy(true, this.siteType, this.siteKey, 'detail/', {});
}
getHeader() {
return {
"User-Agent": "PostmanRuntime/7.36.1",
"Host": "www.sehuatang.net",
"Cookie": "cPNj_2132_saltkey=Q4BKEOEC; cf_clearance=6Gz2tvOXPkkJP2UhLnSsN4s0RrnDUy0jBN0kUvC5FNQ-1706109144-1-AebvwBnAURwWWQhj0QRBrRPku2n8xI73PIeuZVj2ckqY9zjQ7zFzDviX7Gkex1P1bUw9SXHGEYnkBB9nmWe6Nhk=; _safe=vqd37pjm4p5uodq339yzk6b7jdt6oich",
}
}
async parseVodShortListFromDoc($) {
let vod_list = []
let vodShortElements = $("[id=\"portal_block_43_content\"]").find("li")
for (const vodShortElement of vodShortElements) {
let vodShort = new VodShort()
vodShort.vod_remarks = $($(vodShortElement).find("a")[1]).text()
vodShort.vod_id = $(vodShortElement).find("a")[2].attribs["href"]
vodShort.vod_name = $(vodShortElement).find("a")[2].attribs["title"]
vodShort.vod_pic = this.jsBaseDetail + Utils.base64Encode(vodShort.vod_id)
vod_list.push(vodShort)
}
return vod_list
}
async parseVodShortListFromDocByCategory($) {
let vod_list = []
let vodElements = $($("[class=\"bm_c\"]")[0]).find("tbody")
for (const vodElement of vodElements) {
let user_name = $($($(vodElement).find("cite")).find("a")[0]).text()
if (user_name !== "admin" && user_name !== undefined && !_.isEmpty(user_name)) {
let vodShort = new VodShort()
vodShort.vod_id = $(vodElement).find("a")[0].attribs["href"]
vodShort.vod_remarks = $($(vodElement).find("a")[2]).text()
vodShort.vod_name = $($(vodElement).find("a")[3]).text()
vodShort.vod_pic = this.jsBaseDetail + Utils.base64Encode(vodShort.vod_id)
vod_list.push(vodShort)
}
}
return vod_list
}
async parseVodDetailFromDoc($) {
let vodDetail = new VodDetail();
let vodElement = $("[class=\"t_f\"]")[0]
let content = $(vodElement).text().replaceAll("", ":").replaceAll("【", "").replaceAll("】", "")
vodDetail.vod_pic = $(vodElement).find("img")[0].attribs["file"]
vodDetail.vod_name = Utils.getStrByRegex(/影片名称(.*?)\n/, content).replaceAll(":", "").replaceAll("\n", "")
vodDetail.vod_actor = Utils.getStrByRegex(/出演女优(.*?)\n/, content).replaceAll(":", "").replaceAll("\n", "")
vodDetail.vod_remarks = Utils.getStrByRegex(/是否有码(.*?)\n/, content).replaceAll(":", "").replaceAll("\n", "")
vodDetail.vod_play_from = "BT"
vodDetail.vod_play_url = vodDetail.vod_name + "$" + Utils.getStrByRegex(/磁力链接: (.*)复制代码/, content)
return vodDetail
}
async setClasses() {
let $ = await this.getHtml()
let tagElements = $("[id=\"category_1\"]").find("tr").slice(0, -1)
for (const tagElement of tagElements) {
let classElements = $($(tagElement).find("[class=\"fl_icn_g\"]")).find("a")
for (const classElement of classElements) {
let type_id = classElement.attribs["href"]
let type_name = $(classElement).find("img")[0].attribs["alt"]
this.classes.push(this.getTypeDic(type_name, type_id))
}
}
}
async getFilter($) {
let extend_list = []
let extend_dic1 = {"key": 1, "name": "类型", "value": []}
let typeElements = $("[id=\"thread_types\"]").find("a")
for (const typeElement of typeElements){
let type_name = ""
if (typeElement.children.length > 1){
type_name = typeElement.children[0].data + ":" + $(typeElement.children[1]).text()
}else{
type_name = typeElement.children[0].data
}
extend_dic1["value"].push({"n":type_name,"v":typeElement.attribs["href"]})
}
extend_list.push(extend_dic1)
let extend_dic2 = {"key": 1, "name": "主题", "value": []}
let themeElements = $("[class=\"tf\"]").find("a")
for (const themeElement of themeElements){
let type_name = $(themeElement).text()
if (type_name !== "更多" && type_name !== "显示置顶"){
extend_dic2["value"].push({"n":$(themeElement).text(),"v":themeElement.attribs["href"]})
}
}
extend_list.push(extend_dic2)
return extend_list
}
async setFilterObj() {
for (const class_dic of this.classes){
let type_name = class_dic["type_name"]
let type_id = class_dic["type_id"]
if (type_name !== "最近更新"){
let $ = await this.getHtml(this.siteUrl + '/' + type_id)
this.filterObj[type_id] = await this.getFilter($)
}
}
}
async setHomeVod() {
let $ = await this.getHtml()
this.homeVodList = await this.parseVodShortListFromDoc($)
}
async setCategory(tid, pg, filter, extend) {
if (extend["1"]!==undefined && extend[1] ==="javascript:;"){
}else{
tid = extend["1"] ?? tid
}
let cateUrl
let tid_list = tid.split(".")[0].split("-")
if (tid_list.length > 2){
tid_list[2] = pg
cateUrl = this.siteUrl + "/" + tid_list.join("-") + ".html"
}else{
cateUrl = this.siteUrl + "/" + tid + "&page=" + pg
}
let $ = await this.getHtml(cateUrl)
this.vodList = await this.parseVodShortListFromDocByCategory($)
}
async setDetail(id) {
let $ = await this.getHtml(this.siteUrl + "/" + id)
this.vodDetail = await this.parseVodDetailFromDoc($)
}
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]);
if (what === 'detail') {
await this.jadeLog.debug(`反向代理ID为:${url}`)
let $ = await this.getHtml(this.siteUrl + "/" + url)
let vodDetail = await this.parseVodDetailFromDoc($)
await this.jadeLog.debug(`图片地址为:${vodDetail.vod_pic}`)
let resp;
if (!_.isEmpty(headers)) {
resp = await req(vodDetail.vod_pic, {
buffer: 2, headers: headers
});
} else {
resp = await req(vodDetail.vod_pic, {
buffer: 2, headers: {
Referer: url, 'User-Agent': Utils.CHROME,
},
});
}
return JSON.stringify({
code: resp.code, buffer: 2, content: resp.content, headers: resp.headers,
});
}
return JSON.stringify({
code: 500, content: '',
});
}
}
let spider = new SHTSpider()
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}