6/18/ds/18js/js/mp4movie.js

270 lines
9.4 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 : mp4movie.js
* @Author : jade
* @Date : 2024/2/19 9:41
* @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 DyttSpider extends Spider {
constructor() {
super();
this.siteUrl = "https://www.mp4us.com"
this.apiUrl = "https://m.mp4us.com"
this.dyttReconnectTimes = 0
}
getName() {
return "🍚┃Mp4电影┃🍚"
}
getAppName() {
return "Mp4电影"
}
getJSName() {
return "mp4movie"
}
getType() {
return 3
}
// getHeader() {
// return {"User-Agent": Utils.CHROME, "Referer": this.siteUrl + "/","Connection":"keep-alive"};
// }
async getFilter() {
let extend_list = []
let $ = await this.getHtml()
let suoyinElement = $("[class=\"nav navbar-nav\"]").find("li").slice(-1)[0]
let souyinUrl = $(suoyinElement).find("a")[0].attribs.href
let souyin$ = await this.getHtml(this.siteUrl + souyinUrl)
let sortElements = souyin$("[class=\"sort-box\"]").find("[class=\"sort-list\"]").slice(1,-1)
for (const sortElement of sortElements){
let name = $($(sortElement).find("h5")).text().replace("","")
let extend_dic = {"key": name, "name":name, "value": []}
for (const ele of $(sortElement).find("a")) {
extend_dic["value"].push({"n": $(ele).text(), "v": ele.attribs.data.split("-")[1]})
}
extend_list.push(extend_dic)
}
return extend_list
}
// async setFilterObj() {
// for (const type_dic of this.classes) {
// let type_id = type_dic["type_id"]
// if (type_id !== "最近更新") {
// this.filterObj[type_id] = await this.getFilter()
// }
// }
// }
async setClasses() {
let $ = await this.getHtml()
let suoyinElement = $("[class=\"nav navbar-nav\"]").find("li").slice(-1)[0]
let souyinUrl = $(suoyinElement).find("a")[0].attribs.href
let souyin$ = await this.getHtml(this.siteUrl + souyinUrl)
let sortElements = souyin$("[class=\"sort-box\"]").find("[class=\"sort-list\"]")
let classElements = $(sortElements[0]).find("li")
for (const classElement of classElements) {
let type_name = $($(classElement).find("a")).text()
let type_id = $(classElement).find("a")[0].attribs.data.replaceAll("id-", "")
if (type_name !== "全部") {
this.classes.push(this.getTypeDic(type_name, type_id))
}
}
}
async parseVodShortListFromDoc($) {
let vod_list = []
let vodElements = $("[class=\"index_today cclear\"]").find("a")
for (const vodElement of vodElements){
let vodShort = new VodShort();
vodShort.vod_name = vodElement.attribs.title
vodShort.vod_id = vodElement.attribs.href
vodShort.vod_pic = this.detailProxy + Utils.base64Encode(vodShort.vod_id)
vod_list.push(vodShort)
}
return vod_list
}
getSearchHeader() {
let headers = this.getHeader()
headers["Cookie"] = "Hm_lvt_d8c8eecfb13fe991855f511a6e30c3d2=1708243467,1708325624,1708326536;Hm_lpvt_d8c8eecfb13fe991855f511a6e30c3d2;1708326536"
return headers
}
async parseVodDetailFromDoc($) {
let vodDetail = new VodDetail()
let html = $.html()
let detailRootElement = $("[class=\"article-header\"]")
let detailElements = $(detailRootElement).find("p")
let content = ""
for (const detailElement of detailElements){
content = content + $(detailElement).text() + "\n"
}
vodDetail.type_name = $($($(detailRootElement).find("[class=\"post-meta\"]")).find("span")[0]).text()
vodDetail.vod_pic = $(detailRootElement).find("img")[0].attribs.src
vodDetail.vod_name = Utils.getStrByRegex(/名称:(.*?)\n/,content)
vodDetail.vod_actor = Utils.getStrByRegex(/主演:(.*?)\n/,content)
vodDetail.vod_director = Utils.getStrByRegex(/导演:(.*?)\n/,content)
vodDetail.vod_area = Utils.getStrByRegex(/地区:(.*?)\n/,content)
vodDetail.vod_year = Utils.getStrByRegex(/年份:(.*?)\n/,content)
vodDetail.vod_remarks = Utils.getStrByRegex(/更新:(.*?)\n/,content)
let contentElement = $("[class=\"article-related info\"]").find("p")
vodDetail.vod_content = $(contentElement).text()
let downloadElements = $("[class=\"article-related download_url\"]")
let vod_play_from_list = []
let vod_play_list = []
for (let i = 0; i < downloadElements.length; i++) {
let playFormatElement = downloadElements[i]
let format_name = $($(playFormatElement).find("h2")).text().replaceAll(vodDetail.vod_name,"")
vod_play_from_list.push(format_name.replaceAll("下载","播放"))
let vodItems = []
for (const playUrlElement of $(downloadElements[i]).find("a")) {
let episodeName = $(playUrlElement).text().replaceAll("磁力链下载","").replaceAll(".mp4","")
let episodeUrl = playUrlElement.attribs.href
vodItems.push(episodeName + "$" + episodeUrl)
}
vod_play_list.push(vodItems.join("#"))
}
vodDetail.vod_play_from = vod_play_from_list.join("$$$")
vodDetail.vod_play_url = vod_play_list.join("$$$")
return vodDetail
}
async parseVodShortListFromJson(obj) {
let vod_list = []
let $ = load(obj["ajaxtxt"])
let vodElements = $($("ul")).find("li");
for (const vodElement of vodElements){
let vodShort = new VodShort()
vodShort.vod_pic = $(vodElement).find("img")[0].attribs["data-original"]
vodShort.vod_name = Utils.getStrByRegex(/《(.*?)》/,$(vodElement).find("img")[0].attribs.alt)
vodShort.vod_id = $(vodElement).find("a")[0].attribs.href
vodShort.vod_remarks = "评分:"+ $($(vodElement).find("[class=\"rate badge\"]")).text()
vod_list.push(vodShort)
}
return vod_list
}
async parseVodShortListFromDocByCategory($) {
let vod_list = []
let vodElements = $($("[id=\"list_all\"]").find("ul")).find("li")
for (const vodElement of vodElements){
let vodShort = new VodShort()
vodShort.vod_id = $(vodElement).find("a")[0].attribs.href
vodShort.vod_name = Utils.getStrByRegex(/《(.*?)》/,$($($(vodElement).find("[class=\"text_info\"]")).find("a")[0]).text())
vodShort.vod_pic = $(vodElement).find("img")[0].attribs["data-original"]
vodShort.vod_remarks = $($(vodElement).find("[class=\"update_time\"]")).text()
vod_list.push(vodShort)
}
return vod_list
}
async setHomeVod() {
let $ = await this.getHtml();
this.homeVodList = await this.parseVodShortListFromDoc($)
}
async setDetail(id) {
let $ = await this.getHtml(this.siteUrl + id)
this.vodDetail = await this.parseVodDetailFromDoc($)
return this.vodDetail
}
async setCategory(tid, pg, filter, extend) {
// let url = this.apiUrl + `/list-index-id-${tid}`
// let area = extend["地区"] ?? ""
// let year = extend["年代"] ?? ""
// let tag = extend["标签"] ?? ""
// if (parseInt(pg) > 1){
// url = url + `-p-${pg}`
// }
// if (!_.isEmpty(area) && area !== "0"){
// url = url + `-area-${area}`
// }
// if (!_.isEmpty(year) && year !== "0"){
// url = url + `-year-${year}`
// }
// if (!_.isEmpty(tag) && tag !== "0"){
// url = url + `-wd-${tag}`
// }
// let resp = await this.fetch(url + ".html",null,this.getHeader())
// this.vodList = await this.parseVodShortListFromJson(JSON.parse(resp))
let url = this.siteUrl + `/list/${tid}-${pg}.html`
let $ = await this.getHtml(url)
this.vodList = await this.parseVodShortListFromDocByCategory($)
}
async setSearch(wd, quick) {
let url = this.siteUrl + "/search/"
let params = {"wd":wd,"p":"1","t":"j/tNgwBS2e8O4x9TuIkYuQ=="}
let html = await this.post(url,params,this.getSearchHeader())
let $ = load(html)
this.vodList = await this.parseVodShortListFromDocByCategory($)
}
}
let spider = new DyttSpider()
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,
proxy: proxy,
search: search,
};
}
export {spider}